2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.BASE_PKG;
14 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.COMPILER_OUTPUT_PATH;
15 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.FS;
16 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.GENERATOR_OUTPUT_PATH;
17 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.cleanUp;
18 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.getSourceFiles;
19 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.testCompilation;
20 import com.google.common.collect.ImmutableSet;
21 import com.google.common.collect.Lists;
23 import java.lang.reflect.Constructor;
25 import java.net.URLClassLoader;
26 import java.util.List;
27 import org.junit.Test;
28 import org.mockito.Mockito;
29 import org.opendaylight.yangtools.sal.binding.model.api.Type;
30 import org.opendaylight.yangtools.sal.java.api.generator.GeneratorJavaFile;
31 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
34 * Test correct functionality of copy constructor of generated builder classes.
36 public class Bug532Test extends BaseCompilationTest {
39 public void test() throws Exception {
40 final File sourcesOutputDir = new File(GENERATOR_OUTPUT_PATH + FS + "bug532");
41 assertTrue("Failed to create test file '" + sourcesOutputDir + "'", sourcesOutputDir.mkdir());
42 final File compiledOutputDir = new File(COMPILER_OUTPUT_PATH + FS + "bug532");
43 assertTrue("Failed to create test file '" + compiledOutputDir + "'", compiledOutputDir.mkdir());
45 generateTestSources("/compilation/list-gen-retest", sourcesOutputDir);
47 // Test if sources are compilable
48 testCompilation(sourcesOutputDir, compiledOutputDir);
50 ClassLoader loader = new URLClassLoader(new URL[] { compiledOutputDir.toURI().toURL() });
51 Class<?> linksKeyClass = Class.forName(BASE_PKG + ".urn.opendaylight.retest.rev131008.LinksKey", true, loader);
52 Class<?> linksClass = Class.forName(BASE_PKG + ".urn.opendaylight.retest.rev131008.Links", true, loader);
53 Class<?> linksBuilderClass = Class.forName(BASE_PKG + ".urn.opendaylight.retest.rev131008.LinksBuilder", true,
55 Class<?> levelClass = Class.forName(BASE_PKG + ".urn.opendaylight.retest.rev131008.links.Level", true, loader);
56 Class<?> nodeClass = Class.forName(BASE_PKG + ".urn.opendaylight.retest.rev131008.links.Node", true, loader);
57 Class<?> nodeListClass = Class.forName(BASE_PKG + ".urn.opendaylight.retest.rev131008.links.NodeList", true,
60 // init default values
61 Byte expectedId = Byte.valueOf("5");
62 String expectedName = "test-link";
63 Integer expectedSize = Integer.valueOf(10);
66 Object expectedLevel = Mockito.mock(levelClass);
67 Integer expectedLinksId = Integer.valueOf(11);
68 Object expectedNode = Mockito.mock(nodeClass);
69 List<?> expectedNodeList = Lists.newArrayList(Mockito.mock(nodeListClass), Mockito.mock(nodeListClass));
70 Constructor<?> keyConstructor = linksKeyClass.getDeclaredConstructor(Byte.class, String.class, Integer.class);
71 Object expectedKey = keyConstructor.newInstance(expectedId, expectedName, expectedSize);
73 // create Links object
74 Object linksBuilder = linksBuilderClass.newInstance();
75 linksBuilderClass.getDeclaredMethod("setKey", linksKeyClass).invoke(linksBuilder, expectedKey);
76 linksBuilderClass.getDeclaredMethod("setLevel", levelClass).invoke(linksBuilder, expectedLevel);
77 linksBuilderClass.getDeclaredMethod("setLinksId", Integer.class).invoke(linksBuilder, expectedLinksId);
78 linksBuilderClass.getDeclaredMethod("setNode", nodeClass).invoke(linksBuilder, expectedNode);
79 linksBuilderClass.getDeclaredMethod("setNodeList", List.class).invoke(linksBuilder, expectedNodeList);
80 Object links = linksBuilderClass.getDeclaredMethod("build").invoke(linksBuilder);
82 // create LinksBuilder object with constructor with Links object
84 Constructor<?> linksBuilderConstructor = linksBuilderClass.getDeclaredConstructor(linksClass);
85 assertNotNull(linksBuilderConstructor);
86 Object linksBuilderTested = linksBuilderConstructor.newInstance(links);
88 // get values from LinksBuilder
89 Object actualKey = linksBuilderClass.getDeclaredMethod("getKey").invoke(linksBuilderTested);
90 Object actualId = linksBuilderClass.getDeclaredMethod("getId").invoke(linksBuilderTested);
91 Object actualName = linksBuilderClass.getDeclaredMethod("getName").invoke(linksBuilderTested);
92 Object actualSize = linksBuilderClass.getDeclaredMethod("getSize").invoke(linksBuilderTested);
93 Object actualLevel = linksBuilderClass.getDeclaredMethod("getLevel").invoke(linksBuilderTested);
94 Object actualLinksId = linksBuilderClass.getDeclaredMethod("getLinksId").invoke(linksBuilderTested);
95 Object actualNode = linksBuilderClass.getDeclaredMethod("getNode").invoke(linksBuilderTested);
96 Object actualNodeList = linksBuilderClass.getDeclaredMethod("getNodeList").invoke(linksBuilderTested);
99 assertEquals(expectedKey, actualKey);
100 assertEquals(expectedId, actualId);
101 assertEquals(expectedName, actualName);
102 assertEquals(expectedSize, actualSize);
103 assertEquals(expectedLevel, actualLevel);
104 assertEquals(expectedLinksId, actualLinksId);
105 assertEquals(expectedNode, actualNode);
106 assertEquals(expectedNodeList, actualNodeList);
108 cleanUp(sourcesOutputDir, compiledOutputDir);
111 private void generateTestSources(final String resourceDirPath, final File sourcesOutputDir) throws Exception {
112 final List<File> sourceFiles = getSourceFiles(resourceDirPath);
113 final SchemaContext context = RetestUtils.parseYangSources(sourceFiles);
114 final List<Type> types = bindingGenerator.generateTypes(context);
115 final GeneratorJavaFile generator = new GeneratorJavaFile(ImmutableSet.copyOf(types));
116 generator.generateToFile(sourcesOutputDir);