049f8d98a130a6897ebd00c9fe568daa9d96edb4
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-impl / src / test / java / org / opendaylight / controller / sal / binding / yang / types / test / GeneratedTypesTest.java
1 /*
2  * Copyright (c) 2013 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.controller.sal.binding.yang.types.test;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.util.List;
16
17 import org.antlr.v4.runtime.ANTLRInputStream;
18 import org.antlr.v4.runtime.CommonTokenStream;
19 import org.antlr.v4.runtime.tree.ParseTree;
20 import org.antlr.v4.runtime.tree.ParseTreeWalker;
21 import org.junit.Test;
22 import org.opendaylight.controller.antlrv4.code.gen.YangLexer;
23 import org.opendaylight.controller.antlrv4.code.gen.YangParser;
24 import org.opendaylight.controller.model.parser.builder.ModuleBuilder;
25 import org.opendaylight.controller.model.parser.impl.YangModelParserImpl;
26 import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator;
27 import org.opendaylight.controller.sal.binding.generator.impl.BindingGeneratorImpl;
28 import org.opendaylight.controller.sal.binding.model.api.GeneratedType;
29 import org.opendaylight.controller.sal.binding.model.api.MethodSignature;
30 import org.opendaylight.controller.yang.model.api.Module;
31
32 public class GeneratedTypesTest {
33
34     private Module resolveModuleFromFile(final String filePath) {
35         try {
36             final InputStream inStream = getClass().getResourceAsStream(
37                     filePath);
38             if (inStream != null) {
39                 ANTLRInputStream input = new ANTLRInputStream(inStream);
40                 final YangLexer lexer = new YangLexer(input);
41                 final CommonTokenStream tokens = new CommonTokenStream(lexer);
42                 final YangParser parser = new YangParser(tokens);
43
44                 final ParseTree tree = parser.yang();
45                 final ParseTreeWalker walker = new ParseTreeWalker();
46
47                 final YangModelParserImpl modelParser = new YangModelParserImpl();
48                 walker.walk(modelParser, tree);
49
50                 final ModuleBuilder genModule = modelParser.getModuleBuilder();
51                 final Module module = genModule.build();
52
53                 return module;
54             }
55         } catch (IOException e) {
56             e.printStackTrace();
57         }
58         return null;
59     }
60
61     @Test
62     public void testContainerResolving() {
63         final Module module = resolveModuleFromFile("/simple-container-demo.yang");
64         assertTrue(module != null);
65
66         final BindingGenerator bindingGen = new BindingGeneratorImpl();
67         final List<GeneratedType> genTypes = bindingGen.generateTypes(module);
68
69         assertTrue(genTypes != null);
70         assertEquals(genTypes.size(), 2);
71
72         final GeneratedType simpleContainer = genTypes.get(0);
73         final GeneratedType nestedContainer = genTypes.get(1);
74
75         assertEquals(simpleContainer.getName(), "SimpleContainer");
76         assertEquals(nestedContainer.getName(), "NestedContainer");
77
78         assertEquals(simpleContainer.getMethodDefinitions().size(), 4);
79         assertEquals(nestedContainer.getMethodDefinitions().size(), 4);
80
81         int methodsCount = 0;
82         for (final MethodSignature method : simpleContainer
83                 .getMethodDefinitions()) {
84             if (method.getName().equals("getFoo")) {
85                 method.getReturnType().getName().equals("Integer");
86                 methodsCount++;
87             }
88
89             if (method.getName().equals("setFoo")) {
90                 methodsCount++;
91                 final MethodSignature.Parameter param = method.getParameters()
92                         .get(0);
93                 assertEquals(param.getName(), "foo");
94                 assertEquals(param.getType().getName(), "Integer");
95             }
96
97             if (method.getName().equals("getBar")) {
98                 method.getReturnType().getName().equals("String");
99                 methodsCount++;
100             }
101
102             if (method.getName().equals("getNestedContainer")) {
103                 method.getReturnType().getName().equals("NestedContainer");
104                 methodsCount++;
105             }
106         }
107         assertEquals(methodsCount, 4);
108
109         methodsCount = 0;
110         for (final MethodSignature method : nestedContainer
111                 .getMethodDefinitions()) {
112             if (method.getName().equals("getFoo")) {
113                 method.getReturnType().getName().equals("Short");
114                 methodsCount++;
115             }
116
117             if (method.getName().equals("setFoo")) {
118                 methodsCount++;
119                 final MethodSignature.Parameter param = method.getParameters()
120                         .get(0);
121                 assertEquals(param.getName(), "foo");
122                 assertEquals(param.getType().getName(), "Short");
123             }
124
125             if (method.getName().equals("getBar")) {
126                 method.getReturnType().getName().equals("String");
127                 methodsCount++;
128             }
129
130             if (method.getName().equals("setBar")) {
131                 method.getReturnType().getName().equals("String");
132                 methodsCount++;
133             }
134         }
135         assertEquals(methodsCount, 4);
136     }
137
138     @Test
139     public void testLeafListResolving() {
140         final Module module = resolveModuleFromFile("/simple-leaf-list-demo.yang");
141         assertTrue(module != null);
142
143         final BindingGenerator bindingGen = new BindingGeneratorImpl();
144         final List<GeneratedType> genTypes = bindingGen.generateTypes(module);
145
146         assertTrue(genTypes != null);
147         assertEquals(genTypes.size(), 2);
148
149         final GeneratedType simpleContainer = genTypes.get(0);
150         final GeneratedType nestedContainer = genTypes.get(1);
151
152         assertEquals(simpleContainer.getName(), "SimpleContainer");
153         assertEquals(nestedContainer.getName(), "NestedContainer");
154
155         // FIXME: uncomment after fix in DOM tree parser - LeafSchemaNode bad
156         // isConfig resolving
157         assertEquals(simpleContainer.getMethodDefinitions().size(), 4);
158         assertEquals(nestedContainer.getMethodDefinitions().size(), 3);
159
160         int methodsCount = 0;
161         for (final MethodSignature method : simpleContainer
162                 .getMethodDefinitions()) {
163             if (method.getName().equals("getFoo")) {
164                 method.getReturnType().getName().equals("List");
165                 methodsCount++;
166             }
167
168             if (method.getName().equals("setFoo")) {
169                 methodsCount++;
170                 final MethodSignature.Parameter param = method.getParameters()
171                         .get(0);
172                 assertEquals(param.getName(), "foo");
173                 assertEquals(param.getType().getName(), "List");
174             }
175
176             if (method.getName().equals("getBar")) {
177                 method.getReturnType().getName().equals("String");
178                 methodsCount++;
179             }
180
181             if (method.getName().equals("getNestedContainer")) {
182                 method.getReturnType().getName().equals("NestedContainer");
183                 methodsCount++;
184             }
185         }
186         assertEquals(methodsCount, 4);
187
188         methodsCount = 0;
189         for (final MethodSignature method : nestedContainer
190                 .getMethodDefinitions()) {
191             if (method.getName().equals("getFoo")) {
192                 method.getReturnType().getName().equals("Short");
193                 methodsCount++;
194             }
195
196             if (method.getName().equals("setFoo")) {
197                 methodsCount++;
198                 final MethodSignature.Parameter param = method.getParameters()
199                         .get(0);
200                 assertEquals(param.getName(), "foo");
201                 assertEquals(param.getType().getName(), "Short");
202             }
203
204             if (method.getName().equals("getBar")) {
205                 method.getReturnType().getName().equals("List");
206                 methodsCount++;
207             }
208         }
209         assertEquals(methodsCount, 3);
210     }
211
212     @Test
213     public void testListResolving() {
214         final Module module = resolveModuleFromFile("/simple-list-demo.yang");
215         assertTrue(module != null);
216
217         final BindingGenerator bindingGen = new BindingGeneratorImpl();
218         final List<GeneratedType> genTypes = bindingGen.generateTypes(module);
219
220         assertTrue(genTypes != null);
221         assertEquals(genTypes.size(), 3);
222     }
223
224     @Test
225     public void testGeneratedTypes() {
226         final Module module = resolveModuleFromFile("/demo-topology.yang");
227         assertTrue(module != null);
228
229         final BindingGenerator bindingGen = new BindingGeneratorImpl();
230         final List<GeneratedType> genTypes = bindingGen.generateTypes(module);
231
232         assertTrue(genTypes != null);
233         assertEquals(genTypes.size(), 10);
234     }
235 }