blob: c861efa8e6c611b497e864607d0bca47a6a4f0d9 [file] [log] [blame]
Vidyashree Ramaa2f73982016-04-12 23:33:33 +05301/*
2 * Copyright 2016 Open Networking Laboratory
3 *
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.parser.impl.listeners;
18
19import java.io.IOException;
20import java.util.ListIterator;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053021
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053022import org.junit.Test;
Gaurav Agrawal72cd1b72016-06-30 13:28:14 +053023import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053024import org.onosproject.yangutils.datamodel.YangLeaf;
25import org.onosproject.yangutils.datamodel.YangLeafList;
Gaurav Agrawal8d0ad2f2016-05-20 14:40:50 +053026import org.onosproject.yangutils.datamodel.YangModule;
27import org.onosproject.yangutils.datamodel.YangNode;
28import org.onosproject.yangutils.datamodel.YangNodeType;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053029import org.onosproject.yangutils.datamodel.YangPatternRestriction;
30import org.onosproject.yangutils.datamodel.YangStringRestriction;
Gaurav Agrawal8d0ad2f2016-05-20 14:40:50 +053031import org.onosproject.yangutils.datamodel.YangTypeDef;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053032import org.onosproject.yangutils.parser.exceptions.ParserException;
33import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
34
35import static org.hamcrest.MatcherAssert.assertThat;
36import static org.hamcrest.core.Is.is;
37
38/**
39 * Test cases for pattern restriction listener.
40 */
41public class PatternRestrictionListenerTest {
42
43 private final YangUtilsParserManager manager = new YangUtilsParserManager();
44
45 /**
46 * Checks valid pattern statement as sub-statement of leaf statement.
47 */
48 @Test
49 public void processValidPatternStatement() throws IOException, ParserException {
50
51 YangNode node = manager.getDataModel("src/test/resources/ValidPatternStatement.yang");
52
53 assertThat((node instanceof YangModule), is(true));
54 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
55 YangModule yangNode = (YangModule) node;
56 assertThat(yangNode.getName(), is("Test"));
57
58 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
59 YangLeaf leafInfo = leafIterator.next();
60
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053061 assertThat(leafInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053062 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
63 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
64 YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
65 .getDataType().getDataTypeExtendedInfo();
66 ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
67 .getPatternList().listIterator();
68 assertThat(patternListIterator.next(), is("[a-zA-Z]"));
69 }
70
71 /**
72 * Checks valid pattern statement as sub-statement of leaf-list.
73 */
74 @Test
75 public void processPatternStatementInsideLeafList() throws IOException, ParserException {
76
77 YangNode node = manager.getDataModel("src/test/resources/PatternStatementInsideLeafList.yang");
78
79 assertThat((node instanceof YangModule), is(true));
80 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
81 YangModule yangNode = (YangModule) node;
82 assertThat(yangNode.getName(), is("Test"));
83
84 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
85 YangLeafList leafListInfo = leafListIterator.next();
86
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053087 assertThat(leafListInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053088 assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
89 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
90 YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
91 .getDataType().getDataTypeExtendedInfo();
92 ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
93 .getPatternList().listIterator();
94 assertThat(patternListIterator.next(), is("[a-zA-Z]"));
95 }
96
97 /**
98 * Checks valid pattern statement as sub-statement of typedef.
99 */
100 @Test
101 public void processPatternStatementInsideTypeDef() throws IOException, ParserException {
102
103 YangNode node = manager.getDataModel("src/test/resources/PatternStatementInsideTypeDef.yang");
104
105 assertThat((node instanceof YangModule), is(true));
106 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
107 YangModule yangNode = (YangModule) node;
108 assertThat(yangNode.getName(), is("Test"));
109
110 YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530111 YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getTypeDefBaseType()
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530112 .getDataTypeExtendedInfo();
113
114 YangPatternRestriction yangPatternRestriction = stringRestriction.getPatternRestriction();
115 assertThat(yangPatternRestriction.getPatternList().listIterator().next(), is("[a-zA-Z]"));
116 }
117
118 /**
119 * Checks valid multiple pattern statements.
120 */
121 @Test
122 public void processMultiplePatternStatement() throws IOException, ParserException {
123
124 YangNode node = manager.getDataModel("src/test/resources/MultiplePatternStatement.yang");
125
126 assertThat((node instanceof YangModule), is(true));
127 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
128 YangModule yangNode = (YangModule) node;
129 assertThat(yangNode.getName(), is("Test"));
130
131 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
132 YangLeafList leafListInfo = leafListIterator.next();
133
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530134 assertThat(leafListInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530135 assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
136 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
137 YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
138 .getDataType().getDataTypeExtendedInfo();
139 ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
140 .getPatternList().listIterator();
141 assertThat(patternListIterator.next(), is("[a-zA-Z]"));
142 }
143
144 /**
145 * Checks valid pattern statement with plus symbol in pattern.
146 */
147 @Test
148 public void processPatternStatementWithPlus() throws IOException, ParserException {
149
150 YangNode node = manager.getDataModel("src/test/resources/PatternStatementWithPlus.yang");
151
152 assertThat((node instanceof YangModule), is(true));
153 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
154 YangModule yangNode = (YangModule) node;
155 assertThat(yangNode.getName(), is("Test"));
156
157 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
158 YangLeafList leafListInfo = leafListIterator.next();
159
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530160 assertThat(leafListInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530161 assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
162 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
163 YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
164 .getDataType().getDataTypeExtendedInfo();
165 ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
166 .getPatternList().listIterator();
167 assertThat(patternListIterator.next(), is("-[0-9]+|[0-9]+"));
168 }
Vidyashree Rama1db15562016-05-17 16:16:15 +0530169
170 /**
171 * Checks valid pattern substatement.
172 */
173 @Test
174 public void processPatternSubStatements() throws IOException, ParserException {
175
176 YangNode node = manager.getDataModel("src/test/resources/PatternSubStatements.yang");
177
178 assertThat((node instanceof YangModule), is(true));
179 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
180 YangModule yangNode = (YangModule) node;
181 assertThat(yangNode.getName(), is("Test"));
182
183 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
184 YangLeaf leafInfo = leafIterator.next();
185
186 assertThat(leafInfo.getName(), is("invalid-interval"));
187 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
188 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
189 YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
190 .getDataType().getDataTypeExtendedInfo();
191 assertThat(stringRestriction.getDescription(), is("\"pattern description\""));
192 assertThat(stringRestriction.getReference(), is("\"pattern reference\""));
193 ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
194 .getPatternList().listIterator();
195 assertThat(patternListIterator.next(), is("[a-zA-Z]"));
196 }
Gaurav Agrawal8d0ad2f2016-05-20 14:40:50 +0530197
198 /**
199 * Checks invalid pattern sub-statement.
200 */
201 @Test(expected = ParserException.class)
202 public void processInvalidPatternSubStatements() throws IOException, ParserException {
203 YangNode node = manager.getDataModel("src/test/resources/InvalidPatternSubStatements.yang");
204 }
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530205}