*/
package org.opendaylight.mdsal.binding.yang.unified.doc.generator.maven;
+import static org.hamcrest.CoreMatchers.startsWith;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import java.io.File;
import java.io.FileNotFoundException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
+import javax.tools.Diagnostic;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import org.junit.Test;
import org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl;
import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.common.YangConstants;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
import org.sonatype.plexus.build.incremental.DefaultBuildContext;
Object yangModuleInfo = getInstance.invoke(null);
// Test getImportedModules method
- Method getImportedModules = assertContainsMethod(yangModuleInfoClass, Set.class, "getImportedModules");
+ Method getImportedModules = assertContainsMethod(yangModuleInfoClass, ImmutableSet.class, "getImportedModules");
Object importedModules = getImportedModules.invoke(yangModuleInfo);
assertTrue(importedModules instanceof Set);
for (Object importedModule : (Set<?>) importedModules) {
assertTrue(importedModule instanceof YangModuleInfo);
YangModuleInfo ymi = (YangModuleInfo) importedModule;
- String name = ymi.getName();
+ String name = ymi.getName().getLocalName();
switch (name) {
- case "import-module":
- infoImport = ymi;
- break;
- case "submodule1":
- infoSub1 = ymi;
- break;
- case "submodule2":
- infoSub2 = ymi;
- break;
- case "submodule3":
- infoSub3 = ymi;
+ case "import-module":
+ infoImport = ymi;
+ break;
+ case "submodule1":
+ infoSub1 = ymi;
+ break;
+ case "submodule2":
+ infoSub2 = ymi;
+ break;
+ case "submodule3":
+ infoSub3 = ymi;
+ break;
+ default:
+ // no-op
}
}
assertNotNull(infoImport);
+ assertThat(infoImport.getYangTextCharSource().readFirstLine(), startsWith("module import-module"));
assertNotNull(infoSub1);
+ assertThat(infoSub1.getYangTextCharSource().readFirstLine(), startsWith("submodule submodule1"));
assertNotNull(infoSub2);
+ assertThat(infoSub2.getYangTextCharSource().readFirstLine(), startsWith("submodule submodule2"));
assertNotNull(infoSub3);
+ assertThat(infoSub3.getYangTextCharSource().readFirstLine(), startsWith("submodule submodule3"));
cleanUp(sourcesOutputDir, compiledOutputDir);
}
- private static void generateTestSources(final String resourceDirPath, final File sourcesOutputDir) throws Exception {
+ private static void generateTestSources(final String resourceDirPath, final File sourcesOutputDir)
+ throws Exception {
final List<File> sourceFiles = getSourceFiles(resourceDirPath);
- final SchemaContext context = YangParserTestUtils.parseYangSources(sourceFiles);
+ final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles);
CodeGeneratorImpl codegen = new CodeGeneratorImpl();
codegen.setBuildContext(new DefaultBuildContext());
- codegen.generateSources(context, sourcesOutputDir, context.getModules());
+ codegen.generateSources(context, sourcesOutputDir, Set.copyOf(context.getModules()),
+ (module, representation) -> Optional.of(resourceDirPath + File.separator + module.getName()
+ + YangConstants.RFC6020_YANG_FILE_EXTENSION));
}
@Test
public void generateTestSourcesWithAdditionalConfig() throws Exception {
final List<File> sourceFiles = getSourceFiles("/yang-module-info");
- final SchemaContext context = YangParserTestUtils.parseYangSources(sourceFiles);
+ final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles);
CodeGeneratorImpl codegen = new CodeGeneratorImpl();
codegen.setBuildContext(new DefaultBuildContext());
codegen.setResourceBaseDir(null);
codegen.setMavenProject(new MavenProject());
codegen.setAdditionalConfig(ImmutableMap.of("test", "test"));
- Collection<File> files = codegen.generateSources(context, null, context.getModules());
+ Collection<File> files = codegen.generateSources(context, null, Set.copyOf(context.getModules()),
+ (module, representation) -> Optional.of(module.getName()));
assertFalse(files.isEmpty());
- files.forEach((file -> {
+ files.forEach(file -> {
deleteTestDir(file);
assertFalse(file.exists());
- }));
+ });
}
private static void testCompilation(final File sourcesOutputDir, final File compiledOutputDir) {
List<File> filesList = getJavaFiles(sourcesOutputDir);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(filesList);
Iterable<String> options = Arrays.asList("-d", compiledOutputDir.getAbsolutePath());
- boolean compiled = compiler.getTask(null, null, null, options, null, compilationUnits).call();
- assertTrue(compiled);
+ List<Diagnostic<?>> diags = new ArrayList<>();
+ boolean compiled = compiler.getTask(null, null, diags::add, options, null, compilationUnits).call();
+ if (!compiled) {
+ fail("Compilation failed with " + diags);
+ }
}
private static List<File> getJavaFiles(final File directory) {
if (file.isDirectory()) {
File[] filesToDelete = file.listFiles();
if (filesToDelete != null) {
- for (File f : filesToDelete) {
- deleteTestDir(f);
+ for (File ftd : filesToDelete) {
+ deleteTestDir(ftd);
}
}
}
}
}
- private static Method assertContainsMethod(final Class<?> clazz, final Class<?> returnType, final String name, final Class<?>... args) {
+ private static Method assertContainsMethod(final Class<?> clazz, final Class<?> returnType, final String name,
+ final Class<?>... args) {
try {
- Method m = clazz.getDeclaredMethod(name, args);
- assertEquals(returnType, m.getReturnType());
- return m;
+ Method method = clazz.getDeclaredMethod(name, args);
+ assertEquals(returnType, method.getReturnType());
+ return method;
} catch (NoSuchMethodException e) {
throw new AssertionError("Method " + name + " with args " + Arrays.toString(args)
- + " does not exists in class " + clazz.getSimpleName());
+ + " does not exists in class " + clazz.getSimpleName(), e);
}
}