Retain grouping/uses instantiation vectors
[mdsal.git] / binding / mdsal-binding-generator / src / test / java / org / opendaylight / mdsal / binding / generator / impl / Mdsal669Test.java
1 /*
2  * Copyright (c) 2023 PANTHEON.tech, s.r.o. 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.mdsal.binding.generator.impl;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
12
13 import java.util.Arrays;
14 import java.util.Set;
15 import java.util.stream.Collectors;
16 import org.junit.jupiter.api.Test;
17 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
18 import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeTypes;
19 import org.opendaylight.mdsal.binding.runtime.api.GroupingRuntimeType;
20 import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
21 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
22
23 class Mdsal669Test {
24     private static final BindingRuntimeTypes RUNTIME_TYPES = new DefaultBindingRuntimeGenerator()
25         .generateTypeMapping(YangParserTestUtils.parseYangResource("/mdsal669.yang"));
26
27     @Test
28     void barIsUsed() {
29         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "Bar"),
30             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "Foo"),
31             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "Target1"),
32             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev.used.augmented", "ToBeAugmented1"),
33             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev.used.augmented.indirect",
34                 "ToBeAugmented1"));
35     }
36
37     @Test
38     void bazIsUsedByOneAndTwo() {
39         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "Baz"),
40             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "One"),
41             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "Two"));
42     }
43
44     @Test
45     void unusedIsNotUsed() {
46         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "Unused"));
47     }
48
49     @Test
50     void fooAsStringIsNotUsed() {
51         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "FooAsString"));
52     }
53
54     @Test
55     void unusedBarIsNotUsed() {
56         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UnusedBar"));
57     }
58
59     @Test
60     void unusedAugmendIsNotUsed() {
61         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UnusedAugmented"));
62     }
63
64     @Test
65     void unusedIntermediateAugmentedIsNotUsed() {
66         assertInstances(
67             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UnusedIntermediateAugmentedUser"));
68         assertInstances(
69             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UnusedIntermediateAugmented"));
70     }
71
72     @Test
73     void usedAugmentedIndirectIsUsed() {
74         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UsedAugmentedIndirectGrp"),
75             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UsedAugmentedIndirectUser"));
76         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UsedAugmentedIndirect"),
77             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UsedAugmentedIndirectUser"));
78     }
79
80     @Test
81     void usedAugmentedIsUsed() {
82         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UsedAugmented"),
83             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UsedAugmentedUser"));
84     }
85
86     @Test
87     void toBeAugmentedIsUsed() {
88         assertInstances(JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "ToBeAugmented"),
89             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UsedAugmentedIndirectUser"),
90             JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal669.norev", "UsedAugmentedUser"));
91     }
92
93     private static void assertInstances(final JavaTypeName groupingTypeName, final JavaTypeName... instanceTypeNames) {
94         assertEquals(
95             Arrays.stream(instanceTypeNames).map(Mdsal669Test::assertType).collect(Collectors.toSet()),
96             Set.copyOf(assertGrouping(groupingTypeName).instantiations()));
97     }
98
99     private static GroupingRuntimeType assertGrouping(final JavaTypeName typeName) {
100         return assertInstanceOf(GroupingRuntimeType.class, assertType(typeName));
101     }
102
103     private static RuntimeType assertType(final JavaTypeName typeName) {
104         return RUNTIME_TYPES.findSchema(typeName).orElseThrow();
105     }
106 }