BUG-8043: correct LengthConstraint definition
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / Bug4623Test.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.yangtools.yang.stmt;
10
11 import com.google.common.collect.Range;
12 import java.io.File;
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;
24
25 public class Bug4623Test {
26
27     @Test
28     public void testStringTypeWithUnknownSchemaNodeAtTheEndOfTypeDefinition() throws Exception {
29         // given
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());
32
33         // when
34         final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
35
36         final LeafSchemaNode leaf = (LeafSchemaNode) schemaContext.findModuleByName("types", null).getDataChildByName(
37                 QName.create("urn:custom.types.demo", "1970-01-01", "leaf-length-pattern-unknown"));
38
39         // then
40         Assert.assertNotNull(leaf);
41
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);
47
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");
51
52         final LengthConstraint lengthConstraint = ((StringTypeDefinition) type).getLengthConstraint().get();
53         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
54
55         Assert.assertNotNull(lengthConstraint);
56         Assert.assertNotNull(patternConstraints);
57         Assert.assertFalse(lengthConstraint.getAllowedRanges().isEmpty());
58         Assert.assertFalse(patternConstraints.isEmpty());
59
60         final Range<Integer> span = lengthConstraint.getAllowedRanges().span();
61         Assert.assertEquals(Integer.valueOf(2), span.lowerEndpoint());
62         Assert.assertEquals(Integer.valueOf(10), span.upperEndpoint());
63
64         final PatternConstraint patternConstraint = patternConstraints.get(0);
65         Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
66     }
67
68     @Test
69     public void testStringTypeWithUnknownSchemaNodeBetweenStringRestrictionStatements() throws Exception {
70         // given
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());
73
74         // when
75         final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
76
77         final LeafSchemaNode leaf = (LeafSchemaNode) schemaContext.findModuleByName("types", null).getDataChildByName(
78                 QName.create("urn:custom.types.demo", "1970-01-01", "leaf-length-unknown-pattern"));
79
80         // then
81         Assert.assertNotNull(leaf);
82
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);
88
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");
92
93         final LengthConstraint lengthConstraints = ((StringTypeDefinition) type).getLengthConstraint().get();
94         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
95
96         Assert.assertNotNull(lengthConstraints);
97         Assert.assertNotNull(patternConstraints);
98         Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
99         Assert.assertFalse(patternConstraints.isEmpty());
100
101         final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
102         Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
103         Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
104
105         final PatternConstraint patternConstraint = patternConstraints.get(0);
106         Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
107     }
108
109     @Test
110     public void testStringTypeWithUnknownSchemaNodeOnTheStartOfTypeDefinition() throws Exception {
111         // given
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());
114
115         // when
116         final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
117
118         final LeafSchemaNode leaf = (LeafSchemaNode) schemaContext.findModuleByName("types", null).getDataChildByName(
119                 QName.create("urn:custom.types.demo", "1970-01-01", "leaf-unknown-length-pattern"));
120
121         // then
122         Assert.assertNotNull(leaf);
123
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);
129
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");
133
134         final LengthConstraint lengthConstraints =
135                 ((StringTypeDefinition) type).getLengthConstraint().get();
136         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
137
138         Assert.assertNotNull(lengthConstraints);
139         Assert.assertNotNull(patternConstraints);
140         Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
141         Assert.assertFalse(patternConstraints.size() == 0);
142
143         final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
144         Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
145         Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
146
147         final PatternConstraint patternConstraint = patternConstraints.get(0);
148         Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
149     }
150 }