Fix identityref wildcards
[mdsal.git] / binding / yang-binding / src / test / java / org / opendaylight / yangtools / yang / binding / CodeHelpersTest.java
1 /*
2  * Copyright (c) 2020 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.yangtools.yang.binding;
9
10 import static org.hamcrest.CoreMatchers.allOf;
11 import static org.hamcrest.CoreMatchers.endsWith;
12 import static org.hamcrest.CoreMatchers.instanceOf;
13 import static org.hamcrest.CoreMatchers.startsWith;
14 import static org.hamcrest.MatcherAssert.assertThat;
15 import static org.junit.Assert.assertNull;
16 import static org.junit.Assert.assertSame;
17 import static org.junit.Assert.assertThrows;
18
19 import java.util.Collections;
20 import java.util.List;
21 import java.util.Set;
22 import org.junit.Test;
23
24 public class CodeHelpersTest {
25     @Test
26     public void testCheckedFieldCast() {
27         assertNull(CodeHelpers.checkFieldCast(CodeHelpersTest.class, "foo", null));
28         assertSame(this, CodeHelpers.checkFieldCast(CodeHelpersTest.class, "foo", this));
29
30         final IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
31             () -> CodeHelpers.checkFieldCast(CodeHelpersTest.class, "foo", new Object()));
32         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
33     }
34
35     @Test
36     public void testCheckedFieldCastIdentity() {
37         assertNull(CodeHelpers.checkFieldCastIdentity(Identity.class, "foo", null));
38         assertSame(Identity.class, CodeHelpers.checkFieldCastIdentity(Identity.class, "foo", Identity.class));
39         assertSame(DerivedIdentity.class, CodeHelpers.checkFieldCastIdentity(Identity.class, "foo",
40             DerivedIdentity.class));
41
42         IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
43             () -> CodeHelpers.checkFieldCastIdentity(Identity.class, "foo", new Object()));
44         assertThat(iae.getMessage(), allOf(
45             startsWith("Invalid input value \"java.lang.Object"),
46             endsWith("\" for property \"foo\"")));
47
48         iae = assertThrows(IllegalArgumentException.class,
49             () -> CodeHelpers.checkFieldCastIdentity(Identity.class, "foo", BaseIdentity.class));
50         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
51     }
52
53     @Test
54     public void testCheckListFieldCast() {
55         assertNull(CodeHelpers.checkListFieldCast(CodeHelpersTest.class, "foo", null));
56         assertSame(List.of(), CodeHelpers.checkListFieldCast(CodeHelpersTest.class, "foo", List.of()));
57         final var list = List.of(this);
58         assertSame(list, CodeHelpers.checkListFieldCast(CodeHelpersTest.class, "foo", list));
59
60         IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
61             () -> CodeHelpers.checkListFieldCast(CodeHelpersTest.class, "foo", Collections.singletonList(null)));
62         assertThat(iae.getCause(), instanceOf(NullPointerException.class));
63
64         iae = assertThrows(IllegalArgumentException.class,
65             () -> CodeHelpers.checkListFieldCast(CodeHelpersTest.class, "foo", List.of(new Object())));
66         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
67     }
68
69     @Test
70     public void testCheckListFieldCastIdentity() {
71         assertNull(CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", null));
72         assertSame(List.of(), CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", List.of()));
73
74         final var list = List.of(Identity.class);
75         assertSame(list, CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", list));
76         final var derivedList = List.of(DerivedIdentity.class);
77         assertSame(derivedList, CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", derivedList));
78
79         IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
80             () -> CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", Collections.singletonList(null)));
81         assertThat(iae.getCause(), instanceOf(NullPointerException.class));
82
83         iae = assertThrows(IllegalArgumentException.class,
84             () -> CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", List.of(new Object())));
85         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
86
87         iae = assertThrows(IllegalArgumentException.class,
88             () -> CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", List.of(BaseIdentity.class)));
89         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
90     }
91
92     @Test
93     public void testCheckSetFieldCast() {
94         assertNull(CodeHelpers.checkSetFieldCast(CodeHelpersTest.class, "foo", null));
95         assertSame(Set.of(), CodeHelpers.checkSetFieldCast(CodeHelpersTest.class, "foo", Set.of()));
96         final var list = Set.of(this);
97         assertSame(list, CodeHelpers.checkSetFieldCast(CodeHelpersTest.class, "foo", list));
98
99         IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
100             () -> CodeHelpers.checkSetFieldCast(CodeHelpersTest.class, "foo", Collections.singleton(null)));
101         assertThat(iae.getCause(), instanceOf(NullPointerException.class));
102
103         iae = assertThrows(IllegalArgumentException.class,
104             () -> CodeHelpers.checkSetFieldCast(CodeHelpersTest.class, "foo", Set.of(new Object())));
105         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
106     }
107
108     @Test
109     public void testCheckSetFieldCastIdentity() {
110         assertNull(CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", null));
111         assertSame(Set.of(), CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Set.of()));
112
113         final var set = Set.of(Identity.class);
114         assertSame(set, CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", set));
115         final var derivedSet = Set.of(DerivedIdentity.class);
116         assertSame(derivedSet, CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", derivedSet));
117
118         IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
119             () -> CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Collections.singleton(null)));
120         assertThat(iae.getCause(), instanceOf(NullPointerException.class));
121
122         iae = assertThrows(IllegalArgumentException.class,
123             () -> CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Set.of(new Object())));
124         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
125
126         iae = assertThrows(IllegalArgumentException.class,
127             () -> CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Set.of(BaseIdentity.class)));
128         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
129     }
130
131     private interface Identity extends BaseIdentity {
132
133     }
134
135     private interface DerivedIdentity extends Identity {
136
137     }
138 }