blob: ab4f45f8fb6c525f0e6d78e65458324e9726879a [file] [log] [blame]
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.linker;
18
19import java.io.IOException;
20import java.util.ListIterator;
21import org.junit.Test;
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053022import org.onosproject.yangutils.datamodel.YangContainer;
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053023import org.onosproject.yangutils.datamodel.YangDerivedInfo;
24import org.onosproject.yangutils.datamodel.YangLeaf;
25import org.onosproject.yangutils.datamodel.YangList;
26import org.onosproject.yangutils.datamodel.YangModule;
27import org.onosproject.yangutils.datamodel.YangNode;
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053028import org.onosproject.yangutils.datamodel.YangTypeDef;
29import org.onosproject.yangutils.parser.exceptions.ParserException;
30import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
31
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053032import static org.hamcrest.CoreMatchers.nullValue;
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053033import static org.hamcrest.MatcherAssert.assertThat;
34import static org.hamcrest.core.Is.is;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053035import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY;
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053036import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
37import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32;
38import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING;
39import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053040import static org.onosproject.yangutils.linker.impl.ResolvableStatus.INTRA_FILE_RESOLVED;
41import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED;
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053042
43/**
44 * Test cases for testing "type" intra file linking.
45 */
46public class IntraFileTypeLinkingTest {
47
48 private final YangUtilsParserManager manager = new YangUtilsParserManager();
49
50 /**
51 * Checks self resolution when typedef and leaf using type are siblings.
52 */
53 @Test
Vinod Kumar Sd4deb062016-04-15 18:08:57 +053054 public void processSelfResolutionWhenTypeAndTypedefAtRootLevel()
55 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053056
57 YangNode node = manager.getDataModel("src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevel.yang");
58
59 // Check whether the data model tree returned is of type module.
Vidyashree Rama7142d9c2016-04-26 15:06:06 +053060 assertThat(node instanceof YangModule, is(true));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053061
62 // Check whether the node type is set properly to module.
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053063 assertThat(node.getNodeType(), is(MODULE_NODE));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053064
65 // Check whether the module name is set correctly.
66 YangModule yangNode = (YangModule) node;
67 assertThat(yangNode.getName(), is("Test"));
68
69 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
70 YangLeaf leafInfo = leafIterator.next();
71
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053072 assertThat(leafInfo.getName(), is("invalid-interval"));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053073 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053074 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053075
76 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
77 is((YangTypeDef) node.getChild()));
78
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053079 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
80
81 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
82
83 // Check for the effective built-in type.
84 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
85
86 // Check for the restriction.
87 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
88 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
89 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
90 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +053091 }
92
93 /**
94 * Checks self resolution when typedef and leaf using type are at different
95 * level where typedef is at the root.
96 */
97 @Test
Vinod Kumar Sd4deb062016-04-15 18:08:57 +053098 public void processSelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy()
99 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530100
101 YangNode node =
102 manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy.yang");
103
104 // Check whether the data model tree returned is of type module.
105 assertThat((node instanceof YangModule), is(true));
106
107 // Check whether the node type is set properly to module.
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530108 assertThat(node.getNodeType(), is(MODULE_NODE));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530109
110 // Check whether the module name is set correctly.
111 YangModule yangNode = (YangModule) node;
112 assertThat(yangNode.getName(), is("Test"));
113
114 YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
115
116 YangList yangList = (YangList) yangContainer.getChild();
117
118 ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
119 YangLeaf leafInfo = leafIterator.next();
120
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530121 assertThat(leafInfo.getName(), is("invalid-interval"));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530122 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530123 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530124
125 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
126 is((YangTypeDef) node.getChild()));
127
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530128 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
129
130 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
131
132 // Check for the effective built-in type.
133 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
134
135 // Check for the restriction.
136 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
137 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
138 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
139 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530140 }
141
142 /**
143 * Checks self resolution when typedef and leaf using type are at different
144 * level where typedef is at the root and defined after parent holder
145 * of type.
146 */
147 @Test
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530148 public void processSelfFileLinkingTypedefAtRootIsAfterContainerHavingType()
149 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530150
151 YangNode node =
152 manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtRootIsAfterContainerHavingType.yang");
153
154 // Check whether the data model tree returned is of type module.
155 assertThat((node instanceof YangModule), is(true));
156
157 // Check whether the node type is set properly to module.
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530158 assertThat(node.getNodeType(), is(MODULE_NODE));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530159
160 // Check whether the module name is set correctly.
161 YangModule yangNode = (YangModule) node;
162 assertThat(yangNode.getName(), is("Test"));
163
164 YangContainer yangContainer = (YangContainer) node.getChild();
165
166 YangList yangList = (YangList) yangContainer.getChild();
167
168 ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
169 YangLeaf leafInfo = leafIterator.next();
170
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530171 assertThat(leafInfo.getName(), is("invalid-interval"));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530172 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530173 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530174
175 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
176 is((YangTypeDef) node.getChild().getNextSibling()));
177
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530178 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
179
180 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
181
182 // Check for the effective built-in type.
183 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
184
185 // Check for the restriction.
186 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
187 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
188 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
189 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530190 }
191
192 /**
193 * Checks self resolution when typedef and leaf using type are at different
194 * level where typedef is at the level of root+1 and defined after parent
195 * holder of type.
196 */
197 @Test
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530198 public void processSelfFileLinkingTypedefAtMiddleLevelAfterParentHolder()
199 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530200
201 YangNode node =
202 manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtMiddleLevelAfterParentHolder.yang");
203
204 // Check whether the data model tree returned is of type module.
205 assertThat((node instanceof YangModule), is(true));
206
207 // Check whether the node type is set properly to module.
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530208 assertThat(node.getNodeType(), is(MODULE_NODE));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530209
210 // Check whether the module name is set correctly.
211 YangModule yangNode = (YangModule) node;
212 assertThat(yangNode.getName(), is("Test"));
213
214 YangContainer yangContainer = (YangContainer) node.getChild();
215
216 YangList yangList = (YangList) yangContainer.getChild();
217
218 ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
219 YangLeaf leafInfo = leafIterator.next();
220
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530221 assertThat(leafInfo.getName(), is("invalid-interval"));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530222 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530223 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530224
225 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
226 is((YangTypeDef) yangContainer.getChild().getNextSibling()));
227
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530228 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
229
230 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
231
232 // Check for the effective built-in type.
233 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
234
235 // Check for the restriction.
236 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
237 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
238 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
239 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530240 }
241
242 /**
243 * Checks self resolution when typedef hierarchical references are present.
244 */
245 @Test
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530246 public void processSelfFileLinkingWithTypdefHierarchicalReference()
247 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530248
249 YangNode node =
250 manager.getDataModel("src/test/resources/SelfFileLinkingWithTypdefHierarchicalReference.yang");
251
252 // Check whether the data model tree returned is of type module.
253 assertThat((node instanceof YangModule), is(true));
254
255 // Check whether the node type is set properly to module.
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530256 assertThat(node.getNodeType(), is(MODULE_NODE));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530257
258 // Check whether the module name is set correctly.
259 YangModule yangNode = (YangModule) node;
260 assertThat(yangNode.getName(), is("Test"));
261
262 YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
263
264 YangList yangList = (YangList) yangContainer.getChild();
265
266 ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
267 YangLeaf leafInfo = leafIterator.next();
268
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530269 assertThat(leafInfo.getName(), is("invalid-interval"));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530270 assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530271 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530272
273 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
274 is((YangTypeDef) yangList.getChild()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530275 assertThat(leafInfo.getDataType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530276 is(RESOLVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530277
278 YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
279
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530280 assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530281 is((YangTypeDef) yangContainer.getChild().getNextSibling()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530282 assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530283 is(RESOLVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530284
285 YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
286
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530287 assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530288 is((YangTypeDef) node.getChild()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530289 assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530290 is(RESOLVED));
291
292 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
293
294 // Check for the effective built-in type.
295 assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
296
297 // Check for the restriction.
298 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
299 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
300 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
301 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530302 }
303
304 /**
305 * Checks self resolution when typedef hierarchical references are present
306 * with last type is unresolved.
307 */
308 @Test
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530309 public void processSelfFileLinkingWithTypdefHierarchicalRefUnresolved()
310 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530311
312 YangNode node =
313 manager.getDataModel("src/test/resources/SelfFileLinkingWithTypdefHierarchicalRefUnresolved.yang");
314
315 // Check whether the data model tree returned is of type module.
316 assertThat((node instanceof YangModule), is(true));
317
318 // Check whether the node type is set properly to module.
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530319 assertThat(node.getNodeType(), is(MODULE_NODE));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530320
321 // Check whether the module name is set correctly.
322 YangModule yangNode = (YangModule) node;
323 assertThat(yangNode.getName(), is("Test"));
324
325 YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
326
327 YangList yangList = (YangList) yangContainer.getChild();
328
329 ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
330 YangLeaf leafInfo = leafIterator.next();
331
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530332 assertThat(leafInfo.getName(), is("invalid-interval"));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530333 assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530334 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530335
336 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
337 is((YangTypeDef) yangList.getChild()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530338 assertThat(leafInfo.getDataType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530339 is(INTRA_FILE_RESOLVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530340
341 YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
342
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530343 assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530344 is((YangTypeDef) yangContainer.getChild().getNextSibling()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530345 assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530346 is(INTRA_FILE_RESOLVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530347
348 YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
349
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530350 assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530351 is((YangTypeDef) node.getChild()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530352 assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530353 is(INTRA_FILE_RESOLVED));
354
355 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
356
357 // Check for the effective built-in type.
358 assertThat(derivedInfo.getEffectiveBuiltInType(), is(nullValue()));
359
360 // Check for the restriction.
361 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
362 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
363 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
364 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530365 }
366
367 /**
368 * Checks self resolution when type uses prefix of self module.
369 */
370 @Test
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530371 public void processSelfFileLinkingWithTypeWithSelfModulePrefix()
372 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530373
374 YangNode node =
375 manager.getDataModel("src/test/resources/SelfFileLinkingWithTypeWithSelfModulePrefix.yang");
376
377 // Check whether the data model tree returned is of type module.
378 assertThat((node instanceof YangModule), is(true));
379
380 // Check whether the node type is set properly to module.
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530381 assertThat(node.getNodeType(), is(MODULE_NODE));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530382
383 // Check whether the module name is set correctly.
384 YangModule yangNode = (YangModule) node;
385 assertThat(yangNode.getName(), is("Test"));
386
387 YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
388
389 YangList yangList = (YangList) yangContainer.getChild();
390
391 ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
392 YangLeaf leafInfo = leafIterator.next();
393
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530394 assertThat(leafInfo.getName(), is("invalid-interval"));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530395 assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530396 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530397
398 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
399 is((YangTypeDef) yangList.getChild()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530400 assertThat(leafInfo.getDataType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530401 is(RESOLVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530402
403 YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
404
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530405 assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530406 is((YangTypeDef) yangContainer.getChild().getNextSibling()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530407 assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530408 is(RESOLVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530409
410 YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
411
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530412 assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530413 is((YangTypeDef) node.getChild()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530414 assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530415 is(RESOLVED));
416
417 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
418
419 // Check for the effective built-in type.
420 assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
421
422 // Check for the restriction.
423 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
424 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
425 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
426 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530427 }
428
429 /**
430 * Checks self resolution when some type uses prefix of self module
431 * some uses external prefix.
432 */
433 @Test
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530434 public void processSelfFileLinkingWithTypeWithSelfAndExternalPrefixMix()
435 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530436
437 YangNode node =
438 manager.getDataModel("src/test/resources/SelfFileLinkingWithTypeWithSelfAndExternalPrefixMix.yang");
439
440 // Check whether the data model tree returned is of type module.
441 assertThat((node instanceof YangModule), is(true));
442
443 // Check whether the node type is set properly to module.
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530444 assertThat(node.getNodeType(), is(MODULE_NODE));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530445
446 // Check whether the module name is set correctly.
447 YangModule yangNode = (YangModule) node;
448 assertThat(yangNode.getName(), is("Test"));
449
450 YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
451
452 YangList yangList = (YangList) yangContainer.getChild();
453
454 ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
455 YangLeaf leafInfo = leafIterator.next();
456
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530457 assertThat(leafInfo.getName(), is("invalid-interval"));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530458 assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530459 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530460
461 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
462 is((YangTypeDef) yangList.getChild()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530463 assertThat(leafInfo.getDataType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530464 is(INTRA_FILE_RESOLVED));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530465
466 YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
467
468 YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
469
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530470 assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530471 is((YangTypeDef) node.getChild()));
Vidyashree Rama7142d9c2016-04-26 15:06:06 +0530472 assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530473 is(RESOLVED));
474
475 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
476
477 // Check for the effective built-in type.
478 assertThat(derivedInfo.getEffectiveBuiltInType(), is(nullValue()));
479
480 // Check for the restriction.
481 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
482 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
483 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
484 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530485 }
486
487 /**
488 * Check self resolution when type referred typedef is not available in
489 * file.
490 */
491 @Test(expected = ParserException.class)
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530492 public void processSelfResolutionWhenTypeReferredTypedefNotDefined()
493 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530494
495 YangNode node =
496 manager.getDataModel("src/test/resources/SelfResolutionWhenTypeReferredTypedefNotDefined.yang");
497 }
498
499 /**
500 * Checks self resolution when typedef and leaf using type are at different
501 * level where typedef is is not an ancestor of type.
502 */
503 @Test(expected = ParserException.class)
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530504 public void processSelfFileLinkingTypedefNotFound()
505 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530506
507 YangNode node = manager.getDataModel("src/test/resources/SelfFileLinkingTypedefNotFound.yang");
508 }
509
510 /**
511 * Checks hierarchical self resolution with self resolution failure scenario.
512 */
513 @Test(expected = ParserException.class)
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530514 public void processSelfFileLinkingWithHierarchicalTypeFailureScenario()
515 throws IOException, ParserException {
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530516
517 YangNode node =
518 manager.getDataModel("src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang");
519 }
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530520
521 /**
522 * Checks self resolution when typedef and leaf using type are siblings for binary type.
523 */
524 @Test
525 public void processSelfResolutionWhenTypeAndTypedefAtRootLevelForBinary()
526 throws IOException, ParserException {
527
528 YangNode node
529 = manager.getDataModel("src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevelForBinary.yang");
530
531 // Check whether the data model tree returned is of type module.
532 assertThat(node instanceof YangModule, is(true));
533
534 // Check whether the node type is set properly to module.
535 assertThat(node.getNodeType(), is(MODULE_NODE));
536
537 // Check whether the module name is set correctly.
538 YangModule yangNode = (YangModule) node;
539 assertThat(yangNode.getName(), is("ospf"));
540
541 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
542 YangLeaf leafInfo = leafIterator.next();
543
544 assertThat(leafInfo.getName(), is("typedef14"));
545 assertThat(leafInfo.getDataType().getDataTypeName(), is("type14"));
546 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
547
548 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
549 is((YangTypeDef) node.getChild()));
550
551 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
552
553 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
554
555 // Check for the effective built-in type.
556 assertThat(derivedInfo.getEffectiveBuiltInType(), is(BINARY));
557
558 // Check for the restriction.
559 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
560 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
561 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
562 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
563 }
Gaurav Agrawald9d6cc82016-03-29 02:17:23 +0530564}