From 1e90c483dabbba97e142fa922e86214433024e15 Mon Sep 17 00:00:00 2001 From: Robert Grassian Date: Tue, 13 Sep 2022 14:48:39 -0700 Subject: [PATCH] isList check of Value checks type of list Signed-off-by: Robert Grassian --- src/main/java/dev/openfeature/javasdk/Value.java | 4 +++- src/test/java/dev/openfeature/javasdk/ValueTest.java | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/openfeature/javasdk/Value.java b/src/main/java/dev/openfeature/javasdk/Value.java index 859348ad4..abadd606f 100644 --- a/src/main/java/dev/openfeature/javasdk/Value.java +++ b/src/main/java/dev/openfeature/javasdk/Value.java @@ -125,7 +125,9 @@ public boolean isStructure() { * @return boolean */ public boolean isList() { - return this.innerObject instanceof List; + return this.innerObject instanceof List + && (((List) this.innerObject).isEmpty() + || ((List) this.innerObject).get(0) instanceof Value); } /** diff --git a/src/test/java/dev/openfeature/javasdk/ValueTest.java b/src/test/java/dev/openfeature/javasdk/ValueTest.java index 57cd6aacb..7e7fbd7b4 100644 --- a/src/test/java/dev/openfeature/javasdk/ValueTest.java +++ b/src/test/java/dev/openfeature/javasdk/ValueTest.java @@ -110,4 +110,16 @@ class Something {} assertTrue(value.isList()); assertEquals(ITEM_VALUE, value.asList().get(0).asString()); } + + @Test public void listMustBeOfValues() { + String item = "item"; + List list = new ArrayList<>(); + list.add(item); + try { + new Value((Object) list); + fail("Should fail due to creation of list of non-values."); + } catch (InstantiationException e) { + assertEquals("Invalid value type: class java.util.ArrayList", e.getMessage()); + } + } }