2 * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. 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.yangtools.yang.binding;
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;
19 import java.util.Collections;
20 import java.util.List;
22 import org.junit.Test;
24 public class CodeHelpersTest {
26 public void testCheckedFieldCast() {
27 assertNull(CodeHelpers.checkFieldCast(CodeHelpersTest.class, "foo", null));
28 assertSame(this, CodeHelpers.checkFieldCast(CodeHelpersTest.class, "foo", this));
30 final IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
31 () -> CodeHelpers.checkFieldCast(CodeHelpersTest.class, "foo", new Object()));
32 assertThat(iae.getCause(), instanceOf(ClassCastException.class));
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));
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\"")));
48 iae = assertThrows(IllegalArgumentException.class,
49 () -> CodeHelpers.checkFieldCastIdentity(Identity.class, "foo", BaseIdentity.class));
50 assertThat(iae.getCause(), instanceOf(ClassCastException.class));
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));
60 IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
61 () -> CodeHelpers.checkListFieldCast(CodeHelpersTest.class, "foo", Collections.singletonList(null)));
62 assertThat(iae.getCause(), instanceOf(NullPointerException.class));
64 iae = assertThrows(IllegalArgumentException.class,
65 () -> CodeHelpers.checkListFieldCast(CodeHelpersTest.class, "foo", List.of(new Object())));
66 assertThat(iae.getCause(), instanceOf(ClassCastException.class));
70 public void testCheckListFieldCastIdentity() {
71 assertNull(CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", null));
72 assertSame(List.of(), CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", List.of()));
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));
79 IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
80 () -> CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", Collections.singletonList(null)));
81 assertThat(iae.getCause(), instanceOf(NullPointerException.class));
83 iae = assertThrows(IllegalArgumentException.class,
84 () -> CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", List.of(new Object())));
85 assertThat(iae.getCause(), instanceOf(ClassCastException.class));
87 iae = assertThrows(IllegalArgumentException.class,
88 () -> CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", List.of(BaseIdentity.class)));
89 assertThat(iae.getCause(), instanceOf(ClassCastException.class));
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));
99 IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
100 () -> CodeHelpers.checkSetFieldCast(CodeHelpersTest.class, "foo", Collections.singleton(null)));
101 assertThat(iae.getCause(), instanceOf(NullPointerException.class));
103 iae = assertThrows(IllegalArgumentException.class,
104 () -> CodeHelpers.checkSetFieldCast(CodeHelpersTest.class, "foo", Set.of(new Object())));
105 assertThat(iae.getCause(), instanceOf(ClassCastException.class));
109 public void testCheckSetFieldCastIdentity() {
110 assertNull(CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", null));
111 assertSame(Set.of(), CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Set.of()));
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));
118 IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
119 () -> CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Collections.singleton(null)));
120 assertThat(iae.getCause(), instanceOf(NullPointerException.class));
122 iae = assertThrows(IllegalArgumentException.class,
123 () -> CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Set.of(new Object())));
124 assertThat(iae.getCause(), instanceOf(ClassCastException.class));
126 iae = assertThrows(IllegalArgumentException.class,
127 () -> CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Set.of(BaseIdentity.class)));
128 assertThat(iae.getCause(), instanceOf(ClassCastException.class));
131 private interface Identity extends BaseIdentity {
135 private interface DerivedIdentity extends Identity {