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;
14 import java.util.List;
15 import org.junit.Assert;
16 import org.junit.Test;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.Module;
20 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
21 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
22 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
24 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
25 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
27 public class Bug4623Test {
30 public void testStringTypeWithUnknownSchemaNodeAtTheEndOfTypeDefinition() throws Exception {
32 final File extdef = new File(getClass().getResource("/bugs/bug4623/extension-def.yang").toURI());
33 final File stringWithExt = new File(getClass().getResource("/bugs/bug4623/string-with-ext.yang").toURI());
36 final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
38 final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
39 QName.create(URI.create("urn:custom.types.demo"), "leaf-length-pattern-unknown"));
42 Assert.assertNotNull(leaf);
44 final TypeDefinition<?> type = leaf.getType();
45 Assert.assertNotNull(type);
46 final List<UnknownSchemaNode> unknownSchemaNodes = type.getUnknownSchemaNodes();
47 Assert.assertNotNull(unknownSchemaNodes);
48 Assert.assertFalse(unknownSchemaNodes.size() == 0);
50 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
51 Assert.assertEquals(unknownSchemaNode.getNodeParameter(), "unknown");
52 Assert.assertEquals(unknownSchemaNode.getNodeType().getModule().getNamespace().toString(),
53 "urn:simple.extension.typedefs");
55 final LengthConstraint lengthConstraint = ((StringTypeDefinition) type).getLengthConstraint().get();
56 final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
58 Assert.assertNotNull(lengthConstraint);
59 Assert.assertNotNull(patternConstraints);
60 Assert.assertFalse(lengthConstraint.getAllowedRanges().isEmpty());
61 Assert.assertFalse(patternConstraints.isEmpty());
63 final Range<Integer> span = lengthConstraint.getAllowedRanges().span();
64 Assert.assertEquals(Integer.valueOf(2), span.lowerEndpoint());
65 Assert.assertEquals(Integer.valueOf(10), span.upperEndpoint());
67 final PatternConstraint patternConstraint = patternConstraints.get(0);
68 Assert.assertEquals(patternConstraint.getRegularExpressionString(), "[0-9a-fA-F]");
72 public void testStringTypeWithUnknownSchemaNodeBetweenStringRestrictionStatements() throws Exception {
74 final File extdef = new File(getClass().getResource("/bugs/bug4623/extension-def.yang").toURI());
75 final File stringWithExt = new File(getClass().getResource("/bugs/bug4623/string-with-ext.yang").toURI());
78 final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
80 final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
81 QName.create(URI.create("urn:custom.types.demo"), "leaf-length-unknown-pattern"));
84 Assert.assertNotNull(leaf);
86 final TypeDefinition<?> type = leaf.getType();
87 Assert.assertNotNull(type);
88 final List<UnknownSchemaNode> unknownSchemaNodes = type.getUnknownSchemaNodes();
89 Assert.assertNotNull(unknownSchemaNodes);
90 Assert.assertFalse(unknownSchemaNodes.size() == 0);
92 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
93 Assert.assertEquals(unknownSchemaNode.getNodeParameter(), "unknown");
94 Assert.assertEquals(unknownSchemaNode.getNodeType().getModule().getNamespace().toString(),
95 "urn:simple.extension.typedefs");
97 final LengthConstraint lengthConstraints = ((StringTypeDefinition) type).getLengthConstraint().get();
98 final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
100 Assert.assertNotNull(lengthConstraints);
101 Assert.assertNotNull(patternConstraints);
102 Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
103 Assert.assertFalse(patternConstraints.isEmpty());
105 final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
106 Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
107 Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
109 final PatternConstraint patternConstraint = patternConstraints.get(0);
110 Assert.assertEquals(patternConstraint.getRegularExpressionString(), "[0-9a-fA-F]");
114 public void testStringTypeWithUnknownSchemaNodeOnTheStartOfTypeDefinition() throws Exception {
116 final File extdef = new File(getClass().getResource("/bugs/bug4623/extension-def.yang").toURI());
117 final File stringWithExt = new File(getClass().getResource("/bugs/bug4623/string-with-ext.yang").toURI());
120 final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
122 final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
123 QName.create(URI.create("urn:custom.types.demo"), "leaf-unknown-length-pattern"));
126 Assert.assertNotNull(leaf);
128 final TypeDefinition<?> type = leaf.getType();
129 Assert.assertNotNull(type);
130 final List<UnknownSchemaNode> unknownSchemaNodes = type.getUnknownSchemaNodes();
131 Assert.assertNotNull(unknownSchemaNodes);
132 Assert.assertFalse(unknownSchemaNodes.size() == 0);
134 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
135 Assert.assertEquals(unknownSchemaNode.getNodeParameter(), "unknown");
136 Assert.assertEquals(unknownSchemaNode.getNodeType().getModule().getNamespace().toString(),
137 "urn:simple.extension.typedefs");
139 final LengthConstraint lengthConstraints =
140 ((StringTypeDefinition) type).getLengthConstraint().get();
141 final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
143 Assert.assertNotNull(lengthConstraints);
144 Assert.assertNotNull(patternConstraints);
145 Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
146 Assert.assertFalse(patternConstraints.size() == 0);
148 final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
149 Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
150 Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
152 final PatternConstraint patternConstraint = patternConstraints.get(0);
153 Assert.assertEquals(patternConstraint.getRegularExpressionString(), "[0-9a-fA-F]");
156 private static Module typesModule(final SchemaContext context) {
157 return context.findModules("types").iterator().next();