2 * Copyright (c) 2016 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.stmt;
10 import static org.hamcrest.CoreMatchers.containsString;
11 import static org.junit.Assert.assertThat;
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.impl.YangModelBasicValidationListener;
24 import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
26 public class YangModelValidationModuleTest {
28 private YangModelBasicValidationListener valid;
32 valid = new YangModelBasicValidationListener();
35 @Test(expected = YangValidationException.class)
36 public void testRevisionInvalidDateFormat() {
37 Revision_stmtContext mockedRev = mockModuleWithRevision("badFormat",
41 valid.enterRevision_stmt(mockedRev);
42 } catch (YangValidationException e) {
45 containsString("Revision:badFormat, invalid date format expected date format is:"));
51 public void testRevisionValidDateFormat() {
52 Revision_stmtContext mockedRev = mockModuleWithRevision(
53 YangModelValidationTest.getFormattedDate(), "module1");
55 valid.enterRevision_stmt(mockedRev);
58 @Test(expected = YangValidationException.class)
59 public void testNoHeaderStmts() {
60 Revision_stmtContext rev = mockModuleWithRevision("1999-4-5", "module1");
63 valid.enterModule_stmt((Module_stmtContext) rev.getParent()
65 } catch (YangValidationException e) {
68 containsString("Missing Module-header statement in Module:module1"));
73 @Test(expected = YangValidationException.class)
74 public void testMultipleModulesPerSession() {
75 Module_stmtContext module1 = (Module_stmtContext) mockModuleWithRevision(
76 "1999-09-10", "m1").getParent().getParent();
77 YangModelValidationTest.addChild(module1, YangModelValidationTest
78 .mockStatement(Namespace_stmtContext.class, ""));
80 Module_stmtContext module2 = (Module_stmtContext) mockModuleWithRevision(
81 "1999-09-10", "m2").getParent().getParent();
82 YangModelValidationTest.addChild(module1, YangModelValidationTest
83 .mockStatement(Namespace_stmtContext.class, ""));
84 valid.enterModule_stmt(module1);
87 valid.enterModule_stmt(module2);
88 } catch (YangValidationException e) {
89 assertThat(e.getMessage(),
90 containsString("Multiple (sub)modules per file"));
95 @Test(expected = YangValidationException.class)
96 public void testNoNamespace() {
97 Module_header_stmtsContext header = YangModelValidationTest
98 .mockStatement(Module_header_stmtsContext.class, null);
99 Module_stmtContext mod = YangModelValidationTest.mockStatement(
100 Module_stmtContext.class, "module1");
101 YangModelValidationTest.addChild(mod, header);
104 valid.enterModule_header_stmts(header);
105 } catch (YangValidationException e) {
108 containsString("Missing Namespace statement in Module-header:"));
113 @Test(expected = YangValidationException.class)
114 public void testNoPrefix() {
115 Module_header_stmtsContext header = YangModelValidationTest
116 .mockStatement(Module_header_stmtsContext.class, null);
117 Namespace_stmtContext nmspc = YangModelValidationTest.mockStatement(
118 Namespace_stmtContext.class, "http://test");
119 Module_stmtContext mod = YangModelValidationTest.mockStatement(
120 Module_stmtContext.class, "module1");
121 YangModelValidationTest.addChild(mod, header);
122 YangModelValidationTest.addChild(header, nmspc);
125 valid.enterModule_header_stmts(header);
126 } catch (YangValidationException e) {
129 containsString("Missing Prefix statement in Module-header:"));
134 // @Test(expected = YangValidationException.class)
135 // public void testInvalidYangVersion() {
137 // Yang_version_stmtContext yangVersion = YangModelValidationTest
138 // .mockStatement(Yang_version_stmtContext.class, "55Unsup");
140 // Module_stmtContext mod = YangModelValidationTest.mockStatement(
141 // Module_stmtContext.class, "module1");
142 // YangModelValidationTest.addChild(mod, yangVersion);
145 // valid.enterYang_version_stmt(yangVersion);
146 // } catch (YangValidationException e) {
149 // containsString("Unsupported yang version:55Unsup, supported version:"
150 // + BasicValidations.SUPPORTED_YANG_VERSION));
156 public void testValidYangVersion() {
158 Yang_version_stmtContext ctx = mock(Yang_version_stmtContext.class);
159 doReturn(1).when(ctx).getChildCount();
160 YangModelValidationTest.mockName(ctx, "1");
162 valid.enterYang_version_stmt(ctx);
165 private static Revision_stmtContext mockModuleWithRevision(final String date,
166 final String moduleName) {
167 Revision_stmtContext mockedRev = YangModelValidationTest.mockStatement(
168 Revision_stmtContext.class, date);
169 Revision_stmtsContext revs = YangModelValidationTest.mockStatement(
170 Revision_stmtsContext.class, null);
171 Module_stmtContext mod = YangModelValidationTest.mockStatement(
172 Module_stmtContext.class, moduleName);
174 YangModelValidationTest.addChild(revs, mockedRev);
175 YangModelValidationTest.addChild(mod, revs);