BUG-4688: Rework SchemaContext module lookups
[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 static org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil.DEFAULT_DATE_REV;
12
13 import com.google.common.collect.Range;
14 import java.io.File;
15 import java.net.URI;
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;
28
29 public class Bug4623Test {
30
31     @Test
32     public void testStringTypeWithUnknownSchemaNodeAtTheEndOfTypeDefinition() throws Exception {
33         // given
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());
36
37         // when
38         final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
39
40         final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
41             QName.create(URI.create("urn:custom.types.demo"), DEFAULT_DATE_REV, "leaf-length-pattern-unknown"));
42
43         // then
44         Assert.assertNotNull(leaf);
45
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);
51
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");
56
57         final LengthConstraint lengthConstraint = ((StringTypeDefinition) type).getLengthConstraint().get();
58         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
59
60         Assert.assertNotNull(lengthConstraint);
61         Assert.assertNotNull(patternConstraints);
62         Assert.assertFalse(lengthConstraint.getAllowedRanges().isEmpty());
63         Assert.assertFalse(patternConstraints.isEmpty());
64
65         final Range<Integer> span = lengthConstraint.getAllowedRanges().span();
66         Assert.assertEquals(Integer.valueOf(2), span.lowerEndpoint());
67         Assert.assertEquals(Integer.valueOf(10), span.upperEndpoint());
68
69         final PatternConstraint patternConstraint = patternConstraints.get(0);
70         Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
71     }
72
73     @Test
74     public void testStringTypeWithUnknownSchemaNodeBetweenStringRestrictionStatements() throws Exception {
75         // given
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());
78
79         // when
80         final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
81
82         final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
83                 QName.create(URI.create("urn:custom.types.demo"), DEFAULT_DATE_REV, "leaf-length-unknown-pattern"));
84
85         // then
86         Assert.assertNotNull(leaf);
87
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);
93
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");
98
99         final LengthConstraint lengthConstraints = ((StringTypeDefinition) type).getLengthConstraint().get();
100         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
101
102         Assert.assertNotNull(lengthConstraints);
103         Assert.assertNotNull(patternConstraints);
104         Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
105         Assert.assertFalse(patternConstraints.isEmpty());
106
107         final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
108         Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
109         Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
110
111         final PatternConstraint patternConstraint = patternConstraints.get(0);
112         Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
113     }
114
115     @Test
116     public void testStringTypeWithUnknownSchemaNodeOnTheStartOfTypeDefinition() throws Exception {
117         // given
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());
120
121         // when
122         final SchemaContext schemaContext = TestUtils.parseYangSources(extdef, stringWithExt);
123
124         final LeafSchemaNode leaf = (LeafSchemaNode) typesModule(schemaContext).getDataChildByName(
125                 QName.create(URI.create("urn:custom.types.demo"), DEFAULT_DATE_REV, "leaf-unknown-length-pattern"));
126
127         // then
128         Assert.assertNotNull(leaf);
129
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);
135
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");
140
141         final LengthConstraint lengthConstraints =
142                 ((StringTypeDefinition) type).getLengthConstraint().get();
143         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
144
145         Assert.assertNotNull(lengthConstraints);
146         Assert.assertNotNull(patternConstraints);
147         Assert.assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
148         Assert.assertFalse(patternConstraints.size() == 0);
149
150         final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
151         Assert.assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
152         Assert.assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
153
154         final PatternConstraint patternConstraint = patternConstraints.get(0);
155         Assert.assertEquals(patternConstraint.getRegularExpression(), "^[0-9a-fA-F]$");
156     }
157
158     private static Module typesModule(final SchemaContext context) {
159         return context.findModules("types").iterator().next();
160     }
161 }