Centralize code generation a bit more 97/73497/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 27 Jun 2018 18:33:19 +0000 (20:33 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 27 Jun 2018 19:07:55 +0000 (21:07 +0200)
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 <robert.varga@pantheon.tech>
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionTypedefUnusedImportTest.java

index 4f9704f689fbf451ed10dbeaa60325ea05228eb7..c31cfd42f656ec625b12483c095cbef8d66f6d94 100644 (file)
@@ -48,14 +48,20 @@ public abstract class BaseCompilationTest {
         bindingGenerator = new BindingGeneratorImpl();
     }
 
         bindingGenerator = new BindingGeneratorImpl();
     }
 
-    protected final void generateTestSources(final String resourceDirPath, final File sourcesOutputDir)
+    protected static final void generateTestSources(final List<Type> 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<Type> generateTestSources(final String resourceDirPath, final File sourcesOutputDir)
             throws IOException, URISyntaxException {
         final List<File> sourceFiles = CompilationTestUtils.getSourceFiles(resourceDirPath);
         final SchemaContext context = YangParserTestUtils.parseYangFiles(sourceFiles);
         final List<Type> types = bindingGenerator.generateTypes(context);
             throws IOException, URISyntaxException {
         final List<File> sourceFiles = CompilationTestUtils.getSourceFiles(resourceDirPath);
         final SchemaContext context = YangParserTestUtils.parseYangFiles(sourceFiles);
         final List<Type> 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()) {
 
         // 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());
         }
                 BindingMapping.MODULE_INFO_CLASS_NAME + ".java");
             Files.asCharSink(file, StandardCharsets.UTF_8).write(template.generate());
         }
+
+        return types;
     }
 }
     }
 }
index 61df9bba9433f7082357a60459f8430e2df8f414..5921e8601fff484a7bdc51a63f66d91527165241 100644 (file)
@@ -12,11 +12,8 @@ import static org.junit.Assert.assertTrue;
 import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
 import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
-import java.util.HashSet;
 import java.util.List;
 import java.util.List;
-import java.util.Set;
 import org.junit.Test;
 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;
 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;
 
 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 {
     private static final String FS = File.separator;
     private static final String PATH = "target/test/test-dir";
 
     @Test
     public void test() throws IOException {
-        final Set<GeneratedType> 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));
         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<String> 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<String> filesList = Arrays.asList(
+            new File(PATH + FS + "org" + FS + "opendaylight" + FS + "controller" + FS + "gen").list());
 
         // assertEquals(5, files.length);
         assertTrue(filesList.contains("Type1.java"));
 
         // assertEquals(5, files.length);
         assertTrue(filesList.contains("Type1.java"));
@@ -60,5 +53,4 @@ public class GeneratorJavaFileTest {
         builder.addImplementsType(BindingTypes.DATA_OBJECT);
         return builder.build();
     }
         builder.addImplementsType(BindingTypes.DATA_OBJECT);
         return builder.build();
     }
-
 }
 }
index 7961c7e46cf23eeb427efd6596ede367d7618861..8d33d4d833ac94d1ac9c9789e7903a77f0ca9ce2 100644 (file)
@@ -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.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;
 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.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 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.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");
 
 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<File> sourceFiles = getSourceFiles("/compilation/union-typedef");
-        final SchemaContext context = YangParserTestUtils.parseYangFiles(sourceFiles);
-        final List<Type> types = bindingGenerator.generateTypes(context);
-        final GeneratorJavaFile generator = new GeneratorJavaFile(new HashSet<>(types));
-        generator.generateToFile(sourcesOutputDir);
+        final List<Type> 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 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);
     }
         testCompilation(sourcesOutputDir, compiledOutputDir);
         cleanUp(sourcesOutputDir, compiledOutputDir);
     }