2 * Copyright (c) 2016 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
9 package org.opendaylight.mdsal.binding.yang.types;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Mockito.doReturn;
16 import java.util.List;
18 import org.junit.Before;
19 import org.junit.Ignore;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.junit.runners.JUnit4;
23 import org.mockito.Mock;
24 import org.mockito.MockitoAnnotations;
25 import org.opendaylight.mdsal.binding.generator.spi.TypeProvider;
26 import org.opendaylight.mdsal.binding.model.api.ConcreteType;
27 import org.opendaylight.mdsal.binding.model.api.Enumeration;
28 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
29 import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
30 import org.opendaylight.mdsal.binding.model.api.Restrictions;
31 import org.opendaylight.mdsal.binding.model.api.Type;
32 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder;
33 import org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil;
34 import org.opendaylight.mdsal.binding.model.util.ReferencedTypeImpl;
35 import org.opendaylight.mdsal.binding.model.util.generated.type.builder.GeneratedTOBuilderImpl;
36 import org.opendaylight.yangtools.yang.common.QName;
37 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
38 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
39 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
40 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
41 import org.opendaylight.yangtools.yang.model.api.Module;
42 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
43 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
44 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
45 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
46 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
47 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
48 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
51 * Test suite for testing public methods in TypeProviderImpl class
53 * @see org.opendaylight.mdsal.binding.yang.types.TypeProviderImpl
55 * @author Lukas Sedlak <lsedlak@cisco.com>
57 @RunWith(JUnit4.class)
58 public class TypeProviderTest {
60 private SchemaContext schemaContext;
61 private Set<Module> schemaModules;
62 private Module testTypeProviderModule;
65 private SchemaPath schemaPath;
68 private SchemaNode schemaNode;
71 public void setUp() throws Exception {
72 MockitoAnnotations.initMocks(this);
73 this.schemaContext = TypeProviderModel.createTestContext();
74 assertNotNull(this.schemaContext);
75 this.schemaModules = this.schemaContext.getModules();
76 assertNotNull(this.schemaModules);
77 this.testTypeProviderModule = resolveModule(TypeProviderModel.TEST_TYPE_PROVIDER_MODULE_NAME);
78 assertNotNull(this.testTypeProviderModule);
81 private Module resolveModule(final String moduleName) {
82 assertNotNull(moduleName);
83 for (final Module m : this.schemaModules) {
84 if (moduleName.equals(m.getName())) {
88 assertTrue("Unable to resolve module " + moduleName + ". No module present within Schema Context!" , false);
92 @Test(expected = IllegalArgumentException.class)
93 public void typeProviderInstanceWithNullSchemaContextTest() {
94 final TypeProvider provider = new TypeProviderImpl(null);
97 @Test(expected = IllegalArgumentException.class)
98 public void putReferencedTypeWithNullSchemaPathParamTest() {
99 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
101 ((TypeProviderImpl) provider).putReferencedType(null, null);
102 ((TypeProviderImpl) provider).putReferencedType(this.schemaPath, null);
105 @Test(expected = IllegalArgumentException.class)
106 public void putReferencedTypeWithNullRefTypeParamTest() {
107 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
109 ((TypeProviderImpl) provider).putReferencedType(this.schemaPath, null);
113 public void getAdditionalTypesTest() {
114 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
116 assertNotNull(((TypeProviderImpl) provider).getAdditionalTypes());
119 @Test(expected = IllegalArgumentException.class)
120 public void javaTypeForSchemaDefinitionTypeNullTypedefTest() {
121 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
123 provider.javaTypeForSchemaDefinitionType(null, null, null);
126 @Test(expected = IllegalArgumentException.class)
127 public void javaTypeForSchemaDefinitionTypeTypedefNullQNameTest() {
128 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
130 final TestIntegerTypeDefinition testTypedef = new TestIntegerTypeDefinition();
131 provider.javaTypeForSchemaDefinitionType(testTypedef, null, null);
134 private static LeafSchemaNode provideLeafNodeFromTopLevelContainer(final Module module, final String containerName, final String leafNodeName) {
135 final QName containerNode = QName.create(module.getQNameModule(), containerName);
136 final DataSchemaNode rootNode = module.getDataChildByName(containerNode);
137 assertNotNull("Container foo is not present in root of module "+ module.getName(), rootNode);
138 assertTrue(rootNode instanceof DataNodeContainer);
140 final QName leafNode = QName.create(module.getQNameModule(), leafNodeName);
141 final DataNodeContainer rootContainer = (DataNodeContainer) rootNode;
142 final DataSchemaNode node = rootContainer.getDataChildByName(leafNode);
144 assertTrue(node instanceof LeafSchemaNode);
145 return (LeafSchemaNode) node;
148 private static LeafListSchemaNode provideLeafListNodeFromTopLevelContainer(final Module module, final String containerName, final String leafListNodeName) {
149 final QName containerNode = QName.create(module.getQNameModule(), containerName);
150 final DataSchemaNode rootNode = module.getDataChildByName(containerNode);
151 assertNotNull("Container foo is not present in root of module " + module.getName(), rootNode);
152 assertTrue(rootNode instanceof DataNodeContainer);
154 final DataNodeContainer rootContainer = (DataNodeContainer) rootNode;
155 final QName leafListNode = QName.create(module.getQNameModule(), leafListNodeName);
156 final DataSchemaNode node = rootContainer.getDataChildByName(leafListNode);
158 assertTrue(node instanceof LeafListSchemaNode);
159 return (LeafListSchemaNode) node;
163 public void javaTypeForSchemaDefinitionExtTypeTest() {
164 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
165 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
167 final TypeDefinition<?> leafType = leaf.getType();
168 final Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
169 assertNotNull(result);
170 assertTrue(result instanceof GeneratedTransferObject);
172 final GeneratedTransferObject genTO = (GeneratedTransferObject) result;
173 assertEquals("base-yang-types", genTO.getModuleName());
174 assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914", genTO.getPackageName());
175 assertEquals("YangInt8", genTO.getName());
176 assertTrue(genTO.getProperties().size() == 1);
180 public void javaTypeForSchemaDefinitionRestrictedExtTypeTest() {
181 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
182 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "restricted-int8-type");
184 final TypeDefinition<?> leafType = leaf.getType();
185 final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(leafType);
187 final Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf, restrictions);
188 assertNotNull(result);
189 assertTrue(result instanceof GeneratedTransferObject);
191 final GeneratedTransferObject genTO = (GeneratedTransferObject) result;
192 assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914", genTO.getPackageName());
193 assertEquals("YangInt8Restricted", genTO.getName());
194 assertTrue(genTO.getProperties().size() == 1);
195 final List<RangeConstraint> rangeConstraints = genTO.getRestrictions().getRangeConstraints();
197 assertTrue(!rangeConstraints.isEmpty());
198 final RangeConstraint constraint = rangeConstraints.get(0);
199 assertEquals(1, constraint.getMin().intValue());
200 assertEquals(100, constraint.getMax().intValue());
204 public void javaTypeForSchemaDefinitionEmptyStringPatternTypeTest() {
205 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
207 final Module testTypeProvider = resolveModule("test-type-provider");
208 final TypeDefinition<?> emptyPatternString = resolveTypeDefinitionFromModule(testTypeProvider, "empty-pattern-string");
210 assertNotNull(emptyPatternString);
211 final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(emptyPatternString);
213 Type result = provider.javaTypeForSchemaDefinitionType(emptyPatternString, emptyPatternString, restrictions);
214 assertNotNull(result);
215 assertTrue(result instanceof GeneratedTransferObject);
217 result = provider.generatedTypeForExtendedDefinitionType(emptyPatternString, emptyPatternString);
218 assertNotNull(result);
219 assertTrue(result instanceof GeneratedTransferObject);
222 private static TypeDefinition<?> resolveTypeDefinitionFromModule(final Module module, final String typedefName) {
223 TypeDefinition<?> result = null;
224 final Set<TypeDefinition<?>> typeDefs = module.getTypeDefinitions();
225 for (final TypeDefinition<?> typedef : typeDefs) {
226 if (typedef.getQName().getLocalName().equals(typedefName)) {
234 * FIXME: Remove @Ignore annotation once the bug https://bugs.opendaylight.org/show_bug.cgi?id=1862 is fixed
238 public void bug1862RestrictedTypedefTransformationTest() {
239 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
240 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "bug-1862-restricted-typedef");
242 final TypeDefinition<?> leafType = leaf.getType();
243 final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(leafType);
244 final Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf, restrictions);
245 assertNotNull(result);
246 assertTrue(result instanceof GeneratedTransferObject);
247 //TODO: complete test after bug 1862 is fixed
251 public void javaTypeForSchemaDefinitionEnumExtTypeTest() {
252 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
253 LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "resolve-enum-leaf");
254 TypeDefinition<?> leafType = leaf.getType();
255 Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
256 assertNotNull(result);
257 assertTrue(result instanceof Enumeration);
259 final Enumeration enumType = (Enumeration) result;
260 final List<Enumeration.Pair> enumValues = enumType.getValues();
261 assertTrue(!enumValues.isEmpty());
262 assertEquals("a", enumValues.get(0).getName());
263 assertEquals("b", enumValues.get(1).getName());
264 assertEquals("A", enumValues.get(0).getMappedName());
265 assertEquals("B", enumValues.get(1).getMappedName());
267 leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "resolve-direct-use-of-enum");
268 leafType = leaf.getType();
269 result = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
270 assertNotNull(result);
271 assertTrue(result instanceof ConcreteType);
273 assertEquals("java.lang", result.getPackageName());
274 assertEquals("Enum", result.getName());
278 public void javaTypeForSchemaDefinitionLeafrefExtTypeTest() {
279 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
280 LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "bar", "leafref-value");
281 TypeDefinition<?> leafType = leaf.getType();
282 final Type leafrefResolvedType1 = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
283 assertNotNull(leafrefResolvedType1);
284 assertTrue(leafrefResolvedType1 instanceof GeneratedTransferObject);
286 final Module module = resolveModule("test-type-provider-b");
287 final QName leafNode = QName.create(module.getQNameModule(), "id");
288 final DataSchemaNode rootNode = module.getDataChildByName(leafNode);
289 assertNotNull("leaf id is not present in root of module "+ module.getName(), rootNode);
290 assertTrue(rootNode instanceof LeafSchemaNode);
291 leaf = (LeafSchemaNode) rootNode;
292 leafType = leaf.getType();
294 final Type leafrefResolvedType2 = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
295 assertNotNull(leafrefResolvedType2);
296 assertTrue(leafrefResolvedType2 instanceof GeneratedTransferObject);
300 public void javaTypeForSchemaDefinitionLeafrefToEnumTypeTest() {
301 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
303 setReferencedTypeForTypeProvider(provider);
305 final Module module = resolveModule("test-type-provider-b");
307 final QName leafNode = QName.create(module.getQNameModule(), "enum");
308 final DataSchemaNode enumNode = module.getDataChildByName(leafNode);
309 assertNotNull("leaf enum is not present in root of module " + module.getName(), enumNode);
310 assertTrue(enumNode instanceof LeafSchemaNode);
311 final LeafSchemaNode leaf = (LeafSchemaNode) enumNode;
312 final TypeDefinition<?> leafType = leaf.getType();
314 final Type leafrefResolvedType1 = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
315 assertNotNull(leafrefResolvedType1);
316 assertTrue(leafrefResolvedType1 instanceof ReferencedTypeImpl);
318 final QName leafListNode = QName.create(module.getQNameModule(), "enums");
319 final DataSchemaNode enumListNode = module.getDataChildByName(leafListNode);
320 assertNotNull("leaf-list enums is not present in root of module "+ module.getName(), enumNode);
321 assertTrue(enumListNode instanceof LeafListSchemaNode);
322 final LeafListSchemaNode leafList = (LeafListSchemaNode) enumListNode;
323 final TypeDefinition<?> leafListType = leafList.getType();
325 final Type leafrefResolvedType2 = provider.javaTypeForSchemaDefinitionType(leafListType, leafList);
326 assertNotNull(leafrefResolvedType2);
327 assertTrue(leafrefResolvedType2 instanceof ParameterizedType);
330 private void setReferencedTypeForTypeProvider(final TypeProvider provider) {
331 final LeafSchemaNode enumLeafNode = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo",
332 "resolve-direct-use-of-enum");
333 final TypeDefinition<?> enumLeafTypedef = enumLeafNode.getType();
334 Type enumType = provider.javaTypeForSchemaDefinitionType(enumLeafTypedef, enumLeafNode);
336 Type refType = new ReferencedTypeImpl(enumType.getPackageName(), enumType.getName());
337 ((TypeProviderImpl) provider).putReferencedType(enumLeafNode.getPath(), refType);
339 final LeafListSchemaNode enumListNode = provideLeafListNodeFromTopLevelContainer(this.testTypeProviderModule, "foo",
341 final TypeDefinition<?> enumLeafListTypedef = enumListNode.getType();
342 enumType = provider.javaTypeForSchemaDefinitionType(enumLeafListTypedef, enumListNode);
344 refType = new ReferencedTypeImpl(enumType.getPackageName(), enumType.getPackageName());
345 ((TypeProviderImpl) provider).putReferencedType(enumListNode.getPath(), refType);
349 public void javaTypeForSchemaDefinitionConditionalLeafrefTest() {
350 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
351 final Module module = resolveModule("test-type-provider-b");
353 final QName leafrefNode = QName.create(module.getQNameModule(), "conditional-leafref");
354 final DataSchemaNode condLeaf = module.getDataChildByName(leafrefNode);
355 assertNotNull("leaf conditional-leafref is not present in root of module "+ module.getName(), condLeaf);
356 assertTrue(condLeaf instanceof LeafSchemaNode);
357 final LeafSchemaNode leaf = (LeafSchemaNode) condLeaf;
358 final TypeDefinition<?> leafType = leaf.getType();
360 final Type resultType = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
361 assertNotNull(resultType);
362 assertTrue(resultType instanceof ConcreteType);
363 assertEquals("java.lang", resultType.getPackageName());
364 assertEquals("Object", resultType.getName());
367 @Test(expected = IllegalArgumentException.class)
368 public void javaTypeForSchemaDefinitionInvalidLeafrefPathTest() {
369 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
370 final Module module = resolveModule("test-type-provider-b");
372 final QName leafrefNode = QName.create(module.getQNameModule(), "unreslovable-leafref");
373 final DataSchemaNode condLeaf = module.getDataChildByName(leafrefNode);
374 assertNotNull("leaf unreslovable-leafref is not present in root of module "+ module.getName(), condLeaf);
375 assertTrue(condLeaf instanceof LeafSchemaNode);
376 final LeafSchemaNode leaf = (LeafSchemaNode) condLeaf;
377 final TypeDefinition<?> leafType = leaf.getType();
379 provider.javaTypeForSchemaDefinitionType(leafType, leaf);
382 @Test(expected = IllegalArgumentException.class)
383 public void provideTypeForLeafrefWithNullLeafrefTypeTest() {
384 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
386 provider.provideTypeForLeafref(null, null);
389 @Test(expected = IllegalArgumentException.class)
390 public void provideTypeForLeafrefWithNullLeafrefTypePathStatementTest() {
391 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
393 final LeafrefTypeWithNullXpath leafrePath = new LeafrefTypeWithNullXpath();
394 provider.provideTypeForLeafref(leafrePath, this.schemaNode);
397 @Test(expected = IllegalStateException.class)
398 public void provideTypeForLeafrefWithNullParentModuleTest() {
399 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
400 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "bar", "leafref-value");
401 final TypeDefinition<?> leafType = leaf.getType();
402 assertTrue(leafType instanceof LeafrefTypeDefinition);
403 doReturn(null).when(this.schemaNode).getPath();
404 provider.provideTypeForLeafref((LeafrefTypeDefinition) leafType, this.schemaNode);
408 public void javaTypeForSchemaDefinitionIdentityrefExtTypeTest() {
409 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
410 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "crypto");
411 final TypeDefinition<?> leafType = leaf.getType();
413 final Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
414 assertNotNull(result);
415 assertTrue(result instanceof ParameterizedType);
419 public void javaTypeForSchemaDefinitionForExtUnionWithSimpleTypesTest() {
420 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
421 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "use-of-unions", "simple-int-types-union");
422 final TypeDefinition<?> leafType = leaf.getType();
424 final Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
425 assertNotNull(result);
426 assertTrue(result instanceof GeneratedTransferObject);
427 assertEquals("YangUnion", result.getName());
428 //TODO: write additional asserts to compare whole GeneratedTrasnferObject against yang union definition
432 public void javaTypeForSchemaDefinitionForExtComplexUnionWithInnerUnionTypesTest() {
433 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
434 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "use-of-unions", "complex-union");
435 final TypeDefinition<?> leafType = leaf.getType();
437 final Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
438 assertNotNull(result);
439 assertTrue(result instanceof GeneratedTransferObject);
440 assertEquals("ComplexUnion", result.getName());
441 //TODO: write additional asserts to compare whole GeneratedTrasnferObject against yang union definition
445 public void javaTypeForSchemaDefinitionForExtUnionWithInnerUnionAndSimpleTypeTest() {
446 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
447 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "use-of-unions", "complex-string-int-union");
448 final TypeDefinition<?> leafType = leaf.getType();
450 final Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
451 assertNotNull(result);
452 assertTrue(result instanceof GeneratedTransferObject);
453 assertEquals("ComplexStringIntUnion", result.getName());
454 //TODO: write additional asserts to compare whole GeneratedTrasnferObject against yang union definition
458 public void provideGeneratedTOBuilderForUnionTypeDefWithInnerUnionTypesTest() {
459 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
461 final Module testTypeProvider = resolveModule("test-type-provider");
462 final TypeDefinition<?> unionTypeDef = resolveTypeDefinitionFromModule(testTypeProvider, "complex-union");
464 assertNotNull(unionTypeDef);
465 assertTrue(unionTypeDef.getBaseType() instanceof UnionTypeDefinition);
466 GeneratedTOBuilder unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name",
467 (UnionTypeDefinition)unionTypeDef.getBaseType(), "ComplexUnionType", unionTypeDef);
469 assertNotNull(unionTypeBuilder);
471 GeneratedTransferObject unionType = unionTypeBuilder.toInstance();
472 assertEquals("ComplexUnionType", unionType.getName());
474 unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name",
475 (UnionTypeDefinition)unionTypeDef.getBaseType(), "", unionTypeDef);
477 assertNotNull(unionTypeBuilder);
479 unionType = unionTypeBuilder.toInstance();
480 assertEquals("Union", unionType.getName());
482 unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name",
483 (UnionTypeDefinition)unionTypeDef.getBaseType(), null, unionTypeDef);
485 assertNotNull(unionTypeBuilder);
487 unionType = unionTypeBuilder.toInstance();
488 assertEquals("Union", unionType.getName());
492 public void provideGeneratedTOBuilderForUnionTypeDefWithInnerUnionAndSimpleTypeTest() {
493 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
495 final Module testTypeProvider = resolveModule("test-type-provider");
496 final TypeDefinition<?> unionTypeDef = resolveTypeDefinitionFromModule(testTypeProvider, "complex-string-int-union");
498 assertNotNull(unionTypeDef);
499 assertTrue(unionTypeDef.getBaseType() instanceof UnionTypeDefinition);
500 final GeneratedTOBuilder unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name",
501 (UnionTypeDefinition)unionTypeDef.getBaseType(), "ComplexStringIntUnionType", unionTypeDef);
503 assertNotNull(unionTypeBuilder);
505 final GeneratedTransferObject unionType = unionTypeBuilder.toInstance();
506 assertEquals("ComplexStringIntUnionType", unionType.getName());
510 public void generatedTypeForExtendedDefinitionTypeTest() {
511 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
513 final Module baseYangTypes = resolveModule("base-yang-types");
514 final Set<TypeDefinition<?>> typeDefs = baseYangTypes.getTypeDefinitions();
516 Type yangBoolean = null;
517 Type yangEmpty = null;
518 Type yangEnumeration = null;
519 Type yangInt8 = null;
520 Type yangInt8Restricted = null;
521 Type yangInt16 = null;
522 Type yangInt32 = null;
523 Type yangInt64 = null;
524 Type yangString = null;
525 Type yangDecimal = null;
526 Type yangUint8 = null;
527 Type yangUint16 = null;
528 Type yangUint32 = null;
529 Type yangUint64 = null;
530 Type yangUnion = null;
531 Type yangBinary = null;
532 Type yangBits = null;
533 Type yangInstanceIdentifier = null;
535 for (final TypeDefinition<?> typedef : typeDefs) {
536 final Type type = provider.generatedTypeForExtendedDefinitionType(typedef, typedef);
537 if (type instanceof GeneratedTransferObject) {
538 if (type.getName().equals("YangBoolean")) {
540 } else if (type.getName().equals("YangEmpty")) {
542 } else if (type.getName().equals("YangInt8")) {
544 } else if (type.getName().equals("YangInt8Restricted")) {
545 yangInt8Restricted = type;
546 } else if (type.getName().equals("YangInt16")) {
548 } else if (type.getName().equals("YangInt32")) {
550 } else if (type.getName().equals("YangInt64")) {
552 } else if (type.getName().equals("YangString")) {
554 } else if (type.getName().equals("YangDecimal64")) {
556 } else if (type.getName().equals("YangUint8")) {
558 } else if (type.getName().equals("YangUint16")) {
560 } else if (type.getName().equals("YangUint32")) {
562 } else if (type.getName().equals("YangUint64")) {
564 } else if (type.getName().equals("YangUnion")) {
566 } else if (type.getName().equals("YangBinary")) {
568 } else if (type.getName().equals("YangInstanceIdentifier")) {
569 yangInstanceIdentifier = type;
570 } else if (type.getName().equals("YangBits")) {
573 } else if (type instanceof Enumeration) {
574 if (type.getName().equals("YangEnumeration")) {
575 yangEnumeration = type;
580 assertNotNull(yangBoolean);
581 assertNotNull(yangEmpty);
582 assertNotNull(yangEnumeration);
583 assertNotNull(yangInt8);
584 assertNotNull(yangInt8Restricted);
585 assertNotNull(yangInt16);
586 assertNotNull(yangInt32);
587 assertNotNull(yangInt64);
588 assertNotNull(yangString);
589 assertNotNull(yangDecimal);
590 assertNotNull(yangUint8);
591 assertNotNull(yangUint16);
592 assertNotNull(yangUint32);
593 assertNotNull(yangUint64);
594 assertNotNull(yangUnion);
595 assertNotNull(yangBinary);
596 assertNotNull(yangBits);
597 assertNotNull(yangInstanceIdentifier);
600 @Test(expected = IllegalArgumentException.class)
601 public void generatedTypeForExtendedDefinitionTypeWithTypedefNullTest() {
602 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
603 provider.generatedTypeForExtendedDefinitionType(null, null);
606 @Test(expected = IllegalArgumentException.class)
607 public void generatedTypeForExtendedDefinitionTypeWithTypedefQNameNullTest() {
608 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
609 final TestIntegerTypeDefinition testInt = new TestIntegerTypeDefinition();
610 provider.generatedTypeForExtendedDefinitionType(testInt, testInt);
614 public void generatedTypeForExtendedDefinitionTypeWithInnerExtendedTypeTest() {
615 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
617 final Module baseYangTypes = resolveModule("test-type-provider");
618 final TypeDefinition<?> extYangInt8Typedef = resolveTypeDefinitionFromModule(baseYangTypes, "extended-yang-int8");
619 assertNotNull(extYangInt8Typedef);
620 final Type extType = provider.generatedTypeForExtendedDefinitionType(extYangInt8Typedef, extYangInt8Typedef);
621 assertNotNull(extType);
622 assertTrue(extType instanceof GeneratedTransferObject);
626 public void generatedTypeForExtendedDefinitionTypeWithLeafrefBaseTypeTest() {
627 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
629 final Module baseYangTypes = resolveModule("test-type-provider");
630 final TypeDefinition<?> barItemLeafrefId = resolveTypeDefinitionFromModule(baseYangTypes, "bar-item-leafref-id");
631 assertNotNull(barItemLeafrefId);
632 final Type extType = provider.generatedTypeForExtendedDefinitionType(barItemLeafrefId, barItemLeafrefId);
633 assertEquals(null, extType);
637 public void generatedTypeForExtendedDefinitionTypeWithIdentityrefBaseTypeTest() {
638 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
640 final Module baseYangTypes = resolveModule("test-type-provider");
642 final TypeDefinition<?> aesIdentityrefType = resolveTypeDefinitionFromModule(baseYangTypes, "aes-identityref-type");
644 assertNotNull(aesIdentityrefType);
645 final Type extType = provider.generatedTypeForExtendedDefinitionType(aesIdentityrefType, aesIdentityrefType);
646 assertEquals(null, extType);
649 @Test(expected = IllegalArgumentException.class)
650 public void provideGeneratedTOBuilderForBitsTypeDefinitionWithNullTypedefTest() {
651 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
652 provider.provideGeneratedTOBuilderForBitsTypeDefinition("", null, "", "");
655 @Test(expected = IllegalArgumentException.class)
656 public void provideGeneratedTOBuilderForBitsTypeDefinitionWithBasePackageNullTest() {
657 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
658 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
659 final TypeDefinition<?> leafType = leaf.getType();
660 provider.provideGeneratedTOBuilderForBitsTypeDefinition(null, leafType, "", "");
664 public void provideGeneratedTOBuilderForBitsTypeDefinitionWithNonBitsTypedefTest() {
665 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
667 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
668 final TypeDefinition<?> leafType = leaf.getType();
669 final Type type = provider.provideGeneratedTOBuilderForBitsTypeDefinition("", leafType, "", "");
671 assertEquals(null, type);
675 public void getConstructorPropertyNameTest() {
676 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
678 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
679 final TypeDefinition<?> leafType = leaf.getType();
681 final String ctorPropertyName = provider.getConstructorPropertyName(leafType);
682 assertEquals("value", ctorPropertyName);
684 final String emptyStringName = provider.getConstructorPropertyName(leaf);
685 assertTrue(emptyStringName.isEmpty());
689 public void getParamNameFromTypeTest() {
690 final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
692 final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
693 final TypeDefinition<?> leafType = leaf.getType();
695 final String paramName = provider.getParamNameFromType(leafType);
696 assertEquals("yangInt8", paramName);
700 public void addUnitsToGenTOTest() {
701 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
703 final GeneratedTOBuilder builder = new GeneratedTOBuilderImpl("test.package", "TestBuilder");
705 TypeProviderImpl.addUnitsToGenTO(builder, null);
706 GeneratedTransferObject genTO = builder.toInstance();
707 assertTrue(genTO.getConstantDefinitions().isEmpty());
709 TypeProviderImpl.addUnitsToGenTO(builder, "");
710 genTO = builder.toInstance();
711 assertTrue(genTO.getConstantDefinitions().isEmpty());
713 TypeProviderImpl.addUnitsToGenTO(builder, "125");
714 genTO = builder.toInstance();
715 assertTrue(!genTO.getConstantDefinitions().isEmpty());
716 assertEquals(1, genTO.getConstantDefinitions().size());
717 assertEquals("_UNITS", genTO.getConstantDefinitions().get(0).getName());
718 assertEquals(genTO.getConstantDefinitions().get(0).getValue(), "\"125\"");
721 @Test(expected = NullPointerException.class)
722 public void getTypeDefaultConstructionLeafTypeNullTest() {
723 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
724 final TestLeafSchemaNode leafSchemaNode = new TestLeafSchemaNode();
725 provider.getTypeDefaultConstruction(leafSchemaNode, null);
728 @Test(expected = NullPointerException.class)
729 public void getTypeDefaultConstructionDefaultValueNullTest() {
730 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
731 final LeafSchemaNode leaf = provideLeafForGetDefaultConstructionTestCase("yang-boolean");
732 provider.getTypeDefaultConstruction(leaf, null);
735 private LeafSchemaNode provideLeafForGetDefaultConstructionTestCase(final String leafName) {
736 return provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "construction-type-test",
740 @Test(expected = UnsupportedOperationException.class)
741 public void getTypeDefaultConstructionDefaultValueForInstanceIdentifierTest() {
742 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
743 final LeafSchemaNode leaf = provideLeafForGetDefaultConstructionTestCase("foo-container-id");
744 provider.getTypeDefaultConstruction(leaf, "NAN");
747 @Test(expected = UnsupportedOperationException.class)
748 public void getTypeDefaultConstructionDefaultValueForIdentityrefTest() {
749 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
750 final LeafSchemaNode leaf = provideLeafForGetDefaultConstructionTestCase("aes-identityref-type");
751 provider.getTypeDefaultConstruction(leaf, "NAN");
755 public void getTypeDefaultConstructionDefaultValueTest() {
756 final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
758 LeafSchemaNode leaf = provideLeafForGetDefaultConstructionTestCase("yang-boolean");
759 String result = provider.getTypeDefaultConstruction(leaf, "true");
760 assertNotNull(result);
761 assertTrue(!result.isEmpty());
762 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangBoolean(java.lang.Boolean.TRUE)",
765 leaf = provideLeafForGetDefaultConstructionTestCase("yang-empty");
766 result = provider.getTypeDefaultConstruction(leaf, "true");
767 assertNotNull(result);
768 assertTrue(!result.isEmpty());
769 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangEmpty(java.lang.Boolean.TRUE)",
772 leaf = provideLeafForGetDefaultConstructionTestCase("yang-enumeration");
773 result = provider.getTypeDefaultConstruction(leaf, "a");
774 assertNotNull(result);
775 assertTrue(!result.isEmpty());
776 assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangEnumeration.A",
779 leaf = provideLeafForGetDefaultConstructionTestCase("direct-use-of-enum");
780 result = provider.getTypeDefaultConstruction(leaf, "y");
781 assertNotNull(result);
782 assertTrue(!result.isEmpty());
783 assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.model.rev140912.construction.type.test.DirectUseOfEnum.Y",
786 leaf = provideLeafForGetDefaultConstructionTestCase("yang-int8");
787 result = provider.getTypeDefaultConstruction(leaf, "17");
788 assertNotNull(result);
789 assertTrue(!result.isEmpty());
790 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt8(java.lang.Byte.valueOf(\"17\"))",
793 leaf = provideLeafForGetDefaultConstructionTestCase("yang-int8-restricted");
794 result = provider.getTypeDefaultConstruction(leaf, "99");
795 assertNotNull(result);
796 assertTrue(!result.isEmpty());
797 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt8Restricted(java.lang.Byte.valueOf(\"99\"))",
800 leaf = provideLeafForGetDefaultConstructionTestCase("yang-int16");
801 result = provider.getTypeDefaultConstruction(leaf, "1024");
802 assertNotNull(result);
803 assertTrue(!result.isEmpty());
804 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt16(java.lang.Short.valueOf(\"1024\"))",
807 leaf = provideLeafForGetDefaultConstructionTestCase("yang-int32");
808 result = provider.getTypeDefaultConstruction(leaf, "1048576");
809 assertNotNull(result);
810 assertTrue(!result.isEmpty());
811 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt32(java.lang.Integer.valueOf(\"1048576\"))",
814 leaf = provideLeafForGetDefaultConstructionTestCase("yang-int64");
815 result = provider.getTypeDefaultConstruction(leaf, "1099511627776");
816 assertNotNull(result);
817 assertTrue(!result.isEmpty());
818 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt64(java.lang.Long.valueOf(\"1099511627776\"))",
821 leaf = provideLeafForGetDefaultConstructionTestCase("yang-string");
822 result = provider.getTypeDefaultConstruction(leaf, "TEST");
823 assertNotNull(result);
824 assertTrue(!result.isEmpty());
825 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangString(\"TEST\")",
828 leaf = provideLeafForGetDefaultConstructionTestCase("yang-decimal64");
829 result = provider.getTypeDefaultConstruction(leaf, "1274.25");
830 assertNotNull(result);
831 assertTrue(!result.isEmpty());
832 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangDecimal64(new java.math.BigDecimal(\"1274.25\"))",
835 leaf = provideLeafForGetDefaultConstructionTestCase("yang-uint8");
836 result = provider.getTypeDefaultConstruction(leaf, "128");
837 assertNotNull(result);
838 assertTrue(!result.isEmpty());
839 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangUint8(java.lang.Short.valueOf(\"128\"))",
842 leaf = provideLeafForGetDefaultConstructionTestCase("yang-uint16");
843 result = provider.getTypeDefaultConstruction(leaf, "1048576");
844 assertNotNull(result);
845 assertTrue(!result.isEmpty());
846 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangUint16(java.lang.Integer.valueOf(\"1048576\"))",
849 leaf = provideLeafForGetDefaultConstructionTestCase("yang-uint32");
850 result = provider.getTypeDefaultConstruction(leaf, "1099511627776");
851 assertNotNull(result);
852 assertTrue(!result.isEmpty());
853 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangUint32(java.lang.Long.valueOf(\"1099511627776\"))",
856 leaf = provideLeafForGetDefaultConstructionTestCase("yang-uint64");
857 result = provider.getTypeDefaultConstruction(leaf, "1208925819614629174706176");
858 assertNotNull(result);
859 assertTrue(!result.isEmpty());
860 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangUint64(new java.math.BigInteger(\"1208925819614629174706176\"))",
863 //FIXME: Is this correct scenario and correct result?
864 leaf = provideLeafForGetDefaultConstructionTestCase("complex-union");
865 result = provider.getTypeDefaultConstruction(leaf, "75");
866 assertNotNull(result);
867 assertTrue(!result.isEmpty());
868 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.model.rev140912.ComplexUnion(\"null\".toCharArray())",
871 //FIXME: Is this correct scenario and correct result?
872 leaf = provideLeafForGetDefaultConstructionTestCase("complex-string-int-union");
873 result = provider.getTypeDefaultConstruction(leaf, "TEST_UNION_STRING_DEFAULT");
874 assertNotNull(result);
875 assertTrue(!result.isEmpty());
876 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.model.rev140912.ComplexStringIntUnion(\"null\".toCharArray())",
879 leaf = provideLeafForGetDefaultConstructionTestCase("simple-int-types-union");
880 result = provider.getTypeDefaultConstruction(leaf, "2048");
881 assertNotNull(result);
882 assertTrue(!result.isEmpty());
883 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangUnion(\"null\".toCharArray())",
887 leaf = provideLeafForGetDefaultConstructionTestCase("direct-union-leaf");
888 result = provider.getTypeDefaultConstruction(leaf);
889 assertNotNull(result);
890 assertTrue(!result.isEmpty());
891 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.model.rev140912.DirectUnionLeaf(\"128\".toCharArray())",
894 final Module module = resolveModule("test-type-provider");
895 final QName leafUnionNode = QName.create(module.getQNameModule(), "root-union-leaf");
896 DataSchemaNode rootNode = module.getDataChildByName(leafUnionNode);
897 assertNotNull("leaf root-union-leaf is not present in root of module "+ module.getName(), rootNode);
898 assertTrue(rootNode instanceof LeafSchemaNode);
899 leaf = (LeafSchemaNode) rootNode;
900 result = provider.getTypeDefaultConstruction(leaf);
901 assertNotNull(result);
902 assertTrue(!result.isEmpty());
903 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.model.rev140912.TestTypeProviderData.RootUnionLeaf(\"256\".toCharArray())",
906 leaf = provideLeafForGetDefaultConstructionTestCase("yang-binary");
907 result = provider.getTypeDefaultConstruction(leaf, "0xffffff");
908 assertNotNull(result);
909 assertTrue(!result.isEmpty());
910 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangBinary(new byte[] {-45, 23, -33, 125, -9, -33})",
913 final QName leafBitsNode = QName.create(module.getQNameModule(), "root-bits-leaf");
914 rootNode = module.getDataChildByName(leafBitsNode);
915 assertNotNull("leaf bits-leaf is not present in root of module "+ module.getName(), rootNode);
916 assertTrue(rootNode instanceof LeafSchemaNode);
917 leaf = (LeafSchemaNode) rootNode;
918 result = provider.getTypeDefaultConstruction(leaf);
919 assertNotNull(result);
920 assertTrue(!result.isEmpty());
921 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.model.rev140912.TestTypeProviderData.RootBitsLeaf(false, true, false)",
924 leaf = provideLeafForGetDefaultConstructionTestCase("yang-bits");
925 result = provider.getTypeDefaultConstruction(leaf, "10-Mb-only");
926 assertNotNull(result);
927 assertTrue(!result.isEmpty());
928 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangBits(true, false, false)",
931 leaf = provideLeafForGetDefaultConstructionTestCase("bar-id");
932 result = provider.getTypeDefaultConstruction(leaf, "128");
933 assertNotNull(result);
934 assertTrue(!result.isEmpty());
935 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt16(java.lang.Short.valueOf(\"128\"))",
938 leaf = provideLeafForGetDefaultConstructionTestCase("foo-leafref-value");
939 result = provider.getTypeDefaultConstruction(leaf, "32");
940 assertNotNull(result);
941 assertTrue(!result.isEmpty());
942 assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt8(java.lang.Byte.valueOf(\"32\"))",
945 leaf = provideLeafForGetDefaultConstructionTestCase("foo-cond-bar-item");
946 result = provider.getTypeDefaultConstruction(leaf, "10");
947 assertNotNull(result);
948 assertTrue(!result.isEmpty());
949 assertEquals("new java.lang.Object()",