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;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Default_stmtContext;
16 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Key_stmtContext;
17 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Leaf_stmtContext;
18 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.List_stmtContext;
19 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Mandatory_stmtContext;
20 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Ordered_by_argContext;
21 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Type_stmtContext;
22 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Unique_stmtContext;
23 import org.opendaylight.yangtools.yang.parser.impl.YangModelBasicValidationListener;
24 import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
26 public class YangModelValidationListTest {
28 private YangModelBasicValidationListener valid;
32 valid = new YangModelBasicValidationListener();
35 @Test(expected = YangValidationException.class)
36 public void testKeyValidationDuplicates() {
38 List_stmtContext list = YangModelValidationTest.mockStatement(
39 List_stmtContext.class, "list");
40 Key_stmtContext key = YangModelValidationTest.mockStatement(
41 Key_stmtContext.class, "leaf1 leaf2 leaf1 leaf1");
42 YangModelValidationTest.addChild(list, key);
45 valid.enterKey_stmt(key);
46 } catch (YangValidationException e) {
47 assertThat(e.getMessage(),
48 containsString("contains duplicates:[leaf1]"));
53 @Test(expected = YangValidationException.class)
54 public void testUniqueValidationDuplicates() {
55 List_stmtContext list =YangModelValidationTest.mockStatement(
56 List_stmtContext.class, "list");
57 Unique_stmtContext unique = YangModelValidationTest.mockStatement(
58 Unique_stmtContext.class, "leaf1/a leaf2/n leaf1/a leaf1");
59 YangModelValidationTest.addChild(list, unique);
62 valid.enterUnique_stmt(unique);
63 } catch (YangValidationException e) {
64 assertThat(e.getMessage(),
65 containsString("contains duplicates:[leaf1/a]"));
70 @Test(expected = YangValidationException.class)
71 public void testOrderBy() {
72 Ordered_by_argContext ctx = YangModelValidationTest.mockStatement(
73 Ordered_by_argContext.class, "unknown");
76 valid.enterOrdered_by_arg(ctx);
77 } catch (YangValidationException e) {
80 containsString("Ordered-by:unknown, illegal value for Ordered-by statement, only permitted:"));
85 @Test(expected = YangValidationException.class)
86 public void testLeaf() {
87 Leaf_stmtContext ctx = YangModelValidationTest.mockStatement(
88 Leaf_stmtContext.class, "leaf1");
89 Default_stmtContext def = YangModelValidationTest.mockStatement(
90 Default_stmtContext.class, "default");
91 YangModelValidationTest.addChild(ctx, def);
92 Type_stmtContext typ = YangModelValidationTest.mockStatement(
93 Type_stmtContext.class, "type");
94 YangModelValidationTest.addChild(ctx, def);
95 YangModelValidationTest.addChild(ctx, typ);
97 Mandatory_stmtContext mand = YangModelValidationTest.mockStatement(
98 Mandatory_stmtContext.class, null);
99 YangModelValidationTest.addChild(ctx, mand);
102 valid.enterLeaf_stmt(ctx);
103 } catch (YangValidationException e) {
106 containsString("Both Mandatory and Default statement present"));