From a20c13f67578ccf6c9248819ac1fd3ce22409a9d Mon Sep 17 00:00:00 2001 From: Rickard Katz Date: Tue, 13 Aug 2024 11:28:07 +0200 Subject: [PATCH] The "all" operation will fail with "first argument to all must be a valid array" if data is an empty map when using variables. Added tests for different "all in" cases. --- .../evaluator/expressions/AllExpression.java | 4 + src/test/resources/fixtures.json | 114 ++++++++++++++++++ 2 files changed, 118 insertions(+) diff --git a/src/main/java/io/github/jamsesso/jsonlogic/evaluator/expressions/AllExpression.java b/src/main/java/io/github/jamsesso/jsonlogic/evaluator/expressions/AllExpression.java index a29b0fd..711387a 100644 --- a/src/main/java/io/github/jamsesso/jsonlogic/evaluator/expressions/AllExpression.java +++ b/src/main/java/io/github/jamsesso/jsonlogic/evaluator/expressions/AllExpression.java @@ -28,6 +28,10 @@ public Object evaluate(JsonLogicEvaluator evaluator, JsonLogicArray arguments, O Object maybeArray = evaluator.evaluate(arguments.get(0), data); + if (maybeArray == null) { + return false; + } + if (!ArrayLike.isEligible(maybeArray)) { throw new JsonLogicEvaluationException("first argument to all must be a valid array"); } diff --git a/src/test/resources/fixtures.json b/src/test/resources/fixtures.json index 14336be..fa39dfc 100644 --- a/src/test/resources/fixtures.json +++ b/src/test/resources/fixtures.json @@ -3711,5 +3711,119 @@ "items": [] }, false + ], + [ + { + "all": [ + { + "var": "" + }, + { + "in": [ + { + "var": "" + }, + ["item1","item2","item3"] + ] + } + ] + }, + [], + false + ], + [ + { + "all": [ + { + "var": "" + }, + { + "in": [ + { + "var": "" + }, + ["item1","item2","item3"] + ] + } + ] + }, + ["item1"], + true + ], + [ + { + "all": [ + { + "var": "" + }, + { + "in": [ + { + "var": "" + }, + ["item1","item2","item3"] + ] + } + ] + }, + ["item4"], + false + ], + [ + { + "all": [ + { + "var": "item" + }, + { + "in": [ + { + "var": "" + }, + ["item1","item2","item3"] + ] + } + ] + }, + {}, + false + ], + [ + { + "all": [ + { + "var": "item" + }, + { + "in": [ + { + "var": "" + }, + ["item1","item2","item3"] + ] + } + ] + }, + { "item": ["item1"] }, + true + ], + [ + { + "all": [ + { + "var": "item" + }, + { + "in": [ + { + "var": "" + }, + ["item1","item2","item3"] + ] + } + ] + }, + { "item": ["item4"] }, + false ] ] \ No newline at end of file