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
This commit is contained in:
parent
edd477a15e
commit
de95dead2d
|
@ -75,17 +75,27 @@ public class StringFunctionProcessorTests extends AbstractWireSerializingTestCas
|
||||||
stringCharInputValidation(proc);
|
stringCharInputValidation(proc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testLCaseWithTRLocale() {
|
public void testLCaseWithAZTRLocale() {
|
||||||
|
Locale initialLocale = Locale.getDefault();
|
||||||
Locale.setDefault(Locale.forLanguageTag("tr"));
|
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
|
try {
|
||||||
// in non-Turkish locale the lowercasing would create i and an additional dot, while in Turkish Locale it would only create "i"
|
StringProcessor proc = new StringProcessor(StringOperation.LCASE);
|
||||||
// unicode 0069 = i
|
// ES-SQL is not locale sensitive (so far). The obvious test for this is the Turkish language, uppercase letter I conversion
|
||||||
assertEquals("\u0069\u0307", proc.process("\u0130"));
|
// in non-Turkish locale the lowercasing would create i and an additional dot, while in Turkish Locale it would only create "i"
|
||||||
// unicode 0049 = I (regular capital letter i)
|
// unicode 0069 = i
|
||||||
// in Turkish locale this would be lowercased to a "i" without dot (unicode 0131)
|
assertEquals("\u0069\u0307", proc.process("\u0130"));
|
||||||
assertEquals("\u0069", proc.process("\u0049"));
|
// 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() {
|
public void testUCase() {
|
||||||
|
@ -102,13 +112,22 @@ public class StringFunctionProcessorTests extends AbstractWireSerializingTestCas
|
||||||
stringCharInputValidation(proc);
|
stringCharInputValidation(proc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testUCaseWithTRLocale() {
|
public void testUCaseWithAZTRLocale() {
|
||||||
|
Locale initialLocale = Locale.getDefault();
|
||||||
Locale.setDefault(Locale.forLanguageTag("tr"));
|
Locale.setDefault(Locale.forLanguageTag("tr"));
|
||||||
StringProcessor proc = new StringProcessor(StringOperation.UCASE);
|
|
||||||
|
|
||||||
// ES-SQL is not Locale sensitive (so far).
|
try {
|
||||||
// in Turkish locale, small letter "i" is uppercased to "I" with a dot above (unicode 130), otherwise in "i" (unicode 49)
|
StringProcessor proc = new StringProcessor(StringOperation.UCASE);
|
||||||
assertEquals("\u0049", proc.process("\u0069"));
|
// 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() {
|
public void testLength() {
|
||||||
|
@ -179,7 +198,7 @@ public class StringFunctionProcessorTests extends AbstractWireSerializingTestCas
|
||||||
assertEquals(7, proc.process("foo bar"));
|
assertEquals(7, proc.process("foo bar"));
|
||||||
assertEquals(0, proc.process(""));
|
assertEquals(0, proc.process(""));
|
||||||
assertEquals(1, proc.process('f'));
|
assertEquals(1, proc.process('f'));
|
||||||
assertEquals(1, proc.process('€'));
|
assertEquals(1, proc.process('\u20ac')); // euro symbol
|
||||||
|
|
||||||
stringCharInputValidation(proc);
|
stringCharInputValidation(proc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import org.junit.ClassRule;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
@ -37,8 +38,7 @@ public abstract class SqlSpecTestCase extends SpecBaseIntegrationTestCase {
|
||||||
tests.addAll(readScriptSpec("/agg.sql-spec", parser));
|
tests.addAll(readScriptSpec("/agg.sql-spec", parser));
|
||||||
tests.addAll(readScriptSpec("/arithmetic.sql-spec", parser));
|
tests.addAll(readScriptSpec("/arithmetic.sql-spec", parser));
|
||||||
tests.addAll(readScriptSpec("/string-functions.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;
|
return tests;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,8 +60,11 @@ public abstract class SqlSpecTestCase extends SpecBaseIntegrationTestCase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected final void doTest() throws Throwable {
|
protected final void doTest() throws Throwable {
|
||||||
boolean goodLocale = !(Locale.getDefault().equals(new Locale.Builder().setLanguageTag("tr").build())
|
// we skip the tests in case of these locales because ES-SQL is Locale-insensitive for now
|
||||||
|| Locale.getDefault().equals(new Locale.Builder().setLanguageTag("tr-TR").build()));
|
// 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")) {
|
if (fileName.startsWith("case-functions")) {
|
||||||
Assume.assumeTrue(goodLocale);
|
Assume.assumeTrue(goodLocale);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue