View Javadoc
1   package org.apache.maven.plugin.surefire;
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.artifact.Artifact;
23  import org.apache.maven.artifact.DefaultArtifact;
24  import org.apache.maven.artifact.handler.ArtifactHandler;
25  import org.apache.maven.artifact.handler.DefaultArtifactHandler;
26  import org.apache.maven.artifact.versioning.VersionRange;
27  import org.apache.maven.plugin.MojoExecutionException;
28  import org.apache.maven.plugin.MojoFailureException;
29  import org.apache.maven.surefire.suite.RunResult;
30  import org.apache.maven.surefire.util.DefaultScanResult;
31  import org.junit.Test;
32  
33  import java.io.File;
34  import java.io.FileOutputStream;
35  import java.util.List;
36  import java.util.zip.ZipEntry;
37  import java.util.zip.ZipOutputStream;
38  
39  import static java.util.Arrays.asList;
40  import static java.util.Collections.singletonList;
41  import static org.fest.assertions.Assertions.assertThat;
42  
43  public class MojoMocklessTest
44  {
45      @Test
46      public void scanDependenciesShouldReturnNull()
47              throws MojoFailureException
48      {
49          Mojo mojo = new Mojo( null, null );
50          DefaultScanResult result = mojo.scanDependencies();
51          assertThat( result )
52                  .isNull();
53      }
54  
55      @Test
56      public void scanDependenciesShouldReturnNullAfterMissingBuildArtifact()
57              throws MojoFailureException
58      {
59          VersionRange version = VersionRange.createFromVersion( "1.0" );
60          ArtifactHandler handler = new DefaultArtifactHandler();
61          Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "jar", null, handler );
62          List<Artifact> projectTestArtifacts = singletonList( testDeps );
63          String[] dependenciesToScan = { "g:a" };
64          Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
65          DefaultScanResult result = mojo.scanDependencies();
66          assertThat( result )
67                  .isNull();
68      }
69  
70      @Test
71      public void scanDependenciesShouldReturnNullWithWAR()
72              throws MojoFailureException
73      {
74          VersionRange version = VersionRange.createFromVersion( "1.0" );
75          ArtifactHandler handler = new DefaultArtifactHandler();
76          Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "war", null, handler );
77          testDeps.setFile( new File( new File( "target" ), "a-1.0.war" ) );
78          List<Artifact> projectTestArtifacts = singletonList( testDeps );
79          String[] dependenciesToScan = { "g:a" };
80          Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
81          DefaultScanResult result = mojo.scanDependencies();
82          assertThat( result )
83                  .isNull();
84      }
85  
86      @Test
87      public void scanDependenciesShouldReturnNullWithExistingWAR()
88              throws Exception
89      {
90          VersionRange version = VersionRange.createFromVersion( "1.0" );
91          ArtifactHandler handler = new DefaultArtifactHandler();
92          Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "war", null, handler );
93          File artifactFile = File.createTempFile( "surefire", ".war" );
94          testDeps.setFile( artifactFile );
95          List<Artifact> projectTestArtifacts = singletonList( testDeps );
96          String[] dependenciesToScan = { "g:a" };
97          Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
98          DefaultScanResult result = mojo.scanDependencies();
99          assertThat( result )
100                 .isNull();
101     }
102 
103     @Test
104     public void scanDependenciesShouldReturnClassWithExistingTestJAR()
105             throws Exception
106     {
107         VersionRange version = VersionRange.createFromVersion( "1.0" );
108         ArtifactHandler handler = new DefaultArtifactHandler();
109         Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "test-jar", null, handler );
110 
111         File artifactFile = File.createTempFile( "surefire", ".jar" );
112         testDeps.setFile( artifactFile );
113         ZipOutputStream os = new ZipOutputStream( new FileOutputStream( artifactFile ) );
114         os.putNextEntry( new ZipEntry( "pkg/" ) );
115         os.closeEntry();
116         os.putNextEntry( new ZipEntry( "pkg/MyTest.class" ) );
117         os.closeEntry();
118         os.finish();
119         os.close();
120 
121         List<Artifact> projectTestArtifacts = singletonList( testDeps );
122         String[] dependenciesToScan = { "g:a" };
123         Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
124         DefaultScanResult result = mojo.scanDependencies();
125 
126         assertThat( result )
127                 .isNotNull();
128 
129         assertThat( result.isEmpty() )
130                 .isFalse();
131 
132         assertThat( result.getClasses() )
133                 .contains( "pkg.MyTest" );
134     }
135 
136     @Test
137     public void scanDependenciesShouldReturnNullWithEmptyTestJAR()
138             throws Exception
139     {
140         VersionRange version = VersionRange.createFromVersion( "1.0" );
141         ArtifactHandler handler = new DefaultArtifactHandler();
142         Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "jar", null, handler );
143 
144         File artifactFile = File.createTempFile( "surefire", ".jar" );
145         testDeps.setFile( artifactFile );
146         ZipOutputStream os = new ZipOutputStream( new FileOutputStream( artifactFile ) );
147         os.putNextEntry( new ZipEntry( "pkg/" ) );
148         os.closeEntry();
149         os.finish();
150         os.close();
151 
152         List<Artifact> projectTestArtifacts = singletonList( testDeps );
153         String[] dependenciesToScan = { "g:a" };
154         Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
155         DefaultScanResult result = mojo.scanDependencies();
156 
157         assertThat( result )
158                 .isNotNull();
159 
160         assertThat( result.isEmpty() )
161                 .isTrue();
162     }
163 
164     @Test
165     public void scanDependenciesShouldReturnClassWithDirectory()
166             throws Exception
167     {
168         VersionRange version = VersionRange.createFromVersion( "1.0" );
169         ArtifactHandler handler = new DefaultArtifactHandler();
170         Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "test-jar", null, handler );
171 
172         File artifactFile = File.createTempFile( "surefire", "-classes" );
173         String classDir = artifactFile.getCanonicalPath();
174         assertThat( artifactFile.delete() ).isTrue();
175         File classes = new File( classDir );
176         assertThat( classes.mkdir() ).isTrue();
177 
178         testDeps.setFile( classes );
179 
180         assertThat( new File( classes, "AnotherTest.class" ).createNewFile() )
181                 .isTrue();
182 
183         List<Artifact> projectTestArtifacts = singletonList( testDeps );
184         String[] dependenciesToScan = { "g:a" };
185         Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
186         DefaultScanResult result = mojo.scanDependencies();
187 
188         assertThat( result )
189                 .isNotNull();
190 
191         assertThat( result.isEmpty() )
192                 .isFalse();
193 
194         assertThat( result.getClasses() )
195                 .contains( "AnotherTest" );
196     }
197 
198     @Test
199     public void scanMultipleDependencies()
200             throws Exception
201     {
202         VersionRange version = VersionRange.createFromVersion( "1.0" );
203         ArtifactHandler handler = new DefaultArtifactHandler();
204         Artifact testDep1 = new DefaultArtifact( "g", "x", version, "compile", "jar", null, handler );
205 
206         File artifactFile1 = File.createTempFile( "surefire", "-classes" );
207         String classDir = artifactFile1.getCanonicalPath();
208         assertThat( artifactFile1.delete() ).isTrue();
209         File classes = new File( classDir );
210         assertThat( classes.mkdir() ).isTrue();
211 
212         testDep1.setFile( classes );
213 
214         assertThat( new File( classes, "AnotherTest.class" ).createNewFile() )
215                 .isTrue();
216 
217         Artifact testDep2 = new DefaultArtifact( "g", "a", version, "test", "jar", null, handler );
218         File artifactFile2 = File.createTempFile( "surefire", ".jar" );
219         testDep2.setFile( artifactFile2 );
220         ZipOutputStream os = new ZipOutputStream( new FileOutputStream( artifactFile2 ) );
221         os.putNextEntry( new ZipEntry( "pkg/" ) );
222         os.closeEntry();
223         os.putNextEntry( new ZipEntry( "pkg/MyTest.class" ) );
224         os.closeEntry();
225         os.finish();
226         os.close();
227 
228         List<Artifact> projectTestArtifacts = asList( testDep1, testDep2 );
229         String[] dependenciesToScan = { "g:a" };
230         Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
231         DefaultScanResult result = mojo.scanDependencies();
232 
233         assertThat( result )
234                 .isNotNull();
235 
236         assertThat( result.isEmpty() )
237                 .isFalse();
238 
239         assertThat( result.getClasses() )
240                 .hasSize( 1 );
241 
242         assertThat( result.getClasses() )
243                 .contains( "pkg.MyTest" );
244     }
245 
246     private final static class Mojo
247             extends AbstractSurefireMojo
248     {
249         private final List<Artifact> projectTestArtifacts;
250         private final String[] dependenciesToScan;
251 
252         Mojo( List<Artifact> projectTestArtifacts, String[] dependenciesToScan )
253         {
254             this.projectTestArtifacts = projectTestArtifacts;
255             this.dependenciesToScan = dependenciesToScan;
256         }
257 
258         @Override
259         protected String getPluginName()
260         {
261             return null;
262         }
263 
264         @Override
265         protected int getRerunFailingTestsCount()
266         {
267             return 0;
268         }
269 
270         @Override
271         public boolean isSkipTests()
272         {
273             return false;
274         }
275 
276         @Override
277         public void setSkipTests( boolean skipTests )
278         {
279 
280         }
281 
282         @Override
283         public boolean isSkipExec()
284         {
285             return false;
286         }
287 
288         @Override
289         public void setSkipExec( boolean skipExec )
290         {
291 
292         }
293 
294         @Override
295         public boolean isSkip()
296         {
297             return false;
298         }
299 
300         @Override
301         public void setSkip( boolean skip )
302         {
303 
304         }
305 
306         @Override
307         public File getBasedir()
308         {
309             return null;
310         }
311 
312         @Override
313         public void setBasedir( File basedir )
314         {
315 
316         }
317 
318         @Override
319         public File getTestClassesDirectory()
320         {
321             return null;
322         }
323 
324         @Override
325         public void setTestClassesDirectory( File testClassesDirectory )
326         {
327 
328         }
329 
330         @Override
331         public File getClassesDirectory()
332         {
333             return null;
334         }
335 
336         @Override
337         public void setClassesDirectory( File classesDirectory )
338         {
339 
340         }
341 
342         @Override
343         public File getReportsDirectory()
344         {
345             return null;
346         }
347 
348         @Override
349         public void setReportsDirectory( File reportsDirectory )
350         {
351 
352         }
353 
354         @Override
355         public String getTest()
356         {
357             return null;
358         }
359 
360         @Override
361         public void setTest( String test )
362         {
363 
364         }
365 
366         @Override
367         public List<String> getIncludes()
368         {
369             return null;
370         }
371 
372         @Override
373         public File getIncludesFile()
374         {
375             return null;
376         }
377 
378         @Override
379         public void setIncludes( List<String> includes )
380         {
381 
382         }
383 
384         @Override
385         public boolean isPrintSummary()
386         {
387             return false;
388         }
389 
390         @Override
391         public void setPrintSummary( boolean printSummary )
392         {
393 
394         }
395 
396         @Override
397         public String getReportFormat()
398         {
399             return null;
400         }
401 
402         @Override
403         public void setReportFormat( String reportFormat )
404         {
405 
406         }
407 
408         @Override
409         public boolean isUseFile()
410         {
411             return false;
412         }
413 
414         @Override
415         public void setUseFile( boolean useFile )
416         {
417 
418         }
419 
420         @Override
421         public String getDebugForkedProcess()
422         {
423             return null;
424         }
425 
426         @Override
427         public void setDebugForkedProcess( String debugForkedProcess )
428         {
429 
430         }
431 
432         @Override
433         public int getForkedProcessTimeoutInSeconds()
434         {
435             return 0;
436         }
437 
438         @Override
439         public void setForkedProcessTimeoutInSeconds( int forkedProcessTimeoutInSeconds )
440         {
441 
442         }
443 
444         @Override
445         public int getForkedProcessExitTimeoutInSeconds()
446         {
447             return 0;
448         }
449 
450         @Override
451         public void setForkedProcessExitTimeoutInSeconds( int forkedProcessTerminationTimeoutInSeconds )
452         {
453 
454         }
455 
456         @Override
457         public double getParallelTestsTimeoutInSeconds()
458         {
459             return 0;
460         }
461 
462         @Override
463         public void setParallelTestsTimeoutInSeconds( double parallelTestsTimeoutInSeconds )
464         {
465 
466         }
467 
468         @Override
469         public double getParallelTestsTimeoutForcedInSeconds()
470         {
471             return 0;
472         }
473 
474         @Override
475         public void setParallelTestsTimeoutForcedInSeconds( double parallelTestsTimeoutForcedInSeconds )
476         {
477 
478         }
479 
480         @Override
481         public boolean isUseSystemClassLoader()
482         {
483             return false;
484         }
485 
486         @Override
487         public void setUseSystemClassLoader( boolean useSystemClassLoader )
488         {
489 
490         }
491 
492         @Override
493         public boolean isUseManifestOnlyJar()
494         {
495             return false;
496         }
497 
498         @Override
499         public void setUseManifestOnlyJar( boolean useManifestOnlyJar )
500         {
501 
502         }
503 
504         @Override
505         public String getEncoding()
506         {
507             return null;
508         }
509 
510         @Override
511         public void setEncoding( String encoding )
512         {
513 
514         }
515 
516         @Override
517         public Boolean getFailIfNoSpecifiedTests()
518         {
519             return null;
520         }
521 
522         @Override
523         public void setFailIfNoSpecifiedTests( boolean failIfNoSpecifiedTests )
524         {
525 
526         }
527 
528         @Override
529         public int getSkipAfterFailureCount()
530         {
531             return 0;
532         }
533 
534         @Override
535         public String getShutdown()
536         {
537             return null;
538         }
539 
540         @Override
541         public File getExcludesFile()
542         {
543             return null;
544         }
545 
546         @Override
547         protected List<File> suiteXmlFiles()
548         {
549             return null;
550         }
551 
552         @Override
553         protected boolean hasSuiteXmlFiles()
554         {
555             return false;
556         }
557 
558         @Override
559         public File[] getSuiteXmlFiles()
560         {
561             return new File[0];
562         }
563 
564         @Override
565         public void setSuiteXmlFiles( File[] suiteXmlFiles )
566         {
567 
568         }
569 
570         @Override
571         public String getRunOrder()
572         {
573             return null;
574         }
575 
576         @Override
577         public void setRunOrder( String runOrder )
578         {
579 
580         }
581 
582         @Override
583         public String[] getDependenciesToScan()
584         {
585             return dependenciesToScan;
586         }
587 
588         @Override
589         protected void handleSummary( RunResult summary, Exception firstForkException )
590                 throws MojoExecutionException, MojoFailureException
591         {
592 
593         }
594 
595         @Override
596         protected boolean isSkipExecution()
597         {
598             return false;
599         }
600 
601         @Override
602         protected String[] getDefaultIncludes()
603         {
604             return new String[0];
605         }
606 
607         @Override
608         protected String getReportSchemaLocation()
609         {
610             return null;
611         }
612 
613         @Override
614         protected Artifact getMojoArtifact()
615         {
616             return null;
617         }
618 
619         @Override
620         List<Artifact> getProjectTestArtifacts()
621         {
622             return projectTestArtifacts;
623         }
624     }
625 }