Skip to content

Commit

Permalink
SQL: skip uppercasing/lowercasing function tests for AZ locales as we…
Browse files Browse the repository at this point in the history
…ll (#32910)

* Added the rest of the Locales that have different behavior for uppercasing/lowercasing scenarios to the skip list
  • Loading branch information
astefan committed Aug 22, 2018
1 parent beea854 commit 13abfa2
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,17 +75,27 @@ public void testLCase() {
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() {
Expand All @@ -102,13 +112,22 @@ public void testUCase() {
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() {
Expand Down Expand Up @@ -179,7 +198,7 @@ public void testCharLength() {
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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

Expand All @@ -37,8 +38,7 @@ public static List<Object[]> readScriptSpec() throws Exception {
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;
}

Expand All @@ -60,8 +60,11 @@ public SqlSpecTestCase(String fileName, String groupName, String testName, Integ

@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);
}
Expand Down

0 comments on commit 13abfa2

Please sign in to comment.