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
