diff --git a/src/main/java/com/ezylang/evalex/data/conversion/ArrayConverter.java b/src/main/java/com/ezylang/evalex/data/conversion/ArrayConverter.java index 72ee145..a148877 100644 --- a/src/main/java/com/ezylang/evalex/data/conversion/ArrayConverter.java +++ b/src/main/java/com/ezylang/evalex/data/conversion/ArrayConverter.java @@ -26,7 +26,7 @@ public class ArrayConverter implements ConverterIfc { public EvaluationValue convert(Object object, ExpressionConfiguration configuration) { List list = new ArrayList<>(); - if (object instanceof Object[]) { + if (object.getClass().isArray()) { for (Object element : (Object[]) object) { list.add(new EvaluationValue(element, configuration)); } @@ -41,6 +41,6 @@ public class ArrayConverter implements ConverterIfc { @Override public boolean canConvert(Object object) { - return object instanceof List || object instanceof Object[]; + return object instanceof List || object.getClass().isArray(); } } diff --git a/src/main/java/com/ezylang/evalex/data/conversion/DefaultEvaluationValueConverter.java b/src/main/java/com/ezylang/evalex/data/conversion/DefaultEvaluationValueConverter.java index 6e6d65c..2e28d3f 100644 --- a/src/main/java/com/ezylang/evalex/data/conversion/DefaultEvaluationValueConverter.java +++ b/src/main/java/com/ezylang/evalex/data/conversion/DefaultEvaluationValueConverter.java @@ -47,7 +47,7 @@ import java.util.List; * DurationDurationConverter * ASTNodeASTNode * List<?>ArrayConverter - each entry will be converted - * Map<?,?>StructureConverter - each entry will be converted. + * Map<?,?>StructureConverter - each entry will be converted * * * * Be careful with conversion problems when using float or double, which are fractional @@ -66,6 +66,7 @@ public class DefaultEvaluationValueConverter implements EvaluationValueConverter new ArrayConverter(), new StructureConverter()); + @Override public EvaluationValue convertObject(Object object, ExpressionConfiguration configuration) { if (object == null) { diff --git a/src/test/java/com/ezylang/evalex/ExpressionEvaluatorArrayTest.java b/src/test/java/com/ezylang/evalex/ExpressionEvaluatorArrayTest.java index b573bc7..47c57f8 100644 --- a/src/test/java/com/ezylang/evalex/ExpressionEvaluatorArrayTest.java +++ b/src/test/java/com/ezylang/evalex/ExpressionEvaluatorArrayTest.java @@ -121,6 +121,19 @@ class ExpressionEvaluatorArrayTest extends BaseExpressionEvaluatorTest { assertThat(expression.evaluate().getStringValue()).isEqualTo("4"); } + @Test + void testArrayTypes() throws EvaluationException, ParseException { + Expression expression = + createExpression("decimals[1] + integers[1] + doubles[1] + strings[1] + booleans[1]") + .with("decimals", new BigDecimal[] {new BigDecimal(1), new BigDecimal(2)}) + .and("integers", new Integer[] {1, 2}) + .and("doubles", new Double[] {1.1, 2.2}) + .and("strings", new String[] {" Hello ", " World "}) + .and("booleans", new Boolean[] {true, false}); + + assertThat(expression.evaluate().getStringValue()).isEqualTo("6.2 World false"); + } + @Test void testThrowsUnsupportedDataTypeForArray() { assertThatThrownBy(() -> createExpression("a[0]").with("a", "aString").evaluate()) diff --git a/src/test/java/com/ezylang/evalex/data/DefaultEvaluationValueConverterTest.java b/src/test/java/com/ezylang/evalex/data/DefaultEvaluationValueConverterTest.java index c21d349..5d77a3a 100644 --- a/src/test/java/com/ezylang/evalex/data/DefaultEvaluationValueConverterTest.java +++ b/src/test/java/com/ezylang/evalex/data/DefaultEvaluationValueConverterTest.java @@ -46,8 +46,9 @@ class DefaultEvaluationValueConverterTest { @Test void testException() { - assertThatThrownBy(() -> converter.convertObject(new int[] {1, 2, 3}, defaultConfiguration)) + final Error error = new Error(); + assertThatThrownBy(() -> converter.convertObject(error, defaultConfiguration)) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("Unsupported data type '[I'"); + .hasMessage("Unsupported data type 'java.lang.Error'"); } }