[ 
https://jira.codehaus.org/browse/SUREFIRE-1119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=356475#comment-356475
 ] 

Sergey Malahovsky commented on SUREFIRE-1119:
---------------------------------------------

@Tibor
I've investigated this issue and found that main reason is in maven-shared / 
org.apache.maven.shared.utils.io.DirectoryScanner / scandir method.
DirectoryScanner returns list of files to include in alphabetical order.

So it needs to update 
org.apache.maven.surefire.util.DefaultDirectoryScanner.collectTests() in 
surefire-api:
{code}
import org.apache.commons.lang3.ArrayUtils;

String[] collectTests()
    {
        String[] tests = EMPTY_STRING_ARRAY;
        if ( basedir.exists() )
        {
            org.apache.maven.shared.utils.io.DirectoryScanner scanner =
                new org.apache.maven.shared.utils.io.DirectoryScanner();

            scanner.setBasedir( basedir );

            String[] processIncludes = new String[0];

            if ( includes != null ) {
                processIncludes = processIncludesExcludes(includes);
            }

            if ( excludes != null ) {
                scanner.setExcludes( processIncludesExcludes( excludes ) );
            }

            for(int inc = 0; inc < processIncludes.length; inc++){
                scanner.setIncludes( processIncludes[inc] );
                scanner.scan();
                String[] includedFiles = scanner.getIncludedFiles();
                tests = ArrayUtils.addAll(tests, includedFiles);
            }
            for ( int i = 0; i < tests.length; i++ ) {
                String test = tests[i];
                test = test.substring( 0, test.indexOf( "." ) );
                tests[i] = test.replace( FS.charAt( 0 ), '.' );
            }
        }
        return tests;
    }
{code}

and org.apache.maven.plugin.surefire.util.DirectoryScanner.scan() in 
maven-surefire-common:
{code}
import org.apache.commons.lang3.ArrayUtils;

public DefaultScanResult scan() {
        String[] specific = specificTests == null ? new String[0] : 
processIncludesExcludes( specificTests );
        SpecificFileFilter specificTestFilter = new SpecificFileFilter( 
specific );

        List<String> result = new ArrayList<String>();
        if ( basedir.exists() )
        {
            String[] tests = new String[0];
            String[] processIncludes = new String[0];
            
            org.apache.maven.shared.utils.io.DirectoryScanner scanner =
                new org.apache.maven.shared.utils.io.DirectoryScanner();

            scanner.setBasedir( basedir );

            if ( includes != null ) {
                processIncludes = processIncludesExcludes(includes);
            }

            if ( excludes != null ) {
                scanner.setExcludes( processIncludesExcludes( excludes ) );
            }

            for(int inc = 0; inc < processIncludes.length; inc++){
                scanner.setIncludes( processIncludes[inc] );
                scanner.scan();
                String[] includedFiles = scanner.getIncludedFiles();
                tests = ArrayUtils.addAll(tests, includedFiles);
            }
            
            for ( String test : tests )
            {
                if ( specificTestFilter.accept(
                         convertSlashToSystemFileSeparator(
                              stripBaseDir( basedir.getAbsolutePath(), test ) ) 
) )
                {
                    result.add( convertToJavaClassName( test ) );
                }
            }
        }
        
        return new DefaultScanResult( result );
}
{code}

After this I hope we will can to implement this wish.

> Run tests without order
> -----------------------
>
>                 Key: SUREFIRE-1119
>                 URL: https://jira.codehaus.org/browse/SUREFIRE-1119
>             Project: Maven Surefire
>          Issue Type: Wish
>    Affects Versions: 2.18
>            Reporter: Sergey Malahovsky
>            Priority: Minor
>
> It will be great to have ability to run tests in direct order without any 
> sorting.
> For example:
>  <configuration>
>    <includes>
>      <include>**/*CTestSuite*</include>
>      <include>**/*ATestSuite*</include>
>      <include>**/*BTestSuite*</include>
>    </includes>
>    <runOrder>direct</runOrder>
>  </configuration>
> In current solution test suites will be sorted by alphabetical (or another 
> order): **/*ATestSuite*, **/*BTestSuite*, **/*CTestSuite*.
> But sometimes it needs to run without any sorting in order as specified in 
> <includes>/<include> tags: **/*CTestSuite*, **/*ATestSuite*, **/*BTestSuite*.



--
This message was sent by Atlassian JIRA
(v6.1.6#6162)

Reply via email to