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 static org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil.DEFAULT_DATE_REV;
13 import com.google.common.collect.Range;
16 import java.util.List;
17 import org.junit.Assert;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.Module;
22 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
23 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
24 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
26 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
27 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
29 public class Bug4623Test {
32 public void testStringTypeWithUnknownSchemaNodeAtTheEndOfTypeDefinition() throws Exception {
34 final File extdef = new File(getClass().getResource("/bugs/bug4623/extension-def.yang").toURI());
35 final File stringWithExt = new File(getClass().getResource("/bugs/bug4623/string-with-ext.yang").toURI());
38 final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
40 final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
41 QName.create(URI.create("urn:custom.types.demo"), DEFAULT_DATE_REV, "leaf-length-pattern-unknown"));
44 Assert.assertNotNull(leaf);
46 final TypeDefinition<?> type = leaf.getType();
47 Assert.assertNotNull(type);
48 final List<UnknownSchemaNode> unknownSchemaNodes = type.getUnknownSchemaNodes();
49 Assert.assertNotNull(unknownSchemaNodes);
50 Assert.assertFalse(unknownSchemaNodes.size() == 0);
52 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
53 Assert.assertEquals(unknownSchemaNode.getNodeParameter(), "unknown");
54 Assert.assertEquals(unknownSchemaNode.getNodeType().getModule().getNamespace().toString(),
55 "urn:simple.extension.typedefs");
57 final LengthConstraint lengthConstraint = ((StringTypeDefinition) type).getLengthConstraint().get();
58 final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
60 Assert.assertNotNull(lengthConstraint);
61 Assert.assertNotNull(patternConstraints);
62 Assert.assertFalse(lengthConstraint.getAllowedRanges().isEmpty());
63 Assert.assertFalse(patternConstraints.isEmpty());
65 final Range<Integer> span = lengthConstraint.getAllowedRanges().span();
66 Assert.assertEquals(Integer.valueOf(2), span.lowerEndpoint());
67 Assert.assertEquals(Integer.valueOf(10), span.upperEndpoint());
69 final PatternConstraint patternConstraint = patternConstraints.get(0);
70 Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
74 public void testStringTypeWithUnknownSchemaNodeBetweenStringRestrictionStatements() throws Exception {
76 final File extdef = new File(getClass().getResource("/bugs/bug4623/extension-def.yang").toURI());
77 final File stringWithExt = new File(getClass().getResource("/bugs/bug4623/string-with-ext.yang").toURI());
80 final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
82 final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
83 QName.create(URI.create("urn:custom.types.demo"), DEFAULT_DATE_REV, "leaf-length-unknown-pattern"));
86 Assert.assertNotNull(leaf);
88 final TypeDefinition<?> type = leaf.getType();
89 Assert.assertNotNull(type);
90 final List<UnknownSchemaNode> unknownSchemaNodes = type.getUnknownSchemaNodes();
91 Assert.assertNotNull(unknownSchemaNodes);
92 Assert.assertFalse(unknownSchemaNodes.size() == 0);
94 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
95 Assert.assertEquals(unknownSchemaNode.getNodeParameter(), "unknown");
96 Assert.assertEquals(unknownSchemaNode.getNodeType().getModule().getNamespace().toString(),
97 "urn:simple.extension.typedefs");
99 final LengthConstraint lengthConstraints = ((StringTypeDefinition) type).getLengthConstraint().get();
100 final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
102 Assert.assertNotNull(lengthConstraints);
103 Assert.assertNotNull(patternConstraints);
104 Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
105 Assert.assertFalse(patternConstraints.isEmpty());
107 final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
108 Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
109 Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
111 final PatternConstraint patternConstraint = patternConstraints.get(0);
112 Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
116 public void testStringTypeWithUnknownSchemaNodeOnTheStartOfTypeDefinition() throws Exception {
118 final File extdef = new File(getClass().getResource("/bugs/bug4623/extension-def.yang").toURI());
119 final File stringWithExt = new File(getClass().getResource("/bugs/bug4623/string-with-ext.yang").toURI());
122 final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
124 final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
125 QName.create(URI.create("urn:custom.types.demo"), DEFAULT_DATE_REV, "leaf-unknown-length-pattern"));
128 Assert.assertNotNull(leaf);
130 final TypeDefinition<?> type = leaf.getType();
131 Assert.assertNotNull(type);
132 final List<UnknownSchemaNode> unknownSchemaNodes = type.getUnknownSchemaNodes();
133 Assert.assertNotNull(unknownSchemaNodes);
134 Assert.assertFalse(unknownSchemaNodes.size() == 0);
136 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
137 Assert.assertEquals(unknownSchemaNode.getNodeParameter(), "unknown");
138 Assert.assertEquals(unknownSchemaNode.getNodeType().getModule().getNamespace().toString(),
139 "urn:simple.extension.typedefs");
141 final LengthConstraint lengthConstraints =
142 ((StringTypeDefinition) type).getLengthConstraint().get();
143 final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
145 Assert.assertNotNull(lengthConstraints);
146 Assert.assertNotNull(patternConstraints);
147 Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
148 Assert.assertFalse(patternConstraints.size() == 0);
150 final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
151 Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
152 Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
154 final PatternConstraint patternConstraint = patternConstraints.get(0);
155 Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
158 private static Module typesModule(final SchemaContext context) {
159 return context.findModules("types").iterator().next();