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.yangtools.yang.stmt;
11 import com.google.common.collect.Range;
13 import java.util.List;
14 import org.junit.Assert;
15 import org.junit.Test;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
19 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
20 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
22 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
23 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
25 public class Bug4623Test {
28 public void testStringTypeWithUnknownSchemaNodeAtTheEndOfTypeDefinition() throws Exception {
30 final File extdef = new File(getClass().getResource("/bugs/bug4623/extension-def.yang").toURI());
31 final File stringWithExt = new File(getClass().getResource("/bugs/bug4623/string-with-ext.yang").toURI());
34 final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
36 final LeafSchemaNode leaf = (LeafSchemaNode) schemaContext.findModuleByName("types", null).getDataChildByName(
37 QName.create("urn:custom.types.demo", "1970-01-01", "leaf-length-pattern-unknown"));
40 Assert.assertNotNull(leaf);
42 final TypeDefinition<?> type = leaf.getType();
43 Assert.assertNotNull(type);
44 final List<UnknownSchemaNode> unknownSchemaNodes = type.getUnknownSchemaNodes();
45 Assert.assertNotNull(unknownSchemaNodes);
46 Assert.assertFalse(unknownSchemaNodes.size() == 0);
48 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
49 Assert.assertEquals(unknownSchemaNode.getNodeParameter(), "unknown");
50 Assert.assertEquals(unknownSchemaNode.getNodeType().getModule().getNamespace().toString(), "urn:simple.extension.typedefs");
52 final LengthConstraint lengthConstraint = ((StringTypeDefinition) type).getLengthConstraint().get();
53 final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
55 Assert.assertNotNull(lengthConstraint);
56 Assert.assertNotNull(patternConstraints);
57 Assert.assertFalse(lengthConstraint.getAllowedRanges().isEmpty());
58 Assert.assertFalse(patternConstraints.isEmpty());
60 final Range<Integer> span = lengthConstraint.getAllowedRanges().span();
61 Assert.assertEquals(Integer.valueOf(2), span.lowerEndpoint());
62 Assert.assertEquals(Integer.valueOf(10), span.upperEndpoint());
64 final PatternConstraint patternConstraint = patternConstraints.get(0);
65 Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
69 public void testStringTypeWithUnknownSchemaNodeBetweenStringRestrictionStatements() throws Exception {
71 final File extdef = new File(getClass().getResource("/bugs/bug4623/extension-def.yang").toURI());
72 final File stringWithExt = new File(getClass().getResource("/bugs/bug4623/string-with-ext.yang").toURI());
75 final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
77 final LeafSchemaNode leaf = (LeafSchemaNode) schemaContext.findModuleByName("types", null).getDataChildByName(
78 QName.create("urn:custom.types.demo", "1970-01-01", "leaf-length-unknown-pattern"));
81 Assert.assertNotNull(leaf);
83 final TypeDefinition<?> type = leaf.getType();
84 Assert.assertNotNull(type);
85 final List<UnknownSchemaNode> unknownSchemaNodes = type.getUnknownSchemaNodes();
86 Assert.assertNotNull(unknownSchemaNodes);
87 Assert.assertFalse(unknownSchemaNodes.size() == 0);
89 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
90 Assert.assertEquals(unknownSchemaNode.getNodeParameter(), "unknown");
91 Assert.assertEquals(unknownSchemaNode.getNodeType().getModule().getNamespace().toString(), "urn:simple.extension.typedefs");
93 final LengthConstraint lengthConstraints = ((StringTypeDefinition) type).getLengthConstraint().get();
94 final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
96 Assert.assertNotNull(lengthConstraints);
97 Assert.assertNotNull(patternConstraints);
98 Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
99 Assert.assertFalse(patternConstraints.isEmpty());
101 final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
102 Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
103 Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
105 final PatternConstraint patternConstraint = patternConstraints.get(0);
106 Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
110 public void testStringTypeWithUnknownSchemaNodeOnTheStartOfTypeDefinition() throws Exception {
112 final File extdef = new File(getClass().getResource("/bugs/bug4623/extension-def.yang").toURI());
113 final File stringWithExt = new File(getClass().getResource("/bugs/bug4623/string-with-ext.yang").toURI());
116 final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
118 final LeafSchemaNode leaf = (LeafSchemaNode) schemaContext.findModuleByName("types", null).getDataChildByName(
119 QName.create("urn:custom.types.demo", "1970-01-01", "leaf-unknown-length-pattern"));
122 Assert.assertNotNull(leaf);
124 final TypeDefinition<?> type = leaf.getType();
125 Assert.assertNotNull(type);
126 final List<UnknownSchemaNode> unknownSchemaNodes = type.getUnknownSchemaNodes();
127 Assert.assertNotNull(unknownSchemaNodes);
128 Assert.assertFalse(unknownSchemaNodes.size() == 0);
130 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
131 Assert.assertEquals(unknownSchemaNode.getNodeParameter(), "unknown");
132 Assert.assertEquals(unknownSchemaNode.getNodeType().getModule().getNamespace().toString(), "urn:simple.extension.typedefs");
134 final LengthConstraint lengthConstraints =
135 ((StringTypeDefinition) type).getLengthConstraint().get();
136 final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
138 Assert.assertNotNull(lengthConstraints);
139 Assert.assertNotNull(patternConstraints);
140 Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
141 Assert.assertFalse(patternConstraints.size() == 0);
143 final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
144 Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
145 Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
147 final PatternConstraint patternConstraint = patternConstraints.get(0);
148 Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");