a5fb57d3dcc1705629c313912cb1d27e6f456611
[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.net.URI;
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;
26
27 public class Bug4623Test {
28
29     @Test
30     public void testStringTypeWithUnknownSchemaNodeAtTheEndOfTypeDefinition() throws Exception {
31         // given
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());
34
35         // when
36         final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
37
38         final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
39             QName.create(URI.create("urn:custom.types.demo"), "leaf-length-pattern-unknown"));
40
41         // then
42         Assert.assertNotNull(leaf);
43
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);
49
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");
54
55         final LengthConstraint lengthConstraint = ((StringTypeDefinition) type).getLengthConstraint().get();
56         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
57
58         Assert.assertNotNull(lengthConstraint);
59         Assert.assertNotNull(patternConstraints);
60         Assert.assertFalse(lengthConstraint.getAllowedRanges().isEmpty());
61         Assert.assertFalse(patternConstraints.isEmpty());
62
63         final Range<Integer> span = lengthConstraint.getAllowedRanges().span();
64         Assert.assertEquals(Integer.valueOf(2), span.lowerEndpoint());
65         Assert.assertEquals(Integer.valueOf(10), span.upperEndpoint());
66
67         final PatternConstraint patternConstraint = patternConstraints.get(0);
68         Assert.assertEquals(patternConstraint.getJavaPatternString(), "^[0-9a-fA-F]$");
69     }
70
71     @Test
72     public void testStringTypeWithUnknownSchemaNodeBetweenStringRestrictionStatements() throws Exception {
73         // given
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());
76
77         // when
78         final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
79
80         final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
81                 QName.create(URI.create("urn:custom.types.demo"), "leaf-length-unknown-pattern"));
82
83         // then
84         Assert.assertNotNull(leaf);
85
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);
91
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");
96
97         final LengthConstraint lengthConstraints = ((StringTypeDefinition) type).getLengthConstraint().get();
98         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
99
100         Assert.assertNotNull(lengthConstraints);
101         Assert.assertNotNull(patternConstraints);
102         Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
103         Assert.assertFalse(patternConstraints.isEmpty());
104
105         final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
106         Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
107         Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
108
109         final PatternConstraint patternConstraint = patternConstraints.get(0);
110         Assert.assertEquals(patternConstraint.getJavaPatternString(), "^[0-9a-fA-F]$");
111     }
112
113     @Test
114     public void testStringTypeWithUnknownSchemaNodeOnTheStartOfTypeDefinition() throws Exception {
115         // given
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());
118
119         // when
120         final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
121
122         final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
123                 QName.create(URI.create("urn:custom.types.demo"), "leaf-unknown-length-pattern"));
124
125         // then
126         Assert.assertNotNull(leaf);
127
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);
133
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");
138
139         final LengthConstraint lengthConstraints =
140                 ((StringTypeDefinition) type).getLengthConstraint().get();
141         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
142
143         Assert.assertNotNull(lengthConstraints);
144         Assert.assertNotNull(patternConstraints);
145         Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
146         Assert.assertFalse(patternConstraints.size() == 0);
147
148         final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
149         Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
150         Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
151
152         final PatternConstraint patternConstraint = patternConstraints.get(0);
153         Assert.assertEquals(patternConstraint.getJavaPatternString(), "^[0-9a-fA-F]$");
154     }
155
156     private static Module typesModule(final SchemaContext context) {
157         return context.findModules("types").iterator().next();
158     }
159 }