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