$YangModuleInfoImpl not generated for only extensions model
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / test / java / org / opendaylight / mdsal / binding / java / api / generator / test / Bug532Test.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.mdsal.binding.java.api.generator.test;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.BASE_PKG;
13 import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.cleanUp;
14 import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.testCompilation;
15
16 import com.google.common.collect.Lists;
17 import java.io.File;
18 import java.lang.reflect.Constructor;
19 import java.net.URL;
20 import java.net.URLClassLoader;
21 import java.util.List;
22 import org.junit.Test;
23 import org.mockito.Mockito;
24
25 /**
26  * Test correct functionality of copy constructor of generated builder classes.
27  */
28 public class Bug532Test extends BaseCompilationTest {
29
30     @Test
31     public void test() throws Exception {
32         final File sourcesOutputDir = CompilationTestUtils.generatorOutput("bug532");
33         final File compiledOutputDir = CompilationTestUtils.compilerOutput("bug532");
34         generateTestSources("/compilation/list-gen-test", sourcesOutputDir);
35
36         // Test if sources are compilable
37         testCompilation(sourcesOutputDir, compiledOutputDir);
38
39         ClassLoader loader = new URLClassLoader(new URL[] { compiledOutputDir.toURI().toURL() });
40         Class<?> linksKeyClass = Class.forName(BASE_PKG + ".urn.opendaylight.test.rev131008.LinksKey", true, loader);
41         Class<?> linksClass = Class.forName(BASE_PKG + ".urn.opendaylight.test.rev131008.Links", true, loader);
42         Class<?> linksBuilderClass = Class.forName(BASE_PKG + ".urn.opendaylight.test.rev131008.LinksBuilder", true,
43                 loader);
44         Class<?> levelClass = Class.forName(BASE_PKG + ".urn.opendaylight.test.rev131008.links.Level", true, loader);
45         Class<?> nodeClass = Class.forName(BASE_PKG + ".urn.opendaylight.test.rev131008.links.Node", true, loader);
46         Class<?> nodeListClass = Class.forName(BASE_PKG + ".urn.opendaylight.test.rev131008.links.NodeList", true,
47                 loader);
48
49         // init default values
50         Byte expectedId = Byte.valueOf("5");
51         String expectedName = "test-link";
52         Integer expectedSize = 10;
53
54
55         Object expectedLevel = Mockito.mock(levelClass);
56         Integer expectedLinksId = 11;
57         Object expectedNode = Mockito.mock(nodeClass);
58         List<?> expectedNodeList = Lists.newArrayList(Mockito.mock(nodeListClass), Mockito.mock(nodeListClass));
59         Constructor<?> keyConstructor = linksKeyClass.getDeclaredConstructor(Byte.class, String.class, Integer.class);
60         Object expectedKey = keyConstructor.newInstance(expectedId, expectedName, expectedSize);
61
62         // create Links object
63         Object linksBuilder = linksBuilderClass.getDeclaredConstructor().newInstance();
64         linksBuilderClass.getDeclaredMethod("withKey", linksKeyClass).invoke(linksBuilder, expectedKey);
65         linksBuilderClass.getDeclaredMethod("setLevel", levelClass).invoke(linksBuilder, expectedLevel);
66         linksBuilderClass.getDeclaredMethod("setLinksId", Integer.class).invoke(linksBuilder, expectedLinksId);
67         linksBuilderClass.getDeclaredMethod("setNode", nodeClass).invoke(linksBuilder, expectedNode);
68         linksBuilderClass.getDeclaredMethod("setNodeList", List.class).invoke(linksBuilder, expectedNodeList);
69         Object links = linksBuilderClass.getDeclaredMethod("build").invoke(linksBuilder);
70
71         // create LinksBuilder object with constructor with Links object
72         // argument
73         Constructor<?> linksBuilderConstructor = linksBuilderClass.getDeclaredConstructor(linksClass);
74         assertNotNull(linksBuilderConstructor);
75         Object linksBuilderTested = linksBuilderConstructor.newInstance(links);
76
77         // get values from LinksBuilder
78         Object actualKey = linksBuilderClass.getDeclaredMethod("key").invoke(linksBuilderTested);
79         Object actualId = linksBuilderClass.getDeclaredMethod("getId").invoke(linksBuilderTested);
80         Object actualName = linksBuilderClass.getDeclaredMethod("getName").invoke(linksBuilderTested);
81         final Object actualSize = linksBuilderClass.getDeclaredMethod("getSize").invoke(linksBuilderTested);
82         final Object actualLevel = linksBuilderClass.getDeclaredMethod("getLevel").invoke(linksBuilderTested);
83         final Object actualLinksId = linksBuilderClass.getDeclaredMethod("getLinksId").invoke(linksBuilderTested);
84         final Object actualNode = linksBuilderClass.getDeclaredMethod("getNode").invoke(linksBuilderTested);
85         final Object actualNodeList = linksBuilderClass.getDeclaredMethod("getNodeList").invoke(linksBuilderTested);
86
87         // test
88         assertEquals(expectedKey, actualKey);
89         assertEquals(expectedId, actualId);
90         assertEquals(expectedName, actualName);
91         assertEquals(expectedSize, actualSize);
92         assertEquals(expectedLevel, actualLevel);
93         assertEquals(expectedLinksId, actualLinksId);
94         assertEquals(expectedNode, actualNode);
95         assertEquals(expectedNodeList, actualNodeList);
96
97         cleanUp(sourcesOutputDir, compiledOutputDir);
98     }
99 }