diff --git a/src/main/java/com/ezylang/evalex/data/EvaluationValue.java b/src/main/java/com/ezylang/evalex/data/EvaluationValue.java --- a/src/main/java/com/ezylang/evalex/data/EvaluationValue.java +++ b/src/main/java/com/ezylang/evalex/data/EvaluationValue.java @@ -112,6 +112,9 @@ this.value = convertToList((List) 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 --- 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; @@ -272,6 +275,27 @@ .isEqualByComparingTo("3.9876"); assertThat(new EvaluationValue(3.9876, new MathContext(3)).getNumberValue()) .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(