2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.parser.impl;
10 import static org.junit.Assert.assertThat;
11 import static org.junit.matchers.JUnitMatchers.containsString;
12 import static org.mockito.Mockito.doReturn;
13 import static org.mockito.Mockito.mock;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Module_header_stmtsContext;
18 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Module_stmtContext;
19 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Namespace_stmtContext;
20 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Revision_stmtContext;
21 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Revision_stmtsContext;
22 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Yang_version_stmtContext;
23 import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
25 public class YangModelValidationModuleTest {
27 private YangModelBasicValidationListener valid;
31 valid = new YangModelBasicValidationListener();
34 @Test(expected = YangValidationException.class)
35 public void testRevisionInvalidDateFormat() {
36 Revision_stmtContext mockedRev = mockModuleWithRevision("badFormat",
40 valid.enterRevision_stmt(mockedRev);
41 } catch (YangValidationException e) {
44 containsString("Revision:badFormat, invalid date format expected date format is:"));
50 public void testRevisionValidDateFormat() {
51 Revision_stmtContext mockedRev = mockModuleWithRevision(
52 YangModelValidationTest.getFormattedDate(), "module1");
54 valid.enterRevision_stmt(mockedRev);
57 @Test(expected = YangValidationException.class)
58 public void testNoHeaderStmts() {
59 Revision_stmtContext rev = mockModuleWithRevision("1999-4-5", "module1");
62 valid.enterModule_stmt((Module_stmtContext) rev.getParent()
64 } catch (YangValidationException e) {
67 containsString("Missing Module-header statement in Module:module1"));
72 @Test(expected = YangValidationException.class)
73 public void testMultipleModulesPerSession() {
74 Module_stmtContext module1 = (Module_stmtContext) mockModuleWithRevision(
75 "1999-09-10", "m1").getParent().getParent();
76 YangModelValidationTest.addChild(module1, YangModelValidationTest
77 .mockStatement(Namespace_stmtContext.class, ""));
79 Module_stmtContext module2 = (Module_stmtContext) mockModuleWithRevision(
80 "1999-09-10", "m2").getParent().getParent();
81 YangModelValidationTest.addChild(module1, YangModelValidationTest
82 .mockStatement(Namespace_stmtContext.class, ""));
83 valid.enterModule_stmt(module1);
86 valid.enterModule_stmt(module2);
87 } catch (YangValidationException e) {
88 assertThat(e.getMessage(),
89 containsString("Multiple (sub)modules per file"));
94 @Test(expected = YangValidationException.class)
95 public void testNoNamespace() {
96 Module_header_stmtsContext header = YangModelValidationTest
97 .mockStatement(Module_header_stmtsContext.class, null);
98 Module_stmtContext mod = YangModelValidationTest.mockStatement(
99 Module_stmtContext.class, "module1");
100 YangModelValidationTest.addChild(mod, header);
103 valid.enterModule_header_stmts(header);
104 } catch (YangValidationException e) {
107 containsString("Missing Namespace statement in Module-header:"));
112 @Test(expected = YangValidationException.class)
113 public void testNoPrefix() {
114 Module_header_stmtsContext header = YangModelValidationTest
115 .mockStatement(Module_header_stmtsContext.class, null);
116 Namespace_stmtContext nmspc = YangModelValidationTest.mockStatement(
117 Namespace_stmtContext.class, "http://test");
118 Module_stmtContext mod = YangModelValidationTest.mockStatement(
119 Module_stmtContext.class, "module1");
120 YangModelValidationTest.addChild(mod, header);
121 YangModelValidationTest.addChild(header, nmspc);
124 valid.enterModule_header_stmts(header);
125 } catch (YangValidationException e) {
128 containsString("Missing Prefix statement in Module-header:"));
133 @Test(expected = YangValidationException.class)
134 public void testInvalidYangVersion() {
136 Yang_version_stmtContext yangVersion = YangModelValidationTest
137 .mockStatement(Yang_version_stmtContext.class, "55Unsup");
139 Module_stmtContext mod = YangModelValidationTest.mockStatement(
140 Module_stmtContext.class, "module1");
141 YangModelValidationTest.addChild(mod, yangVersion);
144 valid.enterYang_version_stmt(yangVersion);
145 } catch (YangValidationException e) {
148 containsString("Unsupported yang version:55Unsup, supported version:"
149 + BasicValidations.SUPPORTED_YANG_VERSION));
155 public void testValidYangVersion() {
157 Yang_version_stmtContext ctx = mock(Yang_version_stmtContext.class);
158 doReturn(1).when(ctx).getChildCount();
159 YangModelValidationTest.mockName(ctx, "1");
161 valid.enterYang_version_stmt(ctx);
164 private static Revision_stmtContext mockModuleWithRevision(String date,
166 Revision_stmtContext mockedRev = YangModelValidationTest.mockStatement(
167 Revision_stmtContext.class, date);
168 Revision_stmtsContext revs = YangModelValidationTest.mockStatement(
169 Revision_stmtsContext.class, null);
170 Module_stmtContext mod = YangModelValidationTest.mockStatement(
171 Module_stmtContext.class, moduleName);
173 YangModelValidationTest.addChild(revs, mockedRev);
174 YangModelValidationTest.addChild(mod, revs);