blob: ffd8470ecb351ec43421c75bc3fc059c1a17b9c5 [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;
21
22import org.junit.Test;
23import org.onosproject.yangutils.datamodel.YangNode;
24import org.onosproject.yangutils.datamodel.YangNodeType;
25import org.onosproject.yangutils.datamodel.YangModule;
26import org.onosproject.yangutils.datamodel.YangLeaf;
27import org.onosproject.yangutils.datamodel.YangLeafList;
28import org.onosproject.yangutils.datamodel.YangDataTypes;
29import org.onosproject.yangutils.datamodel.YangTypeDef;
30import org.onosproject.yangutils.datamodel.YangPatternRestriction;
31import org.onosproject.yangutils.datamodel.YangStringRestriction;
32import 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
61 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
62 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
87 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
88 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();
111 YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getDataType()
112 .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
134 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
135 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
160 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
161 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 }
169}