-/*\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.yang.model.parser.impl;\r
-\r
-import static org.junit.Assert.*;\r
-\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.URI;\r
-import java.text.DateFormat;\r
-import java.text.SimpleDateFormat;\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.Date;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import org.antlr.v4.runtime.ANTLRInputStream;\r
-import org.antlr.v4.runtime.CommonTokenStream;\r
-import org.antlr.v4.runtime.tree.ParseTree;\r
-import org.antlr.v4.runtime.tree.ParseTreeWalker;\r
-import org.junit.Ignore;\r
-import org.junit.Test;\r
-import org.opendaylight.controller.antlrv4.code.gen.YangLexer;\r
-import org.opendaylight.controller.antlrv4.code.gen.YangParser;\r
-import org.opendaylight.controller.yang.common.QName;\r
-import org.opendaylight.controller.yang.model.api.ContainerSchemaNode;\r
-import org.opendaylight.controller.yang.model.api.DataNodeContainer;\r
-import org.opendaylight.controller.yang.model.api.DataSchemaNode;\r
-import org.opendaylight.controller.yang.model.api.LeafSchemaNode;\r
-import org.opendaylight.controller.yang.model.api.ListSchemaNode;\r
-import org.opendaylight.controller.yang.model.api.Module;\r
-import org.opendaylight.controller.yang.model.api.ModuleImport;\r
-import org.opendaylight.controller.yang.model.api.SchemaNode;\r
-import org.opendaylight.controller.yang.model.api.SchemaPath;\r
-import org.opendaylight.controller.yang.model.api.Status;\r
-import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
-import org.opendaylight.controller.yang.model.parser.builder.impl.ModuleBuilder;\r
-import org.opendaylight.controller.yang.model.util.Leafref;\r
-import org.opendaylight.controller.yang.model.util.UnknownType;\r
-\r
-public class YangModelParserListenerTest {\r
-\r
- @Test\r
- public void testParseImport() throws Exception {\r
- Module module = getModule("/abstract-topology.yang");\r
-\r
- Set<ModuleImport> imports = module.getImports();\r
- assertEquals(1, imports.size());\r
- ModuleImport moduleImport = imports.iterator().next();\r
-\r
- assertEquals("inet", moduleImport.getPrefix());\r
-\r
- DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");\r
- Date expectedDate = simpleDateFormat.parse("2010-09-24");\r
- assertEquals(expectedDate, moduleImport.getRevision());\r
- }\r
-\r
- @Test\r
- public void testParseHeaders() throws Exception {\r
- Module module = getModule("/abstract-topology.yang");\r
-\r
- URI namespace = module.getNamespace();\r
- URI expectedNS = URI.create("");\r
- assertEquals(expectedNS, namespace);\r
-\r
- DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");\r
- Date expectedDate = simpleDateFormat.parse("2013-02-08");\r
- assertEquals(expectedDate, module.getRevision());\r
-\r
- String prefix = module.getPrefix();\r
- String expectedPrefix = "tp";\r
- assertEquals(expectedPrefix, prefix);\r
-\r
- String expectedDescription = "This module contains the definitions of elements that creates network";\r
- assertTrue(module.getDescription().contains(expectedDescription));\r
-\r
- String expectedReference = "~~~ WILL BE DEFINED LATER";\r
- assertEquals(expectedReference, module.getReference());\r
-\r
- assertEquals("1", module.getYangVersion());\r
- }\r
-\r
- @Test\r
- public void testParseLeafref() throws Exception {\r
- Module module = getModule("/abstract-topology.yang");\r
-\r
- Set<TypeDefinition<?>> typedefs = module.getTypeDefinitions();\r
- assertEquals(2, typedefs.size());\r
- for(TypeDefinition<?> td : typedefs) {\r
- Leafref baseType = (Leafref)td.getBaseType();\r
- if(td.getQName().getLocalName().equals("node-id-ref")) {\r
- assertEquals("/tp:topology/tp:network-nodes/tp:network-node/tp:node-id", baseType.getPathStatement().toString());\r
- } else {\r
- assertEquals("/tp:topology/tp:network-links/tp:network-link/tp:link-id", baseType.getPathStatement().toString());\r
- }\r
- }\r
- }\r
- \r
- @Ignore\r
- @Test\r
- public void testParseModule() throws IOException {\r
- //TODO: fix test\r
- Module module = getModule("/test-model.yang");\r
-\r
- URI namespace = module.getNamespace();\r
- Date revision = module.getRevision();\r
- String prefix = module.getPrefix();\r
-\r
- String expectedDescription = "module description";\r
- assertEquals(expectedDescription, module.getDescription());\r
-\r
- String expectedReference = "module reference";\r
- assertEquals(expectedReference, module.getReference());\r
-\r
- Set<TypeDefinition<?>> typedefs = module.getTypeDefinitions();\r
- assertEquals(10, typedefs.size());\r
-\r
- Set<DataSchemaNode> childNodes = module.getChildNodes();\r
- assertEquals(1, childNodes.size());\r
-\r
- final String containerName = "network";\r
- final QName containerQName = new QName(namespace, revision, prefix, containerName);\r
- ContainerSchemaNode tested = (ContainerSchemaNode) module.getChildNodes().iterator().next();\r
- DataSchemaNode container1 = module.getDataChildByName(containerName);\r
- DataSchemaNode container2 = module.getDataChildByName(containerQName);\r
-\r
- assertEquals(tested, container1);\r
- assertEquals(container1, container2);\r
- }\r
-\r
- @Ignore\r
- @Test\r
- public void testParseContainer() throws IOException {\r
- //TODO: fix test\r
- Module module = getModule("/test-model.yang");\r
-\r
- URI namespace = module.getNamespace();\r
- Date revision = module.getRevision();\r
- String prefix = module.getPrefix();\r
- final QName containerQName = new QName(namespace, revision, prefix, "network");\r
-\r
- ContainerSchemaNode tested = (ContainerSchemaNode)module.getDataChildByName(containerQName);\r
-\r
- Set<DataSchemaNode> containerChildNodes = tested.getChildNodes();\r
- assertEquals(3, containerChildNodes.size());\r
-\r
- String expectedDescription = "network-description";\r
- String expectedReference = "network-reference";\r
- Status expectedStatus = Status.OBSOLETE;\r
- testDesc_Ref_Status(tested, expectedDescription, expectedReference, expectedStatus);\r
-\r
- List<QName> path = new ArrayList<QName>();\r
- path.add(new QName(namespace, revision, prefix, "test-model"));\r
- path.add(containerQName);\r
- SchemaPath expectedSchemaPath = new SchemaPath(path, true);\r
- assertEquals(expectedSchemaPath, tested.getPath());\r
-\r
- assertTrue(tested.isConfiguration());\r
- assertTrue(tested.isPresenceContainer());\r
- }\r
-\r
- @Ignore\r
- @Test\r
- public void testParseList() throws IOException {\r
- //TODO: fix test\r
- Module module = getModule("/test-model.yang");\r
-\r
- URI namespace = module.getNamespace();\r
- Date revision = module.getRevision();\r
- String prefix = module.getPrefix();\r
- final QName listQName = new QName(namespace, revision, prefix, "topology");\r
-\r
- DataNodeContainer networkContainer = (DataNodeContainer)module.getDataChildByName("network");\r
- DataNodeContainer topologiesContainer = (DataNodeContainer)networkContainer.getDataChildByName("topologies");\r
- ListSchemaNode tested = (ListSchemaNode)topologiesContainer.getDataChildByName(listQName);\r
- assertEquals(listQName, tested.getQName());\r
-\r
- String expectedDescription = "Test description of list 'topology'.";\r
- String expectedReference = null;\r
- Status expectedStatus = Status.CURRENT;\r
- testDesc_Ref_Status(tested, expectedDescription, expectedReference, expectedStatus);\r
-\r
- List<QName> path = new ArrayList<QName>();\r
- path.add(new QName(namespace, revision, prefix, "test-model"));\r
- path.add(new QName(namespace, revision, prefix, "network"));\r
- path.add(new QName(namespace, revision, prefix, "topologies"));\r
- path.add(listQName);\r
- SchemaPath expectedSchemaPath = new SchemaPath(path, true);\r
- assertEquals(expectedSchemaPath, tested.getPath());\r
-\r
- List<QName> expectedKey = new ArrayList<QName>();\r
- expectedKey.add(new QName(namespace, revision, prefix, "topology-id"));\r
- assertEquals(expectedKey, tested.getKeyDefinition());\r
-\r
- assertEquals(Collections.EMPTY_SET, tested.getTypeDefinitions());\r
- assertEquals(Collections.EMPTY_SET, tested.getUses());\r
- assertEquals(Collections.EMPTY_SET, tested.getGroupings());\r
-\r
- assertTrue(tested.getDataChildByName("topology-id") instanceof LeafSchemaNode);\r
- }\r
- \r
- @Ignore\r
- @Test\r
- public void testParseLeaf() throws IOException {\r
- //TODO: fix test\r
- Module module = getModule("/test-model.yang");\r
-\r
- URI namespace = module.getNamespace();\r
- Date revision = module.getRevision();\r
- String prefix = module.getPrefix();\r
- final QName leafQName = new QName(namespace, revision, prefix, "topology-id");\r
-\r
- DataNodeContainer networkContainer = (DataNodeContainer)module.getDataChildByName("network");\r
- DataNodeContainer topologiesContainer = (DataNodeContainer)networkContainer.getDataChildByName("topologies");\r
- DataNodeContainer topologyList = (DataNodeContainer)topologiesContainer.getDataChildByName("topology");\r
- LeafSchemaNode tested = (LeafSchemaNode)topologyList.getDataChildByName(leafQName);\r
- assertEquals(leafQName, tested.getQName());\r
-\r
- String expectedDescription = "Test description of leaf 'topology-id'";\r
- String expectedReference = null;\r
- Status expectedStatus = Status.CURRENT;\r
- testDesc_Ref_Status(tested, expectedDescription, expectedReference, expectedStatus);\r
-\r
- List<QName> path = new ArrayList<QName>();\r
- path.add(new QName(namespace, revision, prefix, "test-model"));\r
- path.add(new QName(namespace, revision, prefix, "network"));\r
- path.add(new QName(namespace, revision, prefix, "topologies"));\r
- path.add(new QName(namespace, revision, prefix, "topology"));\r
- path.add(leafQName);\r
- SchemaPath expectedSchemaPath = new SchemaPath(path, true);\r
- assertEquals(expectedSchemaPath, tested.getPath());\r
-\r
- UnknownType.Builder typeBuilder = new UnknownType.Builder(new QName(namespace, revision, prefix, "topology-id"), null, null);\r
- TypeDefinition<?> expectedType = typeBuilder.build();\r
- assertEquals(expectedType, tested.getType());\r
- }\r
-\r
-\r
- private void testDesc_Ref_Status(SchemaNode tested, String expectedDescription, String expectedReference, Status expectedStatus) {\r
- assertEquals(expectedDescription, tested.getDescription());\r
- assertEquals(expectedReference, tested.getReference());\r
- assertEquals(expectedStatus, tested.getStatus());\r
- }\r
-\r
- private Module getModule(String testFile) throws IOException {\r
- ModuleBuilder builder = getBuilder(testFile);\r
- return builder.build();\r
- }\r
-\r
- private ModuleBuilder getBuilder(String fileName) throws IOException {\r
- final InputStream inStream = getClass().getResourceAsStream(fileName);\r
- ANTLRInputStream input = new ANTLRInputStream(inStream);\r
- final YangLexer lexer = new YangLexer(input);\r
- final CommonTokenStream tokens = new CommonTokenStream(lexer);\r
- final YangParser parser = new YangParser(tokens);\r
-\r
- final ParseTree tree = parser.yang();\r
- final ParseTreeWalker walker = new ParseTreeWalker();\r
-\r
- final YangModelParserListenerImpl modelParser = new YangModelParserListenerImpl();\r
- walker.walk(modelParser, tree);\r
- return modelParser.getModuleBuilder();\r
- }\r
-\r
-}\r