View Javadoc
1   package org.apache.maven.surefire.booter;
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 junit.framework.TestCase;
23  import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
24  import org.apache.maven.surefire.report.ReporterConfiguration;
25  import org.apache.maven.surefire.report.ReporterFactory;
26  import org.apache.maven.surefire.report.RunListener;
27  import org.apache.maven.surefire.suite.RunResult;
28  import org.apache.maven.surefire.testset.DirectoryScannerParameters;
29  import org.apache.maven.surefire.testset.RunOrderParameters;
30  import org.apache.maven.surefire.testset.TestArtifactInfo;
31  import org.apache.maven.surefire.testset.TestListResolver;
32  import org.apache.maven.surefire.testset.TestRequest;
33  import org.apache.maven.surefire.util.RunOrder;
34  import org.mockito.ArgumentCaptor;
35  
36  import java.io.File;
37  import java.lang.reflect.Method;
38  import java.util.ArrayList;
39  import java.util.Arrays;
40  import java.util.HashMap;
41  
42  import static org.fest.assertions.Assertions.assertThat;
43  import static org.mockito.Mockito.mock;
44  import static org.mockito.Mockito.times;
45  import static org.mockito.Mockito.verify;
46  import static org.mockito.Mockito.when;
47  
48  /**
49   *
50   */
51  public class SurefireReflectorTest
52          extends TestCase
53  {
54      public void testCreateConsoleLogger()
55      {
56          ClassLoader cl = Thread.currentThread().getContextClassLoader();
57          ConsoleLogger consoleLogger = mock( ConsoleLogger.class );
58          ConsoleLogger decorator = (ConsoleLogger) SurefireReflector.createConsoleLogger( consoleLogger, cl );
59          assertThat( decorator )
60          .isNotSameAs( consoleLogger );
61  
62          assertThat( decorator.isDebugEnabled() ).isFalse();
63          when( consoleLogger.isDebugEnabled() ).thenReturn( true );
64          assertThat( decorator.isDebugEnabled() ).isTrue();
65          verify( consoleLogger, times( 2 ) ).isDebugEnabled();
66  
67          decorator.info( "msg" );
68          ArgumentCaptor<String> argumentMsg = ArgumentCaptor.forClass( String.class );
69          verify( consoleLogger, times( 1 ) ).info( argumentMsg.capture() );
70          assertThat( argumentMsg.getAllValues() ).hasSize( 1 );
71          assertThat( argumentMsg.getAllValues().get( 0 ) ).isEqualTo( "msg" );
72      }
73  
74      public void testShouldCreateFactoryWithoutException()
75      {
76          ReporterFactory factory = new ReporterFactory()
77          {
78              @Override
79              public RunListener createReporter()
80              {
81                  return null;
82              }
83  
84              @Override
85              public RunResult close()
86              {
87                  return null;
88              }
89          };
90          ClassLoader cl = Thread.currentThread().getContextClassLoader();
91          SurefireReflector reflector = new SurefireReflector( cl );
92          BaseProviderFactory baseProviderFactory =
93                  (BaseProviderFactory) reflector.createBooterConfiguration( cl, factory, true );
94          assertNotNull( baseProviderFactory.getReporterFactory() );
95          assertSame( factory, baseProviderFactory.getReporterFactory() );
96      }
97  
98      public void testSetDirectoryScannerParameters()
99      {
100         SurefireReflector surefireReflector = getReflector();
101         Object foo = getFoo();
102 
103         DirectoryScannerParameters directoryScannerParameters =
104                 new DirectoryScannerParameters( new File( "ABC" ), new ArrayList<String>(), new ArrayList<String>(),
105                         new ArrayList<String>(), false, "hourly" );
106         surefireReflector.setDirectoryScannerParameters( foo, directoryScannerParameters );
107         assertTrue( isCalled( foo ) );
108     }
109 
110     public void testRunOrderParameters()
111     {
112         SurefireReflector surefireReflector = getReflector();
113         Object foo = getFoo();
114 
115         RunOrderParameters runOrderParameters = new RunOrderParameters( RunOrder.DEFAULT, new File( "." ) );
116         surefireReflector.setRunOrderParameters( foo, runOrderParameters );
117         assertTrue( isCalled( foo ) );
118     }
119 
120     public void testTestSuiteDefinition()
121     {
122         SurefireReflector surefireReflector = getReflector();
123         Object foo = getFoo();
124 
125         TestRequest testSuiteDefinition =
126                 new TestRequest( Arrays.asList( new File( "file1" ), new File( "file2" ) ),
127                         new File( "TestSOurce" ), new TestListResolver( "aUserRequestedTest#aMethodRequested" ) );
128         surefireReflector.setTestSuiteDefinition( foo, testSuiteDefinition );
129         assertTrue( isCalled( foo ) );
130     }
131 
132     public void testProviderProperties()
133     {
134         SurefireReflector surefireReflector = getReflector();
135         Object foo = getFoo();
136 
137         surefireReflector.setProviderProperties( foo, new HashMap<String, String>() );
138         assertTrue( isCalled( foo ) );
139     }
140 
141     public void testReporterConfiguration()
142     {
143         SurefireReflector surefireReflector = getReflector();
144         Object foo = getFoo();
145 
146         ReporterConfiguration reporterConfiguration = getReporterConfiguration();
147         surefireReflector.setReporterConfigurationAware( foo, reporterConfiguration );
148         assertTrue( isCalled( foo ) );
149     }
150 
151     private ReporterConfiguration getReporterConfiguration()
152     {
153         return new ReporterConfiguration( new File( "CDE" ), true );
154     }
155 
156     public void testTestClassLoaderAware()
157     {
158         SurefireReflector surefireReflector = getReflector();
159         Object foo = getFoo();
160 
161         surefireReflector.setTestClassLoader( foo, getClass().getClassLoader() );
162         assertTrue( isCalled( foo ) );
163     }
164 
165     public void testArtifactInfoAware()
166     {
167         SurefireReflector surefireReflector = getReflector();
168         Object foo = getFoo();
169 
170         TestArtifactInfo testArtifactInfo = new TestArtifactInfo( "12.3", "test" );
171         surefireReflector.setTestArtifactInfo( foo, testArtifactInfo );
172         assertTrue( isCalled( foo ) );
173     }
174 
175     private SurefireReflector getReflector()
176     {
177         return new SurefireReflector( this.getClass().getClassLoader() );
178     }
179 
180     private Object getFoo()
181     { // Todo: Setup a different classloader so we can really test crossing
182         return new Foo();
183     }
184 
185     private Boolean isCalled( Object foo )
186     {
187         final Method isCalled;
188         try
189         {
190             isCalled = foo.getClass().getMethod( "isCalled" );
191             return (Boolean) isCalled.invoke( foo );
192         }
193         catch ( ReflectiveOperationException e )
194         {
195             throw new RuntimeException( e );
196         }
197     }
198 }