Do not use ListenerRegistration
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / test / java / org / opendaylight / mdsal / binding / java / api / generator / CascadeUsesCompilationTest.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;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.BASE_PKG;
15 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_BAR;
16 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_BAZ;
17 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_FOO;
18 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_SVC_BAR;
19 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_SVC_BAZ;
20 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_SVC_FOO;
21 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.assertFilesCount;
22 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.assertImplementsIfc;
23 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.cleanUp;
24 import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.testCompilation;
25
26 import java.io.File;
27 import java.lang.reflect.Constructor;
28 import java.lang.reflect.Method;
29 import java.net.URL;
30 import java.net.URLClassLoader;
31 import org.junit.Test;
32
33 public class CascadeUsesCompilationTest extends BaseCompilationTest {
34
35     @Test
36     public void testCascadeUsesCompilation() throws Exception {
37         final File sourcesOutputDir = CompilationTestUtils.generatorOutput("cascade-uses");
38         final File compiledOutputDir = CompilationTestUtils.compilerOutput("cascade-uses");
39         generateTestSources("/compilation/cascade-uses", sourcesOutputDir);
40
41         // Test if all sources are generated from module foo
42         File parent = new File(sourcesOutputDir, NS_FOO);
43         assertTrue(new File(parent, "FooData.java").exists());
44         assertTrue(new File(parent, "FooGr1.java").exists());
45         assertTrue(new File(parent, "Nodes.java").exists());
46         assertTrue(new File(parent, "NodesBuilder.java").exists());
47         assertFilesCount(parent, 5);
48         File svcParent = new File(sourcesOutputDir, NS_SVC_FOO);
49         assertFilesCount(svcParent, 1);
50
51         // Test if all sources are generated from module bar
52         parent = new File(sourcesOutputDir, NS_BAR);
53         assertTrue(new File(parent, "BarData.java").exists());
54         assertTrue(new File(parent, "BarGr1.java").exists());
55         assertTrue(new File(parent, "BarGr2.java").exists());
56         assertFilesCount(parent, 3);
57         svcParent = new File(sourcesOutputDir, NS_SVC_BAR);
58         assertFilesCount(svcParent, 1);
59
60         // Test if all sources are generated from module baz
61         parent = new File(sourcesOutputDir, NS_BAZ);
62         assertTrue(new File(parent, "BazData.java").exists());
63         assertTrue(new File(parent, "BazGr1.java").exists());
64         assertFilesCount(parent, 2);
65         svcParent = new File(sourcesOutputDir, NS_SVC_BAZ);
66         assertFilesCount(svcParent, 1);
67
68         // Test if sources are compilable
69         testCompilation(sourcesOutputDir, compiledOutputDir);
70
71         final var loader = new URLClassLoader(new URL[] { compiledOutputDir.toURI().toURL() });
72         final var nodesClass = Class.forName(BASE_PKG + ".urn.opendaylight.foo.rev131008.Nodes", true, loader);
73         final var nodesBuilderClass = Class.forName(BASE_PKG + ".urn.opendaylight.foo.rev131008.NodesBuilder", true,
74                 loader);
75         final var fooGr1Class = Class.forName(BASE_PKG + ".urn.opendaylight.foo.rev131008.FooGr1", true, loader);
76         final var barGr2Class = Class.forName(BASE_PKG + ".urn.opendaylight.bar.rev131008.BarGr2", true, loader);
77         final var barGr1Class = Class.forName(BASE_PKG + ".urn.opendaylight.bar.rev131008.BarGr1", true, loader);
78         final var bazGr1Class = Class.forName(BASE_PKG + ".urn.opendaylight.baz.rev131008.BazGr1", true, loader);
79
80         // test generated interface from 'container nodes'
81         assertImplementsIfc(nodesClass, fooGr1Class);
82         assertImplementsIfc(nodesClass, barGr2Class);
83
84         // test generated builder for 'container nodes'
85         assertFalse(nodesBuilderClass.isInterface());
86         Constructor<?>[] nodesBuilderConstructors = nodesBuilderClass.getConstructors();
87         assertEquals(6, nodesBuilderConstructors.length);
88
89         // test generation of builder constructors from uses in 'container nodes'
90         Constructor<?> defaultConstructor = null;
91         Constructor<?> usesFooGr1 = null;
92         Constructor<?> usesBarGr2 = null;
93         Constructor<?> usesBarGr1 = null;
94         Constructor<?> usesBazGr1 = null;
95         for (Constructor<?> c : nodesBuilderConstructors) {
96             Class<?>[] params = c.getParameterTypes();
97             if (params.length == 0) {
98                 defaultConstructor = c;
99             } else {
100                 assertEquals(1, params.length);
101                 if (params[0].equals(fooGr1Class)) {
102                     usesFooGr1 = c;
103                 } else if (params[0].equals(barGr2Class)) {
104                     usesBarGr2 = c;
105                 } else if (params[0].equals(barGr1Class)) {
106                     usesBarGr1 = c;
107                 } else if (params[0].equals(bazGr1Class)) {
108                     usesBazGr1 = c;
109                 }
110             }
111         }
112         assertNotNull(defaultConstructor);
113         assertNotNull(usesFooGr1);
114         assertNotNull(usesBarGr2);
115         assertNotNull(usesBarGr1);
116         assertNotNull(usesBazGr1);
117
118         Method fieldsFromMethod = null;
119         for (Method m : nodesBuilderClass.getDeclaredMethods()) {
120             String methodName = m.getName();
121             if ("fieldsFrom".equals(methodName)) {
122                 fieldsFromMethod = m;
123             }
124         }
125         assertNotNull(fieldsFromMethod);
126         assertEquals(1, fieldsFromMethod.getParameterCount());
127
128         cleanUp(sourcesOutputDir, compiledOutputDir);
129     }
130
131 }