This is an automated email from the ASF dual-hosted git repository. sgoeschl pushed a commit to branch FREEMARKER-188 in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
commit ed8f4b0c17567e16e66ee63a415ef4d9303ee37c Author: Siegfried Goeschl <[email protected]> AuthorDate: Sun Sep 26 23:18:04 2021 +0200 FREEMARKER-188 Add more tests --- .../cli/config/OutputGeneratorsSupplier.java | 2 +- .../cli/config/AbstractOutputGeneratorTest.java | 62 ++++++++++++++ .../cli/config/ConfigurationSupplierTest.java | 2 - .../DataSourceSeedingOutputGeneratorTest.java | 82 ++++++++++++++++++ .../config/TemplateSeedingOutputGeneratorTest.java | 96 ++++++++++++++++++++++ 5 files changed, 241 insertions(+), 3 deletions(-) diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java index 71046df..e1b11b1 100644 --- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java +++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java @@ -30,7 +30,7 @@ import java.util.stream.Collectors; import static java.util.Objects.requireNonNull; /** - * Supplies a list of list of <code>OutputGenerators</code> based on the user input. + * Supplies a list of <code>OutputGenerators</code> based on the user input. */ public class OutputGeneratorsSupplier implements Supplier<List<OutputGenerator>> { diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/AbstractOutputGeneratorTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/AbstractOutputGeneratorTest.java new file mode 100644 index 0000000..16ce464 --- /dev/null +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/AbstractOutputGeneratorTest.java @@ -0,0 +1,62 @@ +package org.apache.freemarker.generator.cli.config; + +import org.apache.freemarker.generator.cli.picocli.DataSourceDefinition; +import org.apache.freemarker.generator.cli.picocli.OutputGeneratorDefinition; +import org.apache.freemarker.generator.cli.picocli.OutputMapperDefinition; +import org.apache.freemarker.generator.cli.picocli.OutputSeedDefinition; +import org.apache.freemarker.generator.cli.picocli.TemplateOutputDefinition; +import org.apache.freemarker.generator.cli.picocli.TemplateSourceDefinition; + +import java.util.Arrays; + +import static java.util.Collections.singletonList; + +public abstract class AbstractOutputGeneratorTest { + + protected static final String ANY_TEMPLATE_NAME = "cat.ftl"; + protected static final String ANY_TEMPLATE = "src/app/templates/freemarker-generator/" + ANY_TEMPLATE_NAME; + protected static final String ANY_DATASOURCE_DIRECTORY = "src/test/data/json"; + protected static final String ANY_DATASOURCE_FILE_01 = ANY_DATASOURCE_DIRECTORY + "/environments.json"; + protected static final String ANY_DATASOURCE_FILE_02 = ANY_DATASOURCE_DIRECTORY + "/list.json"; + protected static final String ANY_OUTPUT_DIRECTORY_NAME = "target"; + + protected static OutputGeneratorDefinition outputGeneratorDefinition() { + return new OutputGeneratorDefinition(); + } + + protected static Settings settings(OutputGeneratorDefinition... outputGeneratorDefinitions) { + return Settings.builder() + .setOutputGeneratorDefinitions(Arrays.asList(outputGeneratorDefinitions)) + .build(); + } + + protected static OutputSeedDefinition outputSeedDefinition(String type) { + final OutputSeedDefinition outputSeedDefinition = new OutputSeedDefinition(); + outputSeedDefinition.type = type; + return outputSeedDefinition; + } + + protected static TemplateSourceDefinition templateSourceDefinition(String template) { + final TemplateSourceDefinition templateSourceDefinition = new TemplateSourceDefinition(); + templateSourceDefinition.template = template; + return templateSourceDefinition; + } + + protected static DataSourceDefinition dataSourceDefinition(String... dataSources) { + final DataSourceDefinition dataSourceDefinition = new DataSourceDefinition(); + dataSourceDefinition.dataSources = Arrays.asList(dataSources); + return dataSourceDefinition; + } + + protected static TemplateOutputDefinition templateOutputDirectoryDefinition(String directoryName) { + final TemplateOutputDefinition templateOutputDefinition = new TemplateOutputDefinition(); + templateOutputDefinition.outputs = singletonList(directoryName); + return templateOutputDefinition; + } + + protected static OutputMapperDefinition outputMapperDefinition(String template) { + final OutputMapperDefinition outputMapperDefinition = new OutputMapperDefinition(); + outputMapperDefinition.outputMapper = template; + return outputMapperDefinition; + } +} diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplierTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplierTest.java index 3c8f6ef..ae9fa68 100644 --- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplierTest.java +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/ConfigurationSupplierTest.java @@ -29,8 +29,6 @@ import static org.junit.Assert.assertTrue; public class ConfigurationSupplierTest { - private static final String ANY_TEMPLATE_NAME = "templateName"; - @Test public void shouldProvideDefaultConfiguration() { final ConfigurationSupplier configurationSupplier = configurationSupplier(settingsBuilder().build()); diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataSourceSeedingOutputGeneratorTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataSourceSeedingOutputGeneratorTest.java new file mode 100644 index 0000000..b1876e6 --- /dev/null +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataSourceSeedingOutputGeneratorTest.java @@ -0,0 +1,82 @@ +package org.apache.freemarker.generator.cli.config; + +import org.apache.freemarker.generator.base.FreeMarkerConstants.SeedType; +import org.apache.freemarker.generator.base.output.OutputGenerator; +import org.apache.freemarker.generator.cli.picocli.OutputGeneratorDefinition; +import org.junit.Test; + +import java.io.File; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class DataSourceSeedingOutputGeneratorTest extends AbstractOutputGeneratorTest { + + @Test + public void shouldCreateOutputGeneratorForAllDataSourcesInDirectory() { + final OutputGeneratorDefinition outputGeneratorDefinition = outputGeneratorDefinition(); + outputGeneratorDefinition.templateSourceDefinition = templateSourceDefinition(ANY_TEMPLATE); + outputGeneratorDefinition.templateOutputDefinition = templateOutputDirectoryDefinition(ANY_OUTPUT_DIRECTORY_NAME); + outputGeneratorDefinition.dataSourceDefinition = dataSourceDefinition(ANY_DATASOURCE_DIRECTORY); + outputGeneratorDefinition.outputSeedDefinition = outputSeedDefinition(SeedType.DATASOURCE); + outputGeneratorDefinition.outputMapperDefinition = outputMapperDefinition("*.txt"); + final Settings settings = settings(outputGeneratorDefinition); + final OutputGeneratorsSupplier outputGeneratorsSupplier = new OutputGeneratorsSupplier(settings); + + final List<OutputGenerator> outputGenerators = outputGeneratorsSupplier.get(); + final OutputGenerator outputGenerator_01 = outputGenerators.get(0); + final OutputGenerator outputGenerator_02 = outputGenerators.get(1); + + assertEquals(2, outputGenerators.size()); + + assertEquals(1, outputGenerator_01.getDataSources().size()); + assertEquals(OutputGenerator.SeedType.DATASOURCE, outputGenerator_01.getSeedType()); + assertEquals(ANY_TEMPLATE_NAME, outputGenerator_01.getTemplateSource().getName()); + assertEquals(new File(ANY_OUTPUT_DIRECTORY_NAME, "environments.txt"), outputGenerator_01.getTemplateOutput().getFile()); + assertEquals("environments.json", outputGenerator_01.getDataSources().get(0).getFileName()); + + assertEquals(1, outputGenerator_02.getDataSources().size()); + assertEquals(OutputGenerator.SeedType.DATASOURCE, outputGenerator_02.getSeedType()); + assertEquals(ANY_TEMPLATE_NAME, outputGenerator_02.getTemplateSource().getName()); + assertEquals(new File(ANY_OUTPUT_DIRECTORY_NAME, "list.txt"), outputGenerator_02.getTemplateOutput().getFile()); + assertEquals("list.json", outputGenerator_02.getDataSources().get(0).getFileName()); + } + + @Test + public void shouldCreateOutputGeneratorForEachDataSource() { + final OutputGeneratorDefinition outputGeneratorDefinition_01 = outputGeneratorDefinition(); + outputGeneratorDefinition_01.templateSourceDefinition = templateSourceDefinition(ANY_TEMPLATE); + outputGeneratorDefinition_01.templateOutputDefinition = templateOutputDirectoryDefinition(ANY_OUTPUT_DIRECTORY_NAME); + outputGeneratorDefinition_01.dataSourceDefinition = dataSourceDefinition(ANY_DATASOURCE_FILE_01); + outputGeneratorDefinition_01.outputSeedDefinition = outputSeedDefinition(SeedType.DATASOURCE); + outputGeneratorDefinition_01.outputMapperDefinition = outputMapperDefinition("*.txt"); + + final OutputGeneratorDefinition outputGeneratorDefinition_02 = outputGeneratorDefinition(); + outputGeneratorDefinition_02.templateSourceDefinition = templateSourceDefinition(ANY_TEMPLATE); + outputGeneratorDefinition_02.templateOutputDefinition = templateOutputDirectoryDefinition(ANY_OUTPUT_DIRECTORY_NAME); + outputGeneratorDefinition_02.dataSourceDefinition = dataSourceDefinition(ANY_DATASOURCE_FILE_02); + outputGeneratorDefinition_02.outputSeedDefinition = outputSeedDefinition(SeedType.DATASOURCE); + outputGeneratorDefinition_02.outputMapperDefinition = outputMapperDefinition("*.txt"); + + final Settings settings = settings(outputGeneratorDefinition_01, outputGeneratorDefinition_02); + final OutputGeneratorsSupplier outputGeneratorsSupplier = new OutputGeneratorsSupplier(settings); + + final List<OutputGenerator> outputGenerators = outputGeneratorsSupplier.get(); + final OutputGenerator outputGenerator_01 = outputGenerators.get(0); + final OutputGenerator outputGenerator_02 = outputGenerators.get(1); + + assertEquals(2, outputGenerators.size()); + + assertEquals(1, outputGenerator_01.getDataSources().size()); + assertEquals(OutputGenerator.SeedType.DATASOURCE, outputGenerator_01.getSeedType()); + assertEquals(ANY_TEMPLATE_NAME, outputGenerator_01.getTemplateSource().getName()); + assertEquals(new File(ANY_OUTPUT_DIRECTORY_NAME, "environments.txt"), outputGenerator_01.getTemplateOutput().getFile()); + assertEquals("environments.json", outputGenerator_01.getDataSources().get(0).getFileName()); + + assertEquals(1, outputGenerator_02.getDataSources().size()); + assertEquals(OutputGenerator.SeedType.DATASOURCE, outputGenerator_02.getSeedType()); + assertEquals(ANY_TEMPLATE_NAME, outputGenerator_02.getTemplateSource().getName()); + assertEquals(new File(ANY_OUTPUT_DIRECTORY_NAME, "list.txt"), outputGenerator_02.getTemplateOutput().getFile()); + assertEquals("list.json", outputGenerator_02.getDataSources().get(0).getFileName()); + } +} diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/TemplateSeedingOutputGeneratorTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/TemplateSeedingOutputGeneratorTest.java new file mode 100644 index 0000000..3316c44 --- /dev/null +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/TemplateSeedingOutputGeneratorTest.java @@ -0,0 +1,96 @@ +package org.apache.freemarker.generator.cli.config; + +import org.apache.freemarker.generator.base.FreeMarkerConstants.SeedType; +import org.apache.freemarker.generator.base.output.OutputGenerator; +import org.apache.freemarker.generator.cli.picocli.OutputGeneratorDefinition; +import org.junit.Test; + +import java.io.File; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TemplateSeedingOutputGeneratorTest extends AbstractOutputGeneratorTest { + + @Test + public void shouldCreateSingleOutputGeneratorForMultipleDataSources() { + final OutputGeneratorDefinition outputGeneratorDefinition = outputGeneratorDefinition(); + outputGeneratorDefinition.templateSourceDefinition = templateSourceDefinition(ANY_TEMPLATE); + outputGeneratorDefinition.templateOutputDefinition = templateOutputDirectoryDefinition(ANY_OUTPUT_DIRECTORY_NAME); + outputGeneratorDefinition.dataSourceDefinition = dataSourceDefinition(ANY_DATASOURCE_FILE_01, ANY_DATASOURCE_FILE_02); + outputGeneratorDefinition.outputSeedDefinition = outputSeedDefinition(SeedType.TEMPLATE); + final Settings settings = settings(outputGeneratorDefinition); + final OutputGeneratorsSupplier outputGeneratorsSupplier = new OutputGeneratorsSupplier(settings); + + final List<OutputGenerator> outputGenerators = outputGeneratorsSupplier.get(); + final OutputGenerator outputGenerator = outputGenerators.get(0); + + assertEquals(1, outputGenerators.size()); + assertEquals(2, outputGenerator.getDataSources().size()); + + assertEquals(OutputGenerator.SeedType.TEMPLATE, outputGenerator.getSeedType()); + assertEquals(ANY_TEMPLATE_NAME, outputGenerator.getTemplateSource().getName()); + assertEquals(new File(ANY_OUTPUT_DIRECTORY_NAME), outputGenerator.getTemplateOutput().getFile()); + assertEquals("environments.json", outputGenerator.getDataSources().get(0).getFileName()); + assertEquals("list.json", outputGenerator.getDataSources().get(1).getFileName()); + } + + @Test + public void shouldCreateSingleOutputGeneratorForAllDataSourcesInDirectory() { + final OutputGeneratorDefinition outputGeneratorDefinition = outputGeneratorDefinition(); + outputGeneratorDefinition.templateSourceDefinition = templateSourceDefinition(ANY_TEMPLATE); + outputGeneratorDefinition.templateOutputDefinition = templateOutputDirectoryDefinition(ANY_OUTPUT_DIRECTORY_NAME); + outputGeneratorDefinition.dataSourceDefinition = dataSourceDefinition(ANY_DATASOURCE_DIRECTORY); + outputGeneratorDefinition.outputSeedDefinition = outputSeedDefinition(SeedType.TEMPLATE); + final Settings settings = settings(outputGeneratorDefinition); + final OutputGeneratorsSupplier outputGeneratorsSupplier = new OutputGeneratorsSupplier(settings); + + final List<OutputGenerator> outputGenerators = outputGeneratorsSupplier.get(); + final OutputGenerator outputGenerator = outputGenerators.get(0); + + assertEquals(1, outputGenerators.size()); + assertEquals(2, outputGenerator.getDataSources().size()); + + assertEquals(OutputGenerator.SeedType.TEMPLATE, outputGenerator.getSeedType()); + assertEquals(ANY_TEMPLATE_NAME, outputGenerator.getTemplateSource().getName()); + assertEquals(new File(ANY_OUTPUT_DIRECTORY_NAME), outputGenerator.getTemplateOutput().getFile()); + assertEquals("environments.json", outputGenerator.getDataSources().get(0).getFileName()); + assertEquals("list.json", outputGenerator.getDataSources().get(1).getFileName()); + } + + @Test + public void shouldCreateMultipleOutputGenerators() { + final OutputGeneratorDefinition outputGeneratorDefinition_01 = outputGeneratorDefinition(); + outputGeneratorDefinition_01.templateSourceDefinition = templateSourceDefinition(ANY_TEMPLATE); + outputGeneratorDefinition_01.templateOutputDefinition = templateOutputDirectoryDefinition(ANY_OUTPUT_DIRECTORY_NAME); + outputGeneratorDefinition_01.dataSourceDefinition = dataSourceDefinition(ANY_DATASOURCE_FILE_01); + outputGeneratorDefinition_01.outputSeedDefinition = outputSeedDefinition(SeedType.TEMPLATE); + + final OutputGeneratorDefinition outputGeneratorDefinition_02 = outputGeneratorDefinition(); + outputGeneratorDefinition_02.templateSourceDefinition = templateSourceDefinition(ANY_TEMPLATE); + outputGeneratorDefinition_02.templateOutputDefinition = templateOutputDirectoryDefinition(ANY_OUTPUT_DIRECTORY_NAME); + outputGeneratorDefinition_02.dataSourceDefinition = dataSourceDefinition(ANY_DATASOURCE_FILE_02); + outputGeneratorDefinition_02.outputSeedDefinition = outputSeedDefinition(SeedType.TEMPLATE); + + final Settings settings = settings(outputGeneratorDefinition_01, outputGeneratorDefinition_02); + final OutputGeneratorsSupplier outputGeneratorsSupplier = new OutputGeneratorsSupplier(settings); + + final List<OutputGenerator> outputGenerators = outputGeneratorsSupplier.get(); + final OutputGenerator outputGenerator_01 = outputGenerators.get(0); + final OutputGenerator outputGenerator_02 = outputGenerators.get(1); + + assertEquals(2, outputGenerators.size()); + + assertEquals(1, outputGenerator_01.getDataSources().size()); + assertEquals(OutputGenerator.SeedType.TEMPLATE, outputGenerator_01.getSeedType()); + assertEquals(ANY_TEMPLATE_NAME, outputGenerator_01.getTemplateSource().getName()); + assertEquals(new File(ANY_OUTPUT_DIRECTORY_NAME), outputGenerator_01.getTemplateOutput().getFile()); + assertEquals("environments.json", outputGenerator_01.getDataSources().get(0).getFileName()); + + assertEquals(1, outputGenerator_02.getDataSources().size()); + assertEquals(OutputGenerator.SeedType.TEMPLATE, outputGenerator_02.getSeedType()); + assertEquals(ANY_TEMPLATE_NAME, outputGenerator_02.getTemplateSource().getName()); + assertEquals(new File(ANY_OUTPUT_DIRECTORY_NAME), outputGenerator_02.getTemplateOutput().getFile()); + assertEquals("list.json", outputGenerator_02.getDataSources().get(0).getFileName()); + } +}
