2 * Copyright (c) 2022 PANTHEON.tech s.r.o. 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.mdsal.binding.dom.codec.impl;
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertNotNull;
13 import java.util.stream.Stream;
14 import net.bytebuddy.ByteBuddy;
15 import net.bytebuddy.implementation.FixedValue;
16 import net.bytebuddy.matcher.ElementMatchers;
17 import org.junit.jupiter.params.ParameterizedTest;
18 import org.junit.jupiter.params.provider.Arguments;
19 import org.junit.jupiter.params.provider.MethodSource;
20 import org.opendaylight.mdsal.binding.loader.BindingClassLoader;
21 import org.opendaylight.mdsal.binding.loader.BindingClassLoader.GeneratorResult;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.union.test.rev220428.Top;
24 public class CodecClassLoaderTest {
26 private final BindingClassLoader codecClassLoader = BindingClassLoader.create(CodecClassLoaderTest.class, null);
28 @ParameterizedTest(name = "Generate class within namespace: {0}")
29 @MethodSource("generateClassWithinNamespaceArgs")
30 void generateClassWithinNamespace(final CodecPackage pkg, final String expectedClassName) {
31 final Class<?> generated = pkg.generateClass(codecClassLoader, Top.class,
32 (loader, fqcn, bindingInterface) -> GeneratorResult.of(new ByteBuddy()
33 .subclass(Object.class)
35 .method(ElementMatchers.isToString())
36 .intercept(FixedValue.value("test"))
38 assertNotNull(generated);
39 assertEquals(expectedClassName, generated.getName());
41 final Class<?> stored = pkg.getGeneratedClass(codecClassLoader, Top.class);
42 assertEquals(generated, stored);
45 private static Stream<Arguments> generateClassWithinNamespaceArgs() {
46 final String common = "urn.opendaylight.yang.union.test.rev220428.Top";
48 Arguments.of(CodecPackage.CODEC, "org.opendaylight.yang.rt.v1.obj." + common),
49 Arguments.of(CodecPackage.STREAMER, "org.opendaylight.yang.rt.v1.stream." + common),
50 Arguments.of(CodecPackage.EVENT_AWARE, "org.opendaylight.yang.rt.v1.eia." + common)