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