2 * Copyright (c) 2023 Verizon 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.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;
16 import java.util.List;
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;
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");
34 void testFooFeatureSupported() {
35 assertBar("foo-feature");
39 void testFooFeatureNotSupported() {
40 assertThat(assertFooModule("foo-feature", Set.of()).effectiveSubstatements(),
41 not(hasItem(instanceOf(ContainerEffectiveStatement.class))));
45 void testBarFeatureSupported() {
46 assertBar("bar-feature");
50 void testBarFeatureNotSupported() {
51 assertEquals(List.of(), assertFoo("bar-feature", Set.of()).effectiveSubstatements());
54 private static ModuleEffectiveStatement assertFooModule(final String dirName,
55 final Set<QName> supportedFeatures) {
56 return assertEffectiveModelDir("/bugs/YT1481/" + dirName, supportedFeatures)
57 .findModuleStatement(FOO).orElseThrow();
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());
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());
73 final var baz = bar.findFirstEffectiveSubstatement(KeyEffectiveStatement.class).orElseThrow();
74 assertEquals(Set.of(BAZ), baz.argument());
76 final var qux = bar.findFirstEffectiveSubstatement(UniqueEffectiveStatement.class).orElseThrow();
77 assertEquals(Set.of(Descendant.of(QUX)), qux.argument());