View Javadoc

    1   /*
    2    *  soapUI, copyright (C) 2004-2007 eviware.com
    3    *
    4    *  soapUI is free software; you can redistribute it and/or modify it under the
    5    *  terms of version 2.1 of the GNU Lesser General Public License as published by
    6    *  the Free Software Foundation.
    7    *
    8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
    9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    10   *  See the GNU Lesser General Public License for more details at gnu.org.
    11   */
    12
    13  package com.eviware.soapui.impl.wsdl.actions.support;
    14
    15  import java.util.ArrayList;
    16  import java.util.List;
    17
    18  import com.eviware.soapui.SoapUI;
    19  import com.eviware.soapui.impl.wsdl.WsdlProject;
    20  import com.eviware.soapui.impl.wsdl.WsdlTestSuite;
    21  import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
    22  import com.eviware.soapui.model.ModelItem;
    23  import com.eviware.soapui.model.testsuite.TestSuite;
    24  import com.eviware.soapui.support.UISupport;
    25  import com.eviware.soapui.support.action.support.AbstractSoapUIAction;
    26
    27  /***
    28   * Base class for actions that add  TestSteps to a TestCase
    29   *
    30   * @author ole.matzura
    31   */
    32
    33  public abstract class AbstractAddToTestCaseAction<T extends ModelItem> extends AbstractSoapUIAction<T>
    34  {
    35  	public AbstractAddToTestCaseAction( String name, String description )
    36  	{
    37  		super( name, description );
    38  	}
    39
    40  	protected WsdlTestCase getTargetTestCase( WsdlProject project )
    41  	{
    42  		List<WsdlTestCase> testCases = new ArrayList<WsdlTestCase>();
    43        List<WsdlTestSuite> testSuites = new ArrayList<WsdlTestSuite>();
    44        List<String> testCaseNames = new ArrayList<String>();
    45        WsdlTestCase testCase = null;
    46
    47        if( project.getTestSuiteCount() == 0 )
    48        {
    49           return addNewTestSuiteAndTestCase( project );
    50        }
    51
    52        for( int c = 0; c < project.getTestSuiteCount(); c++ )
    53        {
    54           WsdlTestSuite testSuite = ( WsdlTestSuite ) project.getTestSuiteAt( c );
    55           for( int i = 0; i < testSuite.getTestCaseCount(); i++ )
    56           {
    57              testCase = (WsdlTestCase) testSuite.getTestCaseAt( i );
    58
    59              testCases.add( testCase );
    60              testCaseNames.add( (testCaseNames.size()+1) + ": " + testSuite.getName() + " - " + testCase.getName() );
    61              testSuites.add( testSuite );
    62           }
    63
    64           testCases.add( null );
    65           testSuites.add( testSuite );
    66           testCaseNames.add( (testCaseNames.size()+1) + ": " + testSuite.getName() + " -> Create new TestCase" );
    67        }
    68
    69        if( testCases.size() == 0 )
    70        {
    71        	List<String> testSuiteNames = new ArrayList<String>();
    72
    73           for( int c = 0; c < project.getTestSuiteCount(); c++ )
    74           {
    75              TestSuite testSuite = project.getTestSuiteAt( c );
    76              testSuiteNames.add( (testSuiteNames.size()+1) + ": " + testSuite.getName() );
    77           }
    78
    79           String selection = (String) UISupport.prompt( "Select TestSuite to create TestCase in", "Select TestSuite",
    80                 testSuiteNames.toArray() );
    81           if( selection == null ) return null;
    82
    83           WsdlTestSuite testSuite = (WsdlTestSuite) project.getTestSuiteAt( testSuiteNames.indexOf( selection ));
    84
    85           String name = UISupport.prompt( "Enter name for TestCase create", "Create TestCase",
    86           		"TestCase " + (testSuite.getTestCaseCount()+1));
    87           if( name == null ) return null;
    88
    89           return testSuite.addNewTestCase( name );
    90        }
    91        else
    92        {
    93           testCases.add( null );
    94           testSuites.add( null );
    95           testCaseNames.add( (testCaseNames.size()+1) + ": -> Create new TestSuite" );
    96
    97           String selection = (String) UISupport.prompt( "Select TestCase", "Select TestCase", testCaseNames.toArray() );
    98           if( selection == null ) return null;
    99
    100          testCase = testCases.get( testCaseNames.indexOf( selection ));
    101          while( testCase != null && SoapUI.getTestMonitor().hasRunningLoadTest( testCase ))
    102          {
    103          	UISupport.showErrorMessage( "Can not add to TestCase that is currently LoadTesting" );
    104
    105          	selection = (String) UISupport.prompt( "Select TestCase", "Select TestCase", testCaseNames.toArray() );
    106 	         if( selection == null ) return null;
    107
    108 	         testCase = testCases.get( testCaseNames.indexOf( selection ));
    109          }
    110
    111          // selected create new?
    112          if( testCase == null )
    113          {
    114          	WsdlTestSuite testSuite = testSuites.get( testCaseNames.indexOf( selection ) );
    115
    116          	// selected create new testsuite?
    117          	if( testSuite == null )
    118          	{
    119                return addNewTestSuiteAndTestCase( project );
    120          	}
    121          	else
    122          	{
    123 					String name = UISupport.prompt( "Enter name for TestCase create", "Create TestCase",
    124                		"TestCase " + (testSuite.getTestCaseCount()+1));
    125                if( name == null ) return null;
    126
    127                return testSuite.addNewTestCase( name );
    128          	}
    129          }
    130       }
    131
    132       return testCase;
    133 	}
    134
    135    protected WsdlTestCase addNewTestSuiteAndTestCase( WsdlProject project )
    136    {
    137    	 String testSuiteName = UISupport.prompt( "Missing TestSuite in project, enter name to create", "Create TestSuite",
    138        		"TestSuite " + (project.getTestSuiteCount()+1) );
    139        if( testSuiteName == null ) return null;
    140
    141        String testCaseName = UISupport.prompt( "Enter name for TestCase create", "Create TestCase",
    142        		"TestCase 1" );
    143        if( testCaseName == null )
    144       	 return null;
    145
    146        WsdlTestSuite testSuite = ( WsdlTestSuite ) project.addNewTestSuite( testSuiteName );
    147        return testSuite.addNewTestCase( testCaseName );
    148    }
    149 }