1 package org.apache.maven.surefire.booter;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 {
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 }