Merge "Package names for enclosed Types of TOs were changed to fully qualified. Fully...
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-model-parser-impl / src / test / java / org / opendaylight / controller / yang / validator / YangModelValidationListTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.yang.validator;
9
10 import static org.junit.Assert.assertThat;
11 import static org.junit.matchers.JUnitMatchers.containsString;
12
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Default_stmtContext;
16 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Key_stmtContext;
17 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Leaf_stmtContext;
18 import org.opendaylight.controller.antlrv4.code.gen.YangParser.List_stmtContext;
19 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Mandatory_stmtContext;
20 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Ordered_by_argContext;
21 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Type_stmtContext;
22 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Unique_stmtContext;
23 import org.opendaylight.controller.yang.parser.util.YangValidationException;
24
25 public class YangModelValidationListTest {
26
27     private YangModelBasicValidationListener valid;
28
29     @Before
30     public void setUp() {
31         valid = new YangModelBasicValidationListener();
32     }
33
34     @Test(expected = YangValidationException.class)
35     public void testKeyValidationDuplicates() {
36
37         List_stmtContext list = YangModelValidationTest.mockStatement(
38                 List_stmtContext.class, "list");
39         Key_stmtContext key = YangModelValidationTest.mockStatement(
40                 Key_stmtContext.class, "leaf1 leaf2 leaf1 leaf1");
41         YangModelValidationTest.addChild(list, key);
42
43         try {
44             valid.enterKey_stmt(key);
45         } catch (YangValidationException e) {
46             assertThat(e.getMessage(),
47                     containsString("contains duplicates:[leaf1]"));
48             throw e;
49         }
50     }
51
52     @Test(expected = YangValidationException.class)
53     public void testUniqueValidationDuplicates() {
54         List_stmtContext list = YangModelValidationTest.mockStatement(
55                 List_stmtContext.class, "list");
56         Unique_stmtContext unique = YangModelValidationTest.mockStatement(
57                 Unique_stmtContext.class, "leaf1/a leaf2/n leaf1/a leaf1");
58         YangModelValidationTest.addChild(list, unique);
59
60         try {
61             valid.enterUnique_stmt(unique);
62         } catch (YangValidationException e) {
63             assertThat(e.getMessage(),
64                     containsString("contains duplicates:[leaf1/a]"));
65             throw e;
66         }
67     }
68
69     @Test(expected = YangValidationException.class)
70     public void testOrderBy() {
71         Ordered_by_argContext ctx = YangModelValidationTest.mockStatement(
72                 Ordered_by_argContext.class, "unknown");
73
74         try {
75             valid.enterOrdered_by_arg(ctx);
76         } catch (YangValidationException e) {
77             assertThat(
78                     e.getMessage(),
79                     containsString("Ordered-by:unknown, illegal value for Ordered-by statement, only permitted:"));
80             throw e;
81         }
82     }
83
84     @Test(expected = YangValidationException.class)
85     public void testLeaf() {
86         Leaf_stmtContext ctx = YangModelValidationTest.mockStatement(
87                 Leaf_stmtContext.class, "leaf1");
88         Default_stmtContext def = YangModelValidationTest.mockStatement(
89                 Default_stmtContext.class, "default");
90         YangModelValidationTest.addChild(ctx, def);
91         Type_stmtContext typ = YangModelValidationTest.mockStatement(
92                 Type_stmtContext.class, "type");
93         YangModelValidationTest.addChild(ctx, def);
94         YangModelValidationTest.addChild(ctx, typ);
95
96         Mandatory_stmtContext mand = YangModelValidationTest.mockStatement(
97                 Mandatory_stmtContext.class, null);
98         YangModelValidationTest.addChild(ctx, mand);
99
100         try {
101             valid.enterLeaf_stmt(ctx);
102         } catch (YangValidationException e) {
103             assertThat(
104                     e.getMessage(),
105                     containsString("Both Mandatory and Default statement present"));
106             throw e;
107         }
108     }
109
110 }