This is an automated email from the ASF dual-hosted git repository.

sgoeschl pushed a commit to branch FREEMARKER-156
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git

commit 33c248dfb6db764047da148c5c31f42722fb56cd
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Mon Jan 25 23:10:11 2021 +0100

    FREEMARKER-156 [freemarker-generator] Migrate to Mockito
---
 freemarker-generator-maven-plugin/pom.xml          |  14 -
 .../freemarker/generator/maven/FreeMarkerMojo.java |  50 ++--
 .../generator/maven/FreeMarkerMojoTest.java        | 286 +++------------------
 3 files changed, 70 insertions(+), 280 deletions(-)

diff --git a/freemarker-generator-maven-plugin/pom.xml 
b/freemarker-generator-maven-plugin/pom.xml
index e7a15ba..67ef461 100644
--- a/freemarker-generator-maven-plugin/pom.xml
+++ b/freemarker-generator-maven-plugin/pom.xml
@@ -36,9 +36,7 @@
         <maven-plugin-api.version>3.6.3</maven-plugin-api.version>
         
<maven-plugin-annotations.version>3.6.0</maven-plugin-annotations.version>
         <gson.version>2.8.6</gson.version>
-        <jmockit.version>1.41</jmockit.version>
         <mockito.version>3.7.7</mockito.version>
-        <org.testng.version>7.3.0</org.testng.version>
         <assertj-core.version>3.18.1</assertj-core.version>
     </properties>
 
@@ -109,24 +107,12 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.jmockit</groupId>
-            <artifactId>jmockit</artifactId>
-            <version>${jmockit.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
             <version>${assertj-core.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>${org.testng.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
             <version>${mockito.version}</version>
diff --git 
a/freemarker-generator-maven-plugin/src/main/java/org/apache/freemarker/generator/maven/FreeMarkerMojo.java
 
b/freemarker-generator-maven-plugin/src/main/java/org/apache/freemarker/generator/maven/FreeMarkerMojo.java
index 5ea8bc1..b187e46 100644
--- 
a/freemarker-generator-maven-plugin/src/main/java/org/apache/freemarker/generator/maven/FreeMarkerMojo.java
+++ 
b/freemarker-generator-maven-plugin/src/main/java/org/apache/freemarker/generator/maven/FreeMarkerMojo.java
@@ -72,15 +72,36 @@ public class FreeMarkerMojo extends AbstractMojo {
             throw new MojoExecutionException("Required directory does not 
exist: " + generatorDirectory);
         }
 
-        final Configuration config = 
FactoryUtil.createConfiguration(freeMarkerVersion);
-
-        config.setDefaultEncoding("UTF-8");
-
         if (!templateDirectory.isDirectory()) {
             throw new MojoExecutionException("Required directory does not 
exist: " + templateDirectory);
         }
+
+        final Configuration config = freeMarkerConfiguration();
+
+        if ("generate-sources".equals(mojo.getLifecyclePhase())) {
+            
session.getCurrentProject().addCompileSourceRoot(outputDirectory.toString());
+        } else if ("generate-test-sources".equals(mojo.getLifecyclePhase())) {
+            
session.getCurrentProject().addTestCompileSourceRoot(outputDirectory.toString());
+        }
+
+        final Map<String, OutputGeneratorPropertiesProvider> 
extensionToBuilders = new HashMap<>(1);
+        extensionToBuilders.put(".json", 
JsonPropertiesProvider.create(generatorDirectory, templateDirectory, 
outputDirectory));
+
+        final GeneratingFileVisitor fileVisitor = 
GeneratingFileVisitor.create(config, session, extensionToBuilders);
         try {
-            config.setTemplateLoader(new 
FileTemplateLoader(templateDirectory));
+            Files.walkFileTree(generatorDirectory.toPath(), fileVisitor);
+        } catch (Throwable t) {
+            getLog().error("Failed to process files in generator dir: " + 
generatorDirectory, t);
+            throw new MojoExecutionException("Failed to process files in 
generator dir: " + generatorDirectory);
+        }
+    }
+
+    private Configuration freeMarkerConfiguration() throws 
MojoExecutionException{
+        final Configuration configuration = 
FactoryUtil.createConfiguration(freeMarkerVersion);
+        configuration.setDefaultEncoding("UTF-8");
+
+        try {
+            configuration.setTemplateLoader(new 
FileTemplateLoader(templateDirectory));
         } catch (Throwable t) {
             getLog().error("Could not establish file template loader for 
directory: " + templateDirectory, t);
             throw new MojoExecutionException("Could not establish file 
template loader for directory: " + templateDirectory);
@@ -96,28 +117,13 @@ public class FreeMarkerMojo extends AbstractMojo {
                 throw new MojoExecutionException("Failed to load " + 
freeMarkerProps);
             }
             try {
-                config.setSettings(configProperties);
+                configuration.setSettings(configProperties);
             } catch (Throwable t) {
                 getLog().error("Invalid setting(s) in " + freeMarkerProps, t);
                 throw new MojoExecutionException("Invalid setting(s) in " + 
freeMarkerProps);
             }
         }
 
-        if ("generate-sources".equals(mojo.getLifecyclePhase())) {
-            
session.getCurrentProject().addCompileSourceRoot(outputDirectory.toString());
-        } else if ("generate-test-sources".equals(mojo.getLifecyclePhase())) {
-            
session.getCurrentProject().addTestCompileSourceRoot(outputDirectory.toString());
-        }
-
-        final Map<String, OutputGeneratorPropertiesProvider> 
extensionToBuilders = new HashMap<>(1);
-        extensionToBuilders.put(".json", 
JsonPropertiesProvider.create(generatorDirectory, templateDirectory, 
outputDirectory));
-
-        final GeneratingFileVisitor fileVisitor = 
GeneratingFileVisitor.create(config, session, extensionToBuilders);
-        try {
-            Files.walkFileTree(generatorDirectory.toPath(), fileVisitor);
-        } catch (Throwable t) {
-            getLog().error("Failed to process files in generator dir: " + 
generatorDirectory, t);
-            throw new MojoExecutionException("Failed to process files in 
generator dir: " + generatorDirectory);
-        }
+        return configuration;
     }
 }
diff --git 
a/freemarker-generator-maven-plugin/src/test/java/org/apache/freemarker/generator/maven/FreeMarkerMojoTest.java
 
b/freemarker-generator-maven-plugin/src/test/java/org/apache/freemarker/generator/maven/FreeMarkerMojoTest.java
index 47faad7..e2498ec 100644
--- 
a/freemarker-generator-maven-plugin/src/test/java/org/apache/freemarker/generator/maven/FreeMarkerMojoTest.java
+++ 
b/freemarker-generator-maven-plugin/src/test/java/org/apache/freemarker/generator/maven/FreeMarkerMojoTest.java
@@ -19,13 +19,6 @@
 
 package org.apache.freemarker.generator.maven;
 
-import freemarker.cache.FileTemplateLoader;
-import freemarker.cache.TemplateLoader;
-import freemarker.template.Configuration;
-import freemarker.template.TemplateException;
-import mockit.Expectations;
-import mockit.Mocked;
-import mockit.Verifications;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
@@ -35,15 +28,13 @@ import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.project.MavenProject;
 import org.junit.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 import java.io.File;
 import java.io.IOException;
-import java.nio.file.FileVisitor;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Properties;
 
 import static org.assertj.core.api.Assertions.*;
@@ -60,90 +51,30 @@ public class FreeMarkerMojoTest extends Assert {
     }
 
     @Test
-    public void executeTest(
-            @Mocked MavenSession session,
-            @Mocked MavenProject project,
-            @Mocked MojoExecution mojoExecution,
-            @Mocked GeneratingFileVisitor generatingFileVisitor,
-            @Mocked Files files
-    ) throws MojoExecutionException, IOException, IllegalAccessException {
-
-        new Expectations(mojoExecution, generatingFileVisitor) {{
-            mojoExecution.getLifecyclePhase();
-            result = "generate-sources";
-            session.getCurrentProject();
-            result = project;
-        }};
+    public void execute_generateSourceTest() throws MojoExecutionException, 
IOException, IllegalAccessException {
 
-        final FreeMarkerMojo mojo = new FreeMarkerMojo();
-
-        FieldUtils.writeField(mojo, "freeMarkerVersion", "", true);
-        final File testCaseOutputDir = new File(TEST_OUTPUT_DIR, 
"executeTest");
-        FieldUtils.writeField(mojo, "freeMarkerVersion", FREEMARKER_VERSION, 
true);
-        FieldUtils.writeField(mojo, "sourceDirectory", testCaseOutputDir, 
true);
-        FieldUtils.writeField(mojo, "templateDirectory", new 
File(testCaseOutputDir, "template"), true);
-        FieldUtils.writeField(mojo, "generatorDirectory", new 
File(testCaseOutputDir, "data"), true);
-        FieldUtils.writeField(mojo, "outputDirectory", new 
File(testCaseOutputDir, "generated-files"), true);
-        FieldUtils.writeField(mojo, "mojo", mojoExecution, true);
-        FieldUtils.writeField(mojo, "session", session, true);
-
-        FileUtils.forceMkdir(new File(testCaseOutputDir, "data"));
-        FileUtils.forceMkdir(new File(testCaseOutputDir, "template"));
-
-        // Validate minimum configuration.
-        mojo.execute();
-
-        new Verifications() {{
-            
project.addCompileSourceRoot(fixSeparators("target/test-output/freemarker-mojo/executeTest/generated-files"));
-            times = 1;
-
-            final Configuration config;
-            final MavenSession capturedSession;
-            final Map<String, OutputGeneratorPropertiesProvider> builders;
-
-            GeneratingFileVisitor.create(
-                    config = withCapture(),
-                    capturedSession = withCapture(),
-                    builders = withCapture());
-            times = 1;
-
-            assertEquals("UTF-8", config.getDefaultEncoding());
-            assertEquals(session, capturedSession);
-            final TemplateLoader loader = config.getTemplateLoader();
-            assertTrue(loader instanceof FileTemplateLoader);
-
-            final Path path;
-            final FileVisitor<Path> fileVisitor;
+        final File mockFile = mock(File.class);
+        final MavenSession session = mock(MavenSession.class);
+        final MavenProject project = mock(MavenProject.class);
+        final MojoExecution mojoExecution = mock(MojoExecution.class);
 
-            Files.walkFileTree(path = withCapture(), fileVisitor = 
withCapture());
-            times = 1;
+        final List<MavenProject> projects = new ArrayList<>();
+        projects.add(project);
 
-            assertEquals(new File(testCaseOutputDir, "data").toPath(), path);
-            assertTrue(fileVisitor instanceof GeneratingFileVisitor);
-        }};
-    }
-
-    @Test
-    public void execute_generateTestSourceTest(
-            @Mocked MavenSession session,
-            @Mocked MavenProject project,
-            @Mocked MojoExecution mojoExecution,
-            @Mocked GeneratingFileVisitor generatingFileVisitor,
-            @Mocked Files files
-    ) throws MojoExecutionException, IOException, IllegalAccessException {
-
-        new Expectations(mojoExecution, generatingFileVisitor) {{
-            mojoExecution.getLifecyclePhase();
-            result = "generate-test-sources";
-            session.getCurrentProject();
-            result = project;
-        }};
+        when(session.getAllProjects()).thenReturn(projects);
+        when(session.getCurrentProject()).thenReturn(project);
+        when(session.getCurrentProject().getProperties()).thenReturn(new 
Properties());
+        when(project.getFile()).thenReturn(mockFile);
+        when(mockFile.lastModified()).thenReturn(10L);
+        when(mojoExecution.getLifecyclePhase()).thenReturn("generate-sources");
 
         final FreeMarkerMojo mojo = new FreeMarkerMojo();
+        final File sourceDirectory = new File("src/test/data/freemarker-mojo");
+        final File testCaseOutputDir = new File(TEST_OUTPUT_DIR, 
"executeTest");
 
-        final File testCaseOutputDir = new File(TEST_OUTPUT_DIR, 
"generateTestSourceTest");
+        FieldUtils.writeField(mojo, "freeMarkerVersion", "", true);
         FieldUtils.writeField(mojo, "freeMarkerVersion", FREEMARKER_VERSION, 
true);
-        FieldUtils.writeField(mojo, "sourceDirectory", testCaseOutputDir, 
true);
+        FieldUtils.writeField(mojo, "sourceDirectory", sourceDirectory, true);
         FieldUtils.writeField(mojo, "templateDirectory", new 
File(testCaseOutputDir, "template"), true);
         FieldUtils.writeField(mojo, "generatorDirectory", new 
File(testCaseOutputDir, "data"), true);
         FieldUtils.writeField(mojo, "outputDirectory", new 
File(testCaseOutputDir, "generated-files"), true);
@@ -155,181 +86,48 @@ public class FreeMarkerMojoTest extends Assert {
 
         mojo.execute();
 
-        new Verifications() {{
-            
project.addTestCompileSourceRoot(fixSeparators("target/test-output/freemarker-mojo/generateTestSourceTest/generated-files"));
-            times = 1;
-        }};
+        
verify(project).addCompileSourceRoot(fixSeparators("target/test-output/freemarker-mojo/executeTest/generated-files"));
+        verify(project, times(0)).addTestCompileSourceRoot(anyString());
     }
 
-    @SuppressWarnings({ "rawtypes", "unchecked" })
     @Test
-    public void execute_walkFileTreeExceptionTest(
-            @Mocked MavenSession session,
-            @Mocked MavenProject project,
-            @Mocked MojoExecution mojoExecution,
-            @Mocked GeneratingFileVisitor generatingFileVisitor,
-            @Mocked Files files
-    ) throws IOException, IllegalAccessException {
-
-        new Expectations(mojoExecution, generatingFileVisitor) {{
-            mojoExecution.getLifecyclePhase();
-            result = "generate-test-sources";
-            session.getCurrentProject();
-            result = project;
-            Files.walkFileTree((Path) any, (FileVisitor) any);
-            result = new RuntimeException("test exception");
-        }};
-
-        final FreeMarkerMojo mojo = new FreeMarkerMojo();
+    public void execute_generateTestSourceTest() throws 
MojoExecutionException, IOException, IllegalAccessException {
 
-        final File testCaseOutputDir = new File(TEST_OUTPUT_DIR, 
"generateTestSourceTest");
-        FieldUtils.writeField(mojo, "freeMarkerVersion", FREEMARKER_VERSION, 
true);
-        FieldUtils.writeField(mojo, "sourceDirectory", testCaseOutputDir, 
true);
-        FieldUtils.writeField(mojo, "templateDirectory", new 
File(testCaseOutputDir, "template"), true);
-        FieldUtils.writeField(mojo, "generatorDirectory", new 
File(testCaseOutputDir, "data"), true);
-        FieldUtils.writeField(mojo, "outputDirectory", new 
File(testCaseOutputDir, "generated-files"), true);
-        FieldUtils.writeField(mojo, "mojo", mojoExecution, true);
-        FieldUtils.writeField(mojo, "session", session, true);
+        final File mockFile = mock(File.class);
+        final MavenSession session = mock(MavenSession.class);
+        final MavenProject project = mock(MavenProject.class);
+        final MojoExecution mojoExecution = mock(MojoExecution.class);
 
-        FileUtils.forceMkdir(new File(testCaseOutputDir, "data"));
-        FileUtils.forceMkdir(new File(testCaseOutputDir, "template"));
+        final List<MavenProject> projects = new ArrayList<>();
+        projects.add(project);
 
-        assertThatExceptionOfType(MojoExecutionException.class)
-                .isThrownBy(mojo::execute)
-                .withMessageStartingWith("Failed to process files in generator 
dir");
-    }
-
-    @Test
-    public void execute_setTemplateLoaderExceptionTest(
-            @Mocked MavenSession session,
-            @Mocked MavenProject project,
-            @Mocked MojoExecution mojoExecution,
-            @Mocked FactoryUtil factoryUtil,
-            @Mocked Configuration config) throws IOException, 
IllegalAccessException {
-
-        new Expectations(config, FactoryUtil.class) {{
-            FactoryUtil.createConfiguration(FREEMARKER_VERSION);
-            result = config;
-            config.setTemplateLoader((TemplateLoader) any);
-            result = new RuntimeException("test exception");
-        }};
+        when(session.getAllProjects()).thenReturn(projects);
+        when(session.getCurrentProject()).thenReturn(project);
+        when(session.getCurrentProject().getProperties()).thenReturn(new 
Properties());
+        when(project.getFile()).thenReturn(mockFile);
+        when(mockFile.lastModified()).thenReturn(10L);
+        
when(mojoExecution.getLifecyclePhase()).thenReturn("generate-test-sources");
 
         final FreeMarkerMojo mojo = new FreeMarkerMojo();
+        final File sourceDirectory = new File("src/test/data/freemarker-mojo");
+        final File testCaseOutputDir = new File(TEST_OUTPUT_DIR, 
"generateTestSourceTest");
 
-        final File testCaseOutputDir = new File(TEST_OUTPUT_DIR, 
"setTemplateLoaderException");
-
+        FieldUtils.writeField(mojo, "freeMarkerVersion", "", true);
         FieldUtils.writeField(mojo, "freeMarkerVersion", FREEMARKER_VERSION, 
true);
-        FieldUtils.writeField(mojo, "sourceDirectory", testCaseOutputDir, 
true);
+        FieldUtils.writeField(mojo, "sourceDirectory", sourceDirectory, true);
         FieldUtils.writeField(mojo, "templateDirectory", new 
File(testCaseOutputDir, "template"), true);
         FieldUtils.writeField(mojo, "generatorDirectory", new 
File(testCaseOutputDir, "data"), true);
         FieldUtils.writeField(mojo, "outputDirectory", new 
File(testCaseOutputDir, "generated-files"), true);
         FieldUtils.writeField(mojo, "mojo", mojoExecution, true);
         FieldUtils.writeField(mojo, "session", session, true);
 
-
         FileUtils.forceMkdir(new File(testCaseOutputDir, "data"));
         FileUtils.forceMkdir(new File(testCaseOutputDir, "template"));
 
-        assertThatExceptionOfType(MojoExecutionException.class)
-                .isThrownBy(mojo::execute)
-                .withMessageStartingWith("Could not establish file template 
loader for directory");
-    }
-
-    @Test
-    public void execute_loadFreemarkerPropertiesTest(
-            @Mocked MavenSession session,
-            @Mocked MavenProject project,
-            @Mocked MojoExecution mojoExecution,
-            @Mocked Configuration config) throws MojoExecutionException, 
TemplateException, IllegalAccessException {
-
-        final FreeMarkerMojo mojo = new FreeMarkerMojo();
-
-        final File sourceDirectory = new File("src/test/data/freemarker-mojo");
-        final File testCaseOutputDir = new File(TEST_OUTPUT_DIR, 
"loadFreemarkerProperties");
-
-        FieldUtils.writeField(mojo, "freeMarkerVersion", FREEMARKER_VERSION, 
true);
-        FieldUtils.writeField(mojo, "sourceDirectory", sourceDirectory, true);
-        FieldUtils.writeField(mojo, "templateDirectory", new 
File(sourceDirectory, "template"), true);
-        FieldUtils.writeField(mojo, "generatorDirectory", new 
File(sourceDirectory, "data"), true);
-        FieldUtils.writeField(mojo, "outputDirectory", new 
File(testCaseOutputDir, "generated-files"), true);
-        FieldUtils.writeField(mojo, "mojo", mojoExecution, true);
-        FieldUtils.writeField(mojo, "session", session, true);
-
         mojo.execute();
 
-        new Verifications() {{
-            final Properties properties;
-
-            config.setSettings(properties = withCapture());
-            times = 1;
-
-            assertEquals("T,F", properties.getProperty("boolean_format"));
-        }};
-    }
-
-    @Test
-    public void execute_loadFreemarkerPropertiesExceptionTest(
-            @Mocked MavenSession session,
-            @Mocked MavenProject project,
-            @Mocked MojoExecution mojoExecution,
-            @Mocked FactoryUtil factoryUtil,
-            @Mocked Configuration config) throws IOException, 
IllegalAccessException {
-
-        new Expectations(FactoryUtil.class) {{
-            FactoryUtil.createFileInputStream((File) any);
-            result = new RuntimeException("test exception");
-        }};
-
-        final FreeMarkerMojo mojo = new FreeMarkerMojo();
-
-        final File sourceDirectory = new File("src/test/data/freemarker-mojo");
-        final File testCaseOutputDir = new File(TEST_OUTPUT_DIR, 
"loadFreemarkerPropertiesExceptionTest");
-
-        FieldUtils.writeField(mojo, "freeMarkerVersion", FREEMARKER_VERSION, 
true);
-        FieldUtils.writeField(mojo, "sourceDirectory", sourceDirectory, true);
-        FieldUtils.writeField(mojo, "templateDirectory", new 
File(sourceDirectory, "template"), true);
-        FieldUtils.writeField(mojo, "generatorDirectory", new 
File(sourceDirectory, "data"), true);
-        FieldUtils.writeField(mojo, "outputDirectory", new 
File(testCaseOutputDir, "generated-files"), true);
-        FieldUtils.writeField(mojo, "mojo", mojoExecution, true);
-        FieldUtils.writeField(mojo, "session", session, true);
-
-        try {
-            assertThatExceptionOfType(MojoExecutionException.class)
-                    .isThrownBy(mojo::execute)
-                    .withMessage(fixSeparators("Failed to load 
src/test/data/freemarker-mojo/freemarker.properties"));
-        } catch (Throwable t) {
-            t.printStackTrace();
-        }
-    }
-
-    @Test
-    public void execute_setSettingsExceptionTest(
-            @Mocked MavenSession session,
-            @Mocked MavenProject project,
-            @Mocked MojoExecution mojoExecution,
-            @Mocked Configuration config) throws TemplateException, 
IllegalAccessException {
-
-        new Expectations() {{
-            config.setSettings((Properties) any);
-            result = new RuntimeException("test exception");
-        }};
-
-        final FreeMarkerMojo mojo = new FreeMarkerMojo();
-
-        final File sourceDirectory = new File("src/test/data/freemarker-mojo");
-        final File testCaseOutputDir = new File(TEST_OUTPUT_DIR, 
"loadFreemarkerProperties");
-
-        FieldUtils.writeField(mojo, "freeMarkerVersion", FREEMARKER_VERSION, 
true);
-        FieldUtils.writeField(mojo, "sourceDirectory", sourceDirectory, true);
-        FieldUtils.writeField(mojo, "templateDirectory", new 
File(sourceDirectory, "template"), true);
-        FieldUtils.writeField(mojo, "generatorDirectory", new 
File(sourceDirectory, "data"), true);
-        FieldUtils.writeField(mojo, "outputDirectory", new 
File(testCaseOutputDir, "generated-files"), true);
-        FieldUtils.writeField(mojo, "mojo", mojoExecution, true);
-        FieldUtils.writeField(mojo, "session", session, true);
-
-        assertThatExceptionOfType(MojoExecutionException.class)
-                .isThrownBy(mojo::execute)
-                .withMessage(fixSeparators("Invalid setting(s) in 
src/test/data/freemarker-mojo/freemarker.properties"));
+        verify(project, times(0)).addCompileSourceRoot(anyString());
+        
verify(project).addTestCompileSourceRoot(fixSeparators("target/test-output/freemarker-mojo/generateTestSourceTest/generated-files"));
     }
 
     @Test

Reply via email to