diff --git a/expression/src/main/java/io/smallrye/common/expression/Expression.java b/expression/src/main/java/io/smallrye/common/expression/Expression.java index d9100cc..6bb3d93 100644 --- a/expression/src/main/java/io/smallrye/common/expression/Expression.java +++ b/expression/src/main/java/io/smallrye/common/expression/Expression.java @@ -179,10 +179,6 @@ public static Expression compile(String string, EnumSet flags) { throw Messages.msg.mutuallyExclusiveEscapeFlags(); } - if (flags.contains(Flag.STRICT_ESCAPES) && flags.contains(Flag.MINI_EXPRS)) { - throw Messages.msg.incompatibleMiniExpsStrictEscapes(); - } - final Node content; final Itr itr; if (flags.contains(Flag.NO_TRIM)) { diff --git a/expression/src/main/java/io/smallrye/common/expression/Messages.java b/expression/src/main/java/io/smallrye/common/expression/Messages.java index c509320..fad6482 100644 --- a/expression/src/main/java/io/smallrye/common/expression/Messages.java +++ b/expression/src/main/java/io/smallrye/common/expression/Messages.java @@ -20,7 +20,4 @@ interface Messages { @Message(id = 1003, value = "Flags ESCAPES and STRICT_ESCAPES are mutually exclusive") IllegalArgumentException mutuallyExclusiveEscapeFlags(); - - @Message(id = 1004, value = "Flags MINI_EXPRS and STRICT_ESCAPES are incompatible") - IllegalArgumentException incompatibleMiniExpsStrictEscapes(); } diff --git a/expression/src/test/java/io/smallrye/common/expression/ExpressionTestCase.java b/expression/src/test/java/io/smallrye/common/expression/ExpressionTestCase.java index 0a32038..da45647 100644 --- a/expression/src/test/java/io/smallrye/common/expression/ExpressionTestCase.java +++ b/expression/src/test/java/io/smallrye/common/expression/ExpressionTestCase.java @@ -4,6 +4,8 @@ import static io.smallrye.common.expression.Expression.Flag.NO_SMART_BRACES; import static org.junit.jupiter.api.Assertions.*; +import java.util.EnumSet; + import org.junit.jupiter.api.Test; import io.smallrye.common.constraint.Assert; @@ -696,95 +698,106 @@ void expressions() { @Test void strictEscapes() { - assertEquals("$", Expression.compile("$", STRICT_ESCAPES).evaluate((c, b) -> { + doubleDollarExpressions(EnumSet.of(STRICT_ESCAPES)); + doubleDollarExpressions(EnumSet.of(STRICT_ESCAPES, MINI_EXPRS)); + + assertEquals("", Expression.compile("$a", STRICT_ESCAPES, MINI_EXPRS).evaluate((c, b) -> { + assertEquals("a", c.getKey()); + })); + assertEquals("$$a", Expression.compile("$$a", STRICT_ESCAPES, MINI_EXPRS).evaluate((c, b) -> { + })); + } + + private void doubleDollarExpressions(EnumSet flags) { + assertEquals("$", Expression.compile("$", flags).evaluate((c, b) -> { })); - assertEquals("$$", Expression.compile("$$", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("$$", Expression.compile("$$", flags).evaluate((c, b) -> { })); - assertEquals("\\$", Expression.compile("\\$", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("\\$", Expression.compile("\\$", flags).evaluate((c, b) -> { })); - assertEquals("\\$$", Expression.compile("\\$$", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("\\$$", Expression.compile("\\$$", flags).evaluate((c, b) -> { })); - assertEquals("$$foo", Expression.compile("$$foo", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("$$foo", Expression.compile("$$foo", flags).evaluate((c, b) -> { })); - assertEquals("foo$$", Expression.compile("foo$$", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo$$", Expression.compile("foo$$", flags).evaluate((c, b) -> { })); - assertEquals("$$foo", Expression.compile("$$foo", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("$$foo", Expression.compile("$$foo", flags).evaluate((c, b) -> { })); - assertEquals("foo$$bar", Expression.compile("foo$$bar", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo$$bar", Expression.compile("foo$$bar", flags).evaluate((c, b) -> { })); - assertEquals("${foo}", Expression.compile("$${foo}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("${foo}", Expression.compile("$${foo}", flags).evaluate((c, b) -> { })); - assertEquals("$${foo}", Expression.compile("$$${foo}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("$${foo}", Expression.compile("$$${foo}", flags).evaluate((c, b) -> { })); - assertEquals("$${foo}$", Expression.compile("$$${foo}$", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("$${foo}$", Expression.compile("$$${foo}$", flags).evaluate((c, b) -> { })); - assertEquals("$${foo}$$", Expression.compile("$$${foo}$$", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("$${foo}$$", Expression.compile("$$${foo}$$", flags).evaluate((c, b) -> { })); - assertEquals("foo${bar}", Expression.compile("foo$${bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo${bar}", Expression.compile("foo$${bar}", flags).evaluate((c, b) -> { })); - assertEquals("foo$${bar}", Expression.compile("foo$$${bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo$${bar}", Expression.compile("foo$$${bar}", flags).evaluate((c, b) -> { })); - assertEquals("foo$$$${bar}", Expression.compile("foo$$$$${bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo$$$${bar}", Expression.compile("foo$$$$${bar}", flags).evaluate((c, b) -> { })); - assertEquals("foo$$$${bar}$$$baz", Expression.compile("foo$$$$${bar}$$$baz", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo$$$${bar}$$$baz", Expression.compile("foo$$$$${bar}$$$baz", flags).evaluate((c, b) -> { })); - assertEquals("foo$$$$", Expression.compile("foo$$$$", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo$$$$", Expression.compile("foo$$$$", flags).evaluate((c, b) -> { })); - assertEquals("${foo:bar}", Expression.compile("$${foo:bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("${foo:bar}", Expression.compile("$${foo:bar}", flags).evaluate((c, b) -> { })); - assertEquals("$${foo:bar}", Expression.compile("$$${foo:bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("$${foo:bar}", Expression.compile("$$${foo:bar}", flags).evaluate((c, b) -> { })); - assertEquals("${foo:}", Expression.compile("$${foo:${bar}}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("${foo:}", Expression.compile("$${foo:${bar}}", flags).evaluate((c, b) -> { })); - assertEquals("${foo:${bar}}", Expression.compile("$${foo:$${bar}}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("${foo:${bar}}", Expression.compile("$${foo:$${bar}}", flags).evaluate((c, b) -> { })); - assertEquals("", Expression.compile("${foo}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("", Expression.compile("${foo}", flags).evaluate((c, b) -> { assertEquals("foo", c.getKey()); })); - assertEquals("", Expression.compile("${foo}${bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("", Expression.compile("${foo}${bar}", flags).evaluate((c, b) -> { if ("foo".equals(c.getKey())) assertEquals("foo", c.getKey()); if ("bar".equals(c.getKey())) assertEquals("bar", c.getKey()); })); - assertEquals("foobar", Expression.compile("foo${foo}${bar}bar", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foobar", Expression.compile("foo${foo}${bar}bar", flags).evaluate((c, b) -> { if ("foo".equals(c.getKey())) assertEquals("foo", c.getKey()); if ("bar".equals(c.getKey())) assertEquals("bar", c.getKey()); })); - assertEquals("foo${foo}bar", Expression.compile("foo$${foo}${bar}bar", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo${foo}bar", Expression.compile("foo$${foo}${bar}bar", flags).evaluate((c, b) -> { if ("bar".equals(c.getKey())) assertEquals("bar", c.getKey()); })); - assertEquals("foo${foo}bar", Expression.compile("foo$${foo${bar}}bar", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo${foo}bar", Expression.compile("foo$${foo${bar}}bar", flags).evaluate((c, b) -> { if ("bar".equals(c.getKey())) assertEquals("bar", c.getKey()); })); - assertEquals("", Expression.compile("${}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("", Expression.compile("${}", flags).evaluate((c, b) -> { assertEquals("", c.getKey()); })); - assertEquals("", Expression.compile("${:}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("", Expression.compile("${:}", flags).evaluate((c, b) -> { assertEquals("", c.getKey()); })); - assertEquals("${foo}", Expression.compile("\\${foo}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("${foo}", Expression.compile("\\${foo}", flags).evaluate((c, b) -> { })); - assertEquals("${foo}bar", Expression.compile("\\${foo}bar", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("${foo}bar", Expression.compile("\\${foo}bar", flags).evaluate((c, b) -> { })); - assertEquals("\\$\\{%s}", Expression.compile("\\$\\{%s}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("\\$\\{%s}", Expression.compile("\\$\\{%s}", flags).evaluate((c, b) -> { })); - assertEquals("foo${bar}", Expression.compile("foo\\${bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo${bar}", Expression.compile("foo\\${bar}", flags).evaluate((c, b) -> { })); - assertEquals("foo\\${bar}", Expression.compile("foo\\\\${bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo\\${bar}", Expression.compile("foo\\\\${bar}", flags).evaluate((c, b) -> { })); - assertEquals("foo\\${bar}", Expression.compile("foo\\$${bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo\\${bar}", Expression.compile("foo\\$${bar}", flags).evaluate((c, b) -> { })); - assertEquals("foo$${bar}", Expression.compile("foo$\\${bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo$${bar}", Expression.compile("foo$\\${bar}", flags).evaluate((c, b) -> { })); - assertEquals("foo$$\\{bar}", Expression.compile("foo$$\\{bar}", STRICT_ESCAPES).evaluate((c, b) -> { + assertEquals("foo$$\\{bar}", Expression.compile("foo$$\\{bar}", flags).evaluate((c, b) -> { })); } }