X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fbinding-java-api-generator%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fjava%2Fapi%2Fgenerator%2Ftest%2FGeneratorJavaFileTest.java;fp=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fbinding-java-api-generator%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fjava%2Fapi%2Fgenerator%2Ftest%2FGeneratorJavaFileTest.java;h=4ab054d66345b40e2eab3385272d725228e4ccf4;hb=bc395f78e1b7092d51348b8acac4cc83c90ab9ba;hp=9df281fcd3229c3cc3625871f577704fced5d3b7;hpb=c62c3615c0812460a8880f7ff0a1d3f6be548952;p=controller.git diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/controller/sal/java/api/generator/test/GeneratorJavaFileTest.java b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/controller/sal/java/api/generator/test/GeneratorJavaFileTest.java index 9df281fcd3..4ab054d663 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/controller/sal/java/api/generator/test/GeneratorJavaFileTest.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/controller/sal/java/api/generator/test/GeneratorJavaFileTest.java @@ -10,34 +10,55 @@ package org.opendaylight.controller.sal.java.api.generator.test; import static org.junit.Assert.*; import java.io.File; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; + import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator; +import org.opendaylight.controller.sal.binding.generator.impl.BindingGeneratorImpl; import org.opendaylight.controller.sal.binding.generator.impl.GeneratedTypeBuilderImpl; +import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; import org.opendaylight.controller.sal.binding.model.api.GeneratedType; +import org.opendaylight.controller.sal.binding.model.api.Type; import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.controller.sal.java.api.generator.GeneratorJavaFile; import org.opendaylight.controller.sal.java.api.generator.InterfaceGenerator; +import org.opendaylight.controller.yang.model.api.Module; +import org.opendaylight.controller.yang.model.api.SchemaContext; +import org.opendaylight.controller.yang.model.parser.impl.YangModelParserImpl; public class GeneratorJavaFileTest { - private static final String FS = File.separator; private static final String PATH = "test-dir"; private final File testDir = new File(PATH); + private static final String GENERATOR_OUTPUT_PATH = "src/test/resources/src"; + private static final File GENERATOR_OUTPUT = new File(GENERATOR_OUTPUT_PATH); + private static final String COMPILER_OUTPUT_PATH = "src/test/resources/bin"; + private static final File COMPILER_OUTPUT = new File(COMPILER_OUTPUT_PATH); + @Before public void init() { assertTrue(testDir.mkdir()); + assertTrue(COMPILER_OUTPUT.mkdirs()); + assertTrue(GENERATOR_OUTPUT.mkdirs()); } @After public void cleanUp() { deleteTestDir(testDir); + deleteTestDir(COMPILER_OUTPUT); + deleteTestDir(GENERATOR_OUTPUT); } @Test @@ -66,6 +87,54 @@ public class GeneratorJavaFileTest { assertTrue(filesList.contains("Type3.java")); } + @Test + public void compilationTest() throws Exception { + final YangModelParserImpl parser = new YangModelParserImpl(); + final BindingGenerator bindingGenerator = new BindingGeneratorImpl(); + + File sourcesDir = new File("src/test/resources/yang"); + File[] sourceFiles = sourcesDir.listFiles(); + String[] sourcesDirPaths = new String[sourceFiles.length]; + for (int i = 0; i < sourceFiles.length; i++) { + sourcesDirPaths[i] = sourceFiles[i].getAbsolutePath(); + } + final Set modulesToBuild = parser + .parseYangModels(sourcesDirPaths); + + final SchemaContext context = parser + .resolveSchemaContext(modulesToBuild); + final List types = bindingGenerator.generateTypes(context); + final Set typesToGenerate = new HashSet(); + final Set tosToGenerate = new HashSet(); + for (Type type : types) { + if (type instanceof GeneratedType) { + typesToGenerate.add((GeneratedType) type); + } + + if (type instanceof GeneratedTransferObject) { + tosToGenerate.add((GeneratedTransferObject) type); + } + } + + final GeneratorJavaFile generator = new GeneratorJavaFile( + typesToGenerate, tosToGenerate); + generator.generateToFile(GENERATOR_OUTPUT_PATH); + + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + StandardJavaFileManager fileManager = compiler.getStandardFileManager( + null, null, null); + + List filesList = getJavaFiles(new File(GENERATOR_OUTPUT_PATH)); + + Iterable compilationUnits = fileManager + .getJavaFileObjectsFromFiles(filesList); + Iterable options = Arrays.asList(new String[] { "-d", + COMPILER_OUTPUT_PATH }); + boolean compiled = compiler.getTask(null, null, null, options, null, + compilationUnits).call(); + assertTrue(compiled); + } + private GeneratedType createGeneratedType(String pkgName, String name) { GeneratedTypeBuilder builder = new GeneratedTypeBuilderImpl(pkgName, name); @@ -83,4 +152,26 @@ public class GeneratorJavaFileTest { } } + /** + * Search recursively given directory for *.java files. + * + * @param directory + * directory to search + * @return List of java files found + */ + private List getJavaFiles(File directory) { + List result = new ArrayList(); + for (File file : directory.listFiles()) { + if (file.isDirectory()) { + result.addAll(getJavaFiles(file)); + } else { + String absPath = file.getAbsolutePath(); + if (absPath.endsWith(".java")) { + result.add(file); + } + } + } + return result; + } + }