Committed by
Gerrit Code Review
[ONOS-3880, 3881] Yang Listener for Module and Sub-Module
Change-Id: Iee75c3e04af9b66ebc38acb3396aa4c54af5a268
Showing
99 changed files
with
3309 additions
and
211 deletions
... | @@ -130,7 +130,186 @@ public enum ParsableDataType { | ... | @@ -130,7 +130,186 @@ public enum ParsableDataType { |
130 | REVISION_DATA, | 130 | REVISION_DATA, |
131 | 131 | ||
132 | /** | 132 | /** |
133 | + * Identifies the YANG revision date parsed data. | ||
134 | + */ | ||
135 | + REVISION_DATE_DATA, | ||
136 | + | ||
137 | + /** | ||
133 | * Identifies the YANG namespace parsed data. | 138 | * Identifies the YANG namespace parsed data. |
134 | */ | 139 | */ |
135 | - NAMESPACE_DATA | 140 | + NAMESPACE_DATA, |
136 | -} | 141 | + |
142 | + /** | ||
143 | + * Identifies the YANG contact parsed data. | ||
144 | + */ | ||
145 | + CONTACT_DATA, | ||
146 | + | ||
147 | + /** | ||
148 | + * Identifies the YANG config parsed data. | ||
149 | + */ | ||
150 | + CONFIG_DATA, | ||
151 | + | ||
152 | + /** | ||
153 | + * Identifies the YANG description parsed data. | ||
154 | + */ | ||
155 | + DESCRIPTION_DATA, | ||
156 | + | ||
157 | + /** | ||
158 | + * Identifies the YANG key parsed data. | ||
159 | + */ | ||
160 | + KEY_DATA, | ||
161 | + | ||
162 | + /** | ||
163 | + * Identifies the YANG mandatory parsed data. | ||
164 | + */ | ||
165 | + MANDATORY_DATA, | ||
166 | + | ||
167 | + /** | ||
168 | + * Identifies the YANG max element parsed data. | ||
169 | + */ | ||
170 | + MAX_ELEMENT_DATA, | ||
171 | + | ||
172 | + /** | ||
173 | + * Identifies the YANG min element parsed data. | ||
174 | + */ | ||
175 | + MIN_ELEMENT_DATA, | ||
176 | + | ||
177 | + /** | ||
178 | + * Identifies the YANG presence element parsed data. | ||
179 | + */ | ||
180 | + PRESENCE_DATA, | ||
181 | + | ||
182 | + /** | ||
183 | + * Identifies the YANG reference element parsed data. | ||
184 | + */ | ||
185 | + REFERENCE_DATA, | ||
186 | + | ||
187 | + /** | ||
188 | + * Identifies the YANG status element parsed data. | ||
189 | + */ | ||
190 | + STATUS_DATA, | ||
191 | + | ||
192 | + /** | ||
193 | + * Identifies the YANG units element parsed data. | ||
194 | + */ | ||
195 | + UNITS_DATA, | ||
196 | + | ||
197 | + /** | ||
198 | + * Identifies the YANG version element parsed data. | ||
199 | + */ | ||
200 | + VERSION_DATA, | ||
201 | + | ||
202 | + /** | ||
203 | + * Identifies the YANG base element parsed data. | ||
204 | + */ | ||
205 | + YANGBASE_DATA, | ||
206 | + | ||
207 | + /** | ||
208 | + * Identifies the YANG prefix element parsed data. | ||
209 | + */ | ||
210 | + PREFIX_DATA, | ||
211 | + | ||
212 | + /** | ||
213 | + * Identifies the YANG default element parsed data. | ||
214 | + */ | ||
215 | + DEFAULT_DATA, | ||
216 | + | ||
217 | + /** | ||
218 | + * Identifies the YANG organization parsed data. | ||
219 | + */ | ||
220 | + ORGANIZATION_DATA; | ||
221 | + | ||
222 | + /** | ||
223 | + * Returns the YANG construct keyword corresponding to enum values. | ||
224 | + * | ||
225 | + * @param parsableDataType enum value for parsable data type. | ||
226 | + * @return YANG construct keyword. | ||
227 | + */ | ||
228 | + public static String getParsableDataType(ParsableDataType parsableDataType) { | ||
229 | + | ||
230 | + switch (parsableDataType) { | ||
231 | + case MODULE_DATA: | ||
232 | + return "module"; | ||
233 | + case SUB_MODULE_DATA: | ||
234 | + return "submodule"; | ||
235 | + case TYPEDEF_DATA: | ||
236 | + return "typedef"; | ||
237 | + case TYPE_DATA: | ||
238 | + return "type"; | ||
239 | + case CHOICE_DATA: | ||
240 | + return "choice"; | ||
241 | + case CASE_DATA: | ||
242 | + return "case"; | ||
243 | + case ENUMERATION_DATA: | ||
244 | + return "enumeration"; | ||
245 | + case GROUPING_DATA: | ||
246 | + return "grouping"; | ||
247 | + case USES_DATA: | ||
248 | + return "uses"; | ||
249 | + case AUGMENT_DATA: | ||
250 | + return "augment"; | ||
251 | + case CONTAINER_DATA: | ||
252 | + return "container"; | ||
253 | + case LIST_DATA: | ||
254 | + return "list"; | ||
255 | + case BELONGS_TO_DATA: | ||
256 | + return "belongs-to"; | ||
257 | + case BIT_DATA: | ||
258 | + return "bit"; | ||
259 | + case BITS_DATA: | ||
260 | + return "bits"; | ||
261 | + case ENUM_DATA: | ||
262 | + return "enum"; | ||
263 | + case IMPORT_DATA: | ||
264 | + return "import"; | ||
265 | + case INCLUDE_DATA: | ||
266 | + return "include"; | ||
267 | + case LEAF_DATA: | ||
268 | + return "leaf"; | ||
269 | + case LEAF_LIST_DATA: | ||
270 | + return "leaf-list"; | ||
271 | + case MUST_DATA: | ||
272 | + return "must"; | ||
273 | + case REVISION_DATA: | ||
274 | + return "revision"; | ||
275 | + case REVISION_DATE_DATA: | ||
276 | + return "revision-date"; | ||
277 | + case NAMESPACE_DATA: | ||
278 | + return "namespace"; | ||
279 | + case CONTACT_DATA: | ||
280 | + return "contact"; | ||
281 | + case CONFIG_DATA: | ||
282 | + return "config"; | ||
283 | + case DESCRIPTION_DATA: | ||
284 | + return "description"; | ||
285 | + case KEY_DATA: | ||
286 | + return "key"; | ||
287 | + case MANDATORY_DATA: | ||
288 | + return "mandatory"; | ||
289 | + case MAX_ELEMENT_DATA: | ||
290 | + return "max-elements"; | ||
291 | + case MIN_ELEMENT_DATA: | ||
292 | + return "min-elements"; | ||
293 | + case PRESENCE_DATA: | ||
294 | + return "presence"; | ||
295 | + case REFERENCE_DATA: | ||
296 | + return "reference"; | ||
297 | + case STATUS_DATA: | ||
298 | + return "status"; | ||
299 | + case UNITS_DATA: | ||
300 | + return "units"; | ||
301 | + case VERSION_DATA: | ||
302 | + return "version"; | ||
303 | + case YANGBASE_DATA: | ||
304 | + return "yangbase"; | ||
305 | + case PREFIX_DATA: | ||
306 | + return "prefix"; | ||
307 | + case ORGANIZATION_DATA: | ||
308 | + return "organization"; | ||
309 | + case DEFAULT_DATA: | ||
310 | + return "default"; | ||
311 | + default: | ||
312 | + return "yang"; | ||
313 | + } | ||
314 | + } | ||
315 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -19,13 +19,12 @@ package org.onosproject.yangutils.parser.exceptions; | ... | @@ -19,13 +19,12 @@ package org.onosproject.yangutils.parser.exceptions; |
19 | /** | 19 | /** |
20 | * Base class for exceptions in parser operations. | 20 | * Base class for exceptions in parser operations. |
21 | */ | 21 | */ |
22 | -public class ParserException extends Exception { | 22 | +public class ParserException extends RuntimeException { |
23 | 23 | ||
24 | private static final long serialVersionUID = 20160211L; | 24 | private static final long serialVersionUID = 20160211L; |
25 | private int lineNumber; | 25 | private int lineNumber; |
26 | private int charPositionInLine; | 26 | private int charPositionInLine; |
27 | private String fileName; | 27 | private String fileName; |
28 | - private String msg; | ||
29 | 28 | ||
30 | /** | 29 | /** |
31 | * Create a new parser exception. | 30 | * Create a new parser exception. |
... | @@ -90,15 +89,6 @@ public class ParserException extends Exception { | ... | @@ -90,15 +89,6 @@ public class ParserException extends Exception { |
90 | } | 89 | } |
91 | 90 | ||
92 | /** | 91 | /** |
93 | - * Returns msg detail of exception in string. | ||
94 | - * | ||
95 | - * @return msg detail of exception in string | ||
96 | - */ | ||
97 | - public String getMsg() { | ||
98 | - return this.msg; | ||
99 | - } | ||
100 | - | ||
101 | - /** | ||
102 | * Sets line number of YANG file. | 92 | * Sets line number of YANG file. |
103 | * | 93 | * |
104 | * @param line line number of YANG file | 94 | * @param line line number of YANG file |
... | @@ -117,15 +107,6 @@ public class ParserException extends Exception { | ... | @@ -117,15 +107,6 @@ public class ParserException extends Exception { |
117 | } | 107 | } |
118 | 108 | ||
119 | /** | 109 | /** |
120 | - * Sets the detail of exception in string. | ||
121 | - * | ||
122 | - * @param msg the detail of exception in string | ||
123 | - */ | ||
124 | - public void setMsg(String msg) { | ||
125 | - this.msg = msg; | ||
126 | - } | ||
127 | - | ||
128 | - /** | ||
129 | * Sets file name in parser exception. | 110 | * Sets file name in parser exception. |
130 | * | 111 | * |
131 | * @param fileName YANG file name | 112 | * @param fileName YANG file name | ... | ... |
... | @@ -69,16 +69,12 @@ public class YangUtilsParserManager implements YangUtilsParser { | ... | @@ -69,16 +69,12 @@ public class YangUtilsParserManager implements YangUtilsParser { |
69 | // Add customized error listener to catch errors during parsing. | 69 | // Add customized error listener to catch errors during parsing. |
70 | parser.addErrorListener(parseTreeErrorListener); | 70 | parser.addErrorListener(parseTreeErrorListener); |
71 | 71 | ||
72 | - // Begin parsing YANG file and generate parse tree. | 72 | + ParseTree tree; |
73 | - ParseTree tree = parser.yangfile(); | ||
74 | 73 | ||
75 | - /** | 74 | + try { |
76 | - * Throws an parser Exception if exception flag is set i.e. exception has | 75 | + // Begin parsing YANG file and generate parse tree. |
77 | - * occurred during parsing. | 76 | + tree = parser.yangfile(); |
78 | - */ | 77 | + } catch (ParserException parserException) { |
79 | - if (parseTreeErrorListener.isExceptionFlag()) { | ||
80 | - // Get the exception occurred during parsing. | ||
81 | - ParserException parserException = parseTreeErrorListener.getParserException(); | ||
82 | parserException.setFileName(yangFile); | 78 | parserException.setFileName(yangFile); |
83 | throw parserException; | 79 | throw parserException; |
84 | } | 80 | } |
... | @@ -93,18 +89,17 @@ public class YangUtilsParserManager implements YangUtilsParser { | ... | @@ -93,18 +89,17 @@ public class YangUtilsParserManager implements YangUtilsParser { |
93 | * Walk parse tree, provide call backs to methods in listener and | 89 | * Walk parse tree, provide call backs to methods in listener and |
94 | * build data model tree. | 90 | * build data model tree. |
95 | */ | 91 | */ |
96 | - walker.walk(treeWalker, tree); | 92 | + try { |
97 | - | 93 | + walker.walk(treeWalker, tree); |
98 | - // Throws an parser exception which has occurred during listener walk. | 94 | + } catch (ParserException listenerException) { |
99 | - if (treeWalker.getErrorInformation().isErrorFlag()) { | 95 | + // TODO free incomplete data model tree. |
100 | - // Create object of listener exception | ||
101 | - ParserException listenerException = new ParserException(); | ||
102 | - listenerException.setMsg(treeWalker.getErrorInformation().getErrorMsg()); | ||
103 | listenerException.setFileName(yangFile); | 96 | listenerException.setFileName(yangFile); |
104 | throw listenerException; | 97 | throw listenerException; |
98 | + } finally { | ||
99 | + // TODO free parsable stack | ||
105 | } | 100 | } |
106 | 101 | ||
107 | // Returns the Root Node of the constructed data model tree. | 102 | // Returns the Root Node of the constructed data model tree. |
108 | return treeWalker.getRootNode(); | 103 | return treeWalker.getRootNode(); |
109 | } | 104 | } |
110 | -} | 105 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,17 @@ | ... | @@ -16,8 +16,17 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
20 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
21 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
22 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 30 | ||
22 | /* | 31 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 32 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -48,7 +57,11 @@ public final class BaseFileListener { | ... | @@ -48,7 +57,11 @@ public final class BaseFileListener { |
48 | * @param ctx context object of the grammar rule. | 57 | * @param ctx context object of the grammar rule. |
49 | */ | 58 | */ |
50 | public static void processYangFileEntry(TreeWalkListener listener, GeneratedYangParser.YangfileContext ctx) { | 59 | public static void processYangFileEntry(TreeWalkListener listener, GeneratedYangParser.YangfileContext ctx) { |
51 | - // TODO method implementation | 60 | + |
61 | + // Check if stack is empty. | ||
62 | + ListenerValidation.checkStackIsEmpty(listener, ListenerErrorType.INVALID_HOLDER, | ||
63 | + ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.ENTRY); | ||
64 | + | ||
52 | } | 65 | } |
53 | 66 | ||
54 | /** | 67 | /** |
... | @@ -59,6 +72,25 @@ public final class BaseFileListener { | ... | @@ -59,6 +72,25 @@ public final class BaseFileListener { |
59 | * @param ctx context object of the grammar rule. | 72 | * @param ctx context object of the grammar rule. |
60 | */ | 73 | */ |
61 | public static void processYangFileExit(TreeWalkListener listener, GeneratedYangParser.YangfileContext ctx) { | 74 | public static void processYangFileExit(TreeWalkListener listener, GeneratedYangParser.YangfileContext ctx) { |
62 | - // TODO method implementation | 75 | + |
76 | + // Check for stack to be non empty. | ||
77 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
78 | + ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT); | ||
79 | + | ||
80 | + // Data Model tree root node is set. | ||
81 | + if (listener.getParsedDataStack().peek() instanceof YangModule | ||
82 | + | listener.getParsedDataStack().peek() instanceof YangSubModule) { | ||
83 | + listener.setRootNode((YangNode) listener.getParsedDataStack().pop()); | ||
84 | + } else { | ||
85 | + throw new ParserException( | ||
86 | + ListenerErrorMessageConstruction | ||
87 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_CHILD, | ||
88 | + ParsableDataType.YANGBASE_DATA, "", | ||
89 | + ListenerErrorLocation.EXIT)); | ||
90 | + } | ||
91 | + | ||
92 | + // Check if stack is empty. | ||
93 | + ListenerValidation.checkStackIsEmpty(listener, ListenerErrorType.INVALID_HOLDER, | ||
94 | + ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT); | ||
63 | } | 95 | } |
64 | -} | 96 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BelongsToListener.java
... | @@ -16,8 +16,17 @@ | ... | @@ -16,8 +16,17 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangBelongsTo; | ||
20 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
21 | +import org.onosproject.yangutils.parser.Parsable; | ||
22 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 30 | ||
22 | /* | 31 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 32 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -64,7 +73,18 @@ public final class BelongsToListener { | ... | @@ -64,7 +73,18 @@ public final class BelongsToListener { |
64 | */ | 73 | */ |
65 | public static void processBelongsToEntry(TreeWalkListener listener, | 74 | public static void processBelongsToEntry(TreeWalkListener listener, |
66 | GeneratedYangParser.BelongstoStatementContext ctx) { | 75 | GeneratedYangParser.BelongstoStatementContext ctx) { |
67 | - // TODO method implementation | 76 | + |
77 | + // Check for stack to be non empty. | ||
78 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
79 | + ParsableDataType.BELONGS_TO_DATA, | ||
80 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
81 | + ListenerErrorLocation.ENTRY); | ||
82 | + | ||
83 | + YangBelongsTo belongstoNode = new YangBelongsTo(); | ||
84 | + belongstoNode.setBelongsToModuleName(String.valueOf(ctx.IDENTIFIER().getText())); | ||
85 | + | ||
86 | + // Push belongsto into the stack. | ||
87 | + listener.getParsedDataStack().push(belongstoNode); | ||
68 | } | 88 | } |
69 | 89 | ||
70 | /** | 90 | /** |
... | @@ -76,6 +96,47 @@ public final class BelongsToListener { | ... | @@ -76,6 +96,47 @@ public final class BelongsToListener { |
76 | */ | 96 | */ |
77 | public static void processBelongsToExit(TreeWalkListener listener, | 97 | public static void processBelongsToExit(TreeWalkListener listener, |
78 | GeneratedYangParser.BelongstoStatementContext ctx) { | 98 | GeneratedYangParser.BelongstoStatementContext ctx) { |
79 | - // TODO method implementation | 99 | + |
100 | + // Check for stack to be non empty. | ||
101 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
102 | + ParsableDataType.BELONGS_TO_DATA, | ||
103 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
104 | + ListenerErrorLocation.EXIT); | ||
105 | + | ||
106 | + Parsable tmpBelongstoNode = listener.getParsedDataStack().peek(); | ||
107 | + if (tmpBelongstoNode instanceof YangBelongsTo) { | ||
108 | + listener.getParsedDataStack().pop(); | ||
109 | + | ||
110 | + // Check for stack to be empty. | ||
111 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
112 | + ParsableDataType.BELONGS_TO_DATA, | ||
113 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
114 | + ListenerErrorLocation.EXIT); | ||
115 | + | ||
116 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
117 | + switch (tmpNode.getParsableDataType()) { | ||
118 | + case SUB_MODULE_DATA: { | ||
119 | + YangSubModule subModule = (YangSubModule) tmpNode; | ||
120 | + subModule.setBelongsTo((YangBelongsTo) tmpBelongstoNode); | ||
121 | + break; | ||
122 | + } | ||
123 | + default: | ||
124 | + throw new ParserException( | ||
125 | + ListenerErrorMessageConstruction | ||
126 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
127 | + ParsableDataType.BELONGS_TO_DATA, | ||
128 | + String.valueOf(ctx.IDENTIFIER() | ||
129 | + .getText()), | ||
130 | + ListenerErrorLocation.EXIT)); | ||
131 | + } | ||
132 | + } else { | ||
133 | + throw new ParserException( | ||
134 | + ListenerErrorMessageConstruction | ||
135 | + .constructListenerErrorMessage(ListenerErrorType.MISSING_CURRENT_HOLDER, | ||
136 | + ParsableDataType.BELONGS_TO_DATA, | ||
137 | + String.valueOf(ctx.IDENTIFIER() | ||
138 | + .getText()), | ||
139 | + ListenerErrorLocation.EXIT)); | ||
140 | + } | ||
80 | } | 141 | } |
81 | -} | 142 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,17 @@ | ... | @@ -16,8 +16,17 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
20 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
21 | +import org.onosproject.yangutils.parser.Parsable; | ||
22 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 30 | ||
22 | /* | 31 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 32 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -28,8 +37,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ... | @@ -28,8 +37,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
28 | * [contact-stmt stmtsep] | 37 | * [contact-stmt stmtsep] |
29 | * [description-stmt stmtsep] | 38 | * [description-stmt stmtsep] |
30 | * [reference-stmt stmtsep] | 39 | * [reference-stmt stmtsep] |
31 | - * organization-stmt = organization-keyword sep string | 40 | + * contact-stmt = contact-keyword sep string optsep stmtend |
32 | - * optsep stmtend | ||
33 | * | 41 | * |
34 | * ANTLR grammar rule | 42 | * ANTLR grammar rule |
35 | * meta_stmts : organization_stmt? contact_stmt? description_stmt? reference_stmt? | 43 | * meta_stmts : organization_stmt? contact_stmt? description_stmt? reference_stmt? |
... | @@ -57,7 +65,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ... | @@ -57,7 +65,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
57 | * | description_stmt? organization_stmt? contact_stmt? reference_stmt? | 65 | * | description_stmt? organization_stmt? contact_stmt? reference_stmt? |
58 | * | description_stmt? organization_stmt? reference_stmt? contact_stmt? | 66 | * | description_stmt? organization_stmt? reference_stmt? contact_stmt? |
59 | * ; | 67 | * ; |
60 | - * organization_stmt : ORGANIZATION_KEYWORD string STMTEND; | 68 | + * contact_stmt : CONTACT_KEYWORD string STMTEND; |
61 | */ | 69 | */ |
62 | 70 | ||
63 | /** | 71 | /** |
... | @@ -81,6 +89,32 @@ public final class ContactListener { | ... | @@ -81,6 +89,32 @@ public final class ContactListener { |
81 | * @param ctx context object of the grammar rule. | 89 | * @param ctx context object of the grammar rule. |
82 | */ | 90 | */ |
83 | public static void processContactEntry(TreeWalkListener listener, GeneratedYangParser.ContactStatementContext ctx) { | 91 | public static void processContactEntry(TreeWalkListener listener, GeneratedYangParser.ContactStatementContext ctx) { |
84 | - // TODO method implementation | 92 | + |
93 | + // Check for stack to be non empty. | ||
94 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
95 | + ParsableDataType.CONTACT_DATA, | ||
96 | + String.valueOf(ctx.string().getText()), ListenerErrorLocation.ENTRY); | ||
97 | + | ||
98 | + // Obtain the node of the stack. | ||
99 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
100 | + switch (tmpNode.getParsableDataType()) { | ||
101 | + case MODULE_DATA: { | ||
102 | + YangModule module = (YangModule) tmpNode; | ||
103 | + module.setContact(String.valueOf(ctx.string().getText())); | ||
104 | + break; | ||
105 | + } | ||
106 | + case SUB_MODULE_DATA: { | ||
107 | + YangSubModule subModule = (YangSubModule) tmpNode; | ||
108 | + subModule.setContact(String.valueOf(ctx.string().getText())); | ||
109 | + break; | ||
110 | + } | ||
111 | + default: | ||
112 | + throw new ParserException( | ||
113 | + ListenerErrorMessageConstruction | ||
114 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
115 | + ParsableDataType.CONTACT_DATA, | ||
116 | + String.valueOf(ctx.string().getText()), | ||
117 | + ListenerErrorLocation.ENTRY)); | ||
118 | + } | ||
85 | } | 119 | } |
86 | -} | 120 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,18 @@ | ... | @@ -16,8 +16,18 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangImport; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
22 | +import org.onosproject.yangutils.parser.Parsable; | ||
23 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 24 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
25 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 26 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
30 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 31 | ||
22 | /* | 32 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 33 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -62,7 +72,18 @@ public final class ImportListener { | ... | @@ -62,7 +72,18 @@ public final class ImportListener { |
62 | * @param ctx context object of the grammar rule. | 72 | * @param ctx context object of the grammar rule. |
63 | */ | 73 | */ |
64 | public static void processImportEntry(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { | 74 | public static void processImportEntry(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { |
65 | - // TODO method implementation | 75 | + |
76 | + // Check for stack to be non empty. | ||
77 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
78 | + ParsableDataType.IMPORT_DATA, | ||
79 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
80 | + ListenerErrorLocation.ENTRY); | ||
81 | + | ||
82 | + YangImport importNode = new YangImport(); | ||
83 | + importNode.setModuleName(String.valueOf(ctx.IDENTIFIER().getText())); | ||
84 | + | ||
85 | + // Push import node to the stack. | ||
86 | + listener.getParsedDataStack().push(importNode); | ||
66 | } | 87 | } |
67 | 88 | ||
68 | /** | 89 | /** |
... | @@ -73,6 +94,52 @@ public final class ImportListener { | ... | @@ -73,6 +94,52 @@ public final class ImportListener { |
73 | * @param ctx context object of the grammar rule. | 94 | * @param ctx context object of the grammar rule. |
74 | */ | 95 | */ |
75 | public static void processImportExit(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { | 96 | public static void processImportExit(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { |
76 | - // TODO method implementation | 97 | + |
98 | + // Check for stack to be non empty. | ||
99 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
100 | + ParsableDataType.IMPORT_DATA, | ||
101 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
102 | + ListenerErrorLocation.EXIT); | ||
103 | + | ||
104 | + Parsable tmpImportNode = listener.getParsedDataStack().peek(); | ||
105 | + if (tmpImportNode instanceof YangImport) { | ||
106 | + listener.getParsedDataStack().pop(); | ||
107 | + | ||
108 | + // Check for stack to be non empty. | ||
109 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
110 | + ParsableDataType.IMPORT_DATA, | ||
111 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
112 | + ListenerErrorLocation.EXIT); | ||
113 | + | ||
114 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
115 | + switch (tmpNode.getParsableDataType()) { | ||
116 | + case MODULE_DATA: { | ||
117 | + YangModule module = (YangModule) tmpNode; | ||
118 | + module.addImportedInfo((YangImport) tmpImportNode); | ||
119 | + break; | ||
120 | + } | ||
121 | + case SUB_MODULE_DATA: { | ||
122 | + YangSubModule subModule = (YangSubModule) tmpNode; | ||
123 | + subModule.addImportedInfo((YangImport) tmpImportNode); | ||
124 | + break; | ||
125 | + } | ||
126 | + default: | ||
127 | + throw new ParserException( | ||
128 | + ListenerErrorMessageConstruction | ||
129 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
130 | + ParsableDataType.IMPORT_DATA, | ||
131 | + String.valueOf(ctx.IDENTIFIER() | ||
132 | + .getText()), | ||
133 | + ListenerErrorLocation.EXIT)); | ||
134 | + } | ||
135 | + } else { | ||
136 | + throw new ParserException( | ||
137 | + ListenerErrorMessageConstruction | ||
138 | + .constructListenerErrorMessage(ListenerErrorType.MISSING_CURRENT_HOLDER, | ||
139 | + ParsableDataType.IMPORT_DATA, String | ||
140 | + .valueOf(ctx.IDENTIFIER() | ||
141 | + .getText()), | ||
142 | + ListenerErrorLocation.EXIT)); | ||
143 | + } | ||
77 | } | 144 | } |
78 | -} | 145 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,18 @@ | ... | @@ -16,8 +16,18 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangInclude; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
22 | +import org.onosproject.yangutils.parser.Parsable; | ||
23 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 24 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
25 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 26 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
30 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 31 | ||
22 | /* | 32 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 33 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -37,7 +47,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ... | @@ -37,7 +47,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
37 | * linkage_stmts : (import_stmt | 47 | * linkage_stmts : (import_stmt |
38 | * | include_stmt)*; | 48 | * | include_stmt)*; |
39 | * include_stmt : INCLUDE_KEYWORD IDENTIFIER (STMTEND | LEFT_CURLY_BRACE | 49 | * include_stmt : INCLUDE_KEYWORD IDENTIFIER (STMTEND | LEFT_CURLY_BRACE |
40 | - * revision_date_stmt_body? RIGHT_CURLY_BRACE); | 50 | + * revision_date_stmt? RIGHT_CURLY_BRACE); |
41 | */ | 51 | */ |
42 | 52 | ||
43 | /** | 53 | /** |
... | @@ -61,7 +71,17 @@ public final class IncludeListener { | ... | @@ -61,7 +71,17 @@ public final class IncludeListener { |
61 | * @param ctx context object of the grammar rule. | 71 | * @param ctx context object of the grammar rule. |
62 | */ | 72 | */ |
63 | public static void processIncludeEntry(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { | 73 | public static void processIncludeEntry(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { |
64 | - // TODO method implementation | 74 | + |
75 | + // Check for stack to be non empty. | ||
76 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
77 | + ParsableDataType.INCLUDE_DATA, | ||
78 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
79 | + ListenerErrorLocation.ENTRY); | ||
80 | + | ||
81 | + YangInclude includeNode = new YangInclude(); | ||
82 | + includeNode.setSubModuleName(String.valueOf(ctx.IDENTIFIER().getText())); | ||
83 | + | ||
84 | + listener.getParsedDataStack().push(includeNode); | ||
65 | } | 85 | } |
66 | 86 | ||
67 | /** | 87 | /** |
... | @@ -72,6 +92,52 @@ public final class IncludeListener { | ... | @@ -72,6 +92,52 @@ public final class IncludeListener { |
72 | * @param ctx context object of the grammar rule. | 92 | * @param ctx context object of the grammar rule. |
73 | */ | 93 | */ |
74 | public static void processIncludeExit(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { | 94 | public static void processIncludeExit(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { |
75 | - // TODO method implementation | 95 | + |
96 | + // Check for stack to be non empty. | ||
97 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
98 | + ParsableDataType.INCLUDE_DATA, | ||
99 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
100 | + ListenerErrorLocation.EXIT); | ||
101 | + | ||
102 | + Parsable tmpIncludeNode = listener.getParsedDataStack().peek(); | ||
103 | + if (tmpIncludeNode instanceof YangInclude) { | ||
104 | + listener.getParsedDataStack().pop(); | ||
105 | + | ||
106 | + // Check for stack to be non empty. | ||
107 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
108 | + ParsableDataType.INCLUDE_DATA, | ||
109 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
110 | + ListenerErrorLocation.EXIT); | ||
111 | + | ||
112 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
113 | + switch (tmpNode.getParsableDataType()) { | ||
114 | + case MODULE_DATA: { | ||
115 | + YangModule module = (YangModule) tmpNode; | ||
116 | + module.addIncludedInfo((YangInclude) tmpIncludeNode); | ||
117 | + break; | ||
118 | + } | ||
119 | + case SUB_MODULE_DATA: { | ||
120 | + YangSubModule subModule = (YangSubModule) tmpNode; | ||
121 | + subModule.addIncludedInfo((YangInclude) tmpIncludeNode); | ||
122 | + break; | ||
123 | + } | ||
124 | + default: | ||
125 | + throw new ParserException( | ||
126 | + ListenerErrorMessageConstruction | ||
127 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
128 | + ParsableDataType.INCLUDE_DATA, | ||
129 | + String.valueOf(ctx.IDENTIFIER() | ||
130 | + .getText()), | ||
131 | + ListenerErrorLocation.EXIT)); | ||
132 | + } | ||
133 | + } else { | ||
134 | + throw new ParserException( | ||
135 | + ListenerErrorMessageConstruction | ||
136 | + .constructListenerErrorMessage(ListenerErrorType.MISSING_CURRENT_HOLDER, | ||
137 | + ParsableDataType.INCLUDE_DATA, String | ||
138 | + .valueOf(ctx.IDENTIFIER() | ||
139 | + .getText()), | ||
140 | + ListenerErrorLocation.EXIT)); | ||
141 | + } | ||
76 | } | 142 | } |
77 | -} | 143 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,15 @@ | ... | @@ -16,8 +16,15 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
20 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 21 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 23 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
24 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
25 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 28 | ||
22 | /* | 29 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 30 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -58,7 +65,16 @@ public final class ModuleListener { | ... | @@ -58,7 +65,16 @@ public final class ModuleListener { |
58 | * @param ctx context object of the grammar rule. | 65 | * @param ctx context object of the grammar rule. |
59 | */ | 66 | */ |
60 | public static void processModuleEntry(TreeWalkListener listener, GeneratedYangParser.ModuleStatementContext ctx) { | 67 | public static void processModuleEntry(TreeWalkListener listener, GeneratedYangParser.ModuleStatementContext ctx) { |
61 | - // TODO method implementation | 68 | + |
69 | + // Check if stack is empty. | ||
70 | + ListenerValidation | ||
71 | + .checkStackIsEmpty(listener, ListenerErrorType.INVALID_HOLDER, ParsableDataType.MODULE_DATA, | ||
72 | + String.valueOf(ctx.IDENTIFIER().getText()), ListenerErrorLocation.ENTRY); | ||
73 | + | ||
74 | + YangModule yangModule = new YangModule(); | ||
75 | + yangModule.setName(ctx.IDENTIFIER().getText()); | ||
76 | + | ||
77 | + listener.getParsedDataStack().push(yangModule); | ||
62 | } | 78 | } |
63 | 79 | ||
64 | /** | 80 | /** |
... | @@ -69,6 +85,21 @@ public final class ModuleListener { | ... | @@ -69,6 +85,21 @@ public final class ModuleListener { |
69 | * @param ctx context object of the grammar rule. | 85 | * @param ctx context object of the grammar rule. |
70 | */ | 86 | */ |
71 | public static void processModuleExit(TreeWalkListener listener, GeneratedYangParser.ModuleStatementContext ctx) { | 87 | public static void processModuleExit(TreeWalkListener listener, GeneratedYangParser.ModuleStatementContext ctx) { |
72 | - // TODO method implementation | 88 | + |
89 | + // Check for stack to be non empty. | ||
90 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
91 | + ParsableDataType.MODULE_DATA, | ||
92 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
93 | + ListenerErrorLocation.EXIT); | ||
94 | + | ||
95 | + if (!(listener.getParsedDataStack().peek() instanceof YangModule)) { | ||
96 | + throw new ParserException( | ||
97 | + ListenerErrorMessageConstruction | ||
98 | + .constructListenerErrorMessage(ListenerErrorType.MISSING_CURRENT_HOLDER, | ||
99 | + ParsableDataType.MODULE_DATA, String | ||
100 | + .valueOf(ctx.IDENTIFIER() | ||
101 | + .getText()), | ||
102 | + ListenerErrorLocation.EXIT)); | ||
103 | + } | ||
73 | } | 104 | } |
74 | -} | 105 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListener.java
... | @@ -16,8 +16,19 @@ | ... | @@ -16,8 +16,19 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
20 | +import org.onosproject.yangutils.datamodel.YangNameSpace; | ||
21 | +import org.onosproject.yangutils.parser.Parsable; | ||
22 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
30 | + | ||
31 | +import java.net.URI; | ||
21 | 32 | ||
22 | /* | 33 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 34 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -63,6 +74,53 @@ public final class NamespaceListener { | ... | @@ -63,6 +74,53 @@ public final class NamespaceListener { |
63 | */ | 74 | */ |
64 | public static void processNamespaceEntry(TreeWalkListener listener, | 75 | public static void processNamespaceEntry(TreeWalkListener listener, |
65 | GeneratedYangParser.NamespaceStatementContext ctx) { | 76 | GeneratedYangParser.NamespaceStatementContext ctx) { |
66 | - // TODO method implementation | 77 | + |
78 | + // Check for stack to be non empty. | ||
79 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
80 | + ParsableDataType.NAMESPACE_DATA, | ||
81 | + String.valueOf(ctx.string().getText()), ListenerErrorLocation.ENTRY); | ||
82 | + | ||
83 | + if (!validateUriValue(String.valueOf(ctx.string().getText()))) { | ||
84 | + ParserException parserException = new ParserException("Invalid namespace URI"); | ||
85 | + parserException.setLine(ctx.string().STRING(0).getSymbol().getLine()); | ||
86 | + parserException.setCharPosition(ctx.string().STRING(0).getSymbol().getCharPositionInLine()); | ||
87 | + throw parserException; | ||
88 | + } | ||
89 | + | ||
90 | + // Obtain the node of the stack. | ||
91 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
92 | + switch (tmpNode.getParsableDataType()) { | ||
93 | + case MODULE_DATA: { | ||
94 | + YangModule module = (YangModule) tmpNode; | ||
95 | + YangNameSpace uri = new YangNameSpace(); | ||
96 | + uri.setUri(String.valueOf(ctx.string().getText())); | ||
97 | + module.setNameSpace(uri); | ||
98 | + break; | ||
99 | + } | ||
100 | + default: | ||
101 | + throw new ParserException( | ||
102 | + ListenerErrorMessageConstruction | ||
103 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
104 | + ParsableDataType.NAMESPACE_DATA, | ||
105 | + String.valueOf(ctx.string().getText()), | ||
106 | + ListenerErrorLocation.ENTRY)); | ||
107 | + } | ||
108 | + } | ||
109 | + | ||
110 | + /** | ||
111 | + * Validate input URI. | ||
112 | + * | ||
113 | + * @param uri input namespace URI | ||
114 | + * @return validation result | ||
115 | + */ | ||
116 | + private static boolean validateUriValue(String uri) { | ||
117 | + uri = uri.replace("\"", ""); | ||
118 | + final URI tmpUri; | ||
119 | + try { | ||
120 | + tmpUri = URI.create(uri); | ||
121 | + } catch (Exception e1) { | ||
122 | + return false; | ||
123 | + } | ||
124 | + return true; | ||
67 | } | 125 | } |
68 | -} | 126 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,17 @@ | ... | @@ -16,8 +16,17 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
20 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
21 | +import org.onosproject.yangutils.parser.Parsable; | ||
22 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 30 | ||
22 | /* | 31 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 32 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -28,7 +37,8 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ... | @@ -28,7 +37,8 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
28 | * [contact-stmt stmtsep] | 37 | * [contact-stmt stmtsep] |
29 | * [description-stmt stmtsep] | 38 | * [description-stmt stmtsep] |
30 | * [reference-stmt stmtsep] | 39 | * [reference-stmt stmtsep] |
31 | - * contact-stmt = contact-keyword sep string optsep stmtend | 40 | + * organization-stmt = organization-keyword sep string |
41 | + * optsep stmtend | ||
32 | * | 42 | * |
33 | * ANTLR grammar rule | 43 | * ANTLR grammar rule |
34 | * meta_stmts : organization_stmt? contact_stmt? description_stmt? reference_stmt? | 44 | * meta_stmts : organization_stmt? contact_stmt? description_stmt? reference_stmt? |
... | @@ -56,7 +66,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ... | @@ -56,7 +66,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
56 | * | description_stmt? organization_stmt? contact_stmt? reference_stmt? | 66 | * | description_stmt? organization_stmt? contact_stmt? reference_stmt? |
57 | * | description_stmt? organization_stmt? reference_stmt? contact_stmt? | 67 | * | description_stmt? organization_stmt? reference_stmt? contact_stmt? |
58 | * ; | 68 | * ; |
59 | - * contact_stmt : CONTACT_KEYWORD string STMTEND; | 69 | + * organization_stmt : ORGANIZATION_KEYWORD string STMTEND; |
60 | */ | 70 | */ |
61 | 71 | ||
62 | /** | 72 | /** |
... | @@ -81,6 +91,32 @@ public final class OrganizationListener { | ... | @@ -81,6 +91,32 @@ public final class OrganizationListener { |
81 | */ | 91 | */ |
82 | public static void processOrganizationEntry(TreeWalkListener listener, | 92 | public static void processOrganizationEntry(TreeWalkListener listener, |
83 | GeneratedYangParser.OrganizationStatementContext ctx) { | 93 | GeneratedYangParser.OrganizationStatementContext ctx) { |
84 | - // TODO method implementation | 94 | + |
95 | + // Check for stack to be non empty. | ||
96 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
97 | + ParsableDataType.ORGANIZATION_DATA, | ||
98 | + String.valueOf(ctx.string().getText()), ListenerErrorLocation.ENTRY); | ||
99 | + | ||
100 | + // Obtain the node of the stack. | ||
101 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
102 | + switch (tmpNode.getParsableDataType()) { | ||
103 | + case MODULE_DATA: { | ||
104 | + YangModule module = (YangModule) tmpNode; | ||
105 | + module.setOrganization(String.valueOf(ctx.string().getText())); | ||
106 | + break; | ||
107 | + } | ||
108 | + case SUB_MODULE_DATA: { | ||
109 | + YangSubModule subModule = (YangSubModule) tmpNode; | ||
110 | + subModule.setOrganization(String.valueOf(ctx.string().getText())); | ||
111 | + break; | ||
112 | + } | ||
113 | + default: | ||
114 | + throw new ParserException( | ||
115 | + ListenerErrorMessageConstruction | ||
116 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
117 | + ParsableDataType.ORGANIZATION_DATA, | ||
118 | + String.valueOf(ctx.string().getText()), | ||
119 | + ListenerErrorLocation.ENTRY)); | ||
120 | + } | ||
85 | } | 121 | } |
86 | -} | 122 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,18 @@ | ... | @@ -16,8 +16,18 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangBelongsTo; | ||
20 | +import org.onosproject.yangutils.datamodel.YangImport; | ||
21 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
22 | +import org.onosproject.yangutils.parser.Parsable; | ||
23 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 24 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
25 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 26 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
30 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 31 | ||
22 | /* | 32 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 33 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -63,6 +73,39 @@ public final class PrefixListener { | ... | @@ -63,6 +73,39 @@ public final class PrefixListener { |
63 | * @param ctx context object of the grammar rule. | 73 | * @param ctx context object of the grammar rule. |
64 | */ | 74 | */ |
65 | public static void processPrefixEntry(TreeWalkListener listener, GeneratedYangParser.PrefixStatementContext ctx) { | 75 | public static void processPrefixEntry(TreeWalkListener listener, GeneratedYangParser.PrefixStatementContext ctx) { |
66 | - // TODO method implementation | 76 | + |
77 | + // Check for stack to be non empty. | ||
78 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
79 | + ParsableDataType.PREFIX_DATA, | ||
80 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
81 | + ListenerErrorLocation.ENTRY); | ||
82 | + | ||
83 | + // Obtain the node of the stack. | ||
84 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
85 | + switch (tmpNode.getParsableDataType()) { | ||
86 | + case MODULE_DATA: { | ||
87 | + YangModule module = (YangModule) tmpNode; | ||
88 | + module.setPrefix(ctx.IDENTIFIER().getText()); | ||
89 | + break; | ||
90 | + } | ||
91 | + case IMPORT_DATA: { | ||
92 | + YangImport importNode = (YangImport) tmpNode; | ||
93 | + importNode.setPrefixId(ctx.IDENTIFIER().getText()); | ||
94 | + break; | ||
95 | + } | ||
96 | + case BELONGS_TO_DATA: { | ||
97 | + YangBelongsTo belongstoNode = (YangBelongsTo) tmpNode; | ||
98 | + belongstoNode.setPrefix(ctx.IDENTIFIER().getText()); | ||
99 | + break; | ||
100 | + } | ||
101 | + default: | ||
102 | + throw new ParserException( | ||
103 | + ListenerErrorMessageConstruction | ||
104 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
105 | + ParsableDataType.PREFIX_DATA, String | ||
106 | + .valueOf(ctx.IDENTIFIER() | ||
107 | + .getText()), | ||
108 | + ListenerErrorLocation.ENTRY)); | ||
109 | + } | ||
67 | } | 110 | } |
68 | -} | 111 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,17 @@ | ... | @@ -16,8 +16,17 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangImport; | ||
20 | +import org.onosproject.yangutils.datamodel.YangInclude; | ||
21 | +import org.onosproject.yangutils.parser.Parsable; | ||
22 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 30 | ||
22 | /* | 31 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 32 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -69,6 +78,34 @@ public final class RevisionDateListener { | ... | @@ -69,6 +78,34 @@ public final class RevisionDateListener { |
69 | */ | 78 | */ |
70 | public static void processRevisionDateEntry(TreeWalkListener listener, | 79 | public static void processRevisionDateEntry(TreeWalkListener listener, |
71 | GeneratedYangParser.RevisionDateStatementContext ctx) { | 80 | GeneratedYangParser.RevisionDateStatementContext ctx) { |
72 | - // TODO method implementation | 81 | + |
82 | + // Check for stack to be non empty. | ||
83 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
84 | + ParsableDataType.REVISION_DATE_DATA, | ||
85 | + String.valueOf(ctx.DATE_ARG().getText()), | ||
86 | + ListenerErrorLocation.ENTRY); | ||
87 | + | ||
88 | + // Obtain the node of the stack. | ||
89 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
90 | + switch (tmpNode.getParsableDataType()) { | ||
91 | + case IMPORT_DATA: { | ||
92 | + YangImport importNode = (YangImport) tmpNode; | ||
93 | + importNode.setRevision(String.valueOf(ctx.DATE_ARG().getText())); | ||
94 | + break; | ||
95 | + } | ||
96 | + case INCLUDE_DATA: { | ||
97 | + YangInclude includeNode = (YangInclude) tmpNode; | ||
98 | + includeNode.setRevision(String.valueOf(ctx.DATE_ARG().getText())); | ||
99 | + break; | ||
100 | + } | ||
101 | + default: | ||
102 | + throw new ParserException( | ||
103 | + ListenerErrorMessageConstruction | ||
104 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
105 | + ParsableDataType.REVISION_DATE_DATA, | ||
106 | + String.valueOf(ctx.DATE_ARG().getText()), | ||
107 | + ListenerErrorLocation.ENTRY)); | ||
108 | + } | ||
73 | } | 109 | } |
74 | -} | 110 | + // TODO Implement the DATE_ARG validation as per RFC 6020. |
111 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,18 @@ | ... | @@ -16,8 +16,18 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
20 | +import org.onosproject.yangutils.datamodel.YangRevision; | ||
21 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
22 | +import org.onosproject.yangutils.parser.Parsable; | ||
23 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 24 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
25 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 26 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
30 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 31 | ||
22 | /* | 32 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 33 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -59,28 +69,94 @@ public final class RevisionListener { | ... | @@ -59,28 +69,94 @@ public final class RevisionListener { |
59 | private RevisionListener() { | 69 | private RevisionListener() { |
60 | } | 70 | } |
61 | 71 | ||
72 | + public static void processRevisionEntry(TreeWalkListener listener, | ||
73 | + GeneratedYangParser.RevisionStatementContext ctx) { | ||
74 | + | ||
75 | + // Check for stack to be non empty. | ||
76 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
77 | + ParsableDataType.REVISION_DATA, | ||
78 | + String.valueOf(ctx.DATE_ARG().getText()), | ||
79 | + ListenerErrorLocation.ENTRY); | ||
80 | + | ||
81 | + // Validate for reverse chronological order of revision & for revision value. | ||
82 | + if (!validateRevision(listener, ctx)) { | ||
83 | + return; | ||
84 | + // TODO to be implemented. | ||
85 | + } | ||
86 | + | ||
87 | + YangRevision revisionNode = new YangRevision(); | ||
88 | + revisionNode.setRevDate(String.valueOf(ctx.DATE_ARG().getText())); | ||
89 | + | ||
90 | + listener.getParsedDataStack().push(revisionNode); | ||
91 | + } | ||
92 | + | ||
62 | /** | 93 | /** |
63 | - * It is called when parser receives an input matching the grammar | 94 | + * It is called when parser exits from grammar rule (revision), it perform |
64 | - * rule (revision), perform validations and update the data model | 95 | + * validations and update the data model tree. |
65 | - * tree. | ||
66 | * | 96 | * |
67 | * @param listener Listener's object. | 97 | * @param listener Listener's object. |
68 | * @param ctx context object of the grammar rule. | 98 | * @param ctx context object of the grammar rule. |
69 | */ | 99 | */ |
70 | - public static void processRevisionEntry(TreeWalkListener listener, GeneratedYangParser.RevisionStatementContext | 100 | + public static void processRevisionExit(TreeWalkListener listener, |
71 | - ctx) { | 101 | + GeneratedYangParser.RevisionStatementContext ctx) { |
72 | - // TODO method implementation | 102 | + |
103 | + // Check for stack to be non empty. | ||
104 | + ListenerValidation | ||
105 | + .checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, ParsableDataType.REVISION_DATA, | ||
106 | + String.valueOf(ctx.DATE_ARG().getText()), ListenerErrorLocation.EXIT); | ||
107 | + | ||
108 | + Parsable tmpRevisionNode = listener.getParsedDataStack().peek(); | ||
109 | + if (tmpRevisionNode instanceof YangRevision) { | ||
110 | + listener.getParsedDataStack().pop(); | ||
111 | + | ||
112 | + // Check for stack to be non empty. | ||
113 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
114 | + ParsableDataType.REVISION_DATA, | ||
115 | + String.valueOf(ctx.DATE_ARG().getText()), | ||
116 | + ListenerErrorLocation.EXIT); | ||
117 | + | ||
118 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
119 | + switch (tmpNode.getParsableDataType()) { | ||
120 | + case MODULE_DATA: { | ||
121 | + YangModule module = (YangModule) tmpNode; | ||
122 | + module.setRevision((YangRevision) tmpRevisionNode); | ||
123 | + break; | ||
124 | + } | ||
125 | + case SUB_MODULE_DATA: { | ||
126 | + YangSubModule subModule = (YangSubModule) tmpNode; | ||
127 | + subModule.setRevision((YangRevision) tmpRevisionNode); | ||
128 | + break; | ||
129 | + } | ||
130 | + default: | ||
131 | + throw new ParserException( | ||
132 | + ListenerErrorMessageConstruction | ||
133 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
134 | + ParsableDataType.REVISION_DATA, | ||
135 | + String.valueOf(ctx.DATE_ARG() | ||
136 | + .getText()), | ||
137 | + ListenerErrorLocation.EXIT)); | ||
138 | + } | ||
139 | + } else { | ||
140 | + throw new ParserException( | ||
141 | + ListenerErrorMessageConstruction | ||
142 | + .constructListenerErrorMessage(ListenerErrorType.MISSING_CURRENT_HOLDER, | ||
143 | + ParsableDataType.REVISION_DATA, String | ||
144 | + .valueOf(ctx.DATE_ARG() | ||
145 | + .getText()), | ||
146 | + ListenerErrorLocation.EXIT)); | ||
147 | + } | ||
73 | } | 148 | } |
74 | 149 | ||
75 | /** | 150 | /** |
76 | - * It is called when parser exits from grammar rule (revision), it perform | 151 | + * Validate revision. |
77 | - * validations and update the data model tree. | ||
78 | * | 152 | * |
79 | * @param listener Listener's object. | 153 | * @param listener Listener's object. |
80 | * @param ctx context object of the grammar rule. | 154 | * @param ctx context object of the grammar rule. |
155 | + * @return validation result | ||
81 | */ | 156 | */ |
82 | - public static void processRevisionExit(TreeWalkListener listener, GeneratedYangParser.RevisionStatementContext | 157 | + private static boolean validateRevision(TreeWalkListener listener, |
83 | - ctx) { | 158 | + GeneratedYangParser.RevisionStatementContext ctx) { |
84 | - // TODO method implementation | 159 | + // TODO to be implemented |
160 | + return true; | ||
85 | } | 161 | } |
86 | -} | 162 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java
... | @@ -16,8 +16,15 @@ | ... | @@ -16,8 +16,15 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
20 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 21 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 23 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
24 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
25 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 28 | ||
22 | /* | 29 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 30 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -60,7 +67,16 @@ public final class SubModuleListener { | ... | @@ -60,7 +67,16 @@ public final class SubModuleListener { |
60 | */ | 67 | */ |
61 | public static void processSubModuleEntry(TreeWalkListener listener, | 68 | public static void processSubModuleEntry(TreeWalkListener listener, |
62 | GeneratedYangParser.SubModuleStatementContext ctx) { | 69 | GeneratedYangParser.SubModuleStatementContext ctx) { |
63 | - // TODO method implementation | 70 | + |
71 | + // Check if stack is empty. | ||
72 | + ListenerValidation | ||
73 | + .checkStackIsEmpty(listener, ListenerErrorType.INVALID_HOLDER, ParsableDataType.SUB_MODULE_DATA, | ||
74 | + String.valueOf(ctx.IDENTIFIER().getText()), ListenerErrorLocation.ENTRY); | ||
75 | + | ||
76 | + YangSubModule yangSubModule = new YangSubModule(); | ||
77 | + yangSubModule.setName(ctx.IDENTIFIER().getText()); | ||
78 | + | ||
79 | + listener.getParsedDataStack().push(yangSubModule); | ||
64 | } | 80 | } |
65 | 81 | ||
66 | /** | 82 | /** |
... | @@ -72,6 +88,21 @@ public final class SubModuleListener { | ... | @@ -72,6 +88,21 @@ public final class SubModuleListener { |
72 | */ | 88 | */ |
73 | public static void processSubModuleExit(TreeWalkListener listener, | 89 | public static void processSubModuleExit(TreeWalkListener listener, |
74 | GeneratedYangParser.SubModuleStatementContext ctx) { | 90 | GeneratedYangParser.SubModuleStatementContext ctx) { |
75 | - // TODO method implementation | 91 | + |
92 | + // Check for stack to be non empty. | ||
93 | + ListenerValidation.checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, | ||
94 | + ParsableDataType.SUB_MODULE_DATA, | ||
95 | + String.valueOf(ctx.IDENTIFIER().getText()), | ||
96 | + ListenerErrorLocation.EXIT); | ||
97 | + | ||
98 | + if (!(listener.getParsedDataStack().peek() instanceof YangSubModule)) { | ||
99 | + throw new ParserException( | ||
100 | + ListenerErrorMessageConstruction | ||
101 | + .constructListenerErrorMessage(ListenerErrorType.MISSING_CURRENT_HOLDER, | ||
102 | + ParsableDataType.SUB_MODULE_DATA, | ||
103 | + String.valueOf(ctx.IDENTIFIER() | ||
104 | + .getText()), | ||
105 | + ListenerErrorLocation.EXIT)); | ||
106 | + } | ||
76 | } | 107 | } |
77 | -} | 108 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -16,8 +16,17 @@ | ... | @@ -16,8 +16,17 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
20 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
21 | +import org.onosproject.yangutils.parser.Parsable; | ||
22 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
19 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
20 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
29 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | ||
21 | 30 | ||
22 | /* | 31 | /* |
23 | * Reference: RFC6020 and YANG ANTLR Grammar | 32 | * Reference: RFC6020 and YANG ANTLR Grammar |
... | @@ -73,6 +82,48 @@ public final class VersionListener { | ... | @@ -73,6 +82,48 @@ public final class VersionListener { |
73 | */ | 82 | */ |
74 | public static void processVersionEntry(TreeWalkListener listener, | 83 | public static void processVersionEntry(TreeWalkListener listener, |
75 | GeneratedYangParser.YangVersionStatementContext ctx) { | 84 | GeneratedYangParser.YangVersionStatementContext ctx) { |
76 | - // TODO method implementation | 85 | + |
86 | + // Check for stack to be non empty. | ||
87 | + ListenerValidation | ||
88 | + .checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_HOLDER, ParsableDataType.VERSION_DATA, | ||
89 | + String.valueOf(ctx.INTEGER().getText()), ListenerErrorLocation.ENTRY); | ||
90 | + | ||
91 | + Integer version = Integer.valueOf(ctx.INTEGER().getText()); | ||
92 | + if (!isVersionValid(version)) { | ||
93 | + ParserException parserException = new ParserException("Input version not supported"); | ||
94 | + parserException.setLine(ctx.INTEGER().getSymbol().getLine()); | ||
95 | + parserException.setCharPosition(ctx.INTEGER().getSymbol().getCharPositionInLine()); | ||
96 | + throw parserException; | ||
97 | + } | ||
98 | + | ||
99 | + // Obtain the node of the stack. | ||
100 | + Parsable tmpNode = listener.getParsedDataStack().peek(); | ||
101 | + switch (tmpNode.getParsableDataType()) { | ||
102 | + case MODULE_DATA: { | ||
103 | + YangModule module = (YangModule) tmpNode; | ||
104 | + module.setVersion((byte) 1); | ||
105 | + break; | ||
106 | + } | ||
107 | + case SUB_MODULE_DATA: { | ||
108 | + YangSubModule subModule = (YangSubModule) tmpNode; | ||
109 | + subModule.setVersion((byte) 1); | ||
110 | + break; | ||
111 | + } | ||
112 | + default: | ||
113 | + throw new ParserException(ListenerErrorMessageConstruction. | ||
114 | + constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
115 | + ParsableDataType.VERSION_DATA, String.valueOf(ctx.INTEGER().getText()), | ||
116 | + ListenerErrorLocation.ENTRY)); | ||
117 | + } | ||
118 | + } | ||
119 | + | ||
120 | + /** | ||
121 | + * Validates whether the value of YANG version. | ||
122 | + * | ||
123 | + * @param version input yang version | ||
124 | + * @return validation result | ||
125 | + */ | ||
126 | + private static boolean isVersionValid(Integer version) { | ||
127 | + return version == 1; | ||
77 | } | 128 | } |
78 | -} | 129 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -21,12 +21,18 @@ package org.onosproject.yangutils.parser.impl.parserutils; | ... | @@ -21,12 +21,18 @@ package org.onosproject.yangutils.parser.impl.parserutils; |
21 | */ | 21 | */ |
22 | public class ListenerError { | 22 | public class ListenerError { |
23 | 23 | ||
24 | - // Maintains the state of Exception. | 24 | + // Maintains the state of exception. |
25 | private boolean errorFlag = false; | 25 | private boolean errorFlag = false; |
26 | 26 | ||
27 | - // Maintains the reason of Exception. | 27 | + // Maintains the reason of exception. |
28 | private String errorMsg; | 28 | private String errorMsg; |
29 | 29 | ||
30 | + // Maintains the line number of exception. | ||
31 | + private int lineNumber; | ||
32 | + | ||
33 | + // Maintains the character position in lin of exception. | ||
34 | + private int charPositionInLine; | ||
35 | + | ||
30 | /** | 36 | /** |
31 | * Returns error flag. | 37 | * Returns error flag. |
32 | * | 38 | * |
... | @@ -37,18 +43,36 @@ public class ListenerError { | ... | @@ -37,18 +43,36 @@ public class ListenerError { |
37 | } | 43 | } |
38 | 44 | ||
39 | /** | 45 | /** |
40 | - * Returns error message. | 46 | + * Returns reason for error. |
41 | * | 47 | * |
42 | - * @return error msg. | 48 | + * @return error message |
43 | */ | 49 | */ |
44 | public String getErrorMsg() { | 50 | public String getErrorMsg() { |
45 | return errorMsg; | 51 | return errorMsg; |
46 | } | 52 | } |
47 | 53 | ||
48 | /** | 54 | /** |
55 | + * Returns error line number. | ||
56 | + * | ||
57 | + * @return error line number. | ||
58 | + */ | ||
59 | + public int getLineNumber() { | ||
60 | + return lineNumber; | ||
61 | + } | ||
62 | + | ||
63 | + /** | ||
64 | + * Returns error position in line. | ||
65 | + * | ||
66 | + * @return error character position in line. | ||
67 | + */ | ||
68 | + public int getCharPositionInLine() { | ||
69 | + return charPositionInLine; | ||
70 | + } | ||
71 | + | ||
72 | + /** | ||
49 | * Set error flag. | 73 | * Set error flag. |
50 | * | 74 | * |
51 | - * @param errorFlag error existence flag | 75 | + * @param errorFlag error existence flag. |
52 | */ | 76 | */ |
53 | public void setErrorFlag(boolean errorFlag) { | 77 | public void setErrorFlag(boolean errorFlag) { |
54 | this.errorFlag = errorFlag; | 78 | this.errorFlag = errorFlag; |
... | @@ -62,4 +86,22 @@ public class ListenerError { | ... | @@ -62,4 +86,22 @@ public class ListenerError { |
62 | public void setErrorMsg(String errorMsg) { | 86 | public void setErrorMsg(String errorMsg) { |
63 | this.errorMsg = errorMsg; | 87 | this.errorMsg = errorMsg; |
64 | } | 88 | } |
89 | + | ||
90 | + /** | ||
91 | + * Set error line number. | ||
92 | + * | ||
93 | + * @param lineNumber line number of error. | ||
94 | + */ | ||
95 | + public void setLineNumber(int lineNumber) { | ||
96 | + this.lineNumber = lineNumber; | ||
97 | + } | ||
98 | + | ||
99 | + /** | ||
100 | + * Set error character position in line. | ||
101 | + * | ||
102 | + * @param charPositionInLine error character position in line. | ||
103 | + */ | ||
104 | + public void setCharPositionInLine(int charPositionInLine) { | ||
105 | + this.charPositionInLine = charPositionInLine; | ||
106 | + } | ||
65 | } | 107 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.parserutils; | ||
18 | + | ||
19 | +/** | ||
20 | + * Maintains listener error location. | ||
21 | + */ | ||
22 | +public enum ListenerErrorLocation { | ||
23 | + /** | ||
24 | + * Represents that the error location is before processing. | ||
25 | + */ | ||
26 | + ENTRY(), | ||
27 | + | ||
28 | + /** | ||
29 | + * Represents that the error location is before processing. | ||
30 | + */ | ||
31 | + EXIT(); | ||
32 | + | ||
33 | + /** | ||
34 | + * Returns the message corresponding to listener error location. | ||
35 | + * | ||
36 | + * @param errorLocation enum value for type of error. | ||
37 | + * @return message corresponding to listener error location. | ||
38 | + */ | ||
39 | + public static String getErrorLocationMessage(ListenerErrorLocation errorLocation) { | ||
40 | + | ||
41 | + switch (errorLocation) { | ||
42 | + case ENTRY: | ||
43 | + return "before"; | ||
44 | + case EXIT: | ||
45 | + return "after"; | ||
46 | + default: | ||
47 | + return "during"; | ||
48 | + } | ||
49 | + } | ||
50 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.parserutils; | ||
18 | + | ||
19 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
20 | + | ||
21 | +/** | ||
22 | + * It's a utility to help construct detailed error message. | ||
23 | + */ | ||
24 | +public final class ListenerErrorMessageConstruction { | ||
25 | + | ||
26 | + /** | ||
27 | + * Private constructor. | ||
28 | + */ | ||
29 | + private ListenerErrorMessageConstruction() { | ||
30 | + } | ||
31 | + | ||
32 | + /** | ||
33 | + * Constructs message for error with extended information and returns the same. | ||
34 | + * | ||
35 | + * @param errorType error type needs to be set in error message. | ||
36 | + * @param parsableDataType type of parsable data in which error occurred. | ||
37 | + * @param parsableDataTypeName identifier/string of parsable data type in which error occurred. | ||
38 | + * @param errorLocation location where error occurred. | ||
39 | + * @param extendedErrorInformation extended error information. | ||
40 | + * @return constructed error message. | ||
41 | + */ | ||
42 | + public static String constructExtendedListenerErrorMessage(ListenerErrorType errorType, | ||
43 | + ParsableDataType parsableDataType, | ||
44 | + String parsableDataTypeName, | ||
45 | + ListenerErrorLocation errorLocation, | ||
46 | + String extendedErrorInformation) { | ||
47 | + String newErrorMessage; | ||
48 | + newErrorMessage = constructListenerErrorMessage(errorType, parsableDataType, parsableDataTypeName, | ||
49 | + errorLocation) + "\n" + "Error Information: " + extendedErrorInformation; | ||
50 | + return newErrorMessage; | ||
51 | + } | ||
52 | + | ||
53 | + /** | ||
54 | + * Constructs message for error during listener based tree walk and returns the same. | ||
55 | + * | ||
56 | + * @param errorType error type needs to be set in error message. | ||
57 | + * @param parsableDataType type of parsable data in which error occurred. | ||
58 | + * @param parsableDataTypeName identifier/string of parsable data type in which error occurred. | ||
59 | + * @param errorLocation location where error occurred. | ||
60 | + * @return constructed error message. | ||
61 | + */ | ||
62 | + public static String constructListenerErrorMessage(ListenerErrorType errorType, | ||
63 | + ParsableDataType parsableDataType, | ||
64 | + String parsableDataTypeName, | ||
65 | + ListenerErrorLocation errorLocation) { | ||
66 | + | ||
67 | + String errorMessage; | ||
68 | + | ||
69 | + errorMessage = "Internal parser error detected: " + ListenerErrorType.getErrorType(errorType) + " " | ||
70 | + + ParsableDataType.getParsableDataType(parsableDataType); | ||
71 | + | ||
72 | + | ||
73 | + if (!parsableDataTypeName.isEmpty()) { | ||
74 | + errorMessage = errorMessage + " \"" + parsableDataTypeName + "\" "; | ||
75 | + } else { | ||
76 | + errorMessage = errorMessage + " "; | ||
77 | + | ||
78 | + } | ||
79 | + errorMessage = errorMessage + ListenerErrorLocation.getErrorLocationMessage(errorLocation) + " processing."; | ||
80 | + return errorMessage; | ||
81 | + } | ||
82 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.parserutils; | ||
18 | + | ||
19 | +/** | ||
20 | + * Maintains listener error type. | ||
21 | + */ | ||
22 | +public enum ListenerErrorType { | ||
23 | + /** | ||
24 | + * Represents the parent holder in parsable stack for given YANG construct is invalid. | ||
25 | + */ | ||
26 | + INVALID_HOLDER(), | ||
27 | + | ||
28 | + /** | ||
29 | + * Represents the parent holder in parsable stack for given YANG construct is missing. | ||
30 | + */ | ||
31 | + MISSING_HOLDER(), | ||
32 | + | ||
33 | + /** | ||
34 | + * Represents the current holder in parsable stack for given YANG construct is missing. | ||
35 | + */ | ||
36 | + MISSING_CURRENT_HOLDER(), | ||
37 | + | ||
38 | + /** | ||
39 | + * Represents that the child in parsable stack for given YANG construct is invalid. | ||
40 | + */ | ||
41 | + INVALID_CHILD(), | ||
42 | + | ||
43 | + /** | ||
44 | + * Represents that the cardinality for given YANG construct is invalid. | ||
45 | + */ | ||
46 | + INVALID_CARDINALITY(), | ||
47 | + | ||
48 | + /** | ||
49 | + * Represents that some of earlier parsed data is not handled correctly. | ||
50 | + */ | ||
51 | + UNHANDLED_PARSED_DATA(); | ||
52 | + | ||
53 | + /** | ||
54 | + * Returns the message corresponding to listener error type. | ||
55 | + * | ||
56 | + * @param errorType enum value for type of error. | ||
57 | + * @return message corresponding to listener error type. | ||
58 | + */ | ||
59 | + public static String getErrorType(ListenerErrorType errorType) { | ||
60 | + | ||
61 | + switch (errorType) { | ||
62 | + case INVALID_HOLDER: | ||
63 | + return "Invalid holder for"; | ||
64 | + case MISSING_HOLDER: | ||
65 | + return "Missing holder at"; | ||
66 | + case MISSING_CURRENT_HOLDER: | ||
67 | + return "Missing"; | ||
68 | + case INVALID_CHILD: | ||
69 | + return "Invalid child in"; | ||
70 | + case INVALID_CARDINALITY: | ||
71 | + return "Invalid cardinality in"; | ||
72 | + case UNHANDLED_PARSED_DATA: | ||
73 | + return "Unhandled parsed data at"; | ||
74 | + default: | ||
75 | + return "Problem in"; | ||
76 | + } | ||
77 | + } | ||
78 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -16,39 +16,66 @@ | ... | @@ -16,39 +16,66 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.parserutils; | 17 | package org.onosproject.yangutils.parser.impl.parserutils; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
20 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
19 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 21 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
20 | 22 | ||
21 | /** | 23 | /** |
22 | - * Its a utility to carry out listener validation. | 24 | + * It's a utility to carry out listener validation. |
23 | */ | 25 | */ |
24 | public final class ListenerValidation { | 26 | public final class ListenerValidation { |
25 | 27 | ||
26 | /** | 28 | /** |
27 | - * Creates a new belongto listener. | 29 | + * Creates a new listener validation. |
28 | */ | 30 | */ |
29 | private ListenerValidation() { | 31 | private ListenerValidation() { |
30 | } | 32 | } |
31 | 33 | ||
32 | /** | 34 | /** |
33 | - * Checks if error is set or parsed data stack is empty. | 35 | + * Checks parsed data stack is not empty. |
34 | * | 36 | * |
35 | * @param listener Listener's object. | 37 | * @param listener Listener's object. |
36 | - * @param errNode parsable node for which validation needs to be done. | 38 | + * @param errorType error type needs to be set in error message. |
37 | - * @return validation result. | 39 | + * @param parsableDataType type of parsable data in which error occurred. |
40 | + * @param parsableDataTypeName name of parsable data type in which error occurred. | ||
41 | + * @param errorLocation location where error occurred. | ||
38 | */ | 42 | */ |
39 | - public static boolean preValidation(TreeWalkListener listener, String errNode) { | 43 | + public static void checkStackIsNotEmpty(TreeWalkListener listener, ListenerErrorType errorType, |
40 | - | 44 | + ParsableDataType parsableDataType, String parsableDataTypeName, |
41 | - // Check whether error found while walking YANG file, if yes return true. | 45 | + ListenerErrorLocation errorLocation) { |
42 | - if (listener.getErrorInformation().isErrorFlag()) { | 46 | + if (listener.getParsedDataStack().empty()) { |
43 | - return true; | 47 | + /* |
48 | + * If stack is empty it indicates error condition, value of parsableDataTypeName will be null in case there | ||
49 | + * is no name attached to parsable data type. | ||
50 | + */ | ||
51 | + String message = ListenerErrorMessageConstruction.constructListenerErrorMessage(errorType, parsableDataType, | ||
52 | + parsableDataTypeName, errorLocation); | ||
53 | + throw new ParserException(message); | ||
44 | } | 54 | } |
55 | + } | ||
45 | 56 | ||
46 | - // If stack is empty it indicates error condition | 57 | + /** |
47 | - if (listener.getParsedDataStack().empty()) { | 58 | + * Checks parsed data stack is empty. |
48 | - listener.getErrorInformation().setErrorFlag(true); | 59 | + * |
49 | - listener.getErrorInformation().setErrorMsg("Parsable stack empty at" + errNode + "entry"); | 60 | + * @param listener Listener's object. |
50 | - return true; | 61 | + * @param errorType error type needs to be set in error message. |
62 | + * @param parsableDataType type of parsable data in which error occurred. | ||
63 | + * @param parsableDataTypeName name of parsable data type in which error occurred. | ||
64 | + * @param errorLocation location where error occurred. | ||
65 | + */ | ||
66 | + | ||
67 | + public static void checkStackIsEmpty(TreeWalkListener listener, ListenerErrorType errorType, | ||
68 | + ParsableDataType parsableDataType, String parsableDataTypeName, | ||
69 | + ListenerErrorLocation errorLocation) { | ||
70 | + | ||
71 | + if (!listener.getParsedDataStack().empty()) { | ||
72 | + /* | ||
73 | + * If stack is empty it indicates error condition, value of parsableDataTypeName will be null in case there | ||
74 | + * is no name attached to parsable data type. | ||
75 | + */ | ||
76 | + String message = ListenerErrorMessageConstruction.constructListenerErrorMessage(errorType, parsableDataType, | ||
77 | + parsableDataTypeName, errorLocation); | ||
78 | + throw new ParserException(message); | ||
51 | } | 79 | } |
52 | - return false; | ||
53 | } | 80 | } |
54 | } | 81 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -29,37 +29,13 @@ import org.onosproject.yangutils.parser.exceptions.ParserException; | ... | @@ -29,37 +29,13 @@ import org.onosproject.yangutils.parser.exceptions.ParserException; |
29 | */ | 29 | */ |
30 | public class ParseTreeErrorListener extends BaseErrorListener { | 30 | public class ParseTreeErrorListener extends BaseErrorListener { |
31 | 31 | ||
32 | - // Exception of type parser exceptions are catched during parsing. | ||
33 | - private ParserException parserException = new ParserException(); | ||
34 | - | ||
35 | - // Flag to indicate presence of exception. | ||
36 | - private boolean exceptionFlag = false; | ||
37 | - | ||
38 | - /** | ||
39 | - * Returns the status of exception flag. | ||
40 | - * | ||
41 | - * @return flag which contains the status of exception. | ||
42 | - */ | ||
43 | - public boolean isExceptionFlag() { | ||
44 | - return exceptionFlag; | ||
45 | - } | ||
46 | - | ||
47 | - /** | ||
48 | - * Returns the parser exception object populated with line, character | ||
49 | - * position and message. | ||
50 | - * | ||
51 | - * @return object of parser exception. | ||
52 | - */ | ||
53 | - public ParserException getParserException() { | ||
54 | - return parserException; | ||
55 | - } | ||
56 | - | ||
57 | @Override | 32 | @Override |
58 | public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, | 33 | public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, |
59 | String msg, RecognitionException e) { | 34 | String msg, RecognitionException e) { |
35 | + | ||
36 | + ParserException parserException = new ParserException(msg); | ||
60 | parserException.setLine(line); | 37 | parserException.setLine(line); |
61 | parserException.setCharPosition(charPositionInLine); | 38 | parserException.setCharPosition(charPositionInLine); |
62 | - parserException.setMsg(msg); | 39 | + throw parserException; |
63 | - exceptionFlag = true; | ||
64 | } | 40 | } |
65 | } | 41 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/CustomExceptionMatcher.java
0 → 100644
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl; | ||
18 | + | ||
19 | +import org.hamcrest.Description; | ||
20 | +import org.hamcrest.TypeSafeMatcher; | ||
21 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
22 | + | ||
23 | +/** | ||
24 | + * ExpectedException framework can use the Hamcrest matcher's to test | ||
25 | + * custom/extended exceptions. This class extends the type safe matcher to define | ||
26 | + * the custom exception matcher. | ||
27 | + */ | ||
28 | +public final class CustomExceptionMatcher extends TypeSafeMatcher<ParserException> { | ||
29 | + | ||
30 | + /** | ||
31 | + * Customized exception matcher to match error location. | ||
32 | + * | ||
33 | + * @param line error line | ||
34 | + * @param charPosition error character position | ||
35 | + * @return | ||
36 | + */ | ||
37 | + public static CustomExceptionMatcher errorLocation(int line, int charPosition) { | ||
38 | + return new CustomExceptionMatcher(line, charPosition); | ||
39 | + } | ||
40 | + | ||
41 | + private int actualLine; | ||
42 | + private final int expectedLine; | ||
43 | + private int actualCharPosition; | ||
44 | + private final int expectedCharPosition; | ||
45 | + | ||
46 | + private CustomExceptionMatcher(int expectedLine, int expectedCharPosition) { | ||
47 | + this.expectedLine = expectedLine; | ||
48 | + this.expectedCharPosition = expectedCharPosition; | ||
49 | + } | ||
50 | + | ||
51 | + @Override | ||
52 | + protected boolean matchesSafely(final ParserException exception) { | ||
53 | + actualLine = exception.getLineNumber(); | ||
54 | + actualCharPosition = exception.getCharPositionInLine(); | ||
55 | + return ((actualLine == expectedLine) && (actualCharPosition == expectedCharPosition)); | ||
56 | + } | ||
57 | + | ||
58 | + @Override | ||
59 | + public void describeTo(Description description) { | ||
60 | + description.appendText(" Error reported location ") | ||
61 | + .appendText("Line " + actualLine + ", " + "CharPosition " + actualCharPosition) | ||
62 | + .appendText(" instead of expected ") | ||
63 | + .appendText("Line " + expectedLine + ", " + "CharPosition " + expectedCharPosition); | ||
64 | + } | ||
65 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Rule; | ||
20 | +import org.junit.Test; | ||
21 | +import org.junit.rules.ExpectedException; | ||
22 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
23 | +import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | ||
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
25 | +import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ||
26 | + | ||
27 | +/** | ||
28 | + * Test cases for testing base rule listener functionality. | ||
29 | + */ | ||
30 | +public class BaseFileListenerTest { | ||
31 | + | ||
32 | + @Rule | ||
33 | + public ExpectedException thrown = ExpectedException.none(); | ||
34 | + | ||
35 | + /** | ||
36 | + * Checks for exception if stack of parsable data is not empty at the entry | ||
37 | + * of yang base rule. | ||
38 | + */ | ||
39 | + @Test | ||
40 | + public void processYangFileEntryNonEmptyStack() { | ||
41 | + thrown.expect(ParserException.class); | ||
42 | + thrown.expectMessage("Internal parser error detected: Invalid holder for yangbase before processing."); | ||
43 | + | ||
44 | + YangModule tmpModule = new YangModule(); | ||
45 | + TreeWalkListener listener = new TreeWalkListener(); | ||
46 | + listener.getParsedDataStack().push(tmpModule); | ||
47 | + GeneratedYangParser.YangfileContext ctx = null; | ||
48 | + BaseFileListener.processYangFileEntry(listener, ctx); | ||
49 | + } | ||
50 | + | ||
51 | + /** | ||
52 | + * Checks that exception shouldn't be generated if stack of parsable data is | ||
53 | + * empty at the entry of yang base rule. | ||
54 | + */ | ||
55 | + @Test | ||
56 | + public void processYangFileEntryEmptyStack() { | ||
57 | + | ||
58 | + TreeWalkListener listener = new TreeWalkListener(); | ||
59 | + GeneratedYangParser.YangfileContext ctx = null; | ||
60 | + BaseFileListener.processYangFileEntry(listener, ctx); | ||
61 | + } | ||
62 | + | ||
63 | + /** | ||
64 | + * Checks that exception should be generated if stack of parsable data is | ||
65 | + * not empty at the exit of yang base rule. | ||
66 | + */ | ||
67 | + @Test | ||
68 | + public void processYangFileExitEmptyStack() { | ||
69 | + thrown.expect(ParserException.class); | ||
70 | + thrown.expectMessage("Internal parser error detected: Missing holder at yangbase after processing."); | ||
71 | + | ||
72 | + TreeWalkListener listener = new TreeWalkListener(); | ||
73 | + GeneratedYangParser.YangfileContext ctx = null; | ||
74 | + BaseFileListener.processYangFileExit(listener, ctx); | ||
75 | + } | ||
76 | + | ||
77 | + /** | ||
78 | + * Checks that exception shouldn't be generated if stack of parsable data is | ||
79 | + * empty at the exit of yang base rule. | ||
80 | + */ | ||
81 | + @Test | ||
82 | + public void processYangFileExitNonEmptyStack() { | ||
83 | + | ||
84 | + TreeWalkListener listener = new TreeWalkListener(); | ||
85 | + GeneratedYangParser.YangfileContext ctx = null; | ||
86 | + BaseFileListener.processYangFileEntry(listener, ctx); | ||
87 | + } | ||
88 | + | ||
89 | + /** | ||
90 | + * Checks that after popping out the parsable node from stack it should be | ||
91 | + * empty. | ||
92 | + */ | ||
93 | + @Test | ||
94 | + public void processYangFileExitStackErrorExtraEntryTest() { | ||
95 | + thrown.expect(ParserException.class); | ||
96 | + thrown.expectMessage("Internal parser error detected: Invalid holder for yangbase after processing."); | ||
97 | + | ||
98 | + YangModule tmpModule = new YangModule(); | ||
99 | + YangModule tmpModule2 = new YangModule(); | ||
100 | + TreeWalkListener listener = new TreeWalkListener(); | ||
101 | + listener.getParsedDataStack().push(tmpModule); | ||
102 | + listener.getParsedDataStack().push(tmpModule2); | ||
103 | + GeneratedYangParser.YangfileContext ctx = null; | ||
104 | + BaseFileListener.processYangFileExit(listener, ctx); | ||
105 | + } | ||
106 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Rule; | ||
20 | +import org.junit.Test; | ||
21 | +import org.junit.rules.ExpectedException; | ||
22 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
23 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
25 | +import org.onosproject.yangutils.parser.impl.CustomExceptionMatcher; | ||
26 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
27 | + | ||
28 | +import java.io.IOException; | ||
29 | + | ||
30 | +import static org.hamcrest.core.Is.is; | ||
31 | +import static org.junit.Assert.assertThat; | ||
32 | + | ||
33 | +/** | ||
34 | + * Test cases for testing belongsto listener functionality. | ||
35 | + */ | ||
36 | +public class BelongstoListenerTest { | ||
37 | + | ||
38 | + @Rule | ||
39 | + public ExpectedException thrown = ExpectedException.none(); | ||
40 | + | ||
41 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
42 | + | ||
43 | + /** | ||
44 | + * Checks if mandatory belongsto parameter "prefix" is not present. | ||
45 | + */ | ||
46 | + @Test | ||
47 | + public void processBelongsToWithoutPrefix() throws IOException, ParserException { | ||
48 | + thrown.expect(ParserException.class); | ||
49 | + thrown.expectMessage("mismatched input '}' expecting 'prefix'"); | ||
50 | + thrown.expect(CustomExceptionMatcher.errorLocation(4, 0)); | ||
51 | + YangNode node = manager.getDataModel("src/test/resources/BelongsToWithoutPrefix.yang"); | ||
52 | + } | ||
53 | + | ||
54 | + /** | ||
55 | + * Checks that prefix must be present only once in belongsto. | ||
56 | + */ | ||
57 | + @Test | ||
58 | + public void processBelongsToDualPrefix() throws IOException, ParserException { | ||
59 | + thrown.expect(ParserException.class); | ||
60 | + thrown.expectMessage("mismatched input 'prefix' expecting '}'"); | ||
61 | + thrown.expect(CustomExceptionMatcher.errorLocation(5, 0)); | ||
62 | + YangNode node = manager.getDataModel("src/test/resources/BelongsToDualPrefix.yang"); | ||
63 | + } | ||
64 | + | ||
65 | + /** | ||
66 | + * Checks if belongsto listener updates the date model tree. | ||
67 | + */ | ||
68 | + @Test | ||
69 | + public void processBelongsToWithPrefix() throws IOException, ParserException { | ||
70 | + | ||
71 | + YangNode node = manager.getDataModel("src/test/resources/BelongsToWithPrefix.yang"); | ||
72 | + YangSubModule yangNode = (YangSubModule) node; | ||
73 | + assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS")); | ||
74 | + } | ||
75 | + | ||
76 | + /** | ||
77 | + * Checks if mandatory parameter "belongsto" is present. | ||
78 | + */ | ||
79 | + @Test | ||
80 | + public void processSubModuleWithoutBelongsTo() throws IOException, ParserException { | ||
81 | + thrown.expect(ParserException.class); | ||
82 | + thrown.expectMessage("mismatched input '}' expecting 'belongs-to'"); | ||
83 | + thrown.expect(CustomExceptionMatcher.errorLocation(3, 0)); | ||
84 | + YangNode node = manager.getDataModel("src/test/resources/SubModuleWithoutBelongsTo.yang"); | ||
85 | + } | ||
86 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Rule; | ||
20 | +import org.junit.Test; | ||
21 | +import org.junit.rules.ExpectedException; | ||
22 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
23 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
25 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
26 | + | ||
27 | +import java.io.IOException; | ||
28 | + | ||
29 | +import static org.hamcrest.core.Is.is; | ||
30 | +import static org.junit.Assert.assertThat; | ||
31 | + | ||
32 | +/** | ||
33 | + * Test cases for testing contact listener functionality. | ||
34 | + */ | ||
35 | +public class ContactListenerTest { | ||
36 | + | ||
37 | + @Rule | ||
38 | + public ExpectedException thrown = ExpectedException.none(); | ||
39 | + | ||
40 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
41 | + | ||
42 | + /** | ||
43 | + * Checks if contact listener updates the data model tree. | ||
44 | + */ | ||
45 | + @Test | ||
46 | + public void processContactValidEntry() throws IOException, ParserException { | ||
47 | + | ||
48 | + YangNode node = manager.getDataModel("src/test/resources/ContactValidEntry.yang"); | ||
49 | + | ||
50 | + // Checks for the version value in data model tree. | ||
51 | + assertThat(((YangModule) node).getContact(), is("\"WG List: <mailto:spring@ietf.org>\nEditor: " | ||
52 | + + "Stephane Litkowski\n " + "<mailto:stephane.litkowski@orange.com>\"")); | ||
53 | + } | ||
54 | + | ||
55 | + /** | ||
56 | + * Checks that contact must be present only once. | ||
57 | + */ | ||
58 | + @Test(expected = ParserException.class) | ||
59 | + public void processContactDualEntryTest() throws IOException, ParserException { | ||
60 | + | ||
61 | + YangNode node = manager.getDataModel("src/test/resources/ContactDualEntryTest.yang"); | ||
62 | + | ||
63 | + } | ||
64 | + | ||
65 | + /** | ||
66 | + * Checks if contact is not empty. | ||
67 | + */ | ||
68 | + @Test(expected = ParserException.class) | ||
69 | + public void processContactWithEmptyString() throws IOException, ParserException { | ||
70 | + | ||
71 | + YangNode node = manager.getDataModel("src/test/resources/ContactWithEmptyString.yang"); | ||
72 | + } | ||
73 | + | ||
74 | + /** | ||
75 | + * Checks that contact must be present after namespace. | ||
76 | + */ | ||
77 | + @Test(expected = ParserException.class) | ||
78 | + public void processContactIncorrectOrder() throws IOException, ParserException { | ||
79 | + | ||
80 | + YangNode node = manager.getDataModel("src/test/resources/ContactIncorrectOrder.yang"); | ||
81 | + } | ||
82 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
23 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
24 | + | ||
25 | +import java.io.IOException; | ||
26 | + | ||
27 | +import static org.hamcrest.core.Is.is; | ||
28 | +import static org.junit.Assert.assertThat; | ||
29 | + | ||
30 | +/** | ||
31 | + * Test cases for testing import listener functionality. | ||
32 | + */ | ||
33 | +public class ImportListenerTest { | ||
34 | + | ||
35 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
36 | + | ||
37 | + /** | ||
38 | + * Checks if mandatory parameter prefix is present in import. | ||
39 | + */ | ||
40 | + @Test(expected = ParserException.class) | ||
41 | + public void processImportWithoutPrefix() throws IOException, ParserException { | ||
42 | + | ||
43 | + YangNode node = manager.getDataModel("src/test/resources/ImportWithoutPrefix.yang"); | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * Checks that prefix must be present only once in import. | ||
48 | + */ | ||
49 | + @Test(expected = ParserException.class) | ||
50 | + public void processImportWithDualPrefix() throws IOException, ParserException { | ||
51 | + | ||
52 | + YangNode node = manager.getDataModel("src/test/resources/ImportWithDualPrefix.yang"); | ||
53 | + } | ||
54 | + | ||
55 | + /** | ||
56 | + * Checks for the correct order of prefix in import. | ||
57 | + */ | ||
58 | + @Test(expected = ParserException.class) | ||
59 | + public void processImportInvalidOrder() throws IOException, ParserException { | ||
60 | + | ||
61 | + YangNode node = manager.getDataModel("src/test/resources/ImportInvalidOrder.yang"); | ||
62 | + } | ||
63 | + | ||
64 | + /** | ||
65 | + * Checks if import listener updates the data model tree. | ||
66 | + */ | ||
67 | + @Test | ||
68 | + public void processImportValidEntry() throws IOException, ParserException { | ||
69 | + | ||
70 | + YangNode node = manager.getDataModel("src/test/resources/ImportValidEntry.yang"); | ||
71 | + | ||
72 | + // Checks for the revision value in data model tree. | ||
73 | + assertThat(((YangModule) node).getImportList().get(0).getRevision(), is("2015-02-03")); | ||
74 | + // Checks for the prefix id in data model tree. | ||
75 | + assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2")); | ||
76 | + // Checks for the module name in data model tree. | ||
77 | + assertThat(((YangModule) node).getImportList().get(0).getModuleName(), is("ietf")); | ||
78 | + } | ||
79 | + | ||
80 | + /** | ||
81 | + * Checks if optional parameter revision is not mandatory in import. | ||
82 | + */ | ||
83 | + @Test | ||
84 | + public void processImportWithoutRevision() throws IOException, ParserException { | ||
85 | + | ||
86 | + YangNode node = manager.getDataModel("src/test/resources/ImportWithoutRevision.yang"); | ||
87 | + | ||
88 | + // Checks for the prefix id in data model tree. | ||
89 | + assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2")); | ||
90 | + // Checks for the module name in data model tree. | ||
91 | + assertThat(((YangModule) node).getImportList().get(0).getModuleName(), is("ietf")); | ||
92 | + } | ||
93 | + | ||
94 | + /** | ||
95 | + * Checks if multiple imports are allowed. | ||
96 | + */ | ||
97 | + @Test() | ||
98 | + public void processImportMultipleInstance() throws IOException, ParserException { | ||
99 | + | ||
100 | + YangNode node = manager.getDataModel("src/test/resources/ImportMultipleInstance.yang"); | ||
101 | + | ||
102 | + // Checks for the prefix id in data model tree. | ||
103 | + assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2")); | ||
104 | + // Checks for the module name in data model tree. | ||
105 | + assertThat(((YangModule) node).getImportList().get(0).getModuleName(), is("ietf")); | ||
106 | + | ||
107 | + // Checks for the prefix id in data model tree. | ||
108 | + assertThat(((YangModule) node).getImportList().get(1).getPrefixId(), is("On3")); | ||
109 | + // Checks for the module name in data model tree. | ||
110 | + assertThat(((YangModule) node).getImportList().get(1).getModuleName(), is("itut")); | ||
111 | + } | ||
112 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
23 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
24 | + | ||
25 | +import java.io.IOException; | ||
26 | + | ||
27 | +import static org.hamcrest.core.Is.is; | ||
28 | +import static org.junit.Assert.assertThat; | ||
29 | + | ||
30 | +/** | ||
31 | + * Test cases for testing include listener functionality. | ||
32 | + */ | ||
33 | +public class IncludeListenerTest { | ||
34 | + | ||
35 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
36 | + | ||
37 | + /** | ||
38 | + * Checks if include listener with ; is valid and updates the data | ||
39 | + * model tree. | ||
40 | + */ | ||
41 | + @Test | ||
42 | + public void processIncludeWithStmtend() throws IOException, ParserException { | ||
43 | + | ||
44 | + YangNode node = manager.getDataModel("src/test/resources/IncludeWithStmtend.yang"); | ||
45 | + | ||
46 | + // Checks for the sub module name in data model tree. | ||
47 | + assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut")); | ||
48 | + } | ||
49 | + | ||
50 | + /** | ||
51 | + * Checks if include listener with braces and without revision date is valid | ||
52 | + * and updates the data model tree. | ||
53 | + */ | ||
54 | + @Test | ||
55 | + public void processIncludeWithEmptyBody() throws IOException, ParserException { | ||
56 | + | ||
57 | + YangNode node = manager.getDataModel("src/test/resources/IncludeWithEmptyBody.yang"); | ||
58 | + | ||
59 | + // Checks for the sub module name in data model tree. | ||
60 | + assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut")); | ||
61 | + } | ||
62 | + | ||
63 | + /** | ||
64 | + * Checks if include listener with braces and with revision date is valid | ||
65 | + * and updates the data model tree. | ||
66 | + */ | ||
67 | + @Test | ||
68 | + public void processIncludeWithDate() throws IOException, ParserException { | ||
69 | + | ||
70 | + YangNode node = manager.getDataModel("src/test/resources/IncludeWithDate.yang"); | ||
71 | + | ||
72 | + // Checks for the sub module name in data model tree. | ||
73 | + assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut")); | ||
74 | + assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is("2016-02-03")); | ||
75 | + } | ||
76 | + | ||
77 | + /** | ||
78 | + * Checks if include has more than one occurrence. | ||
79 | + */ | ||
80 | + @Test | ||
81 | + public void processIncludeMultiInstance() throws IOException, ParserException { | ||
82 | + | ||
83 | + YangNode node = manager.getDataModel("src/test/resources/IncludeMultiInstance.yang"); | ||
84 | + | ||
85 | + // Checks for the sub module name in data model tree. | ||
86 | + assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut")); | ||
87 | + assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is("2016-02-03")); | ||
88 | + assertThat(((YangModule) node).getIncludeList().get(1).getSubModuleName(), is("sdn")); | ||
89 | + assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is("2014-02-03")); | ||
90 | + } | ||
91 | + | ||
92 | + /** | ||
93 | + * Checks if include and import can come in any order. | ||
94 | + */ | ||
95 | + @Test | ||
96 | + public void processIncludeImportAnyOrder() throws IOException, ParserException { | ||
97 | + | ||
98 | + YangNode node = manager.getDataModel("src/test/resources/IncludeImportAnyOrder.yang"); | ||
99 | + | ||
100 | + // Checks for the sub module name in data model tree. | ||
101 | + assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut")); | ||
102 | + assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is("2016-02-03")); | ||
103 | + assertThat(((YangModule) node).getIncludeList().get(1).getSubModuleName(), is("sdn")); | ||
104 | + assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is("2014-02-03")); | ||
105 | + } | ||
106 | + | ||
107 | + /** | ||
108 | + * Checks if syntax of Include is not correct. | ||
109 | + */ | ||
110 | + @Test(expected = ParserException.class) | ||
111 | + public void processIncludeInvalidSyntax() throws IOException, ParserException { | ||
112 | + | ||
113 | + YangNode node = manager.getDataModel("src/test/resources/IncludeInvalidSyntax.yang"); | ||
114 | + } | ||
115 | + | ||
116 | + /** | ||
117 | + * Checks if syntax of revision date in Include is not correct. | ||
118 | + */ | ||
119 | + @Test(expected = ParserException.class) | ||
120 | + public void processIncludeInvalidDateSyntax() throws IOException, ParserException { | ||
121 | + | ||
122 | + YangNode node = manager.getDataModel("src/test/resources/IncludeInvalidDateSyntax.yang"); | ||
123 | + } | ||
124 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
22 | +import org.onosproject.yangutils.datamodel.YangNodeType; | ||
23 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
24 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
25 | + | ||
26 | +import java.io.IOException; | ||
27 | + | ||
28 | +import static org.hamcrest.core.Is.is; | ||
29 | +import static org.junit.Assert.assertThat; | ||
30 | + | ||
31 | +/** | ||
32 | + * Test cases for testing module listener functionality. | ||
33 | + */ | ||
34 | +public class ModuleListenerTest { | ||
35 | + | ||
36 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
37 | + | ||
38 | + /** | ||
39 | + * Checks if module listener updates the data model root node. | ||
40 | + */ | ||
41 | + @Test | ||
42 | + public void processModuleValidEntry() throws IOException, ParserException { | ||
43 | + | ||
44 | + YangNode node = manager.getDataModel("src/test/resources/ModuleValidEntry.yang"); | ||
45 | + | ||
46 | + // Check whether the data model tree returned is of type module. | ||
47 | + assertThat((node instanceof YangModule), is(true)); | ||
48 | + | ||
49 | + // Check whether the node type is set properly to module. | ||
50 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
51 | + | ||
52 | + // Check whether the module name is set correctly. | ||
53 | + YangModule yangNode = (YangModule) node; | ||
54 | + assertThat(yangNode.getName(), is("Test")); | ||
55 | + } | ||
56 | + | ||
57 | + /** | ||
58 | + * Checks if module name is set correctly. | ||
59 | + */ | ||
60 | + @Test(expected = ParserException.class) | ||
61 | + public void processModuleInvalidEntryTest() throws IOException, ParserException { | ||
62 | + | ||
63 | + YangNode node = manager.getDataModel("src/test/resources/ModuleWithInvalidIdentifier.yang"); | ||
64 | + } | ||
65 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
23 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
24 | + | ||
25 | +import java.io.IOException; | ||
26 | + | ||
27 | +import static org.hamcrest.core.Is.is; | ||
28 | +import static org.junit.Assert.assertThat; | ||
29 | + | ||
30 | +/** | ||
31 | + * Test cases for testing namespace listener functionality. | ||
32 | + */ | ||
33 | +public class NamespaceListenerTest { | ||
34 | + | ||
35 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
36 | + | ||
37 | + /** | ||
38 | + * Checks that value of namespace shouldn't have invalid spaces. | ||
39 | + */ | ||
40 | + @Test(expected = ParserException.class) | ||
41 | + public void processNamespaceWithInvalidSpaces() throws IOException, ParserException { | ||
42 | + | ||
43 | + YangNode node = manager.getDataModel("src/test/resources/NamespaceWithInvalidSpaces.yang"); | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * Checks if namespace with double quotes is allowed. | ||
48 | + */ | ||
49 | + @Test() | ||
50 | + public void processNamespaceInDoubleQuotes() throws IOException, ParserException { | ||
51 | + | ||
52 | + YangNode node = manager.getDataModel("src/test/resources/NamespaceInDoubleQuotes.yang"); | ||
53 | + | ||
54 | + // Checks for the version value in data model tree. | ||
55 | + assertThat(((YangModule) node).getNameSpace().getUri(), is("\"urn:ietf:params:xml:ns:yang:ietf-ospf\"")); | ||
56 | + } | ||
57 | + | ||
58 | + /** | ||
59 | + * Checks if namespace without double quotes is allowed. | ||
60 | + */ | ||
61 | + @Test() | ||
62 | + public void processNamespaceWithoutQuotes() throws IOException, ParserException { | ||
63 | + | ||
64 | + YangNode node = manager.getDataModel("src/test/resources/NamespaceWithoutQuotes.yang"); | ||
65 | + | ||
66 | + // Checks for the version value in data model tree. | ||
67 | + assertThat(((YangModule) node).getNameSpace().getUri(), is("urn:ietf:params:xml:ns:yang:ietf-ospf")); | ||
68 | + } | ||
69 | + | ||
70 | + /** | ||
71 | + * Checks if namespace is present only once. | ||
72 | + */ | ||
73 | + @Test(expected = ParserException.class) | ||
74 | + public void processNamespaceDualEntry() throws IOException, ParserException { | ||
75 | + | ||
76 | + YangNode node = manager.getDataModel("src/test/resources/NamespaceDualEntry.yang"); | ||
77 | + } | ||
78 | + | ||
79 | + /** | ||
80 | + * Checks if mandatory parameter namespace is present. | ||
81 | + */ | ||
82 | + @Test(expected = ParserException.class) | ||
83 | + public void processNamespaceNoEntryTest() throws IOException, ParserException { | ||
84 | + | ||
85 | + YangNode node = manager.getDataModel("src/test/resources/NamespaceNoEntryTest.yang"); | ||
86 | + } | ||
87 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
23 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
24 | + | ||
25 | +import java.io.IOException; | ||
26 | + | ||
27 | +import static org.hamcrest.core.Is.is; | ||
28 | +import static org.junit.Assert.assertThat; | ||
29 | + | ||
30 | +/** | ||
31 | + * Test cases for testing organization listener functionality. | ||
32 | + */ | ||
33 | +public class OrganizationListenerTest { | ||
34 | + | ||
35 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
36 | + | ||
37 | + /** | ||
38 | + * Checks if organization listener updates the data model tree. | ||
39 | + */ | ||
40 | + @Test | ||
41 | + public void processOrganizationValidEntry() throws IOException, ParserException { | ||
42 | + | ||
43 | + YangNode node = manager.getDataModel("src/test/resources/OrganizationValidEntry.yang"); | ||
44 | + | ||
45 | + // Checks for the version value in data model tree. | ||
46 | + assertThat(((YangModule) node).getOrganization(), is("\"IETF SPRING Working Group\"")); | ||
47 | + } | ||
48 | + | ||
49 | + /** | ||
50 | + * Checks that organization must be present only once. | ||
51 | + */ | ||
52 | + @Test(expected = ParserException.class) | ||
53 | + public void processOrganizationDualEntry() throws IOException, ParserException { | ||
54 | + | ||
55 | + YangNode node = manager.getDataModel("src/test/resources/OrganizationDualEntry.yang"); | ||
56 | + } | ||
57 | + | ||
58 | + /** | ||
59 | + * Checks if organization entry syntax is correct. | ||
60 | + */ | ||
61 | + @Test(expected = ParserException.class) | ||
62 | + public void processOrganizationMissingValue() throws IOException, ParserException { | ||
63 | + | ||
64 | + YangNode node = manager.getDataModel("src/test/resources/OrganizationMissingValue.yang"); | ||
65 | + } | ||
66 | + | ||
67 | + /** | ||
68 | + * Checks if organization and namespace is present in correct order. | ||
69 | + */ | ||
70 | + @Test(expected = ParserException.class) | ||
71 | + public void processOrganizationInvalidOrder() throws IOException, ParserException { | ||
72 | + | ||
73 | + YangNode node = manager.getDataModel("src/test/resources/OrganizationInvalidOrder.yang"); | ||
74 | + } | ||
75 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
23 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
24 | + | ||
25 | +import java.io.IOException; | ||
26 | + | ||
27 | +import static org.hamcrest.core.Is.is; | ||
28 | +import static org.junit.Assert.assertThat; | ||
29 | + | ||
30 | +/** | ||
31 | + * Test cases for testing prefix listener functionality. | ||
32 | + */ | ||
33 | +public class PrefixListenerTest { | ||
34 | + | ||
35 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
36 | + | ||
37 | + /** | ||
38 | + * Checks if value of prefix is correct. | ||
39 | + */ | ||
40 | + @Test(expected = ParserException.class) | ||
41 | + public void processPrefixInvalidValue() throws IOException, ParserException { | ||
42 | + | ||
43 | + YangNode node = manager.getDataModel("src/test/resources/PrefixInvalidValue.yang"); | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * Checks if prefix listener updates the data model tree. | ||
48 | + */ | ||
49 | + @Test | ||
50 | + public void processPrefixValidEntry() throws IOException, ParserException { | ||
51 | + | ||
52 | + YangNode node = manager.getDataModel("src/test/resources/PrefixValidEntry.yang"); | ||
53 | + | ||
54 | + // Checks for the version value in data model tree. | ||
55 | + assertThat(((YangModule) node).getPrefix(), is("On")); | ||
56 | + } | ||
57 | + | ||
58 | + /** | ||
59 | + * Checks that prefix should be present just once. | ||
60 | + */ | ||
61 | + @Test(expected = ParserException.class) | ||
62 | + public void processPrefixDualEntry() throws IOException, ParserException { | ||
63 | + | ||
64 | + YangNode node = manager.getDataModel("src/test/resources/PrefixDualEntry.yang"); | ||
65 | + } | ||
66 | + | ||
67 | + /** | ||
68 | + * Checks if prefix syntax is followed. | ||
69 | + */ | ||
70 | + @Test(expected = ParserException.class) | ||
71 | + public void processPrefixMissingValue() throws IOException, ParserException { | ||
72 | + | ||
73 | + YangNode node = manager.getDataModel("src/test/resources/PrefixMissingValue.yang"); | ||
74 | + } | ||
75 | + | ||
76 | + /** | ||
77 | + * Checks that exception should be reported if prefix is missing. | ||
78 | + */ | ||
79 | + @Test(expected = ParserException.class) | ||
80 | + public void processPrefixOrder() throws IOException, ParserException { | ||
81 | + | ||
82 | + YangNode node = manager.getDataModel("src/test/resources/PrefixOrder.yang"); | ||
83 | + } | ||
84 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
23 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
24 | + | ||
25 | +import java.io.IOException; | ||
26 | + | ||
27 | +import static org.hamcrest.core.Is.is; | ||
28 | +import static org.junit.Assert.assertThat; | ||
29 | + | ||
30 | +/** | ||
31 | + * Test cases for testing revision date listener functionality. | ||
32 | + */ | ||
33 | +public class RevisionDateListenerTest { | ||
34 | + | ||
35 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
36 | + | ||
37 | + /** | ||
38 | + * Checks if revision date syntax is correct in include. | ||
39 | + */ | ||
40 | + @Test(expected = ParserException.class) | ||
41 | + public void processRevisionDateInvalidSyntaxAtInclude() throws IOException, ParserException { | ||
42 | + | ||
43 | + YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalidSyntaxAtInclude.yang"); | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * Checks if revision date syntax is correct in import. | ||
48 | + */ | ||
49 | + @Test(expected = ParserException.class) | ||
50 | + public void processRevisionDateInvalidSyntaxAtImport() throws IOException, ParserException { | ||
51 | + | ||
52 | + YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalidSyntaxAtImport.yang"); | ||
53 | + } | ||
54 | + | ||
55 | + /** | ||
56 | + * Checks revision date should not be in quotes inside include. | ||
57 | + */ | ||
58 | + @Test(expected = ParserException.class) | ||
59 | + public void processRevisionDateInQuotesAtInclude() throws IOException, ParserException { | ||
60 | + | ||
61 | + YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtInclude.yang"); | ||
62 | + } | ||
63 | + | ||
64 | + /** | ||
65 | + * Checks revision date should not be in quotes inside import. | ||
66 | + */ | ||
67 | + @Test(expected = ParserException.class) | ||
68 | + public void processRevisionDateInQuotesAtImport() throws IOException, ParserException { | ||
69 | + | ||
70 | + YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtImport.yang"); | ||
71 | + } | ||
72 | + | ||
73 | + /** | ||
74 | + * Checks if revision date follows YYYY-MM-DD format. | ||
75 | + */ | ||
76 | + @Test(expected = ParserException.class) | ||
77 | + public void processRevisionDateInvalidFormat() throws IOException, ParserException { | ||
78 | + | ||
79 | + YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalidFormat.yang"); | ||
80 | + } | ||
81 | + | ||
82 | + /** | ||
83 | + * Checks if revision date listener updates the data model tree. | ||
84 | + */ | ||
85 | + @Test | ||
86 | + public void processRevisionDateValidEntry() throws IOException, ParserException { | ||
87 | + | ||
88 | + YangNode node = manager.getDataModel("src/test/resources/RevisionDateValidEntry.yang"); | ||
89 | + | ||
90 | + // Checks for the version value in data model tree. | ||
91 | + assertThat(((YangModule) node).getImportList().get(0).getRevision(), is("2015-02-03")); | ||
92 | + assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is("2016-02-03")); | ||
93 | + assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is("2014-02-03")); | ||
94 | + } | ||
95 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
23 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
24 | + | ||
25 | +import java.io.IOException; | ||
26 | + | ||
27 | +import static org.hamcrest.core.Is.is; | ||
28 | +import static org.junit.Assert.assertThat; | ||
29 | + | ||
30 | +/** | ||
31 | + * Test cases for testing revision listener functionality. | ||
32 | + */ | ||
33 | +public class RevisionListenerTest { | ||
34 | + | ||
35 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
36 | + | ||
37 | + /** | ||
38 | + * Checks if revision doesn't have optional parameters "revision and | ||
39 | + * description". | ||
40 | + */ | ||
41 | + @Test | ||
42 | + public void processRevisionNoOptionalParameter() throws IOException, ParserException { | ||
43 | + | ||
44 | + YangNode node = manager.getDataModel("src/test/resources/RevisionNoOptionalParameter.yang"); | ||
45 | + | ||
46 | + // Checks for the version value in data model tree. | ||
47 | + assertThat(((YangModule) node).getRevision().getRevDate(), is("2016-02-03")); | ||
48 | + } | ||
49 | + | ||
50 | + /** | ||
51 | + * Checks if the syntax of revision is correct. | ||
52 | + */ | ||
53 | + @Test(expected = ParserException.class) | ||
54 | + public void processRevisionInValidSyntax() throws IOException, ParserException { | ||
55 | + | ||
56 | + YangNode node = manager.getDataModel("src/test/resources/RevisionInValidSyntax.yang"); | ||
57 | + } | ||
58 | + | ||
59 | + /** | ||
60 | + * Checks if the correct order is followed. | ||
61 | + */ | ||
62 | + @Test(expected = ParserException.class) | ||
63 | + public void processRevisionInValidOrder() throws IOException, ParserException { | ||
64 | + | ||
65 | + YangNode node = manager.getDataModel("src/test/resources/RevisionInValidOrder.yang"); | ||
66 | + } | ||
67 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNodeType; | ||
22 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
23 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
24 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
25 | + | ||
26 | +import java.io.IOException; | ||
27 | + | ||
28 | +import static org.hamcrest.core.Is.is; | ||
29 | +import static org.junit.Assert.assertThat; | ||
30 | + | ||
31 | +/** | ||
32 | + * Test cases for testing submodule listener functionality. | ||
33 | + */ | ||
34 | +public class SubModuleListenerTest { | ||
35 | + | ||
36 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
37 | + | ||
38 | + /** | ||
39 | + * Checks if the sub module listeners updates the data model tree. | ||
40 | + */ | ||
41 | + @Test | ||
42 | + public void processSubModuleValidEntry() throws IOException, ParserException { | ||
43 | + | ||
44 | + YangNode node = manager.getDataModel("src/test/resources/SubModuleValidEntry.yang"); | ||
45 | + | ||
46 | + // Check whether the data model tree returned is of type module. | ||
47 | + assertThat((node instanceof YangSubModule), is(true)); | ||
48 | + | ||
49 | + // Check whether the node type is set properly to module. | ||
50 | + assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE)); | ||
51 | + | ||
52 | + YangSubModule yangNode = (YangSubModule) node; | ||
53 | + // Check whether the module name is set correctly. | ||
54 | + assertThat(yangNode.getName(), is("Test")); | ||
55 | + // Checks for the version value in data model tree. | ||
56 | + assertThat(yangNode.getVersion(), is((byte) 1)); | ||
57 | + // Checks identifier of belongsto in data model tree. | ||
58 | + assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS")); | ||
59 | + // Checks for the version value in data model tree. | ||
60 | + assertThat(yangNode.getBelongsTo().getPrefix(), is("On1")); | ||
61 | + } | ||
62 | + | ||
63 | + /** | ||
64 | + * Checks if the yang version and belongs to can come in any order in sub | ||
65 | + * module. | ||
66 | + */ | ||
67 | + @Test | ||
68 | + public void processSubModuleOrder() throws IOException, ParserException { | ||
69 | + | ||
70 | + YangNode node = manager.getDataModel("src/test/resources/SubModuleOrder.yang"); | ||
71 | + | ||
72 | + // Check whether the data model tree returned is of type module. | ||
73 | + assertThat((node instanceof YangSubModule), is(true)); | ||
74 | + | ||
75 | + // Check whether the node type is set properly to module. | ||
76 | + assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE)); | ||
77 | + | ||
78 | + YangSubModule yangNode = (YangSubModule) node; | ||
79 | + // Check whether the module name is set correctly. | ||
80 | + assertThat(yangNode.getName(), is("Test")); | ||
81 | + // Checks for the version value in data model tree. | ||
82 | + assertThat(yangNode.getVersion(), is((byte) 1)); | ||
83 | + // Checks identifier of belongsto in data model tree. | ||
84 | + assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS")); | ||
85 | + // Checks for the version value in data model tree. | ||
86 | + assertThat(yangNode.getBelongsTo().getPrefix(), is("On1")); | ||
87 | + } | ||
88 | + | ||
89 | + /** | ||
90 | + * Checks if yang version is optional. | ||
91 | + */ | ||
92 | + @Test | ||
93 | + public void processSubModuleWithoutVersion() throws IOException, ParserException { | ||
94 | + | ||
95 | + YangNode node = manager.getDataModel("src/test/resources/SubModuleWithoutVersion.yang"); | ||
96 | + | ||
97 | + // Check whether the data model tree returned is of type module. | ||
98 | + assertThat((node instanceof YangSubModule), is(true)); | ||
99 | + | ||
100 | + // Check whether the node type is set properly to module. | ||
101 | + assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE)); | ||
102 | + | ||
103 | + YangSubModule yangNode = (YangSubModule) node; | ||
104 | + // Check whether the module name is set correctly. | ||
105 | + assertThat(yangNode.getName(), is("Test")); | ||
106 | + // Checks identifier of belongsto in data model tree. | ||
107 | + assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS")); | ||
108 | + // Checks for the version value in data model tree. | ||
109 | + assertThat(yangNode.getBelongsTo().getPrefix(), is("On1")); | ||
110 | + } | ||
111 | + | ||
112 | + /** | ||
113 | + * Checks if sub module name is correct. | ||
114 | + */ | ||
115 | + @Test(expected = ParserException.class) | ||
116 | + public void processSubModuleInvalidName() throws IOException, ParserException { | ||
117 | + | ||
118 | + YangNode node = manager.getDataModel("src/test/resources/SubModuleInvalidName.yang"); | ||
119 | + } | ||
120 | + | ||
121 | + /** | ||
122 | + * Checks if sub module has invalid modules construct eg namespace. | ||
123 | + */ | ||
124 | + @Test(expected = ParserException.class) | ||
125 | + public void processSubModuleWithNamespace() throws IOException, ParserException { | ||
126 | + | ||
127 | + YangNode node = manager.getDataModel("src/test/resources/SubModuleWithNamespace.yang"); | ||
128 | + } | ||
129 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
23 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
24 | + | ||
25 | +import java.io.IOException; | ||
26 | + | ||
27 | +import static org.hamcrest.core.Is.is; | ||
28 | +import static org.junit.Assert.assertThat; | ||
29 | + | ||
30 | +/** | ||
31 | + * Test cases for testing version listener functionality. | ||
32 | + */ | ||
33 | +public class VersionListenerTest { | ||
34 | + | ||
35 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
36 | + | ||
37 | + /** | ||
38 | + * Checks if value of version is correct. | ||
39 | + */ | ||
40 | + @Test(expected = ParserException.class) | ||
41 | + public void processVersionInvalidValue() throws IOException, ParserException { | ||
42 | + | ||
43 | + YangNode node = manager.getDataModel("src/test/resources/VersionInvalidValue.yang"); | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * Checks if version listener updates the data model tree. | ||
48 | + */ | ||
49 | + @Test | ||
50 | + public void processVersionValidEntry() throws IOException, ParserException { | ||
51 | + | ||
52 | + YangNode node = manager.getDataModel("src/test/resources/VersionValidEntry.yang"); | ||
53 | + | ||
54 | + // Checks for the version value in data model tree. | ||
55 | + assertThat(((YangModule) node).getVersion(), is((byte) 1)); | ||
56 | + } | ||
57 | + | ||
58 | + /** | ||
59 | + * Checks if version which is optional paramater is not present. | ||
60 | + */ | ||
61 | + @Test | ||
62 | + public void processVersionNotPresent() throws IOException, ParserException { | ||
63 | + | ||
64 | + YangNode node = manager.getDataModel("src/test/resources/VersionNotPresent.yang"); | ||
65 | + | ||
66 | + // Checks for the version value in data model tree. | ||
67 | + assertThat(((YangModule) node).getVersion(), is((byte) 0)); | ||
68 | + } | ||
69 | + | ||
70 | + /** | ||
71 | + * Checks that version should be present only once. | ||
72 | + */ | ||
73 | + @Test(expected = ParserException.class) | ||
74 | + public void processVersionDualEntry() throws IOException, ParserException { | ||
75 | + | ||
76 | + YangNode node = manager.getDataModel("src/test/resources/VersionDualEntry.yang"); | ||
77 | + } | ||
78 | + | ||
79 | + /** | ||
80 | + * Checks if version can appear in any order in module header. | ||
81 | + */ | ||
82 | + @Test | ||
83 | + public void processVersionOrder() throws IOException, ParserException { | ||
84 | + | ||
85 | + YangNode node = manager.getDataModel("src/test/resources/VersionOrder.yang"); | ||
86 | + | ||
87 | + // Checks for the version value in data model tree. | ||
88 | + assertThat(((YangModule) node).getVersion(), is((byte) 1)); | ||
89 | + } | ||
90 | + | ||
91 | + /** | ||
92 | + * Checks if sytax of version entry is not correct. | ||
93 | + */ | ||
94 | + @Test(expected = ParserException.class) | ||
95 | + public void processVersionInvalidSyntax() throws IOException, ParserException { | ||
96 | + | ||
97 | + YangNode node = manager.getDataModel("src/test/resources/VersionInvalidSyntax.yang"); | ||
98 | + } | ||
99 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
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 | + | ||
17 | +package org.onosproject.yangutils.parser.parseutils; | ||
18 | + | ||
19 | +import org.junit.Test; | ||
20 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
21 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; | ||
22 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
23 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
24 | + | ||
25 | +import static org.hamcrest.core.Is.is; | ||
26 | +import static org.junit.Assert.assertThat; | ||
27 | + | ||
28 | +/** | ||
29 | + * Test case for testing listener error message construction util. | ||
30 | + */ | ||
31 | +public class ListenerErrorMessageConstructionTest { | ||
32 | + | ||
33 | + /** | ||
34 | + * Checks for error message construction with parsable data type name. | ||
35 | + */ | ||
36 | + @Test | ||
37 | + public void checkErrorMsgConstructionWithName() { | ||
38 | + | ||
39 | + // Create an test error message | ||
40 | + String testErrorMessage = ListenerErrorMessageConstruction | ||
41 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, ParsableDataType.CONTACT_DATA, | ||
42 | + "Test Instance", ListenerErrorLocation.ENTRY); | ||
43 | + | ||
44 | + // Check message. | ||
45 | + assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact " | ||
46 | + + "\"Test Instance\" before processing.")); | ||
47 | + } | ||
48 | + | ||
49 | + /** | ||
50 | + * Checks for error message construction without parsable data type name. | ||
51 | + */ | ||
52 | + @Test | ||
53 | + public void checkErrorMsgConstructionWithoutName() { | ||
54 | + | ||
55 | + // Create an test error message | ||
56 | + String testErrorMessage = ListenerErrorMessageConstruction | ||
57 | + .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, ParsableDataType.CONTACT_DATA, | ||
58 | + "Test Instance", ListenerErrorLocation.ENTRY); | ||
59 | + | ||
60 | + // Check message. | ||
61 | + assertThat(testErrorMessage, | ||
62 | + is("Internal parser error detected: Invalid holder for contact \"Test Instance\"" | ||
63 | + + " before processing.")); | ||
64 | + } | ||
65 | + | ||
66 | + /** | ||
67 | + * Checks for extended error message construction with parsable data type name. | ||
68 | + */ | ||
69 | + @Test | ||
70 | + public void checkExtendedErrorMsgConstructionWithName() { | ||
71 | + | ||
72 | + // Create an test error message | ||
73 | + String testErrorMessage = ListenerErrorMessageConstruction | ||
74 | + .constructExtendedListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
75 | + ParsableDataType.CONTACT_DATA, "Test Instance", | ||
76 | + ListenerErrorLocation.ENTRY, "Extended Information"); | ||
77 | + | ||
78 | + // Check message. | ||
79 | + assertThat(testErrorMessage, | ||
80 | + is("Internal parser error detected: Invalid holder for contact \"Test Instance\"" | ||
81 | + + " before processing.\n" + "Error Information: Extended Information")); | ||
82 | + } | ||
83 | + | ||
84 | + /** | ||
85 | + * Checks for extended error message construction without parsable data type name. | ||
86 | + */ | ||
87 | + @Test | ||
88 | + public void checkExtendedErrorMsgConstructionWithoutName() { | ||
89 | + | ||
90 | + // Create an test error message | ||
91 | + String testErrorMessage = ListenerErrorMessageConstruction | ||
92 | + .constructExtendedListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, | ||
93 | + ParsableDataType.CONTACT_DATA, "", | ||
94 | + ListenerErrorLocation.ENTRY, "Extended Information"); | ||
95 | + | ||
96 | + // Check message. | ||
97 | + assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact" | ||
98 | + + " before processing.\n" + "Error Information: Extended Information")); | ||
99 | + } | ||
100 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -16,74 +16,80 @@ | ... | @@ -16,74 +16,80 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.parseutils; | 17 | package org.onosproject.yangutils.parser.parseutils; |
18 | 18 | ||
19 | +import org.junit.Rule; | ||
19 | import org.junit.Test; | 20 | import org.junit.Test; |
21 | +import org.junit.rules.ExpectedException; | ||
20 | import org.onosproject.yangutils.datamodel.YangRevision; | 22 | import org.onosproject.yangutils.datamodel.YangRevision; |
23 | +import org.onosproject.yangutils.parser.ParsableDataType; | ||
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
21 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
22 | -import org.onosproject.yangutils.parser.impl.parserutils.ListenerError; | 26 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation; |
27 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction; | ||
28 | +import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType; | ||
23 | import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; | 29 | import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; |
24 | 30 | ||
25 | -import static org.hamcrest.core.Is.is; | ||
26 | -import static org.junit.Assert.assertThat; | ||
27 | - | ||
28 | /** | 31 | /** |
29 | * Test case for testing listener validation util. | 32 | * Test case for testing listener validation util. |
30 | */ | 33 | */ |
31 | public class ListenerValidationTest { | 34 | public class ListenerValidationTest { |
32 | 35 | ||
36 | + @Rule | ||
37 | + public ExpectedException thrown = ExpectedException.none(); | ||
38 | + | ||
33 | /** | 39 | /** |
34 | - * This test case checks in case error pre-exists, listener validate | 40 | + * Checks for exception in case parsable stack is empty while validating for |
35 | - * function returns true. | 41 | + * not empty scenario. |
36 | */ | 42 | */ |
37 | @Test | 43 | @Test |
38 | - public void listenerValidationErrorExists() { | 44 | + public void validateStackIsNotEmptyForEmptyStack() { |
45 | + | ||
46 | + String expectedError = ListenerErrorMessageConstruction | ||
47 | + .constructListenerErrorMessage(ListenerErrorType.MISSING_HOLDER, ParsableDataType.YANGBASE_DATA, "", | ||
48 | + ListenerErrorLocation.EXIT); | ||
39 | 49 | ||
40 | - // Create an test error. | 50 | + // Get the exception occurred during parsing. |
41 | - ListenerError testError = new ListenerError(); | 51 | + thrown.expect(ParserException.class); |
42 | - testError.setErrorFlag(true); | 52 | + thrown.expectMessage(expectedError); |
43 | - testError.setErrorMsg("Test Error"); | ||
44 | 53 | ||
45 | // Create test walker and assign test error to it. | 54 | // Create test walker and assign test error to it. |
46 | TreeWalkListener testWalker = new TreeWalkListener(); | 55 | TreeWalkListener testWalker = new TreeWalkListener(); |
47 | - testWalker.setErrorInformation(testError); | ||
48 | 56 | ||
49 | - // Create a temporary node of parsable. | 57 | + ListenerValidation.checkStackIsNotEmpty(testWalker, ListenerErrorType.MISSING_HOLDER, |
50 | - YangRevision tmpNode = new YangRevision(); | 58 | + ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT); |
51 | - testWalker.getParsedDataStack().push(tmpNode); | ||
52 | - | ||
53 | - boolean errorFlag = ListenerValidation.preValidation(testWalker, "ErrorTest"); | ||
54 | - | ||
55 | - /** | ||
56 | - * Check for the values set in syntax error function. If not set properly | ||
57 | - * report an assert. | ||
58 | - */ | ||
59 | - assertThat(errorFlag, is(true)); | ||
60 | } | 59 | } |
61 | 60 | ||
62 | /** | 61 | /** |
63 | - * This test case checks in case parsable stack is empty, listener validate | 62 | + * Checks if there is no exception in case parsable stack is not empty while validating |
64 | - * function returns true. | 63 | + * for not empty scenario. |
65 | */ | 64 | */ |
66 | @Test | 65 | @Test |
67 | - public void listenerValidationEmptyStack() { | 66 | + public void validateStackIsNotEmptyForNonEmptyStack() { |
68 | 67 | ||
69 | // Create test walker and assign test error to it. | 68 | // Create test walker and assign test error to it. |
70 | TreeWalkListener testWalker = new TreeWalkListener(); | 69 | TreeWalkListener testWalker = new TreeWalkListener(); |
71 | 70 | ||
72 | - boolean errorFlag = ListenerValidation.preValidation(testWalker, "ErrorTest"); | 71 | + // Create a temporary node of parsable. |
72 | + YangRevision tmpNode = new YangRevision(); | ||
73 | + testWalker.getParsedDataStack().push(tmpNode); | ||
73 | 74 | ||
74 | - /** | 75 | + ListenerValidation.checkStackIsNotEmpty(testWalker, ListenerErrorType.MISSING_HOLDER, |
75 | - * Check for the values set in syntax error function. If not set properly | 76 | + ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT); |
76 | - * report an assert. | ||
77 | - */ | ||
78 | - assertThat(errorFlag, is(true)); | ||
79 | } | 77 | } |
80 | 78 | ||
81 | /** | 79 | /** |
82 | - * This test case checks in case of error doesn't pre-exists and stack is, | 80 | + * Checks for exception in case parsable stack is not empty while validating |
83 | - * non empty, listener validate function returns false. | 81 | + * for empty scenario. |
84 | */ | 82 | */ |
85 | @Test | 83 | @Test |
86 | - public void listenerValidationNoErrorNotExists() { | 84 | + public void validateStackIsEmptyForNonEmptyStack() { |
85 | + | ||
86 | + String expectedError = ListenerErrorMessageConstruction | ||
87 | + .constructListenerErrorMessage(ListenerErrorType.MISSING_HOLDER, ParsableDataType.YANGBASE_DATA, "", | ||
88 | + ListenerErrorLocation.EXIT); | ||
89 | + | ||
90 | + // Get the exception occurred during parsing. | ||
91 | + thrown.expect(ParserException.class); | ||
92 | + thrown.expectMessage(expectedError); | ||
87 | 93 | ||
88 | // Create test walker and assign test error to it. | 94 | // Create test walker and assign test error to it. |
89 | TreeWalkListener testWalker = new TreeWalkListener(); | 95 | TreeWalkListener testWalker = new TreeWalkListener(); |
... | @@ -92,12 +98,21 @@ public class ListenerValidationTest { | ... | @@ -92,12 +98,21 @@ public class ListenerValidationTest { |
92 | YangRevision tmpNode = new YangRevision(); | 98 | YangRevision tmpNode = new YangRevision(); |
93 | testWalker.getParsedDataStack().push(tmpNode); | 99 | testWalker.getParsedDataStack().push(tmpNode); |
94 | 100 | ||
95 | - boolean errorFlag = ListenerValidation.preValidation(testWalker, "ErrorTest"); | 101 | + ListenerValidation.checkStackIsEmpty(testWalker, ListenerErrorType.MISSING_HOLDER, |
102 | + ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT); | ||
103 | + } | ||
104 | + | ||
105 | + /** | ||
106 | + * Checks if there is no exception in case parsable stack is empty while validating | ||
107 | + * for empty scenario. | ||
108 | + */ | ||
109 | + @Test | ||
110 | + public void validateStackIsEmptyForEmptyStack() { | ||
111 | + | ||
112 | + // Create test walker and assign test error to it. | ||
113 | + TreeWalkListener testWalker = new TreeWalkListener(); | ||
96 | 114 | ||
97 | - /** | 115 | + ListenerValidation.checkStackIsEmpty(testWalker, ListenerErrorType.MISSING_HOLDER, |
98 | - * Check for the values set in syntax error function. If not set properly | 116 | + ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT); |
99 | - * report an assert. | ||
100 | - */ | ||
101 | - assertThat(errorFlag, is(false)); | ||
102 | } | 117 | } |
103 | } | 118 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -14,29 +14,26 @@ | ... | @@ -14,29 +14,26 @@ |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | -package org.onosproject.yangutils.parser.impl.parseutils; | 17 | +package org.onosproject.yangutils.parser.parseutils; |
18 | 18 | ||
19 | import org.antlr.v4.runtime.ANTLRFileStream; | 19 | import org.antlr.v4.runtime.ANTLRFileStream; |
20 | import org.antlr.v4.runtime.ANTLRInputStream; | 20 | import org.antlr.v4.runtime.ANTLRInputStream; |
21 | import org.antlr.v4.runtime.CommonTokenStream; | 21 | import org.antlr.v4.runtime.CommonTokenStream; |
22 | import org.antlr.v4.runtime.tree.ParseTree; | 22 | import org.antlr.v4.runtime.tree.ParseTree; |
23 | -import org.junit.After; | 23 | +import org.junit.Rule; |
24 | -import org.junit.Before; | ||
25 | import org.junit.Test; | 24 | import org.junit.Test; |
25 | +import org.junit.rules.ExpectedException; | ||
26 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangLexer; | 26 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangLexer; |
27 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 27 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
28 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 28 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
29 | +import org.onosproject.yangutils.parser.impl.CustomExceptionMatcher; | ||
29 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 30 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
30 | import org.onosproject.yangutils.parser.impl.parserutils.ParseTreeErrorListener; | 31 | import org.onosproject.yangutils.parser.impl.parserutils.ParseTreeErrorListener; |
31 | 32 | ||
32 | import java.io.BufferedWriter; | 33 | import java.io.BufferedWriter; |
33 | import java.io.File; | 34 | import java.io.File; |
34 | -import java.io.FileWriter; | ||
35 | import java.io.IOException; | 35 | import java.io.IOException; |
36 | 36 | ||
37 | -import static org.hamcrest.core.Is.is; | ||
38 | -import static org.junit.Assert.assertThat; | ||
39 | - | ||
40 | /** | 37 | /** |
41 | * Test case for testing parse tree error listener. | 38 | * Test case for testing parse tree error listener. |
42 | */ | 39 | */ |
... | @@ -46,31 +43,16 @@ public class ParseTreeErrorListenerTest { | ... | @@ -46,31 +43,16 @@ public class ParseTreeErrorListenerTest { |
46 | File file; | 43 | File file; |
47 | BufferedWriter out; | 44 | BufferedWriter out; |
48 | 45 | ||
49 | - @Before | 46 | + @Rule |
50 | - public void setUp() throws Exception { | 47 | + public ExpectedException thrown = ExpectedException.none(); |
51 | - file = new File("demo.yang"); | ||
52 | - out = new BufferedWriter(new FileWriter(file)); | ||
53 | - } | ||
54 | - @After | ||
55 | - public void tearDown() throws Exception { | ||
56 | - file.delete(); | ||
57 | - } | ||
58 | 48 | ||
59 | /** | 49 | /** |
60 | - * This test case checks whether the error received from parser is correctly | 50 | + * Checks that no exception is generated for YANG file with valid syntax. |
61 | - * handled. | ||
62 | */ | 51 | */ |
63 | @Test | 52 | @Test |
64 | - public void syntaxErrorValidationTest() throws IOException { | 53 | + public void checkValidYangFileForNoSyntaxError() throws IOException { |
65 | - | ||
66 | - out.write("module ONOS {\n"); | ||
67 | - out.write("yang-version 1\n"); | ||
68 | - out.write("namespace urn:ietf:params:xml:ns:yang:ietf-ospf;\n"); | ||
69 | - out.write("prefix On;\n"); | ||
70 | - out.write("}\n"); | ||
71 | - out.close(); | ||
72 | 54 | ||
73 | - ANTLRInputStream input = new ANTLRFileStream("demo.yang"); | 55 | + ANTLRInputStream input = new ANTLRFileStream("src/test/resources/YangFileWithoutSyntaxError.yang"); |
74 | 56 | ||
75 | // Create a lexer that feeds off of input char stream. | 57 | // Create a lexer that feeds off of input char stream. |
76 | GeneratedYangLexer lexer = new GeneratedYangLexer(input); | 58 | GeneratedYangLexer lexer = new GeneratedYangLexer(input); |
... | @@ -86,15 +68,34 @@ public class ParseTreeErrorListenerTest { | ... | @@ -86,15 +68,34 @@ public class ParseTreeErrorListenerTest { |
86 | parser.addErrorListener(parseTreeErrorListener); | 68 | parser.addErrorListener(parseTreeErrorListener); |
87 | // Begin parsing YANG file and generate parse tree. | 69 | // Begin parsing YANG file and generate parse tree. |
88 | ParseTree tree = parser.yangfile(); | 70 | ParseTree tree = parser.yangfile(); |
71 | + } | ||
72 | + | ||
73 | + /** | ||
74 | + * Checks that exception is generated for YANG file with invalid syntax. | ||
75 | + */ | ||
76 | + @Test | ||
77 | + public void checkInvalidYangFileForSyntaxError() throws IOException { | ||
78 | + | ||
89 | // Get the exception occurred during parsing. | 79 | // Get the exception occurred during parsing. |
90 | - ParserException parserException = parseTreeErrorListener.getParserException(); | 80 | + thrown.expect(ParserException.class); |
81 | + thrown.expect(CustomExceptionMatcher.errorLocation(3, 0)); | ||
82 | + thrown.expectMessage("no viable alternative at input 'yang-version 1\\nnamespace'"); | ||
91 | 83 | ||
92 | - /** | 84 | + ANTLRInputStream input = new ANTLRFileStream("src/test/resources/YangFileWithSyntaxError.yang"); |
93 | - * Check for the values set in syntax error function. If not set properly | 85 | + |
94 | - * report an assert. | 86 | + // Create a lexer that feeds off of input char stream. |
95 | - */ | 87 | + GeneratedYangLexer lexer = new GeneratedYangLexer(input); |
96 | - assertThat(parseTreeErrorListener.isExceptionFlag(), is(true)); | 88 | + // Create a buffer of tokens pulled from the lexer. |
97 | - assertThat(parserException.getLineNumber(), is(3)); | 89 | + CommonTokenStream tokens = new CommonTokenStream(lexer); |
98 | - assertThat(parserException.getCharPositionInLine(), is(0)); | 90 | + // Create a parser that feeds off the tokens buffer. |
91 | + GeneratedYangParser parser = new GeneratedYangParser(tokens); | ||
92 | + // Remove console error listener. | ||
93 | + parser.removeErrorListeners(); | ||
94 | + // Create instance of customized error listener. | ||
95 | + ParseTreeErrorListener parseTreeErrorListener = new ParseTreeErrorListener(); | ||
96 | + // Add customized error listener to catch errors during parsing. | ||
97 | + parser.addErrorListener(parseTreeErrorListener); | ||
98 | + // Begin parsing YANG file and generate parse tree. | ||
99 | + ParseTree tree = parser.yangfile(); | ||
99 | } | 100 | } |
100 | } | 101 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix On; | ||
5 | +include itut { | ||
6 | +revision-date 2016-02-03; | ||
7 | +} | ||
8 | +import ietf { | ||
9 | +prefix On2; | ||
10 | +revision-date 2015-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix On; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut; { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix On; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix On; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "IETF SPRING Working Group"; | ||
17 | +organization "ITUT SPRING Working Group"; | ||
18 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +organization "ONOS"; | ||
4 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
5 | +prefix On; | ||
6 | +import ietf { | ||
7 | +prefix On2; | ||
8 | +revision-date 2015-02-03; | ||
9 | +} | ||
10 | +include itut; { | ||
11 | +revision-date 2016-02-03; | ||
12 | +} | ||
13 | +include sdn { | ||
14 | +revision-date 2014-02-03; | ||
15 | +} | ||
16 | +contact "Test"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix On; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization ; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix On; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "IETF SPRING Working Group"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix On; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +prefix On3; | ||
8 | +revision-date 2015-02-03; | ||
9 | +} | ||
10 | +include itut { | ||
11 | +revision-date 2016-02-03; | ||
12 | +} | ||
13 | +include sdn { | ||
14 | +revision-date 2014-02-03; | ||
15 | +} | ||
16 | +contact "Test"; | ||
17 | +organization "ONOS"; | ||
18 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix -On; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix ; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +import ietf { | ||
5 | +prefix On2; | ||
6 | +revision-date 2015-02-03; | ||
7 | +} | ||
8 | +prefix test; | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix On; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix test; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date "2015-02-03"; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix test; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date "2016-02-03"; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix test; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 15-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix test; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015/02/03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix test; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016/02/03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +module Test { | ||
2 | +yang-version 1; | ||
3 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
4 | +prefix test; | ||
5 | +import ietf { | ||
6 | +prefix On2; | ||
7 | +revision-date 2015-02-03; | ||
8 | +} | ||
9 | +include itut { | ||
10 | +revision-date 2016-02-03; | ||
11 | +} | ||
12 | +include sdn { | ||
13 | +revision-date 2014-02-03; | ||
14 | +} | ||
15 | +contact "Test"; | ||
16 | +organization "ONOS"; | ||
17 | +} |
1 | +submodule Test:Test { | ||
2 | +belongs-to ONOS { | ||
3 | +prefix On1; | ||
4 | +} | ||
5 | +yang-version 1; | ||
6 | +import ietf { | ||
7 | +prefix On2; | ||
8 | +revision-date 2015-02-03; | ||
9 | +} | ||
10 | +include itut { | ||
11 | +revision-date 2016-02-03; | ||
12 | +} | ||
13 | +include sdn { | ||
14 | +revision-date 2014-02-03; | ||
15 | +} | ||
16 | +contact "Test"; | ||
17 | +organization "ONOS"; | ||
18 | +} |
1 | +submodule Test { | ||
2 | +belongs-to ONOS { | ||
3 | +prefix On1; | ||
4 | +} | ||
5 | +yang-version 1; | ||
6 | +import ietf { | ||
7 | +prefix On2; | ||
8 | +revision-date 2015-02-03; | ||
9 | +} | ||
10 | +include itut { | ||
11 | +revision-date 2016-02-03; | ||
12 | +} | ||
13 | +include sdn { | ||
14 | +revision-date 2014-02-03; | ||
15 | +} | ||
16 | +contact "Test"; | ||
17 | +organization "ONOS"; | ||
18 | +} |
1 | +submodule Test { | ||
2 | +yang-version 1; | ||
3 | +belongs-to ONOS { | ||
4 | +prefix On1; | ||
5 | +} | ||
6 | +import ietf { | ||
7 | +prefix On2; | ||
8 | +revision-date 2015-02-03; | ||
9 | +} | ||
10 | +include itut { | ||
11 | +revision-date 2016-02-03; | ||
12 | +} | ||
13 | +include sdn { | ||
14 | +revision-date 2014-02-03; | ||
15 | +} | ||
16 | +contact "Test"; | ||
17 | +organization "ONOS"; | ||
18 | +} |
1 | +submodule Test { | ||
2 | +belongs-to ONOS { | ||
3 | +prefix On1; | ||
4 | +} | ||
5 | +yang-version 1; | ||
6 | +namespace urn:ietf:params:xml:ns:yang:ietf-ospf; | ||
7 | +import ietf { | ||
8 | +prefix On2; | ||
9 | +revision-date 2015-02-03; | ||
10 | +} | ||
11 | +include itut { | ||
12 | +revision-date 2016-02-03; | ||
13 | +} | ||
14 | +include sdn { | ||
15 | +revision-date 2014-02-03; | ||
16 | +} | ||
17 | +contact "Test"; | ||
18 | +organization "ONOS"; | ||
19 | +} |
-
Please register or login to post a comment