This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 2c32527f32 org.apache.juneau.common.reflect API improvements
2c32527f32 is described below
commit 2c32527f323b445d8411acfa5c8a30f4173cd1fe
Author: James Bognar <[email protected]>
AuthorDate: Tue Nov 18 08:42:22 2025 -0500
org.apache.juneau.common.reflect API improvements
---
.../juneau/common/reflect/ReflectionMapTest.java | 362 +++++++++++++++++++++
1 file changed, 362 insertions(+)
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ReflectionMapTest.java
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ReflectionMapTest.java
new file mode 100644
index 0000000000..48dda822be
--- /dev/null
+++
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ReflectionMapTest.java
@@ -0,0 +1,362 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juneau.common.reflect;
+
+import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.junit.bct.BctAssertions.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.lang.reflect.*;
+
+import org.apache.juneau.*;
+import org.junit.jupiter.api.*;
+
+class ReflectionMapTest extends TestBase {
+
+ private static ReflectionMap.Builder<Number> create() {
+ return ReflectionMap.create(Number.class);
+ }
+
+ private static void checkEntries(ReflectionMap<?> m, boolean hasClass,
boolean hasMethods, boolean hasFields, boolean hasConstructors) {
+ assertEquals(m.classEntries.size() == 0, ! hasClass);
+ assertEquals(m.methodEntries.size() == 0, ! hasMethods);
+ assertEquals(m.fieldEntries.size() == 0, ! hasFields);
+ assertEquals(m.constructorEntries.size() == 0, !
hasConstructors);
+ }
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Class names
+
//------------------------------------------------------------------------------------------------------------------
+
+ static class A1 {}
+ static class A2 {}
+
+ static ReflectionMap<Number>
+ A1_SIMPLE = create().append("A1", 1).build(),
+ A1b_SIMPLE = create().append("ReflectionMapTest$A1", 1).build(),
+ A1_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$A1",
1).build(); // Note this could be a static field.
+
+ @Test void a01_classNames_checkEntries() {
+ checkEntries(A1_SIMPLE, true, false, false, false);
+ checkEntries(A1_FULL, true, false, true, false);
+ }
+
+ private static void checkA(Class<?> c, boolean match_A1_SIMPLE, boolean
match_A1b_SIMPLE, boolean match_A1_FULL) {
+ assertEquals(match_A1_SIMPLE,
A1_SIMPLE.find(c).findAny().isPresent());
+ assertEquals(match_A1b_SIMPLE,
A1b_SIMPLE.find(c).findAny().isPresent());
+ assertEquals(match_A1_FULL,
A1_FULL.find(c).findAny().isPresent());
+
+ assertEquals(match_A1_SIMPLE, A1_SIMPLE.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_A1b_SIMPLE, A1b_SIMPLE.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_A1_FULL, A1_FULL.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+
+ assertFalse(A1_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(A1b_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(A1_FULL.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+
+ assertEquals(match_A1_SIMPLE, A1_SIMPLE.find(c).count() > 0);
+ assertEquals(match_A1b_SIMPLE, A1b_SIMPLE.find(c).count() > 0);
+ assertEquals(match_A1_FULL, A1_FULL.find(c).count() > 0);
+
+ assertEquals(match_A1_SIMPLE, A1_SIMPLE.find(c).filter(v -> v
instanceof Integer).count() > 0);
+ assertEquals(match_A1b_SIMPLE, A1b_SIMPLE.find(c).filter(v -> v
instanceof Integer).count() > 0);
+ assertEquals(match_A1_FULL, A1_FULL.find(c).filter(v -> v
instanceof Integer).count() > 0);
+
+ assertFalse(A1_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(A1b_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(A1_FULL.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ }
+
+ @Test void a02_classNames_find() {
+ checkA(A1.class, true, true, true);
+ checkA(A2.class, false, false, false);
+ checkA(null, false, false, false);
+ }
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Method names
+
//------------------------------------------------------------------------------------------------------------------
+
+ static class B1 {
+ public void m1() { /* no-op */ }
+ public void m1(int x) { /* no-op */ }
+ public void m1(String x) { /* no-op */ }
+ public void m1(String x, int y) { /* no-op */ }
+ public void m2(int x) { /* no-op */ }
+ }
+ static class B2 {
+ public void m1() { /* no-op */ }
+ }
+
+ static ReflectionMap<Number>
+ B1m1_SIMPLE = create().append("B1.m1", 1).build(),
+ B1m1i_SIMPLE = create().append("B1.m1(int)", 1).build(),
+ B1m1s_SIMPLE = create().append("B1.m1(String)", 1).build(),
+ B1m1ss_SIMPLE = create().append("B1.m1(java.lang.String)",
1).build(),
+ B1m1si_SIMPLE = create().append("B1.m1(String,int)", 1).build(),
+ B1m1ssi_SIMPLE = create().append("B1.m1(java.lang.String ,
int)", 1).build(),
+ B1m1_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$B1.m1",
1).build(),
+ B1m1i_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$B1.m1(int)",
1).build(),
+ B1m1s_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$B1.m1(String)",
1).build(),
+ B1m1ss_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$B1.m1(java.lang.String)",
1).build(),
+ B1m1si_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$B1.m1(String,int)",
1).build(),
+ B1m1ssi_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$B1.m1(java.lang.String
, int)", 1).build();
+
+ @Test void b01_methodNames_checkEntries() {
+ checkEntries(B1m1_SIMPLE, false, true, true, false);
+ checkEntries(B1m1i_SIMPLE, false, true, false, false);
+ checkEntries(B1m1s_SIMPLE, false, true, false, false);
+ checkEntries(B1m1ss_SIMPLE, false, true, false, false);
+ checkEntries(B1m1si_SIMPLE, false, true, false, false);
+ checkEntries(B1m1ssi_SIMPLE, false, true, false, false);
+ checkEntries(B1m1_FULL, false, true, true, false);
+ checkEntries(B1m1i_FULL, false, true, false, false);
+ checkEntries(B1m1s_FULL, false, true, false, false);
+ checkEntries(B1m1ss_FULL, false, true, false, false);
+ checkEntries(B1m1si_FULL, false, true, false, false);
+ checkEntries(B1m1ssi_FULL, false, true, false, false);
+ }
+
+ private static void checkB(Method m, boolean match_B1m1_SIMPLE, boolean
match_B1m1i_SIMPLE, boolean match_B1m1s_SIMPLE, boolean match_B1m1ss_SIMPLE,
+ boolean match_B1m1si_SIMPLE, boolean
match_B1m1ssi_SIMPLE, boolean match_B1m1_FULL, boolean match_B1m1i_FULL,
boolean match_B1m1s_FULL,
+ boolean match_B1m1ss_FULL, boolean match_B1m1si_FULL,
boolean match_B1m1ssi_FULL) {
+
+ assertEquals(match_B1m1_SIMPLE,
B1m1_SIMPLE.find(m).findAny().isPresent());
+ assertEquals(match_B1m1i_SIMPLE,
B1m1i_SIMPLE.find(m).findAny().isPresent());
+ assertEquals(match_B1m1s_SIMPLE,
B1m1s_SIMPLE.find(m).findAny().isPresent());
+ assertEquals(match_B1m1ss_SIMPLE,
B1m1ss_SIMPLE.find(m).findAny().isPresent());
+ assertEquals(match_B1m1si_SIMPLE,
B1m1si_SIMPLE.find(m).findAny().isPresent());
+ assertEquals(match_B1m1ssi_SIMPLE,
B1m1ssi_SIMPLE.find(m).findAny().isPresent());
+ assertEquals(match_B1m1_FULL,
B1m1_FULL.find(m).findAny().isPresent());
+ assertEquals(match_B1m1i_FULL,
B1m1i_FULL.find(m).findAny().isPresent());
+ assertEquals(match_B1m1s_FULL,
B1m1s_FULL.find(m).findAny().isPresent());
+ assertEquals(match_B1m1ss_FULL,
B1m1ss_FULL.find(m).findAny().isPresent());
+ assertEquals(match_B1m1si_FULL,
B1m1si_FULL.find(m).findAny().isPresent());
+ assertEquals(match_B1m1ssi_FULL,
B1m1ssi_FULL.find(m).findAny().isPresent());
+
+ assertEquals(match_B1m1_SIMPLE, B1m1_SIMPLE.find(m).filter(v ->
v instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1i_SIMPLE, B1m1i_SIMPLE.find(m).filter(v
-> v instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1s_SIMPLE, B1m1s_SIMPLE.find(m).filter(v
-> v instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1ss_SIMPLE,
B1m1ss_SIMPLE.find(m).filter(v -> v instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1si_SIMPLE,
B1m1si_SIMPLE.find(m).filter(v -> v instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1ssi_SIMPLE,
B1m1ssi_SIMPLE.find(m).filter(v -> v instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1_FULL, B1m1_FULL.find(m).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1i_FULL, B1m1i_FULL.find(m).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1s_FULL, B1m1s_FULL.find(m).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1ss_FULL, B1m1ss_FULL.find(m).filter(v ->
v instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1si_FULL, B1m1si_FULL.find(m).filter(v ->
v instanceof Integer).findAny().isPresent());
+ assertEquals(match_B1m1ssi_FULL, B1m1ssi_FULL.find(m).filter(v
-> v instanceof Integer).findAny().isPresent());
+
+ assertFalse(B1m1_SIMPLE.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1i_SIMPLE.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1s_SIMPLE.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1ss_SIMPLE.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1si_SIMPLE.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1ssi_SIMPLE.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1_FULL.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1i_FULL.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1s_FULL.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1ss_FULL.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1si_FULL.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(B1m1ssi_FULL.find(m).filter(v -> v instanceof
Long).findAny().isPresent());
+ }
+
+ @Test void b02_methodName_find() throws Exception {
+ checkB(B1.class.getMethod("m1"), true, false, false, false,
false, false, true, false, false, false, false, false);
+ checkB(B1.class.getMethod("m1", int.class), true, true, false,
false, false, false, true, true, false, false, false, false);
+ checkB(B1.class.getMethod("m1", String.class), true, false,
true, true, false, false, true, false, true, true, false, false);
+ checkB(B1.class.getMethod("m1", String.class, int.class), true,
false, false, false, true, true, true, false, false, false, true, true);
+ checkB(B1.class.getMethod("m2", int.class), false, false,
false, false, false, false, false, false, false, false, false, false);
+ checkB(B2.class.getMethod("m1"), false, false, false, false,
false, false, false, false, false, false, false, false);
+ checkB(null, false, false, false, false, false, false, false,
false, false, false, false, false);
+ }
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Field names
+
//------------------------------------------------------------------------------------------------------------------
+
+ static class C1 {
+ public int f1;
+ public int f2;
+ }
+ static class C2 {
+ public int f1;
+ }
+
+ static ReflectionMap<Number>
+ C1f1_SIMPLE = create().append("C1.f1", 1).build(),
+ C1f1_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$C1.f1",
1).build();
+
+ @Test void c01_fieldNames_checkEntries() {
+ checkEntries(C1f1_SIMPLE, false, true, true, false);
+ checkEntries(C1f1_FULL, false, true, true, false);
+ }
+
+ private static void checkC(Field f, boolean match_C1f1_SIMPLE, boolean
match_C1f1_FULL) {
+ assertEquals(match_C1f1_SIMPLE,
C1f1_SIMPLE.find(f).findAny().isPresent());
+ assertEquals(match_C1f1_FULL,
C1f1_FULL.find(f).findAny().isPresent());
+
+ assertEquals(match_C1f1_SIMPLE, C1f1_SIMPLE.find(f).filter(v ->
v instanceof Integer).findAny().isPresent());
+ assertEquals(match_C1f1_FULL, C1f1_FULL.find(f).filter(v -> v
instanceof Integer).findAny().isPresent());
+
+ assertFalse(C1f1_SIMPLE.find(f).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(C1f1_FULL.find(f).filter(v -> v instanceof
Long).findAny().isPresent());
+ }
+
+ @Test void c02_fieldName_find() throws Exception {
+ checkC(C1.class.getField("f1"), true, true);
+ checkC(C1.class.getField("f2"), false, false);
+ checkC(C2.class.getField("f1"), false, false);
+ checkC(null, false, false);
+ }
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Constructor names
+
//------------------------------------------------------------------------------------------------------------------
+
+ static class D1 {
+ public D1() { /* no-op */ }
+ public D1(int x) { /* no-op */ }
+ public D1(String x) { /* no-op */ }
+ public D1(String x, int y) { /* no-op */ }
+ }
+ static class D2 {
+ public D2() { /* no-op */ }
+ }
+
+ static ReflectionMap<Number>
+ D_SIMPLE = create().append("D1()", 1).build(),
+ Di_SIMPLE = create().append("D1(int)", 1).build(),
+ Ds_SIMPLE = create().append("D1(String)", 1).build(),
+ Dss_SIMPLE = create().append("D1(java.lang.String)", 1).build(),
+ Dsi_SIMPLE = create().append("D1(String, int)", 1).build(),
+ Dssi_SIMPLE = create().append("D1(java.lang.String, int)",
1).build(),
+ D_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$D1()",
1).build(),
+ Di_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$D1(int)",
1).build(),
+ Ds_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$D1(String)",
1).build(),
+ Dss_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$D1(java.lang.String)",
1).build(),
+ Dsi_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$D1(String,
int)", 1).build(),
+ Dssi_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMapTest$D1(java.lang.String,
int)", 1).build();
+
+ @Test void d01_constructorNames_checkEntries() {
+ checkEntries(D_SIMPLE, false, false, false, true);
+ checkEntries(Di_SIMPLE, false, false, false, true);
+ checkEntries(Ds_SIMPLE, false, false, false, true);
+ checkEntries(Dss_SIMPLE, false, false, false, true);
+ checkEntries(Dsi_SIMPLE, false, false, false, true);
+ checkEntries(Dssi_SIMPLE, false, false, false, true);
+ checkEntries(D_FULL, false, false, false, true);
+ checkEntries(Di_FULL, false, false, false, true);
+ checkEntries(Ds_FULL, false, false, false, true);
+ checkEntries(Dss_FULL, false, false, false, true);
+ checkEntries(Dsi_FULL, false, false, false, true);
+ checkEntries(Dssi_FULL, false, false, false, true);
+ }
+
+ private static void checkD(Constructor<?> c, boolean match_D_SIMPLE,
boolean match_Di_SIMPLE, boolean match_Ds_SIMPLE, boolean match_Dss_SIMPLE,
+ boolean match_Dsi_SIMPLE, boolean match_Dssi_SIMPLE,
boolean match_D_FULL, boolean match_Di_FULL, boolean match_Ds_FULL,
+ boolean match_Dss_FULL, boolean match_Dsi_FULL, boolean
match_Dssi_FULL) {
+
+ assertEquals(match_D_SIMPLE,
D_SIMPLE.find(c).findAny().isPresent());
+ assertEquals(match_Di_SIMPLE,
Di_SIMPLE.find(c).findAny().isPresent());
+ assertEquals(match_Ds_SIMPLE,
Ds_SIMPLE.find(c).findAny().isPresent());
+ assertEquals(match_Dss_SIMPLE,
Dss_SIMPLE.find(c).findAny().isPresent());
+ assertEquals(match_Dsi_SIMPLE,
Dsi_SIMPLE.find(c).findAny().isPresent());
+ assertEquals(match_Dssi_SIMPLE,
Dssi_SIMPLE.find(c).findAny().isPresent());
+ assertEquals(match_D_FULL,
D_FULL.find(c).findAny().isPresent());
+ assertEquals(match_Di_FULL,
Di_FULL.find(c).findAny().isPresent());
+ assertEquals(match_Ds_FULL,
Ds_FULL.find(c).findAny().isPresent());
+ assertEquals(match_Dss_FULL,
Dss_FULL.find(c).findAny().isPresent());
+ assertEquals(match_Dsi_FULL,
Dsi_FULL.find(c).findAny().isPresent());
+ assertEquals(match_Dssi_FULL,
Dssi_FULL.find(c).findAny().isPresent());
+
+ assertEquals(match_D_SIMPLE, D_SIMPLE.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Di_SIMPLE, Di_SIMPLE.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Ds_SIMPLE, Ds_SIMPLE.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Dss_SIMPLE, Dss_SIMPLE.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Dsi_SIMPLE, Dsi_SIMPLE.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Dssi_SIMPLE, Dssi_SIMPLE.find(c).filter(v ->
v instanceof Integer).findAny().isPresent());
+ assertEquals(match_D_FULL, D_FULL.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Di_FULL, Di_FULL.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Ds_FULL, Ds_FULL.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Dss_FULL, Dss_FULL.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Dsi_FULL, Dsi_FULL.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+ assertEquals(match_Dssi_FULL, Dssi_FULL.find(c).filter(v -> v
instanceof Integer).findAny().isPresent());
+
+ assertFalse(D_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Di_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Ds_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Dss_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Dsi_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Dssi_SIMPLE.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(D_FULL.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Di_FULL.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Ds_FULL.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Dss_FULL.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Dsi_FULL.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ assertFalse(Dssi_FULL.find(c).filter(v -> v instanceof
Long).findAny().isPresent());
+ }
+
+ @Test void d02_constructorName_find() throws Exception {
+ checkD(D1.class.getConstructor(), true, false, false, false,
false, false, true, false, false, false, false, false);
+ checkD(D1.class.getConstructor(int.class), false, true, false,
false, false, false, false, true, false, false, false, false);
+ checkD(D1.class.getConstructor(String.class), false, false,
true, true, false, false, false, false, true, true, false, false);
+ checkD(D1.class.getConstructor(String.class, int.class), false,
false, false, false, true, true, false, false, false, false, true, true);
+ checkD(D2.class.getConstructor(), false, false, false, false,
false, false, false, false, false, false, false, false);
+ checkD(null, false, false, false, false, false, false, false,
false, false, false, false, false);
+ }
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Invalid input
+
//------------------------------------------------------------------------------------------------------------------
+
+ @Test void e01_blankInput() {
+ assertThrowsWithMessage(RuntimeException.class, "Invalid
reflection signature: []", ()->create().append("", 1));
+ }
+
+ @Test void e02_nullInput() {
+ assertThrowsWithMessage(RuntimeException.class, "Invalid
reflection signature: [null]", ()->create().append(null, 1));
+ }
+
+ @Test void e03_badInput() {
+ assertThrowsWithMessage(RuntimeException.class, "Invalid
reflection signature: [foo)]", ()->create().append("foo)", 1));
+ }
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Comma-delimited list.
+
//------------------------------------------------------------------------------------------------------------------
+ static class F1 {}
+
+ static ReflectionMap<Number> RM_F = create().append("F2, F1",
1).build();
+
+ @Test void f01_cdl() {
+ assertString("1", RM_F.find(F1.class).findFirst().get());
+ }
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Empty reflection map.
+
//------------------------------------------------------------------------------------------------------------------
+
+ static ReflectionMap<Number> RM_G = create().build();
+
+ @Test void g01_emptyReflectionMap() throws Exception {
+ assertFalse(RM_G.find(A1.class).findAny().isPresent());
+
assertFalse(RM_G.find(B1.class.getMethod("m1")).findAny().isPresent());
+
assertFalse(RM_G.find(C1.class.getField("f1")).findAny().isPresent());
+
assertFalse(RM_G.find(D1.class.getConstructor()).findAny().isPresent());
+ }
+}
\ No newline at end of file