From 2975ff64298162e99df27e50221b915778809d43 Mon Sep 17 00:00:00 2001 From: hengsin Date: Tue, 20 Jul 2021 21:47:17 +0800 Subject: [PATCH] IDEMPIERE-4881 CSS style anomaly - display logic (#786) Fix regression (empty expression evaluation) introduce by previous patch. Pushing this through as the previous change set introduce a significant regression. --- .../expression/logic/EvaluationVisitor.java | 2 ++ .../test/base/LogicExpressionTest.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/org.adempiere.base/src/org/idempiere/expression/logic/EvaluationVisitor.java b/org.adempiere.base/src/org/idempiere/expression/logic/EvaluationVisitor.java index 07359a884b..8cd9bfd1ba 100644 --- a/org.adempiere.base/src/org/idempiere/expression/logic/EvaluationVisitor.java +++ b/org.adempiere.base/src/org/idempiere/expression/logic/EvaluationVisitor.java @@ -138,6 +138,8 @@ public class EvaluationVisitor extends SimpleBooleanBaseVisitor { private Boolean isEqual(SimpleBooleanParser.ComparatorExpressionContext ctx) { Comparable left = asComparable(ctx.left); Comparable right = asComparable(ctx.right); + if (left == null && right == null) + return Boolean.TRUE; if (left == null || right == null) return Boolean.FALSE; if (left instanceof String && right instanceof String && !(ctx.right.getText().startsWith("'") && !(ctx.right.getText().startsWith("\"")))) { diff --git a/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java b/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java index 81037bedc5..f168de0483 100644 --- a/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java +++ b/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java @@ -543,6 +543,28 @@ public class LogicExpressionTest extends AbstractTestCase { assertTrue(LogicEvaluator.evaluateLogic(evaluatee, expr)); } + @Test + public void testEmptyStringExpression() { + String expr = "@ColumnSQL@=''"; + Env.setContext(Env.getCtx(), "ColumnSQL", (String)null); + assertTrue(LegacyLogicEvaluator.evaluateLogic(evaluatee, expr)); + + Env.setContext(Env.getCtx(), "ColumnSQL", (String)null); + assertTrue(LogicEvaluator.evaluateLogic(evaluatee, expr)); + + expr = "@ColumnSQL@!''"; + + Env.setContext(Env.getCtx(), "ColumnSQL", (String)null); + assertFalse(LegacyLogicEvaluator.evaluateLogic(evaluatee, expr)); + Env.setContext(Env.getCtx(), "ColumnSQL", "now()"); + assertTrue(LegacyLogicEvaluator.evaluateLogic(evaluatee, expr)); + + Env.setContext(Env.getCtx(), "ColumnSQL", (String)null); + assertFalse(LogicEvaluator.evaluateLogic(evaluatee, expr)); + Env.setContext(Env.getCtx(), "ColumnSQL", "now()"); + assertTrue(LogicEvaluator.evaluateLogic(evaluatee, expr)); + } + private static class ContextEvaluatee implements Evaluatee { @Override