Migrate users of Builders/ImmutableNodes
[mdsal.git] / binding / mdsal-binding-dom-codec / src / test / java / org / opendaylight / mdsal / binding / dom / codec / impl / CodecClassLoaderTest.java
1 /*
2  * Copyright (c) 2022 PANTHEON.tech s.r.o. 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.dom.codec.impl;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertNotNull;
12
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;
23
24 public class CodecClassLoaderTest {
25
26     private final BindingClassLoader codecClassLoader = BindingClassLoader.create(CodecClassLoaderTest.class, null);
27
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)
34                 .name(fqcn)
35                 .method(ElementMatchers.isToString())
36                 .intercept(FixedValue.value("test"))
37                 .make()));
38         assertNotNull(generated);
39         assertEquals(expectedClassName, generated.getName());
40
41         final Class<?> stored = pkg.getGeneratedClass(codecClassLoader, Top.class);
42         assertEquals(generated, stored);
43     }
44
45     private static Stream<Arguments> generateClassWithinNamespaceArgs() {
46         final String common = "urn.opendaylight.yang.union.test.rev220428.Top";
47         return Stream.of(
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)
51         );
52     }
53 }