View Javadoc

1   package org.apache.maven.surefire.junit;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *     http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.surefire.common.junit3.JUnit3Reflector;
23  import org.apache.maven.surefire.common.junit3.JUnit3TestChecker;
24  import org.apache.maven.surefire.providerapi.AbstractProvider;
25  import org.apache.maven.surefire.providerapi.ProviderParameters;
26  import org.apache.maven.surefire.report.RunListener;
27  import org.apache.maven.surefire.report.ReportEntry;
28  import org.apache.maven.surefire.report.ReporterException;
29  import org.apache.maven.surefire.report.ReporterFactory;
30  import org.apache.maven.surefire.report.SimpleReportEntry;
31  import org.apache.maven.surefire.suite.RunResult;
32  import org.apache.maven.surefire.testset.TestSetFailedException;
33  import org.apache.maven.surefire.util.DirectoryScanner;
34  import org.apache.maven.surefire.util.TestsToRun;
35  
36  import java.util.Iterator;
37  
38  /**
39   * @author Kristian Rosenvold
40   * @noinspection UnusedDeclaration
41   */
42  public class JUnit3Provider
43      extends AbstractProvider
44  {
45      private final ClassLoader testClassLoader;
46  
47      private final DirectoryScanner directoryScanner;
48  
49      private final PojoAndJUnit3Checker testChecker;
50  
51      private final JUnit3TestChecker jUnit3TestChecker;
52  
53      private final JUnit3Reflector reflector;
54  
55      private final ProviderParameters providerParameters;
56  
57      private TestsToRun testsToRun;
58  
59      public JUnit3Provider( ProviderParameters booterParameters )
60      {
61          this.providerParameters = booterParameters;
62          this.testClassLoader = booterParameters.getTestClassLoader();
63          this.directoryScanner = booterParameters.getDirectoryScanner();
64          this.reflector = new JUnit3Reflector( testClassLoader );
65          jUnit3TestChecker = new JUnit3TestChecker( testClassLoader );
66          this.testChecker = new PojoAndJUnit3Checker( jUnit3TestChecker ); // Todo; use reflector
67      }
68  
69      public RunResult invoke( Object forkTestSet )
70          throws TestSetFailedException, ReporterException
71      {
72          if ( testsToRun == null )
73          {
74              testsToRun = forkTestSet == null ? scanClassPath() : TestsToRun.fromClass( (Class) forkTestSet );
75          }
76  
77          ReporterFactory reporterFactory = providerParameters.getReporterFactory();
78  
79          RunListener reporter = reporterFactory.createReporter();
80  
81          for ( Iterator iter = testsToRun.iterator(); iter.hasNext(); )
82          {
83              Class clazz = (Class) iter.next();
84              SurefireTestSet surefireTestSet = createTestSet( clazz );
85              executeTestSet( surefireTestSet, reporter, testClassLoader );
86          }
87  
88          return reporterFactory.close();
89      }
90  
91      private SurefireTestSet createTestSet( Class clazz )
92          throws TestSetFailedException
93      {
94          return reflector.isJUnit3Available() && jUnit3TestChecker.accept( clazz )
95              ? new JUnitTestSet( clazz, reflector )
96              : (SurefireTestSet) new PojoTestSet( clazz );
97  
98      }
99  
100     private void executeTestSet( SurefireTestSet testSet, RunListener reporter, ClassLoader classLoader )
101         throws ReporterException, TestSetFailedException
102     {
103 
104         ReportEntry report = new SimpleReportEntry( this.getClass().getName(), testSet.getName() );
105 
106         reporter.testSetStarting( report );
107 
108         testSet.execute( reporter, classLoader );
109 
110         reporter.testSetCompleted( report );
111     }
112 
113     private TestsToRun scanClassPath()
114     {
115         return directoryScanner.locateTestClasses( testClassLoader, testChecker );
116     }
117 
118     public Iterator getSuites()
119     {
120         testsToRun = scanClassPath();
121         return testsToRun.iterator();
122     }
123 
124     public Boolean isRunnable()
125     {
126         return Boolean.TRUE;
127     }
128 }