From 698dbfae27f1cb49884c17ea33b3aca56cd3c8cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rene=CC=81=20Kriegler?= Date: Sat, 29 Feb 2020 18:13:46 +0000 Subject: [PATCH] Avoid Locale-dependant InvalidPathException in RelationalOperator, fixes #600 --- .../internal/filter/RelationalOperator.java | 7 +++- .../filter/RelationalOperatorTest.java | 39 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 json-path/src/test/java/com/jayway/jsonpath/internal/filter/RelationalOperatorTest.java diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalOperator.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalOperator.java index 84e2aed01..509869450 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalOperator.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalOperator.java @@ -2,6 +2,8 @@ import com.jayway.jsonpath.InvalidPathException; +import java.util.Locale; + public enum RelationalOperator { GTE(">="), @@ -40,9 +42,10 @@ public enum RelationalOperator { this.operatorString = operatorString; } - public static RelationalOperator fromString(String operatorString){ + public static RelationalOperator fromString(String operatorString) { + String upperCaseOperatorString = operatorString.toUpperCase(Locale.ROOT); for (RelationalOperator operator : RelationalOperator.values()) { - if(operator.operatorString.equals(operatorString.toUpperCase()) ){ + if(operator.operatorString.equals(upperCaseOperatorString) ){ return operator; } } diff --git a/json-path/src/test/java/com/jayway/jsonpath/internal/filter/RelationalOperatorTest.java b/json-path/src/test/java/com/jayway/jsonpath/internal/filter/RelationalOperatorTest.java new file mode 100644 index 000000000..be3983245 --- /dev/null +++ b/json-path/src/test/java/com/jayway/jsonpath/internal/filter/RelationalOperatorTest.java @@ -0,0 +1,39 @@ +package com.jayway.jsonpath.internal.filter; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.Locale; + +public class RelationalOperatorTest { + + Locale locale; + + @Before + public void saveDefaultLocale() { + locale = Locale.getDefault(); + } + + @After + public void restoreDefaultLocale() { + Locale.setDefault(locale); + } + + @Test + public void testFromStringWithEnglishLocale() { + Locale.setDefault(Locale.ENGLISH); + assertEquals(RelationalOperator.IN, RelationalOperator.fromString("in")); + assertEquals(RelationalOperator.IN, RelationalOperator.fromString("IN")); + } + + @Test + public void testFromStringWithTurkishLocale() { + Locale.setDefault(new Locale("tr", "TR")); + assertEquals(RelationalOperator.IN, RelationalOperator.fromString("in")); + assertEquals(RelationalOperator.IN, RelationalOperator.fromString("IN")); + } + +} \ No newline at end of file