From 29b8a6e7b1ad3b7b9fa7043f27c4d2129f082d6f Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 27 Jun 2018 20:33:19 +0200 Subject: [PATCH] Centralize code generation a bit more BaseCompilationTest should be used as the baseline for creating tests which create source code. Refactor it a bit, to allow for wider reuse. Change-Id: I69a9d779222439813efb70b25cf88e5b03ac4f7e Signed-off-by: Robert Varga --- .../generator/test/BaseCompilationTest.java | 16 +++++++--- .../generator/test/GeneratorJavaFileTest.java | 30 +++++++------------ .../test/UnionTypedefUnusedImportTest.java | 14 ++------- 3 files changed, 26 insertions(+), 34 deletions(-) diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java index 4f9704f689..c31cfd42f6 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java @@ -48,14 +48,20 @@ public abstract class BaseCompilationTest { bindingGenerator = new BindingGeneratorImpl(); } - protected final void generateTestSources(final String resourceDirPath, final File sourcesOutputDir) + protected static final void generateTestSources(final List types, final File sourcesOutputDir) + throws IOException { + Collections.sort(types, (o1, o2) -> o2.getName().compareTo(o1.getName())); + + final GeneratorJavaFile generator = new GeneratorJavaFile(ImmutableSet.copyOf(types)); + generator.generateToFile(sourcesOutputDir); + } + + protected final List generateTestSources(final String resourceDirPath, final File sourcesOutputDir) throws IOException, URISyntaxException { final List sourceFiles = CompilationTestUtils.getSourceFiles(resourceDirPath); final SchemaContext context = YangParserTestUtils.parseYangFiles(sourceFiles); final List types = bindingGenerator.generateTypes(context); - Collections.sort(types, (o1, o2) -> o2.getName().compareTo(o1.getName())); - final GeneratorJavaFile generator = new GeneratorJavaFile(ImmutableSet.copyOf(types)); - generator.generateToFile(sourcesOutputDir); + generateTestSources(types, sourcesOutputDir); // Also generate YangModuleInfo for (Module module : context.getModules()) { @@ -67,5 +73,7 @@ public abstract class BaseCompilationTest { BindingMapping.MODULE_INFO_CLASS_NAME + ".java"); Files.asCharSink(file, StandardCharsets.UTF_8).write(template.generate()); } + + return types; } } diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java index 61df9bba94..5921e8601f 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java @@ -12,11 +12,8 @@ import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import java.util.Arrays; -import java.util.HashSet; import java.util.List; -import java.util.Set; import org.junit.Test; -import org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile; import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; @@ -24,28 +21,24 @@ import org.opendaylight.mdsal.binding.model.util.BindingTypes; import org.opendaylight.mdsal.binding.model.util.Types; import org.opendaylight.mdsal.binding.model.util.generated.type.builder.CodegenGeneratedTypeBuilder; -public class GeneratorJavaFileTest { +public class GeneratorJavaFileTest extends BaseCompilationTest { private static final String FS = File.separator; private static final String PATH = "target/test/test-dir"; @Test public void test() throws IOException { - final Set types = new HashSet<>(); - GeneratedType t1 = createGeneratedType("org.opendaylight.controller.gen", "Type1"); - GeneratedType t2 = createGeneratedType("org.opendaylight.controller.gen", "Type2"); - GeneratedType t3 = createGeneratedType("org.opendaylight.controller.gen", "Type3"); - types.add(t1); - types.add(t2); - types.add(t3); - GeneratedTypeBuilder gtb = new CodegenGeneratedTypeBuilder( - JavaTypeName.create("org.opendaylight.controller.gen", "Type4")); + final GeneratedTypeBuilder gtb = new CodegenGeneratedTypeBuilder(JavaTypeName.create( + "org.opendaylight.controller.gen", "Type4")); gtb.addImplementsType(Types.augmentableTypeFor(gtb)); - types.add(gtb.build()); - GeneratorJavaFile generator = new GeneratorJavaFile(types); - generator.generateToFile(new File(PATH)); - String[] files = new File(PATH + FS + "org" + FS + "opendaylight" + FS + "controller" + FS + "gen").list(); - List filesList = Arrays.asList(files); + generateTestSources(Arrays.asList( + createGeneratedType("org.opendaylight.controller.gen", "Type1"), + createGeneratedType("org.opendaylight.controller.gen", "Type2"), + createGeneratedType("org.opendaylight.controller.gen", "Type3"), + gtb.build()), new File(PATH)); + + List filesList = Arrays.asList( + new File(PATH + FS + "org" + FS + "opendaylight" + FS + "controller" + FS + "gen").list()); // assertEquals(5, files.length); assertTrue(filesList.contains("Type1.java")); @@ -60,5 +53,4 @@ public class GeneratorJavaFileTest { builder.addImplementsType(BindingTypes.DATA_OBJECT); return builder.build(); } - } diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionTypedefUnusedImportTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionTypedefUnusedImportTest.java index 7961c7e46c..8d33d4d833 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionTypedefUnusedImportTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionTypedefUnusedImportTest.java @@ -11,7 +11,6 @@ import static org.junit.Assert.assertFalse; import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.FS; import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.GENERATOR_OUTPUT_PATH; import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.cleanUp; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.getSourceFiles; import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.testCompilation; import java.io.File; @@ -21,29 +20,22 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.HashSet; import java.util.List; import org.junit.Test; -import org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile; import org.opendaylight.mdsal.binding.model.api.Type; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public class UnionTypedefUnusedImportTest extends BaseCompilationTest { @Test public void testUnionTypedefUnusedImport() throws Exception { final File sourcesOutputDir = CompilationTestUtils.generatorOutput("union-typedef"); - final File compiledOutputDir = CompilationTestUtils.compilerOutput("union-typedef"); - final List sourceFiles = getSourceFiles("/compilation/union-typedef"); - final SchemaContext context = YangParserTestUtils.parseYangFiles(sourceFiles); - final List types = bindingGenerator.generateTypes(context); - final GeneratorJavaFile generator = new GeneratorJavaFile(new HashSet<>(types)); - generator.generateToFile(sourcesOutputDir); + final List types = generateTestSources("/compilation/union-typedef", sourcesOutputDir); + final boolean isUsedImport = containsImport("org.opendaylight.yang.gen.v1.org.opendaylight.yangtools.union.typedef.rev130208.TypedefUnion"); assertFalse(String.format("Class shouldn't contain import for this type '%s'", types.get(1).getName()), isUsedImport); + final File compiledOutputDir = CompilationTestUtils.compilerOutput("union-typedef"); testCompilation(sourcesOutputDir, compiledOutputDir); cleanUp(sourcesOutputDir, compiledOutputDir); } -- 2.36.6