浏览代码

SQL: skip uppercasing/lowercasing function tests for AZ locales as well (#32910)

* Added the rest of the Locales that have different behavior for uppercasing/lowercasing scenarios to the skip list
Andrei Stefan 7 年之前
父节点
当前提交
de95dead2d

+ 35 - 16
x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/string/StringFunctionProcessorTests.java

@@ -75,17 +75,27 @@ public class StringFunctionProcessorTests extends AbstractWireSerializingTestCas
         stringCharInputValidation(proc);
     }
     
-    public void testLCaseWithTRLocale() {
+    public void testLCaseWithAZTRLocale() {
+        Locale initialLocale = Locale.getDefault();
         Locale.setDefault(Locale.forLanguageTag("tr"));
-        StringProcessor proc = new StringProcessor(StringOperation.LCASE);
 
-        // ES-SQL is not locale sensitive (so far). The obvious test for this is the Turkish language, uppercase letter I conversion
-        // in non-Turkish locale the lowercasing would create i and an additional dot, while in Turkish Locale it would only create "i"
-        // unicode 0069 = i
-        assertEquals("\u0069\u0307", proc.process("\u0130"));
-        // unicode 0049 = I (regular capital letter i)
-        // in Turkish locale this would be lowercased to a "i" without dot (unicode 0131)
-        assertEquals("\u0069", proc.process("\u0049"));
+        try {
+            StringProcessor proc = new StringProcessor(StringOperation.LCASE);
+            // ES-SQL is not locale sensitive (so far). The obvious test for this is the Turkish language, uppercase letter I conversion
+            // in non-Turkish locale the lowercasing would create i and an additional dot, while in Turkish Locale it would only create "i"
+            // unicode 0069 = i
+            assertEquals("\u0069\u0307", proc.process("\u0130"));
+            // unicode 0049 = I (regular capital letter i)
+            // in Turkish locale this would be lowercased to a "i" without dot (unicode 0131)
+            assertEquals("\u0069", proc.process("\u0049"));
+            
+            Locale.setDefault(Locale.forLanguageTag("az"));
+            assertEquals("\u0069\u0307", proc.process("\u0130"));
+            assertEquals("\u0069", proc.process("\u0049"));
+        } finally {
+            // restore the original Locale
+            Locale.setDefault(initialLocale);
+        }
     }
 
     public void testUCase() {
@@ -102,13 +112,22 @@ public class StringFunctionProcessorTests extends AbstractWireSerializingTestCas
         stringCharInputValidation(proc);
     }
     
-    public void testUCaseWithTRLocale() {
+    public void testUCaseWithAZTRLocale() {
+        Locale initialLocale = Locale.getDefault();
         Locale.setDefault(Locale.forLanguageTag("tr"));
-        StringProcessor proc = new StringProcessor(StringOperation.UCASE);
-
-        // ES-SQL is not Locale sensitive (so far).
-        // in Turkish locale, small letter "i" is uppercased to "I" with a dot above (unicode 130), otherwise in "i" (unicode 49)
-        assertEquals("\u0049", proc.process("\u0069"));
+        
+        try {
+            StringProcessor proc = new StringProcessor(StringOperation.UCASE);
+            // ES-SQL is not Locale sensitive (so far).
+            // in Turkish locale, small letter "i" is uppercased to "I" with a dot above (unicode 130), otherwise in "i" (unicode 49)
+            assertEquals("\u0049", proc.process("\u0069"));
+            
+            Locale.setDefault(Locale.forLanguageTag("az"));
+            assertEquals("\u0049", proc.process("\u0069"));
+        } finally {
+            // restore the original Locale
+            Locale.setDefault(initialLocale);
+        }
     }
 
     public void testLength() {
@@ -179,7 +198,7 @@ public class StringFunctionProcessorTests extends AbstractWireSerializingTestCas
         assertEquals(7, proc.process("foo bar"));
         assertEquals(0, proc.process(""));
         assertEquals(1, proc.process('f'));
-        assertEquals(1, proc.process('€'));
+        assertEquals(1, proc.process('\u20ac')); // euro symbol
 
         stringCharInputValidation(proc);
     }

+ 7 - 4
x-pack/qa/sql/src/main/java/org/elasticsearch/xpack/qa/sql/jdbc/SqlSpecTestCase.java

@@ -13,6 +13,7 @@ import org.junit.ClassRule;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 
@@ -37,8 +38,7 @@ public abstract class SqlSpecTestCase extends SpecBaseIntegrationTestCase {
         tests.addAll(readScriptSpec("/agg.sql-spec", parser));
         tests.addAll(readScriptSpec("/arithmetic.sql-spec", parser));
         tests.addAll(readScriptSpec("/string-functions.sql-spec", parser));
-        // AwaitsFix: https://github.com/elastic/elasticsearch/issues/32589
-        // tests.addAll(readScriptSpec("/case-functions.sql-spec", parser));
+        tests.addAll(readScriptSpec("/case-functions.sql-spec", parser));
         return tests;
     }
 
@@ -60,8 +60,11 @@ public abstract class SqlSpecTestCase extends SpecBaseIntegrationTestCase {
 
     @Override
     protected final void doTest() throws Throwable {
-        boolean goodLocale = !(Locale.getDefault().equals(new Locale.Builder().setLanguageTag("tr").build())
-                || Locale.getDefault().equals(new Locale.Builder().setLanguageTag("tr-TR").build()));
+        // we skip the tests in case of these locales because ES-SQL is Locale-insensitive for now
+        // while H2 does take the Locale into consideration
+        String[] h2IncompatibleLocales = new String[] {"tr", "az", "tr-TR", "tr-CY", "az-Latn", "az-Cyrl", "az-Latn-AZ", "az-Cyrl-AZ"};
+        boolean goodLocale = !Arrays.stream(h2IncompatibleLocales)
+                .anyMatch((l) -> Locale.getDefault().equals(new Locale.Builder().setLanguageTag(l).build()));
         if (fileName.startsWith("case-functions")) {
             Assume.assumeTrue(goodLocale);
         }