From 750e90e3f86c1202423aa0c89854ed3f2dcb0a57 Mon Sep 17 00:00:00 2001 From: iProdigy <8106344+iProdigy@users.noreply.github.com> Date: Tue, 25 Jul 2023 11:47:27 -0500 Subject: [PATCH 1/4] Fix expression pattern compilation on android --- core/src/main/java/feign/template/Expressions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/feign/template/Expressions.java b/core/src/main/java/feign/template/Expressions.java index 3b579c33bb..affb2247c6 100644 --- a/core/src/main/java/feign/template/Expressions.java +++ b/core/src/main/java/feign/template/Expressions.java @@ -41,7 +41,7 @@ public final class Expressions { * Date: Wed, 26 Jul 2023 10:40:36 -0500 Subject: [PATCH 2/4] Add test cases --- .../main/java/feign/template/Expressions.java | 4 +-- .../java/feign/template/ExpressionsTest.java | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 core/src/test/java/feign/template/ExpressionsTest.java diff --git a/core/src/main/java/feign/template/Expressions.java b/core/src/main/java/feign/template/Expressions.java index affb2247c6..644a24a3b3 100644 --- a/core/src/main/java/feign/template/Expressions.java +++ b/core/src/main/java/feign/template/Expressions.java @@ -38,9 +38,9 @@ public final class Expressions { * * This is not a complete implementation of the rfc * - * RFC 6570 Expressions */ - private static final Pattern EXPRESSION_PATTERN = + static final Pattern EXPRESSION_PATTERN = Pattern.compile("^(\\{([+#./;?&=,!@|]?)(.+)\\})$"); // Partially From: diff --git a/core/src/test/java/feign/template/ExpressionsTest.java b/core/src/test/java/feign/template/ExpressionsTest.java new file mode 100644 index 0000000000..c96b27410e --- /dev/null +++ b/core/src/test/java/feign/template/ExpressionsTest.java @@ -0,0 +1,26 @@ +package feign.template; + +import org.junit.jupiter.api.Test; + +import java.util.Collections; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ExpressionsTest { + + @Test + public void simpleExpression() { + Expression expression = Expressions.create("{foo}"); + assertThat(expression).isNotNull(); + String expanded = expression.expand(Collections.singletonMap("foo", "bar"), false); + assertThat(expanded).isEqualToIgnoringCase("foo=bar"); + } + + @Test + public void androidCompatibility() { + // To match close brace on Android, it must be escaped due to the simpler ICU regex engine + String pattern = Expressions.EXPRESSION_PATTERN.pattern(); + assertThat(pattern.contains("}")).isEqualTo(pattern.contains("\\}")); + } + +} From e2e6efed4a0c239b0bf55fe832730b33e68813d4 Mon Sep 17 00:00:00 2001 From: iProdigy Date: Wed, 26 Jul 2023 10:43:37 -0500 Subject: [PATCH 3/4] Add license header --- .../test/java/feign/template/ExpressionsTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/src/test/java/feign/template/ExpressionsTest.java b/core/src/test/java/feign/template/ExpressionsTest.java index c96b27410e..ec28089635 100644 --- a/core/src/test/java/feign/template/ExpressionsTest.java +++ b/core/src/test/java/feign/template/ExpressionsTest.java @@ -1,3 +1,16 @@ +/* + * Copyright 2012-2023 The Feign Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ package feign.template; import org.junit.jupiter.api.Test; From 563986b8a3a8efda2aa8c9aab618e3bf9a95370e Mon Sep 17 00:00:00 2001 From: iProdigy Date: Wed, 26 Jul 2023 10:59:27 -0500 Subject: [PATCH 4/4] Reformat --- core/src/test/java/feign/template/ExpressionsTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/core/src/test/java/feign/template/ExpressionsTest.java b/core/src/test/java/feign/template/ExpressionsTest.java index ec28089635..dd2c4cbb9b 100644 --- a/core/src/test/java/feign/template/ExpressionsTest.java +++ b/core/src/test/java/feign/template/ExpressionsTest.java @@ -14,9 +14,7 @@ package feign.template; import org.junit.jupiter.api.Test; - import java.util.Collections; - import static org.assertj.core.api.Assertions.assertThat; public class ExpressionsTest { @@ -35,5 +33,4 @@ public void androidCompatibility() { String pattern = Expressions.EXPRESSION_PATTERN.pattern(); assertThat(pattern.contains("}")).isEqualTo(pattern.contains("\\}")); } - }