diff --git a/src/main/java/com/ezylang/evalex/data/EvaluationValue.java b/src/main/java/com/ezylang/evalex/data/EvaluationValue.java index b59a3a27..ce0485c3 100644 --- a/src/main/java/com/ezylang/evalex/data/EvaluationValue.java +++ b/src/main/java/com/ezylang/evalex/data/EvaluationValue.java @@ -112,6 +112,9 @@ public EvaluationValue(Object value) { } else if (value instanceof Map) { this.dataType = DataType.STRUCTURE; this.value = convertMapStructure((Map) value); + } else if (value instanceof EvaluationValue) { + this.dataType = ((EvaluationValue) value).getDataType(); + this.value = ((EvaluationValue) value).getValue(); } else { throw new IllegalArgumentException( "Unsupported data type '" + value.getClass().getName() + "'"); diff --git a/src/test/java/com/ezylang/evalex/data/EvaluationValueTest.java b/src/test/java/com/ezylang/evalex/data/EvaluationValueTest.java index c76c0bc3..de8ffeba 100644 --- a/src/test/java/com/ezylang/evalex/data/EvaluationValueTest.java +++ b/src/test/java/com/ezylang/evalex/data/EvaluationValueTest.java @@ -18,7 +18,10 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import com.ezylang.evalex.EvaluationException; +import com.ezylang.evalex.Expression; import com.ezylang.evalex.parser.ASTNode; +import com.ezylang.evalex.parser.ParseException; import com.ezylang.evalex.parser.Token; import com.ezylang.evalex.parser.Token.TokenType; import java.math.BigDecimal; @@ -274,6 +277,27 @@ void testDoubleMathContext() { .isEqualByComparingTo("3.99"); } + @Test + void nestedEvaluationValue() { + try { + EvaluationValue value1 = new EvaluationValue("Hello"); + EvaluationValue value2 = new EvaluationValue("World"); + + Map structure = new HashMap<>(); + structure.put("a", value1); + structure.put("b", value2); + + EvaluationValue structureMap = new EvaluationValue(structure); + + Expression exp = new Expression("value.a == \"Hello\"").with("value", structureMap); + + EvaluationValue result = exp.evaluate(); + assertThat(result.getBooleanValue()).isTrue(); + } catch (EvaluationException | ParseException e) { + e.printStackTrace(); + } + } + private void assertDataIsCorrect( EvaluationValue value, String stringValue,