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.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.util.YangValidationException;
25 public class YangModelValidationListTest {
27 private YangModelBasicValidationListener valid;
31 valid = new YangModelBasicValidationListener();
34 @Test(expected = YangValidationException.class)
35 public void testKeyValidationDuplicates() {
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);
44 valid.enterKey_stmt(key);
45 } catch (YangValidationException e) {
46 assertThat(e.getMessage(),
47 containsString("contains duplicates:[leaf1]"));
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);
61 valid.enterUnique_stmt(unique);
62 } catch (YangValidationException e) {
63 assertThat(e.getMessage(),
64 containsString("contains duplicates:[leaf1/a]"));
69 @Test(expected = YangValidationException.class)
70 public void testOrderBy() {
71 Ordered_by_argContext ctx = YangModelValidationTest.mockStatement(
72 Ordered_by_argContext.class, "unknown");
75 valid.enterOrdered_by_arg(ctx);
76 } catch (YangValidationException e) {
79 containsString("Ordered-by:unknown, illegal value for Ordered-by statement, only permitted:"));
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);
96 Mandatory_stmtContext mand = YangModelValidationTest.mockStatement(
97 Mandatory_stmtContext.class, null);
98 YangModelValidationTest.addChild(ctx, mand);
101 valid.enterLeaf_stmt(ctx);
102 } catch (YangValidationException e) {
105 containsString("Both Mandatory and Default statement present"));