Do do not check unique in unsupported lists
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / YT1481Test.java
1 /*
2  * Copyright (c) 2023 Verizon 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.yangtools.yang.stmt;
9
10 import static org.hamcrest.CoreMatchers.hasItem;
11 import static org.hamcrest.CoreMatchers.instanceOf;
12 import static org.hamcrest.CoreMatchers.not;
13 import static org.hamcrest.MatcherAssert.assertThat;
14 import static org.junit.jupiter.api.Assertions.assertEquals;
15
16 import java.util.List;
17 import java.util.Set;
18 import org.junit.jupiter.api.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
23 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
24 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
25 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
26
27 class YT1481Test extends AbstractYangTest {
28     private static final QName FOO = QName.create("urn:foo", "foo");
29     private static final QName BAR = QName.create("urn:foo", "bar");
30     private static final QName BAZ = QName.create("urn:foo", "baz");
31     private static final QName QUX = QName.create("urn:foo", "qux");
32
33     @Test
34     void testFooFeatureSupported() {
35         assertBar("foo-feature");
36     }
37
38     @Test
39     void testFooFeatureNotSupported() {
40         assertThat(assertFooModule("foo-feature", Set.of()).effectiveSubstatements(),
41             not(hasItem(instanceOf(ContainerEffectiveStatement.class))));
42     }
43
44     @Test
45     void testBarFeatureSupported() {
46         assertBar("bar-feature");
47     }
48
49     @Test
50     void testBarFeatureNotSupported() {
51         assertEquals(List.of(), assertFoo("bar-feature", Set.of()).effectiveSubstatements());
52     }
53
54     private static ModuleEffectiveStatement assertFooModule(final String dirName,
55             final Set<QName> supportedFeatures) {
56         return assertEffectiveModelDir("/bugs/YT1481/" + dirName, supportedFeatures)
57             .findModuleStatement(FOO).orElseThrow();
58     }
59
60     private static ContainerEffectiveStatement assertFoo(final String dirName,
61             final Set<QName> supportedFeatures) {
62         final var foo = assertFooModule(dirName, supportedFeatures)
63             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow();
64         assertEquals(FOO, foo.argument());
65         return foo;
66     }
67
68     private static void assertBar(final String dirName) {
69         final var bar = assertFoo(dirName, null)
70             .findFirstEffectiveSubstatement(ListEffectiveStatement.class).orElseThrow();
71         assertEquals(BAR, bar.argument());
72
73         final var baz = bar.findFirstEffectiveSubstatement(KeyEffectiveStatement.class).orElseThrow();
74         assertEquals(Set.of(BAZ), baz.argument());
75
76         final var qux = bar.findFirstEffectiveSubstatement(UniqueEffectiveStatement.class).orElseThrow();
77         assertEquals(Set.of(Descendant.of(QUX)), qux.argument());
78     }
79 }