Fixed implementation of TypeProviderImpl for Leafref resolving.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-impl / src / test / java / org / opendaylight / controller / sal / binding / yang / types / test / GeneratedTypesTest.java
index 4480f253167364cbdab7f4cb801a3e552f464db9..425c23246d98a5e4e90ed708e8eeca6187d78860 100644 (file)
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.sal.binding.yang.types.test;\r
-\r
-import static org.junit.Assert.*;\r
-\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import org.junit.Ignore;\r
-import org.junit.Test;\r
-import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator;\r
-import org.opendaylight.controller.sal.binding.generator.impl.BindingGeneratorImpl;\r
-import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;\r
-import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;\r
-import org.opendaylight.controller.sal.binding.model.api.GeneratedType;\r
-import org.opendaylight.controller.sal.binding.model.api.MethodSignature;\r
-import org.opendaylight.controller.sal.binding.model.api.Type;\r
-import org.opendaylight.controller.yang.model.api.Module;\r
-import org.opendaylight.controller.yang.model.api.SchemaContext;\r
-import org.opendaylight.controller.yang.model.parser.api.YangModelParser;\r
-import org.opendaylight.controller.yang.model.parser.impl.YangModelParserImpl;\r
-\r
-public class GeneratedTypesTest {\r
-\r
-    private SchemaContext resolveSchemaContextFromFiles(\r
-            final String... yangFiles) {\r
-        final YangModelParser parser = new YangModelParserImpl();\r
-        final Set<Module> modules = parser.parseYangModels(yangFiles);\r
-\r
-        return parser.resolveSchemaContext(modules);\r
-    }\r
-\r
-    @Test\r
-    public void testMultipleModulesResolving() {\r
-        final String topologyPath = getClass().getResource(\r
-                "/abstract-topology.yang").getPath();\r
-        final String typesPath = getClass().getResource(\r
-                "/ietf-inet-types@2010-09-24.yang").getPath();\r
-        final SchemaContext context = resolveSchemaContextFromFiles(\r
-                topologyPath, typesPath);\r
-        assertTrue(context != null);\r
-\r
-        final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
-        final List<Type> genTypes = bindingGen.generateTypes(context);\r
-\r
-        assertTrue(genTypes != null);\r
-        assertEquals(11, genTypes.size());\r
-    }\r
-\r
-    @Ignore\r
-    @Test\r
-    public void testLeafrefResolving() {\r
-        final String topologyPath = getClass().getResource(\r
-                "/leafref-test-models/abstract-topology@2013-02-08.yang")\r
-                .getPath();\r
-        final String interfacesPath = getClass().getResource(\r
-                "/leafref-test-models/ietf-interfaces@2012-11-15.yang")\r
-                .getPath();\r
-//        final String ifTypePath = getClass().getResource(\r
-//                "/leafref-test-models/iana-if-type@2012-06-05.yang").getPath();\r
-        final String inetTypesPath = getClass().getResource(\r
-                "/leafref-test-models/ietf-inet-types@2010-09-24.yang")\r
-                .getPath();\r
-        final String yangTypesPath = getClass().getResource(\r
-                "/leafref-test-models/ietf-yang-types@2010-09-24.yang")\r
-                .getPath();\r
-\r
-        assertTrue(topologyPath != null);\r
-        assertTrue(interfacesPath != null);\r
-//        assertTrue(ifTypePath != null);\r
-        assertTrue(inetTypesPath != null);\r
-        assertTrue(yangTypesPath != null);\r
-\r
-//        final SchemaContext context = resolveSchemaContextFromFiles(\r
-//                topologyPath, interfacesPath, ifTypePath, inetTypesPath, yangTypesPath);\r
-        final SchemaContext context = resolveSchemaContextFromFiles(\r
-                topologyPath, interfacesPath, inetTypesPath, yangTypesPath);\r
-        assertTrue(context != null);\r
-        assertEquals(4, context.getModules().size());\r
-\r
-        final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
-        final List<Type> genTypes = bindingGen.generateTypes(context);\r
-\r
-        assertEquals(21, genTypes.size());\r
-        assertTrue(genTypes != null);\r
-\r
-        for (final Type genType : genTypes) {\r
-            if (genType.getName().equals("Interface") && genType instanceof GeneratedType) {\r
-//                System.out.println(((GeneratedType)genType).getMethodDefinitions().toString());\r
-            } else if (genType.getName().equals("NetworkLink") && genType instanceof GeneratedType) {\r
-//                System.out.println(((GeneratedType)genType).getMethodDefinitions().toString());\r
-            }\r
-        }\r
-    }\r
-\r
-    @Test\r
-    public void testContainerResolving() {\r
-        final String filePath = getClass().getResource(\r
-                "/simple-container-demo.yang").getPath();\r
-        final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
-        assertTrue(context != null);\r
-\r
-        final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
-        final List<Type> genTypes = bindingGen.generateTypes(context);\r
-\r
-        assertTrue(genTypes != null);\r
-        assertEquals(2, genTypes.size());\r
-\r
-        final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);\r
-        final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);\r
-\r
-        assertEquals("SimpleContainer", simpleContainer.getName());\r
-        assertEquals("NestedContainer", nestedContainer.getName());\r
-        assertEquals(4, simpleContainer.getMethodDefinitions().size());\r
-        assertEquals(4, nestedContainer.getMethodDefinitions().size());\r
-\r
-        int methodsCount = 0;\r
-        for (final MethodSignature method : simpleContainer\r
-                .getMethodDefinitions()) {\r
-            if (method.getName().equals("getFoo")) {\r
-                method.getReturnType().getName().equals("Integer");\r
-                methodsCount++;\r
-            }\r
-\r
-            if (method.getName().equals("setFoo")) {\r
-                methodsCount++;\r
-                final MethodSignature.Parameter param = method.getParameters()\r
-                        .get(0);\r
-                assertEquals("foo", param.getName());\r
-                assertEquals("Integer", param.getType().getName());\r
-            }\r
-\r
-            if (method.getName().equals("getBar")) {\r
-                method.getReturnType().getName().equals("String");\r
-                methodsCount++;\r
-            }\r
-\r
-            if (method.getName().equals("getNestedContainer")) {\r
-                method.getReturnType().getName().equals("NestedContainer");\r
-                methodsCount++;\r
-            }\r
-        }\r
-        assertEquals(4, methodsCount);\r
-\r
-        methodsCount = 0;\r
-        for (final MethodSignature method : nestedContainer\r
-                .getMethodDefinitions()) {\r
-            if (method.getName().equals("getFoo")) {\r
-                method.getReturnType().getName().equals("Short");\r
-                methodsCount++;\r
-            }\r
-\r
-            if (method.getName().equals("setFoo")) {\r
-                methodsCount++;\r
-                final MethodSignature.Parameter param = method.getParameters()\r
-                        .get(0);\r
-                assertEquals("foo", param.getName());\r
-                assertEquals("Short", param.getType().getName());\r
-            }\r
-\r
-            if (method.getName().equals("getBar")) {\r
-                method.getReturnType().getName().equals("String");\r
-                methodsCount++;\r
-            }\r
-\r
-            if (method.getName().equals("setBar")) {\r
-                method.getReturnType().getName().equals("String");\r
-                methodsCount++;\r
-            }\r
-        }\r
-        assertEquals(4, methodsCount);\r
-    }\r
-\r
-    @Test\r
-    public void testLeafListResolving() {\r
-        final String filePath = getClass().getResource(\r
-                "/simple-leaf-list-demo.yang").getPath();\r
-        final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
-        assertTrue(context != null);\r
-\r
-        final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
-        final List<Type> genTypes = bindingGen.generateTypes(context);\r
-\r
-        assertTrue(genTypes != null);\r
-        assertEquals(2, genTypes.size());\r
-\r
-        final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);\r
-        final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);\r
-\r
-        assertEquals("SimpleContainer", simpleContainer.getName());\r
-        assertEquals("NestedContainer", nestedContainer.getName());\r
-        assertEquals(4, simpleContainer.getMethodDefinitions().size());\r
-        assertEquals(3, nestedContainer.getMethodDefinitions().size());\r
-\r
-        int methodsCount = 0;\r
-        for (final MethodSignature method : simpleContainer\r
-                .getMethodDefinitions()) {\r
-            if (method.getName().equals("getFoo")) {\r
-                method.getReturnType().getName().equals("List");\r
-                methodsCount++;\r
-            }\r
-\r
-            if (method.getName().equals("setFoo")) {\r
-                methodsCount++;\r
-                final MethodSignature.Parameter param = method.getParameters()\r
-                        .get(0);\r
-                assertEquals("foo", param.getName());\r
-                assertEquals("List", param.getType().getName());\r
-            }\r
-\r
-            if (method.getName().equals("getBar")) {\r
-                method.getReturnType().getName().equals("String");\r
-                methodsCount++;\r
-            }\r
-\r
-            if (method.getName().equals("getNestedContainer")) {\r
-                method.getReturnType().getName().equals("NestedContainer");\r
-                methodsCount++;\r
-            }\r
-        }\r
-        assertEquals(4, methodsCount);\r
-\r
-        methodsCount = 0;\r
-        for (final MethodSignature method : nestedContainer\r
-                .getMethodDefinitions()) {\r
-            if (method.getName().equals("getFoo")) {\r
-                method.getReturnType().getName().equals("Short");\r
-                methodsCount++;\r
-            }\r
-\r
-            if (method.getName().equals("setFoo")) {\r
-                methodsCount++;\r
-                final MethodSignature.Parameter param = method.getParameters()\r
-                        .get(0);\r
-                assertEquals("foo", param.getName());\r
-                assertEquals("Short", param.getType().getName());\r
-            }\r
-\r
-            if (method.getName().equals("getBar")) {\r
-                method.getReturnType().getName().equals("List");\r
-                methodsCount++;\r
-            }\r
-        }\r
-        assertEquals(3, methodsCount);\r
-    }\r
-\r
-    @Test\r
-    public void testListResolving() {\r
-        final String filePath = getClass()\r
-                .getResource("/simple-list-demo.yang").getPath();\r
-        final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
-        assertTrue(context != null);\r
-\r
-        final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
-        final List<Type> genTypes = bindingGen.generateTypes(context);\r
-\r
-        assertTrue(genTypes != null);\r
-        assertEquals(4, genTypes.size());\r
-\r
-        int genTypesCount = 0;\r
-        int genTOsCount = 0;\r
-        for (final Type type : genTypes) {\r
-            if (type instanceof GeneratedType) {\r
-                final GeneratedType genType = (GeneratedType) type;\r
-                if (genType.getName().equals("ListParentContainer")) {\r
-                    assertEquals(2, genType.getMethodDefinitions().size());\r
-                    genTypesCount++;\r
-                } else if (genType.getName().equals("SimpleList")) {\r
-                    assertEquals(7, genType.getMethodDefinitions().size());\r
-                    final List<MethodSignature> methods = genType\r
-                            .getMethodDefinitions();\r
-                    int methodsCount = 0;\r
-                    for (final MethodSignature method : methods) {\r
-                        if (method.getName().equals("getSimpleListKey")) {\r
-                            assertEquals("SimpleListKey", method\r
-                                    .getReturnType().getName());\r
-                            methodsCount++;\r
-                        } else if (method.getName().equals(\r
-                                "getListChildContainer")) {\r
-                            assertEquals("ListChildContainer", method\r
-                                    .getReturnType().getName());\r
-                            methodsCount++;\r
-                        } else if (method.getName().equals("getFoo")) {\r
-                            methodsCount++;\r
-                        } else if (method.getName().equals("setFoo")) {\r
-                            methodsCount++;\r
-                        } else if (method.getName().equals("getSimpleLeafList")) {\r
-                            methodsCount++;\r
-                        } else if (method.getName().equals("setSimpleLeafList")) {\r
-                            methodsCount++;\r
-                        } else if (method.getName().equals("getBar")) {\r
-                            methodsCount++;\r
-                        }\r
-                    }\r
-                    assertEquals(7, methodsCount);\r
-                    genTypesCount++;\r
-                } else if (genType.getName().equals("ListChildContainer")) {\r
-                    assertEquals(2, genType.getMethodDefinitions().size());\r
-                    genTypesCount++;\r
-                }\r
-            } else if (type instanceof GeneratedTransferObject) {\r
-                genTOsCount++;\r
-                final GeneratedTransferObject genTO = (GeneratedTransferObject) type;\r
-                final List<GeneratedProperty> properties = genTO\r
-                        .getProperties();\r
-                final List<GeneratedProperty> hashProps = genTO\r
-                        .getHashCodeIdentifiers();\r
-                final List<GeneratedProperty> equalProps = genTO\r
-                        .getEqualsIdentifiers();\r
-\r
-                assertEquals(1, properties.size());\r
-                assertEquals("ListKey", properties.get(0).getName());\r
-                assertEquals("Byte", properties.get(0).getReturnType()\r
-                        .getName());\r
-                assertEquals(true, properties.get(0).isReadOnly());\r
-                assertEquals(1, hashProps.size());\r
-                assertEquals("ListKey", hashProps.get(0).getName());\r
-                assertEquals("Byte", hashProps.get(0).getReturnType().getName());\r
-                assertEquals(1, equalProps.size());\r
-                assertEquals("ListKey", equalProps.get(0).getName());\r
-                assertEquals("Byte", equalProps.get(0).getReturnType()\r
-                        .getName());\r
-            }\r
-        }\r
-        assertEquals(3, genTypesCount);\r
-        assertEquals(1, genTOsCount);\r
-    }\r
-\r
-    @Test\r
-    public void testListCompositeKeyResolving() {\r
-        final String filePath = getClass().getResource(\r
-                "/list-composite-key.yang").getPath();\r
-        final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
-\r
-        assertTrue(context != null);\r
-\r
-        final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
-        final List<Type> genTypes = bindingGen.generateTypes(context);\r
-\r
-        assertTrue(genTypes != null);\r
-        assertEquals(6, genTypes.size());\r
-\r
-        int genTypesCount = 0;\r
-        int genTOsCount = 0;\r
-        for (final Type type : genTypes) {\r
-            if (type instanceof GeneratedType) {\r
-                genTypesCount++;\r
-            } else if (type instanceof GeneratedTransferObject) {\r
-                final GeneratedTransferObject genTO = (GeneratedTransferObject) type;\r
-\r
-                if (genTO.getName().equals("CompositeKeyListKey")) {\r
-                    final List<GeneratedProperty> properties = genTO\r
-                            .getProperties();\r
-                    int propertyCount = 0;\r
-                    for (final GeneratedProperty prop : properties) {\r
-                        if (prop.getName().equals("Key1")) {\r
-                            propertyCount++;\r
-                        } else if (prop.getName().equals("Key2")) {\r
-                            propertyCount++;\r
-                        }\r
-                    }\r
-                    assertEquals(2, propertyCount);\r
-                    genTOsCount++;\r
-                } else if (genTO.getName().equals("InnerListKey")) {\r
-                    final List<GeneratedProperty> properties = genTO\r
-                            .getProperties();\r
-                    assertEquals(1, properties.size());\r
-                    genTOsCount++;\r
-                }\r
-            }\r
-        }\r
-\r
-        assertEquals(4, genTypesCount);\r
-        assertEquals(2, genTOsCount);\r
-    }\r
-\r
-    @Test\r
-    public void testGeneratedTypes() {\r
-        final String filePath = getClass().getResource("/demo-topology.yang")\r
-                .getPath();\r
-        final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
-        assertTrue(context != null);\r
-\r
-        final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
-        final List<Type> genTypes = bindingGen.generateTypes(context);\r
-\r
-        assertTrue(genTypes != null);\r
-        assertEquals(13, genTypes.size());\r
-\r
-        int genTypesCount = 0;\r
-        int genTOsCount = 0;\r
-        for (final Type type : genTypes) {\r
-            if (type instanceof GeneratedType) {\r
-                genTypesCount++;\r
-            } else if (type instanceof GeneratedTransferObject) {\r
-                genTOsCount++;\r
-            }\r
-        }\r
-\r
-        assertEquals(10, genTypesCount);\r
-        assertEquals(3, genTOsCount);\r
-    }\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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.controller.sal.binding.yang.types.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+import java.util.Set;
+
+import org.junit.Test;
+import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator;
+import org.opendaylight.controller.sal.binding.generator.impl.BindingGeneratorImpl;
+import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;
+import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
+import org.opendaylight.controller.sal.binding.model.api.GeneratedType;
+import org.opendaylight.controller.sal.binding.model.api.MethodSignature;
+import org.opendaylight.controller.sal.binding.model.api.Type;
+import org.opendaylight.controller.yang.model.api.Module;
+import org.opendaylight.controller.yang.model.api.SchemaContext;
+import org.opendaylight.controller.yang.model.parser.api.YangModelParser;
+import org.opendaylight.controller.yang.model.parser.impl.YangModelParserImpl;
+
+public class GeneratedTypesTest {
+
+    private SchemaContext resolveSchemaContextFromFiles(
+            final String... yangFiles) {
+        final YangModelParser parser = new YangModelParserImpl();
+        final Set<Module> modules = parser.parseYangModels(yangFiles);
+
+        return parser.resolveSchemaContext(modules);
+    }
+
+    @Test
+    public void testMultipleModulesResolving() {
+        final String topologyPath = getClass().getResource(
+                "/abstract-topology.yang").getPath();
+        final String typesPath = getClass().getResource(
+                "/ietf-inet-types@2010-09-24.yang").getPath();
+        final SchemaContext context = resolveSchemaContextFromFiles(
+                topologyPath, typesPath);
+        assertTrue(context != null);
+
+        final BindingGenerator bindingGen = new BindingGeneratorImpl();
+        final List<Type> genTypes = bindingGen.generateTypes(context);
+
+        assertTrue(genTypes != null);
+        assertEquals(11, genTypes.size());
+    }
+
+    @Test
+    public void testLeafrefResolving() {
+        final String topologyPath = getClass().getResource(
+                "/leafref-test-models/abstract-topology@2013-02-08.yang")
+                .getPath();
+        final String interfacesPath = getClass().getResource(
+                "/leafref-test-models/ietf-interfaces@2012-11-15.yang")
+                .getPath();
+        // final String ifTypePath = getClass().getResource(
+        // "/leafref-test-models/iana-if-type@2012-06-05.yang").getPath();
+        final String inetTypesPath = getClass().getResource(
+                "/leafref-test-models/ietf-inet-types@2010-09-24.yang")
+                .getPath();
+        final String yangTypesPath = getClass().getResource(
+                "/leafref-test-models/ietf-yang-types@2010-09-24.yang")
+                .getPath();
+
+        assertTrue(topologyPath != null);
+        assertTrue(interfacesPath != null);
+        // assertTrue(ifTypePath != null);
+        assertTrue(inetTypesPath != null);
+        assertTrue(yangTypesPath != null);
+
+        // final SchemaContext context = resolveSchemaContextFromFiles(
+        // topologyPath, interfacesPath, ifTypePath, inetTypesPath,
+        // yangTypesPath);
+        final SchemaContext context = resolveSchemaContextFromFiles(
+                topologyPath, interfacesPath, inetTypesPath, yangTypesPath);
+        assertTrue(context != null);
+        assertEquals(4, context.getModules().size());
+
+        final BindingGenerator bindingGen = new BindingGeneratorImpl();
+        final List<Type> genTypes = bindingGen.generateTypes(context);
+
+        assertEquals(21, genTypes.size());
+        assertTrue(genTypes != null);
+        
+        int resolvedLeafrefCount = 0;
+        for (final Type type : genTypes) {
+            if (type.getName().equals("InterfaceKey")
+                    && type instanceof GeneratedTransferObject) {
+                final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
+                final List<GeneratedProperty> properties = genTO
+                        .getProperties();
+                
+                assertTrue(properties != null);
+                for (final GeneratedProperty property : properties) {
+                    if (property.getName().equals("InterfaceId")) {
+                        assertTrue(property.getReturnType() != null);
+                        assertFalse(property.getReturnType().equals(
+                                "java.lang.Void"));
+                        assertTrue(property.getReturnType().getName()
+                                .equals("String"));
+                        resolvedLeafrefCount++;
+                    }
+                }
+
+            } else if (type.getName().equals("Interface")
+                    && type instanceof GeneratedType) {
+                final GeneratedType genType = (GeneratedType) type;
+                final List<MethodSignature> methods = genType
+                        .getMethodDefinitions();
+
+                assertTrue(methods != null);
+                for (final MethodSignature method : methods) {
+                    if (method.getName().equals("getInterfaceKey")) {
+                        assertTrue(method.getReturnType() != null);
+                        assertFalse(method.getReturnType().equals(
+                                "java.lang.Void"));
+                        assertTrue(method.getReturnType().getName()
+                                .equals("InterfaceKey"));
+                        resolvedLeafrefCount++;
+                    } else if (method.getName().equals("getHigherLayerIf")) {
+                        assertTrue(method.getReturnType() != null);
+                        assertFalse(method.getReturnType().equals(
+                                "java.lang.Void"));
+                        assertTrue(method.getReturnType().getName()
+                                .equals("List"));
+                        resolvedLeafrefCount++;
+                    }
+                }
+            } else if (type.getName().equals("NetworkLink")
+                    && type instanceof GeneratedType) {
+                final GeneratedType genType = (GeneratedType) type;
+                final List<MethodSignature> methods = genType
+                        .getMethodDefinitions();
+                assertTrue(methods != null);
+                for (MethodSignature method : methods) {
+                    if (method.getName().equals("getInterface")) {
+                        assertTrue(method.getReturnType() != null);
+                        assertFalse(method.getReturnType().equals(
+                                "java.lang.Void"));
+                        assertTrue(method.getReturnType().getName()
+                                .equals("String"));
+                        resolvedLeafrefCount++;
+                    }
+                }
+            } else if ((type.getName().equals("SourceNode") || type.getName()
+                    .equals("DestinationNode"))
+                    && type instanceof GeneratedType) {
+                final GeneratedType genType = (GeneratedType) type;
+                final List<MethodSignature> methods = genType
+                        .getMethodDefinitions();
+                assertTrue(methods != null);
+                for (MethodSignature method : methods) {
+                    if (method.getName().equals("getId")) {
+                        assertTrue(method.getReturnType() != null);
+                        assertFalse(method.getReturnType().equals(
+                                "java.lang.Void"));
+                        assertTrue(method.getReturnType().getName()
+                                .equals("String"));
+                        resolvedLeafrefCount++;
+                    }
+                }
+            } else if (type.getName().equals("Tunnel")
+                    && type instanceof GeneratedType) {
+                final GeneratedType genType = (GeneratedType) type;
+                final List<MethodSignature> methods = genType
+                        .getMethodDefinitions();
+                assertTrue(methods != null);
+                for (MethodSignature method : methods) {
+                    if (method.getName().equals("getTunnelKey")) {
+                        assertTrue(method.getReturnType() != null);
+                        assertFalse(method.getReturnType().equals(
+                                "java.lang.Void"));
+                        assertTrue(method.getReturnType().getName()
+                                .equals("TunnelKey"));
+                        resolvedLeafrefCount++;
+                    }
+                }
+            } else if (type.getName().equals("TunnelKey")
+                    && type instanceof GeneratedTransferObject) {
+                final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
+                final List<GeneratedProperty> properties = genTO
+                        .getProperties();
+
+                assertTrue(properties != null);
+                for (final GeneratedProperty property : properties) {
+                    if (property.getName().equals("TunnelId")) {
+                        assertTrue(property.getReturnType() != null);
+                        assertFalse(property.getReturnType().equals(
+                                "java.lang.Void"));
+                        assertTrue(property.getReturnType().getName()
+                                .equals("String"));
+                        resolvedLeafrefCount++;
+                    }
+                }
+            }
+        }
+        assertEquals(10, resolvedLeafrefCount);
+    }
+
+    @Test
+    public void testContainerResolving() {
+        final String filePath = getClass().getResource(
+                "/simple-container-demo.yang").getPath();
+        final SchemaContext context = resolveSchemaContextFromFiles(filePath);
+        assertTrue(context != null);
+
+        final BindingGenerator bindingGen = new BindingGeneratorImpl();
+        final List<Type> genTypes = bindingGen.generateTypes(context);
+
+        assertTrue(genTypes != null);
+        assertEquals(2, genTypes.size());
+
+        final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);
+        final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);
+
+        assertEquals("SimpleContainer", simpleContainer.getName());
+        assertEquals("NestedContainer", nestedContainer.getName());
+        assertEquals(4, simpleContainer.getMethodDefinitions().size());
+        assertEquals(4, nestedContainer.getMethodDefinitions().size());
+
+        int methodsCount = 0;
+        for (final MethodSignature method : simpleContainer
+                .getMethodDefinitions()) {
+            if (method.getName().equals("getFoo")) {
+                method.getReturnType().getName().equals("Integer");
+                methodsCount++;
+            }
+
+            if (method.getName().equals("setFoo")) {
+                methodsCount++;
+                final MethodSignature.Parameter param = method.getParameters()
+                        .get(0);
+                assertEquals("foo", param.getName());
+                assertEquals("Integer", param.getType().getName());
+            }
+
+            if (method.getName().equals("getBar")) {
+                method.getReturnType().getName().equals("String");
+                methodsCount++;
+            }
+
+            if (method.getName().equals("getNestedContainer")) {
+                method.getReturnType().getName().equals("NestedContainer");
+                methodsCount++;
+            }
+        }
+        assertEquals(4, methodsCount);
+
+        methodsCount = 0;
+        for (final MethodSignature method : nestedContainer
+                .getMethodDefinitions()) {
+            if (method.getName().equals("getFoo")) {
+                method.getReturnType().getName().equals("Short");
+                methodsCount++;
+            }
+
+            if (method.getName().equals("setFoo")) {
+                methodsCount++;
+                final MethodSignature.Parameter param = method.getParameters()
+                        .get(0);
+                assertEquals("foo", param.getName());
+                assertEquals("Short", param.getType().getName());
+            }
+
+            if (method.getName().equals("getBar")) {
+                method.getReturnType().getName().equals("String");
+                methodsCount++;
+            }
+
+            if (method.getName().equals("setBar")) {
+                method.getReturnType().getName().equals("String");
+                methodsCount++;
+            }
+        }
+        assertEquals(4, methodsCount);
+    }
+
+    @Test
+    public void testLeafListResolving() {
+        final String filePath = getClass().getResource(
+                "/simple-leaf-list-demo.yang").getPath();
+        final SchemaContext context = resolveSchemaContextFromFiles(filePath);
+        assertTrue(context != null);
+
+        final BindingGenerator bindingGen = new BindingGeneratorImpl();
+        final List<Type> genTypes = bindingGen.generateTypes(context);
+
+        assertTrue(genTypes != null);
+        assertEquals(2, genTypes.size());
+
+        final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);
+        final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);
+
+        assertEquals("SimpleContainer", simpleContainer.getName());
+        assertEquals("NestedContainer", nestedContainer.getName());
+        assertEquals(4, simpleContainer.getMethodDefinitions().size());
+        assertEquals(3, nestedContainer.getMethodDefinitions().size());
+
+        int methodsCount = 0;
+        for (final MethodSignature method : simpleContainer
+                .getMethodDefinitions()) {
+            if (method.getName().equals("getFoo")) {
+                method.getReturnType().getName().equals("List");
+                methodsCount++;
+            }
+
+            if (method.getName().equals("setFoo")) {
+                methodsCount++;
+                final MethodSignature.Parameter param = method.getParameters()
+                        .get(0);
+                assertEquals("foo", param.getName());
+                assertEquals("List", param.getType().getName());
+            }
+
+            if (method.getName().equals("getBar")) {
+                method.getReturnType().getName().equals("String");
+                methodsCount++;
+            }
+
+            if (method.getName().equals("getNestedContainer")) {
+                method.getReturnType().getName().equals("NestedContainer");
+                methodsCount++;
+            }
+        }
+        assertEquals(4, methodsCount);
+
+        methodsCount = 0;
+        for (final MethodSignature method : nestedContainer
+                .getMethodDefinitions()) {
+            if (method.getName().equals("getFoo")) {
+                method.getReturnType().getName().equals("Short");
+                methodsCount++;
+            }
+
+            if (method.getName().equals("setFoo")) {
+                methodsCount++;
+                final MethodSignature.Parameter param = method.getParameters()
+                        .get(0);
+                assertEquals("foo", param.getName());
+                assertEquals("Short", param.getType().getName());
+            }
+
+            if (method.getName().equals("getBar")) {
+                method.getReturnType().getName().equals("List");
+                methodsCount++;
+            }
+        }
+        assertEquals(3, methodsCount);
+    }
+
+    @Test
+    public void testListResolving() {
+        final String filePath = getClass()
+                .getResource("/simple-list-demo.yang").getPath();
+        final SchemaContext context = resolveSchemaContextFromFiles(filePath);
+        assertTrue(context != null);
+
+        final BindingGenerator bindingGen = new BindingGeneratorImpl();
+        final List<Type> genTypes = bindingGen.generateTypes(context);
+
+        assertTrue(genTypes != null);
+        assertEquals(4, genTypes.size());
+
+        int genTypesCount = 0;
+        int genTOsCount = 0;
+        for (final Type type : genTypes) {
+            if (type instanceof GeneratedType) {
+                final GeneratedType genType = (GeneratedType) type;
+                if (genType.getName().equals("ListParentContainer")) {
+                    assertEquals(2, genType.getMethodDefinitions().size());
+                    genTypesCount++;
+                } else if (genType.getName().equals("SimpleList")) {
+                    assertEquals(7, genType.getMethodDefinitions().size());
+                    final List<MethodSignature> methods = genType
+                            .getMethodDefinitions();
+                    int methodsCount = 0;
+                    for (final MethodSignature method : methods) {
+                        if (method.getName().equals("getSimpleListKey")) {
+                            assertEquals("SimpleListKey", method
+                                    .getReturnType().getName());
+                            methodsCount++;
+                        } else if (method.getName().equals(
+                                "getListChildContainer")) {
+                            assertEquals("ListChildContainer", method
+                                    .getReturnType().getName());
+                            methodsCount++;
+                        } else if (method.getName().equals("getFoo")) {
+                            methodsCount++;
+                        } else if (method.getName().equals("setFoo")) {
+                            methodsCount++;
+                        } else if (method.getName().equals("getSimpleLeafList")) {
+                            methodsCount++;
+                        } else if (method.getName().equals("setSimpleLeafList")) {
+                            methodsCount++;
+                        } else if (method.getName().equals("getBar")) {
+                            methodsCount++;
+                        }
+                    }
+                    assertEquals(7, methodsCount);
+                    genTypesCount++;
+                } else if (genType.getName().equals("ListChildContainer")) {
+                    assertEquals(2, genType.getMethodDefinitions().size());
+                    genTypesCount++;
+                }
+            } else if (type instanceof GeneratedTransferObject) {
+                genTOsCount++;
+                final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
+                final List<GeneratedProperty> properties = genTO
+                        .getProperties();
+                final List<GeneratedProperty> hashProps = genTO
+                        .getHashCodeIdentifiers();
+                final List<GeneratedProperty> equalProps = genTO
+                        .getEqualsIdentifiers();
+
+                assertEquals(1, properties.size());
+                assertEquals("ListKey", properties.get(0).getName());
+                assertEquals("Byte", properties.get(0).getReturnType()
+                        .getName());
+                assertEquals(true, properties.get(0).isReadOnly());
+                assertEquals(1, hashProps.size());
+                assertEquals("ListKey", hashProps.get(0).getName());
+                assertEquals("Byte", hashProps.get(0).getReturnType().getName());
+                assertEquals(1, equalProps.size());
+                assertEquals("ListKey", equalProps.get(0).getName());
+                assertEquals("Byte", equalProps.get(0).getReturnType()
+                        .getName());
+            }
+        }
+        assertEquals(3, genTypesCount);
+        assertEquals(1, genTOsCount);
+    }
+
+    @Test
+    public void testListCompositeKeyResolving() {
+        final String filePath = getClass().getResource(
+                "/list-composite-key.yang").getPath();
+        final SchemaContext context = resolveSchemaContextFromFiles(filePath);
+
+        assertTrue(context != null);
+
+        final BindingGenerator bindingGen = new BindingGeneratorImpl();
+        final List<Type> genTypes = bindingGen.generateTypes(context);
+
+        assertTrue(genTypes != null);
+        assertEquals(6, genTypes.size());
+
+        int genTypesCount = 0;
+        int genTOsCount = 0;
+        for (final Type type : genTypes) {
+            if (type instanceof GeneratedType) {
+                genTypesCount++;
+            } else if (type instanceof GeneratedTransferObject) {
+                final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
+
+                if (genTO.getName().equals("CompositeKeyListKey")) {
+                    final List<GeneratedProperty> properties = genTO
+                            .getProperties();
+                    int propertyCount = 0;
+                    for (final GeneratedProperty prop : properties) {
+                        if (prop.getName().equals("Key1")) {
+                            propertyCount++;
+                        } else if (prop.getName().equals("Key2")) {
+                            propertyCount++;
+                        }
+                    }
+                    assertEquals(2, propertyCount);
+                    genTOsCount++;
+                } else if (genTO.getName().equals("InnerListKey")) {
+                    final List<GeneratedProperty> properties = genTO
+                            .getProperties();
+                    assertEquals(1, properties.size());
+                    genTOsCount++;
+                }
+            }
+        }
+
+        assertEquals(4, genTypesCount);
+        assertEquals(2, genTOsCount);
+    }
+
+    @Test
+    public void testGeneratedTypes() {
+        final String filePath = getClass().getResource("/demo-topology.yang")
+                .getPath();
+        final SchemaContext context = resolveSchemaContextFromFiles(filePath);
+        assertTrue(context != null);
+
+        final BindingGenerator bindingGen = new BindingGeneratorImpl();
+        final List<Type> genTypes = bindingGen.generateTypes(context);
+
+        assertTrue(genTypes != null);
+        assertEquals(13, genTypes.size());
+
+        int genTypesCount = 0;
+        int genTOsCount = 0;
+        for (final Type type : genTypes) {
+            if (type instanceof GeneratedType) {
+                genTypesCount++;
+            } else if (type instanceof GeneratedTransferObject) {
+                genTOsCount++;
+            }
+        }
+
+        assertEquals(10, genTypesCount);
+        assertEquals(3, genTOsCount);
+    }
+}