import static org.junit.Assert.*;\r
\r
import java.io.File;\r
+import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.HashSet;\r
import java.util.List;\r
import java.util.Set;\r
\r
+import javax.tools.JavaCompiler;\r
+import javax.tools.JavaFileObject;\r
+import javax.tools.StandardJavaFileManager;\r
+import javax.tools.ToolProvider;\r
+\r
import org.junit.After;\r
import org.junit.Before;\r
import org.junit.Test;\r
+import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator;\r
+import org.opendaylight.controller.sal.binding.generator.impl.BindingGeneratorImpl;\r
import org.opendaylight.controller.sal.binding.generator.impl.GeneratedTypeBuilderImpl;\r
+import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;\r
import org.opendaylight.controller.sal.binding.model.api.GeneratedType;\r
+import org.opendaylight.controller.sal.binding.model.api.Type;\r
import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTypeBuilder;\r
import org.opendaylight.controller.sal.java.api.generator.GeneratorJavaFile;\r
import org.opendaylight.controller.sal.java.api.generator.InterfaceGenerator;\r
+import org.opendaylight.controller.yang.model.api.Module;\r
+import org.opendaylight.controller.yang.model.api.SchemaContext;\r
+import org.opendaylight.controller.yang.model.parser.impl.YangModelParserImpl;\r
\r
public class GeneratorJavaFileTest {\r
-\r
private static final String FS = File.separator;\r
private static final String PATH = "test-dir";\r
private final File testDir = new File(PATH);\r
\r
+ private static final String GENERATOR_OUTPUT_PATH = "src/test/resources/src";\r
+ private static final File GENERATOR_OUTPUT = new File(GENERATOR_OUTPUT_PATH);\r
+ private static final String COMPILER_OUTPUT_PATH = "src/test/resources/bin";\r
+ private static final File COMPILER_OUTPUT = new File(COMPILER_OUTPUT_PATH);\r
+\r
@Before\r
public void init() {\r
assertTrue(testDir.mkdir());\r
+ assertTrue(COMPILER_OUTPUT.mkdirs());\r
+ assertTrue(GENERATOR_OUTPUT.mkdirs());\r
}\r
\r
@After\r
public void cleanUp() {\r
deleteTestDir(testDir);\r
+ deleteTestDir(COMPILER_OUTPUT);\r
+ deleteTestDir(GENERATOR_OUTPUT);\r
}\r
\r
@Test\r
assertTrue(filesList.contains("Type3.java"));\r
}\r
\r
+ @Test\r
+ public void compilationTest() throws Exception {\r
+ final YangModelParserImpl parser = new YangModelParserImpl();\r
+ final BindingGenerator bindingGenerator = new BindingGeneratorImpl();\r
+\r
+ File sourcesDir = new File("src/test/resources/yang");\r
+ File[] sourceFiles = sourcesDir.listFiles();\r
+ String[] sourcesDirPaths = new String[sourceFiles.length];\r
+ for (int i = 0; i < sourceFiles.length; i++) {\r
+ sourcesDirPaths[i] = sourceFiles[i].getAbsolutePath();\r
+ }\r
+ final Set<Module> modulesToBuild = parser\r
+ .parseYangModels(sourcesDirPaths);\r
+\r
+ final SchemaContext context = parser\r
+ .resolveSchemaContext(modulesToBuild);\r
+ final List<Type> types = bindingGenerator.generateTypes(context);\r
+ final Set<GeneratedType> typesToGenerate = new HashSet<GeneratedType>();\r
+ final Set<GeneratedTransferObject> tosToGenerate = new HashSet<GeneratedTransferObject>();\r
+ for (Type type : types) {\r
+ if (type instanceof GeneratedType) {\r
+ typesToGenerate.add((GeneratedType) type);\r
+ }\r
+\r
+ if (type instanceof GeneratedTransferObject) {\r
+ tosToGenerate.add((GeneratedTransferObject) type);\r
+ }\r
+ }\r
+\r
+ final GeneratorJavaFile generator = new GeneratorJavaFile(\r
+ typesToGenerate, tosToGenerate);\r
+ generator.generateToFile(GENERATOR_OUTPUT_PATH);\r
+\r
+ JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();\r
+ StandardJavaFileManager fileManager = compiler.getStandardFileManager(\r
+ null, null, null);\r
+\r
+ List<File> filesList = getJavaFiles(new File(GENERATOR_OUTPUT_PATH));\r
+\r
+ Iterable<? extends JavaFileObject> compilationUnits = fileManager\r
+ .getJavaFileObjectsFromFiles(filesList);\r
+ Iterable<String> options = Arrays.asList(new String[] { "-d",\r
+ COMPILER_OUTPUT_PATH });\r
+ boolean compiled = compiler.getTask(null, null, null, options, null,\r
+ compilationUnits).call();\r
+ assertTrue(compiled);\r
+ }\r
+\r
private GeneratedType createGeneratedType(String pkgName, String name) {\r
GeneratedTypeBuilder builder = new GeneratedTypeBuilderImpl(pkgName,\r
name);\r
}\r
}\r
\r
+ /**\r
+ * Search recursively given directory for *.java files.\r
+ *\r
+ * @param directory\r
+ * directory to search\r
+ * @return List of java files found\r
+ */\r
+ private List<File> getJavaFiles(File directory) {\r
+ List<File> result = new ArrayList<File>();\r
+ for (File file : directory.listFiles()) {\r
+ if (file.isDirectory()) {\r
+ result.addAll(getJavaFiles(file));\r
+ } else {\r
+ String absPath = file.getAbsolutePath();\r
+ if (absPath.endsWith(".java")) {\r
+ result.add(file);\r
+ }\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
}\r