Replace calls of StmtTestUtils.parseYangSource(String)
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / parser / stmt / rfc7950 / ActionStatementTest.java
1 /*
2  * Copyright (c) 2016 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
9 package org.opendaylight.yangtools.yang.parser.stmt.rfc7950;
10
11 import static org.hamcrest.CoreMatchers.startsWith;
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertTrue;
14
15 import java.util.Collection;
16 import java.util.HashSet;
17 import java.util.Set;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
21 import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer;
22 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
25 import org.opendaylight.yangtools.yang.model.api.Module;
26 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
27 import org.opendaylight.yangtools.yang.stmt.AbstractYangTest;
28
29 public class ActionStatementTest extends AbstractYangTest {
30
31     private static final String FOO_NS = "foo-namespace";
32     private static final String FOO_REV = "2016-12-13";
33
34     @Test
35     public void testActionStatementInDataContainers() throws Exception {
36         final var context = assertEffectiveModel("/rfc7950/action-stmt/foo.yang");
37
38         assertContainsActions(context, "root", "grp-action", "aug-action");
39         assertContainsActions(context, "top-list", "top-list-action");
40         assertContainsActions(context, "top", "top-action");
41
42         final Collection<? extends GroupingDefinition> groupings = context.getGroupings();
43         assertEquals(1, groupings.size());
44         assertContainsActions(groupings.iterator().next(), "grp-action");
45
46         final Collection<? extends Module> modules = context.getModules();
47         assertEquals(1, modules.size());
48         final Module foo = modules.iterator().next();
49         final Collection<? extends AugmentationSchemaNode> augmentations = foo.getAugmentations();
50         assertEquals(1, augmentations.size());
51         assertContainsActions(augmentations.iterator().next(), "aug-action", "grp-action");
52     }
53
54     private static void assertContainsActions(final SchemaContext schemaContext, final String dataContainerName,
55             final String... actionNames) {
56         final DataSchemaNode dataChildByName = schemaContext.getDataChildByName(QName.create(FOO_NS, FOO_REV,
57                 dataContainerName));
58         assertTrue(dataChildByName instanceof ActionNodeContainer);
59         assertContainsActions((ActionNodeContainer) dataChildByName, actionNames);
60     }
61
62     private static void assertContainsActions(final ActionNodeContainer actionContainer,
63             final String... actionNames) {
64         final Collection<? extends ActionDefinition> actions = actionContainer.getActions();
65         assertEquals(actionNames.length, actions.size());
66
67         final Set<QName> actionQNames = new HashSet<>();
68         actions.forEach(n -> actionQNames.add(n.getQName()));
69
70         for (final String actionName : actionNames) {
71             assertTrue(actionQNames.contains(QName.create(FOO_NS, FOO_REV, actionName)));
72         }
73     }
74
75     @Test
76     public void testActionUnsupportedInYang10() {
77         assertSourceException(startsWith("action is not a YANG statement or use of extension"),
78                 "/rfc7950/action-stmt/foo10.yang");
79     }
80
81     @Test
82     public void testActionWithinIllegalAncestor() {
83         assertSourceException(startsWith("Action (foo-namespace?revision=2016-12-13)action-in-grouping is defined"
84                 + " within a notification, rpc or another action"), "/rfc7950/action-stmt/foo-invalid.yang");
85     }
86
87     @Test
88     public void testActionWithinListWithoutKey() {
89         assertSourceException(startsWith("Action (bar-namespace?revision=2016-12-13)my-action is defined within a list"
90                 + " that has no key statement"), "/rfc7950/action-stmt/bar-invalid.yang");
91     }
92
93     @Test
94     public void testActionInUsedGroupingWithinCase() {
95         assertSourceException(startsWith("Action (baz-namespace?revision=2016-12-13)action-in-grouping"
96                 + " is defined within a case statement"), "/rfc7950/action-stmt/baz-invalid.yang");
97     }
98
99     @Test
100     public void testActionInUsedGroupingAtTopLevelOfModule() {
101         assertSourceException(startsWith("Action (foobar-namespace?revision=2016-12-13)my-action is defined"
102                 + " at the top level of a module"), "/rfc7950/action-stmt/foobar-invalid.yang");
103     }
104 }