BUG-865: remove String-based getDataChildByName()
[mdsal.git] / binding / mdsal-binding-generator-impl / src / test / java / org / opendaylight / yangtools / sal / binding / yang / types / TypeProviderImplTest.java
index 6e22000f77c0390a3ecdfa4a3ac6c2953598d059..ae7056fef263082b28efad6098872cae2875fcca 100644 (file)
@@ -5,21 +5,21 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.yangtools.sal.binding.yang.types;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.NoSuchElementException;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.ExpectedException;
 import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTypeBuilderImpl;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -40,27 +40,22 @@ import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.type.BaseTypes;
 import org.opendaylight.yangtools.yang.model.util.type.IdentityrefTypeBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.IdentitySchemaNodeBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.LeafSchemaNodeBuilder;
-import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleBuilder;
-import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
-import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
 
 public class TypeProviderImplTest {
 
-    @Rule
-    public ExpectedException expException = ExpectedException.none();
-
     @Test (expected = YangValidationException.class)
     public void testLeafRefRelativeSelfReference() throws Exception {
         File relative = new File(getClass().getResource("/leafref/leafref-relative-invalid.yang").toURI());
 
-        final SchemaContext schemaContext = RetestUtils.parseYangSources(relative);
+        final SchemaContext schemaContext = TestUtils.parseYangSources(relative);
         final Module moduleRelative = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lrr")).iterator().next();
         final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
 
-        DataSchemaNode leafref = ((ListSchemaNode) moduleRelative.getDataChildByName("neighbor")).getDataChildByName("neighbor-id");
+        final QName listNode = QName.create(moduleRelative.getQNameModule(), "neighbor");
+        final QName leafNode = QName.create(moduleRelative.getQNameModule(), "neighbor-id");
+        DataSchemaNode leafref = ((ListSchemaNode) moduleRelative.getDataChildByName(listNode))
+                .getDataChildByName(leafNode);
         LeafSchemaNode leaf = (LeafSchemaNode) leafref;
         TypeDefinition<?> leafType = leaf.getType();
         Type leafrefResolvedType = typeProvider.javaTypeForSchemaDefinitionType(leafType, leaf);
@@ -70,33 +65,39 @@ public class TypeProviderImplTest {
     public void testLeafRefAbsoluteSelfReference() throws Exception {
         File relative = new File(getClass().getResource("/leafref/leafref-absolute-invalid.yang").toURI());
 
-        final SchemaContext schemaContext = RetestUtils.parseYangSources(relative);
+        final SchemaContext schemaContext = TestUtils.parseYangSources(relative);
         final Module moduleRelative = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lra")).iterator().next();
         final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
 
-        DataSchemaNode leafref = ((ListSchemaNode) moduleRelative.getDataChildByName("neighbor")).getDataChildByName("neighbor-id");
+        final QName listNode = QName.create(moduleRelative.getQNameModule(), "neighbor");
+        final QName leafNode = QName.create(moduleRelative.getQNameModule(), "neighbor-id");
+        DataSchemaNode leafref = ((ListSchemaNode) moduleRelative.getDataChildByName(listNode))
+                .getDataChildByName(leafNode);
         LeafSchemaNode leaf = (LeafSchemaNode) leafref;
         TypeDefinition<?> leafType = leaf.getType();
         Type leafrefResolvedType = typeProvider.javaTypeForSchemaDefinitionType(leafType, leaf);
     }
 
     @Test
-    public void testLeafRefRelativeAndAbsoluteValidReference() throws URISyntaxException, SourceException, FileNotFoundException, ReactorException {
+    public void testLeafRefRelativeAndAbsoluteValidReference() throws Exception {
         File valid = new File(getClass().getResource("/leafref/leafref-valid.yang").toURI());
 
-        final SchemaContext schemaContext = RetestUtils.parseYangSources(valid);
+        final SchemaContext schemaContext = TestUtils.parseYangSources(valid);
         final Module moduleValid = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lrv")).iterator().next();
         final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
 
-        DataSchemaNode leafrefRel = ((ListSchemaNode) moduleValid.getDataChildByName("neighbor")).getDataChildByName
-                ("neighbor-id");
+        final QName listNode = QName.create(moduleValid.getQNameModule(), "neighbor");
+        final QName leaf1Node = QName.create(moduleValid.getQNameModule(), "neighbor-id");
+        DataSchemaNode leafrefRel = ((ListSchemaNode) moduleValid.getDataChildByName(listNode))
+                .getDataChildByName(leaf1Node);
         LeafSchemaNode leafRel = (LeafSchemaNode) leafrefRel;
         TypeDefinition<?> leafTypeRel = leafRel.getType();
         Type leafrefRelResolvedType = typeProvider.javaTypeForSchemaDefinitionType(leafTypeRel, leafRel);
         assertNotNull(leafrefRelResolvedType);
 
-        DataSchemaNode leafrefAbs = ((ListSchemaNode) moduleValid.getDataChildByName("neighbor")).getDataChildByName
-                ("neighbor2-id");
+        final QName leaf2Node = QName.create(moduleValid.getQNameModule(), "neighbor2-id");
+        DataSchemaNode leafrefAbs = ((ListSchemaNode) moduleValid.getDataChildByName(listNode))
+                .getDataChildByName(leaf2Node);
         LeafSchemaNode leafAbs = (LeafSchemaNode) leafrefAbs;
         TypeDefinition<?> leafTypeAbs = leafAbs.getType();
         Type leafrefAbsResolvedType = typeProvider.javaTypeForSchemaDefinitionType(leafTypeAbs, leafAbs);
@@ -104,11 +105,10 @@ public class TypeProviderImplTest {
     }
 
     @Test
-    public void testMethodsOfTypeProviderImpl() throws URISyntaxException, SourceException, FileNotFoundException, ReactorException {
-        final File abstractTopology = new File(getClass().getResource("/base-yang-types.yang")
-                .toURI());
+    public void testMethodsOfTypeProviderImpl() throws Exception {
+        final File abstractTopology = new File(getClass().getResource("/base-yang-types.yang").toURI());
 
-        final SchemaContext schemaContext = RetestUtils.parseYangSources(abstractTopology);
+        final SchemaContext schemaContext = TestUtils.parseYangSources(abstractTopology);
 
         final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
 
@@ -116,9 +116,11 @@ public class TypeProviderImplTest {
         final GeneratedTypeBuilderImpl refType = new GeneratedTypeBuilderImpl("org.opendaylight.yangtools.test", "TestType");
         typeProvider.putReferencedType(refTypePath, refType);
         final StringTypeDefinition stringType = BaseTypes.stringType();
-        LeafSchemaNodeBuilder leafSchemaNodeBuilder = new LeafSchemaNodeBuilder("test-module", 111, QName.create("Cont1"), SchemaPath.ROOT);
-        leafSchemaNodeBuilder.setType(stringType);
-        LeafSchemaNode leafSchemaNode = leafSchemaNodeBuilder.build();
+
+        final LeafSchemaNode leafSchemaNode = mock(LeafSchemaNode.class);
+        doReturn(stringType).when(leafSchemaNode).getType();
+        doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
+        doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
 
         // test constructor
         assertNotNull(typeProvider);
@@ -138,56 +140,76 @@ public class TypeProviderImplTest {
 
         // binary type
         final BinaryTypeDefinition binaryType = BaseTypes.binaryType();
-        leafSchemaNodeBuilder = new LeafSchemaNodeBuilder("test-module", 111, QName.create("Cont1"), SchemaPath.ROOT);
-        leafSchemaNodeBuilder.setType(binaryType);
-        leafSchemaNode = leafSchemaNodeBuilder.build();
+
+        reset(leafSchemaNode);
+        doReturn(binaryType).when(leafSchemaNode).getType();
+        doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
+        doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
+
         assertEquals("new byte[] {-45}", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "01"));
 
         // boolean type
         final BooleanTypeDefinition booleanType = BaseTypes.booleanType();
-        leafSchemaNodeBuilder = new LeafSchemaNodeBuilder("test-module", 111, QName.create("Cont1"), SchemaPath.ROOT);
-        leafSchemaNodeBuilder.setType(booleanType);
-        leafSchemaNode = leafSchemaNodeBuilder.build();
+
+        reset(leafSchemaNode);
+        doReturn(booleanType).when(leafSchemaNode).getType();
+        doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
+        doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
+
         assertEquals("new java.lang.Boolean(\"false\")", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "false"));
 
         // decimal type
         final DecimalTypeDefinition decimalType = BaseTypes.decimalTypeBuilder(refTypePath).setFractionDigits(4).build();
-        leafSchemaNodeBuilder = new LeafSchemaNodeBuilder("test-module", 111, QName.create("Cont1"), SchemaPath.ROOT);
-        leafSchemaNodeBuilder.setType(decimalType);
-        leafSchemaNode = leafSchemaNodeBuilder.build();
+
+        reset(leafSchemaNode);
+        doReturn(decimalType).when(leafSchemaNode).getType();
+        doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
+        doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
+
         assertEquals("new java.math.BigDecimal(\"111\")", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "111"));
 
         // empty type
         final EmptyTypeDefinition emptyType = BaseTypes.emptyType();
-        leafSchemaNodeBuilder = new LeafSchemaNodeBuilder("test-module", 111, QName.create("Cont1"), SchemaPath.ROOT);
-        leafSchemaNodeBuilder.setType(emptyType);
-        leafSchemaNode = leafSchemaNodeBuilder.build();
+
+        reset(leafSchemaNode);
+        doReturn(emptyType).when(leafSchemaNode).getType();
+        doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
+        doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
+
         assertEquals("new java.lang.Boolean(\"default value\")", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "default value"));
 
         // enum type
-        expException.expect(NoSuchElementException.class);
         final EnumTypeDefinition enumType =  BaseTypes.enumerationTypeBuilder(refTypePath).build();
-        leafSchemaNodeBuilder = new LeafSchemaNodeBuilder("test-module", 111, QName.create("Cont1"), SchemaPath.ROOT);
-        leafSchemaNodeBuilder.setType(enumType);
-        leafSchemaNode = leafSchemaNodeBuilder.build();
-        assertEquals("\"default value\"", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "default value"));
 
-        // identityref type
-        expException.expect(UnsupportedOperationException.class);
-        expException.expectMessage("Cannot get default construction for identityref type");
+        reset(leafSchemaNode);
+        doReturn(enumType).when(leafSchemaNode).getType();
+        doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
+        doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
 
-        final ModuleBuilder testModBuilder = new ModuleBuilder("test-module", "/test");
-        final IdentitySchemaNodeBuilder identityNodeBuilder = testModBuilder.addIdentity(QName.create("IdentityRefTest"), 111, SchemaPath.ROOT);
-        final IdentitySchemaNode identitySchemaNode = identityNodeBuilder.build();
+        try {
+            assertEquals("\"default value\"", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "default value"));
+            fail("Expected NoSuchElementException");
+        } catch (Exception e) {
+            assertTrue( e instanceof NoSuchElementException);
+        }
 
+        // identityref type
+        final IdentitySchemaNode identitySchemaNode = mock(IdentitySchemaNode.class);
         final IdentityrefTypeBuilder identityRefBuilder = BaseTypes.identityrefTypeBuilder(refTypePath);
         identityRefBuilder.setIdentity(identitySchemaNode);
         final IdentityrefTypeDefinition identityRef =  identityRefBuilder.build();
-        leafSchemaNodeBuilder = new LeafSchemaNodeBuilder("test-module", 111, QName.create("Cont1"), SchemaPath.ROOT);
-        leafSchemaNodeBuilder.setType(identityRef);
 
-        leafSchemaNodeBuilder.setParent(identityNodeBuilder);
-        leafSchemaNode = leafSchemaNodeBuilder.build();
-        assertEquals("\"default value\"", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "default value"));
+        reset(leafSchemaNode);
+        doReturn(identityRef).when(leafSchemaNode).getType();
+        doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
+        doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
+
+        try {
+            assertEquals("\"default value\"", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "default value"));
+            fail("Expected UnsupportedOperationException");
+        } catch (Exception e) {
+            assertTrue(e instanceof UnsupportedOperationException);
+            assertEquals("Cannot get default construction for identityref type", e.getMessage());
+        }
     }
 }