2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
3 * Copyright (c) 2021 PANTHEON.tech, s.r.o.
5 * This program and the accompanying materials are made available under the
6 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.mdsal.binding.generator.impl;
11 import static org.hamcrest.CoreMatchers.instanceOf;
12 import static org.hamcrest.MatcherAssert.assertThat;
13 import static org.junit.Assert.assertEquals;
15 import java.util.List;
16 import org.junit.AfterClass;
17 import org.junit.BeforeClass;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.junit.MockitoJUnitRunner;
21 import org.opendaylight.mdsal.binding.model.api.Enumeration;
22 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
23 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
24 import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
25 import org.opendaylight.mdsal.binding.model.ri.Types;
26 import org.opendaylight.mdsal.binding.yang.types.TypeProviderTest;
27 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
28 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
31 * General test suite revolving around {@link DefaultBindingGenerator}. This class holds tests originally aimed at
32 * specific implementation methods, but now they really are all about integration testing.
34 @RunWith(MockitoJUnitRunner.class)
35 public class DefaultBindingGeneratorTest {
36 public static final String TEST_TYPE_PROVIDER =
37 "org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.model.rev140912";
38 public static final String TEST_TYPE_PROVIDER_B =
39 "org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.b.model.rev140915";
40 public static EffectiveModelContext SCHEMA_CONTEXT;
41 public static List<GeneratedType> TYPES;
44 public static void beforeClass() {
45 SCHEMA_CONTEXT = YangParserTestUtils.parseYangResources(TypeProviderTest.class,
46 "/base-yang-types.yang", "/test-type-provider-b.yang", "/test-type-provider.yang");
47 TYPES = DefaultBindingGenerator.generateFor(SCHEMA_CONTEXT);
51 public static void afterClass() {
52 SCHEMA_CONTEXT = null;
57 public void javaTypeForSchemaDefinitionLeafrefToEnumTypeTest() {
58 final var bDataName = JavaTypeName.create(TEST_TYPE_PROVIDER_B, "TestTypeProviderBData");
59 final var bData = TYPES.stream()
60 .filter(type -> type.getIdentifier().equals(bDataName))
64 final var bDataMethods = bData.getMethodDefinitions();
65 assertEquals(8, bDataMethods.size());
67 final var bEnumType = bDataMethods.stream()
68 .filter(method -> method.getName().equals("getEnum"))
72 assertThat(bEnumType, instanceOf(Enumeration.class));
73 assertEquals(TEST_TYPE_PROVIDER + ".Foo.ResolveDirectUseOfEnum", bEnumType.getFullyQualifiedName());
75 final var bEnumsType = bDataMethods.stream()
76 .filter(method -> method.getName().equals("getEnums"))
81 assertThat(bEnumsType, instanceOf(ParameterizedType.class));
82 final var enumsType = (ParameterizedType) bEnumsType;
84 assertEquals(Types.typeForClass(List.class), enumsType.getRawType());
85 final var enumsTypeArgs = enumsType.getActualTypeArguments();
86 assertEquals(1, enumsTypeArgs.length);
87 assertEquals(TEST_TYPE_PROVIDER + ".Foo.ListOfEnums", enumsTypeArgs[0].getFullyQualifiedName());