blob: 2251082258eadcf3c7df4d364249dada1360fe61 [file] [log] [blame]
Vidyashree Rama49abe712016-02-13 22:22:12 +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 org.junit.Rule;
20import org.junit.Test;
21
22import org.junit.rules.ExpectedException;
23import org.onosproject.yangutils.datamodel.YangLeafList;
24import org.onosproject.yangutils.datamodel.YangModule;
25import org.onosproject.yangutils.datamodel.YangNode;
26import org.onosproject.yangutils.datamodel.YangNodeType;
27import org.onosproject.yangutils.datamodel.YangList;
28import org.onosproject.yangutils.parser.exceptions.ParserException;
29import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
30
31import java.io.IOException;
32import java.util.ListIterator;
33
34import static org.hamcrest.MatcherAssert.assertThat;
35import static org.hamcrest.core.Is.is;
36
37/**
38 * Test cases for testing min-elements listener.
39 */
40public class MinElementsListenerTest {
41
42 @Rule
43 public ExpectedException thrown = ExpectedException.none();
44
45 private final YangUtilsParserManager manager = new YangUtilsParserManager();
46
47 /**
48 * Checks min-elements as sub-statements of leaf-list.
49 */
50 @Test
51 public void processLeafListSubStatementMinElements() throws IOException, ParserException {
52
53 YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementMinElements.yang");
54
55 // Check whether the data model tree returned is of type module.
56 assertThat((node instanceof YangModule), is(true));
57
58 // Check whether the node type is set properly to module.
59 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
60
61 // Check whether the module name is set correctly.
62 YangModule yangNode = (YangModule) node;
63 assertThat(yangNode.getName(), is("Test"));
64
Bharat saraswal870c56f2016-02-20 21:57:16 +053065 ListIterator<YangLeafList<?>> leafListIterator = yangNode.getListOfLeafList().listIterator();
66 YangLeafList<?> leafListInfo = leafListIterator.next();
Vidyashree Rama49abe712016-02-13 22:22:12 +053067
68 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
69 assertThat(leafListInfo.getMinElements(), is(3));
70 }
71
72 /**
73 * Checks min-elements as sub-statements of list.
74 */
75 @Test
76 public void processListSubStatementMinElements() throws IOException, ParserException {
77
78 YangNode node = manager.getDataModel("src/test/resources/ListSubStatementMinElements.yang");
79
80 assertThat((node instanceof YangModule), is(true));
81
82 // Check whether the node type is set properly to module.
83 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
84
85 // Check whether the module name is set correctly.
86 YangModule yangNode = (YangModule) node;
87 assertThat(yangNode.getName(), is("Test"));
88
89 // Check whether the list is child of module
90 YangList yangList = (YangList) yangNode.getChild();
91 assertThat(yangList.getName(), is("valid"));
92 assertThat(yangList.getMinElements(), is(3));
93 }
94
95 /**
96 * Checks whether exception is thrown when invalid min-elements keyword
97 * is given as input.
98 */
99 @Test
100 public void processMinElementsInvalidKeyword() throws IOException, ParserException {
101 thrown.expect(ParserException.class);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530102 thrown.expectMessage("extraneous input 'min-element' expecting {'config', 'description', 'if-feature',"
103 + " 'max-elements', 'min-elements', 'must', 'ordered-by', 'reference', 'status', 'type', 'units',"
104 + " 'when', '}'}");
Vidyashree Rama49abe712016-02-13 22:22:12 +0530105 YangNode node = manager.getDataModel("src/test/resources/MinElementsInvalidKeyword.yang");
106 }
107
108 /**
109 * Checks whether exception is thrown when invalid min-elements value
110 * is given as input.
111 */
112 @Test
113 public void processMinElementsInvalidValue() throws IOException, ParserException {
114 thrown.expect(ParserException.class);
115 thrown.expectMessage("mismatched input 'asd' expecting INTEGER");
116 YangNode node = manager.getDataModel("src/test/resources/MinElementsInvalidValue.yang");
117 }
118
119 /**
120 * Checks whether exception is thrown when min-elements statement without statement
121 * end is given as input.
122 */
123 @Test
124 public void processMinElementsWithoutStatementEnd() throws IOException, ParserException {
125 thrown.expect(ParserException.class);
126 thrown.expectMessage("missing ';' at 'description'");
127 YangNode node = manager.getDataModel("src/test/resources/MinElementsWithoutStatementEnd.yang");
128 }
129
130 /**
131 * Checks whether exception is thrown when min-elements cardinality is not
132 * as per the grammar.
133 */
134 @Test
135 public void processMinElementsInvalidCardinality() throws IOException, ParserException {
136 thrown.expect(ParserException.class);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530137 thrown.expectMessage(
138 "Internal parser error detected: Invalid cardinality in" + " min-elements before processing.");
Vidyashree Rama49abe712016-02-13 22:22:12 +0530139 YangNode node = manager.getDataModel("src/test/resources/MinElementsInvalidCardinality.yang");
140 }
141}