You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by dipak-pawar <gi...@git.apache.org> on 2017/11/07 15:39:04 UTC

[GitHub] maven-surefire pull request #169: [SUREFIRE-1405] Allows user to extend RunO...

GitHub user dipak-pawar opened a pull request:

    https://github.com/apache/maven-surefire/pull/169

    [SUREFIRE-1405] Allows user to extend RunOrder & RunOrderCalculator

    * All supported runOrder options are hardCoded in RunOrder - https://github.com/apache/maven-surefire/blob/master/surefire-api/src/main/java/org/apache/maven/surefire/util/RunOrder.java#L109
    * With this implementation user can implement his own runOrder & it's respective RunOrderCalculator.
    
    Fixes: https://issues.apache.org/jira/browse/SUREFIRE-1405
    
    **Implementation Details**
    
    **How to create new RunOrder?**
    To create new `runOrder` user has to implement `RunOrder` interface.
     
    ```java
    public class YourRunOrder implements RunOrder
    {
    
        @Override
        public String getName()
        {
            return "runOrderName";
        }
    
        @Override
        public List<Class<?>> orderTestClasses( Collection<Class<?>> scannedClasses,
                                                RunOrderParameters runOrderParameters, int threadCount )
        {
           // Add logic to order test classes for this runOrder.
            return testClasses;
        }
    }
    ```
    
    **How to define custom RunOrderCalculator?**
    Implement `RunOrderCalculator` interface with logic you want to order test classes.
    e.g. 
    ```java
    public class YourRunOrderCalculator implements RunOrderCalculator {
    
        private final RunOrderParameters runOrderParameters;
        private final int threadCount;
    
        private final RunOrder[] runOrder;
    
        public YourRunOrderCalculator(RunOrderParameters runOrderParameters, int threadCount) {
            this.runOrder = runOrderParameters.getRunOrders();
            this.runOrderParameters = runOrderParameters;
            this.threadCount = threadCount;
        }
        
        // Add your logic to order test classes.
        @Override 
        public TestsToRun orderTestClasses(TestsToRun scannedClasses) {
          
            List<Class<?>> testClasses = new ArrayList<Class<?>>( 512 );
    
            for ( Class<?> scannedClass : scannedClasses )
            {
                testClasses.add( scannedClass );
            }
    
           final Collection<Class<?>> classes = runOrder[0].orderTestClasses(testClasses, runOrderParameters, threadCount);
    
            return new TestsToRun(new LinkedHashSet<>(classes));
        }
    }
    ```
    
    **How to tell surefire to use custom `RunOrder` & `RunOrderCalculator`?**
    
    We have  `RunOrderProvider` spi to overwrite  default runOrders & `RunOrderCalculator` provided by surefire.
    
    You need to registrar impl of RunOrderProvider in the file named 
    `META-INF/services/org.apache.maven.plugin.surefire.runorder.spi.RunOrderProvider` in main resources.
    
    File should contain fully qualified name of RunOrderProvider impl.
    e.g.
    `com.surefire.YourRunOrderProviderImpl`
    
    Implementation of YourRunOrderProviderImpl is as follows:
    ```java
    public class YourRunOrderProviderImpl implements RunOrderProvider
    {
    
        @Override
        public Collection<RunOrder> getRunOrders()
        {
       // here you can give all default runorders provided by surefire along with custom runorder created above.
            return Arrays.asList( ALPHABETICAL, FILESYSTEM, HOURLY,
                RANDOM, REVERSE_ALPHABETICAL, BALANCED, FAILEDFIRST, new YourRunOrder() );
        }
    
        @Override
        public Integer priority()
        {
            return 1;
        }
    
        @Override
        public RunOrderCalculator createRunOrderCalculator( RunOrderParameters runOrderParameters, int threadCount )
        {
            return new YourRunOrderCalculator( runOrderParameters, threadCount );
        }
    
        @Override
        public Collection<RunOrder> defaultRunOrder()
        {
            return Collections.singletonList( FILESYSTEM );
        }
    }
    ```

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/dipak-pawar/maven-surefire surefire_improvement

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/maven-surefire/pull/169.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #169
    
----
commit 6735b1ef750c3bcd613d5998a313e5007dc37349
Author: Dipak Pawar <dp...@redhat.com>
Date:   2017-08-23T15:33:08Z

    [SUREFIRE-1405] Allows user to extend RunOrder & RunOrderCalculator

----


---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


[GitHub] maven-surefire issue #169: [SUREFIRE-1405] Allows user to extend RunOrder & ...

Posted by Tibor17 <gi...@git.apache.org>.
Github user Tibor17 commented on the issue:

    https://github.com/apache/maven-surefire/pull/169
  
    Thx for your effort but we have to wait for this till the version 3.0.
    The branch will have more merge conflicts. Please rebase this in few months when we will be about develop 3.0.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


[GitHub] maven-surefire issue #169: [SUREFIRE-1405] Allows user to extend RunOrder & ...

Posted by dipak-pawar <gi...@git.apache.org>.
Github user dipak-pawar commented on the issue:

    https://github.com/apache/maven-surefire/pull/169
  
    Sure, we will be happy to move it forward. Please keep this PR open and let us know by commenting here when it will make sense to resume the effort. I really hope we can make it upstream. 


---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org