View Javadoc
1   /*
2    * Copyright 2013 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * You may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.codehaus.gmavenplus.mojo;
18  
19  import org.apache.maven.artifact.DependencyResolutionRequiredException;
20  import org.apache.maven.model.Build;
21  import org.apache.maven.plugin.MojoExecutionException;
22  import org.apache.maven.project.MavenProject;
23  import org.apache.maven.shared.model.fileset.FileSet;
24  import org.codehaus.gmavenplus.model.internal.Version;
25  import org.codehaus.gmavenplus.util.ClassWrangler;
26  import org.junit.Before;
27  import org.junit.Test;
28  import org.mockito.MockitoAnnotations;
29  import org.mockito.Spy;
30  
31  import java.io.File;
32  import java.lang.reflect.InvocationTargetException;
33  import java.net.MalformedURLException;
34  import java.util.TreeSet;
35  
36  import static org.junit.Assert.assertFalse;
37  import static org.junit.Assert.assertTrue;
38  import static org.mockito.Mockito.*;
39  
40  
41  /**
42   * @author Keegan Witt
43   */
44  public class GenerateTestStubsMojoTest {
45      private static final String INTENTIONAL_EXCEPTION_MESSAGE = "Intentionally blowing up.";
46  
47      @Spy
48      private GenerateTestStubsMojo generateTestStubsMojo;
49  
50      @Before
51      public void setup() {
52          MockitoAnnotations.openMocks(this);
53          doReturn(new TreeSet<File>()).when(generateTestStubsMojo).getTestFiles(any(FileSet[].class), eq(false));
54          doReturn(new TreeSet<File>()).when(generateTestStubsMojo).getStubs(any(File.class));
55          generateTestStubsMojo.project = mock(MavenProject.class);
56          generateTestStubsMojo.testStubsOutputDirectory = mock(File.class);
57          doReturn(mock(Build.class)).when(generateTestStubsMojo.project).getBuild();
58          generateTestStubsMojo.classWrangler = mock(ClassWrangler.class);
59          doReturn(new Version(1, 8, 2)).when(generateTestStubsMojo.classWrangler).getGroovyVersion();
60      }
61  
62      @Test
63      public void testCallsExpectedMethods() throws Exception {
64          doReturn(true).when(generateTestStubsMojo).groovyVersionSupportsAction();
65          doNothing().when(generateTestStubsMojo).doStubGeneration(anySet(), anyList(), any(File.class));
66          generateTestStubsMojo.execute();
67          verify(generateTestStubsMojo, times(1)).doStubGeneration(anySet(), anyList(), any(File.class));
68      }
69  
70      @Test
71      public void testSkipped() throws Exception {
72          doReturn(true).when(generateTestStubsMojo).groovyVersionSupportsAction();
73          generateTestStubsMojo.skipTests = true;
74          generateTestStubsMojo.execute();
75          verify(generateTestStubsMojo, never()).doStubGeneration(anySet(), anyList(), any(File.class));
76      }
77  
78      @Test(expected = MojoExecutionException.class)
79      public void testClassNotFoundExceptionThrowsMojoExecutionException() throws Exception {
80          doReturn(true).when(generateTestStubsMojo).groovyVersionSupportsAction();
81          doThrow(new ClassNotFoundException(INTENTIONAL_EXCEPTION_MESSAGE)).when(generateTestStubsMojo).doStubGeneration(anySet(), anyList(), any(File.class));
82          generateTestStubsMojo.execute();
83      }
84  
85      @Test(expected = MojoExecutionException.class)
86      public void testInvocationTargetExceptionThrowsMojoExecutionException() throws Exception {
87          doReturn(true).when(generateTestStubsMojo).groovyVersionSupportsAction();
88          doThrow(new InvocationTargetException(mock(Exception.class), INTENTIONAL_EXCEPTION_MESSAGE)).when(generateTestStubsMojo).doStubGeneration(anySet(), anyList(), any(File.class));
89          generateTestStubsMojo.execute();
90      }
91  
92      @Test(expected = MojoExecutionException.class)
93      public void testInstantiationExceptionThrowsMojoExecutionException() throws Exception {
94          doReturn(true).when(generateTestStubsMojo).groovyVersionSupportsAction();
95          doThrow(new InstantiationException(INTENTIONAL_EXCEPTION_MESSAGE)).when(generateTestStubsMojo).doStubGeneration(anySet(), anyList(), any(File.class));
96          generateTestStubsMojo.execute();
97      }
98  
99      @Test(expected = MojoExecutionException.class)
100     public void testIllegalAccessExceptionThrowsMojoExecutionException() throws Exception {
101         doReturn(true).when(generateTestStubsMojo).groovyVersionSupportsAction();
102         doThrow(new IllegalAccessException(INTENTIONAL_EXCEPTION_MESSAGE)).when(generateTestStubsMojo).doStubGeneration(anySet(), anyList(), any(File.class));
103         generateTestStubsMojo.execute();
104     }
105 
106     @Test(expected = MojoExecutionException.class)
107     public void testDependencyResolutionRequiredExceptionThrowsMojoExecutionException() throws Exception {
108         doThrow(mock(DependencyResolutionRequiredException.class)).when(generateTestStubsMojo.project).getTestClasspathElements();
109         generateTestStubsMojo.execute();
110     }
111 
112     @Test(expected = MojoExecutionException.class)
113     public void testMalformedURLExceptionThrowsMojoExecutionException() throws Exception {
114         doReturn(true).when(generateTestStubsMojo).groovyVersionSupportsAction();
115         doThrow(new MalformedURLException(INTENTIONAL_EXCEPTION_MESSAGE)).when(generateTestStubsMojo).doStubGeneration(anySet(), anyList(), any(File.class));
116         generateTestStubsMojo.execute();
117     }
118 
119     @Test
120     public void testGroovyVersionSupportsActionTrue() {
121         doReturn(Version.parseFromString("1.5.0")).when(generateTestStubsMojo.classWrangler).getGroovyVersion();
122         assertTrue(generateTestStubsMojo.groovyVersionSupportsAction());
123     }
124 
125     @Test
126     public void testGroovyVersionSupportsActionFalse() {
127         doReturn(Version.parseFromString("1.0")).when(generateTestStubsMojo.classWrangler).getGroovyVersion();
128         assertFalse(generateTestStubsMojo.groovyVersionSupportsAction());
129     }
130 
131 }