]> granicus.if.org Git - postgresql/commitdiff
Run UTF8-requiring collation tests by default
authorPeter Eisentraut <peter@eisentraut.org>
Wed, 31 Jul 2019 07:42:15 +0000 (09:42 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Wed, 31 Jul 2019 07:46:51 +0000 (09:46 +0200)
The tests collate.icu.utf8 and collate.linux.utf8 were previously only
run when explicitly selected via EXTRA_TESTS.  They require a UTF8
database, because the error messages in the expected files refer to
that, and they use some non-ASCII characters in the tests.  Since
users can select any locale and encoding for the regression test run,
it was not possible to include these tests automatically.

To fix, use psql's \if facility to check various prerequisites such as
platform and the server encoding and quit the tests at the very
beginning if the configuration is not adequate.  We then need to
maintain alternative expected files for these tests, but they are very
tiny and never need to change after this.

These two tests are now run automatically as part of the regression
tests.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/052295c2-a2e1-9a21-bd36-8fbff8686cf3%402ndquadrant.com

doc/src/sgml/regress.sgml
src/test/regress/expected/collate.icu.utf8.out
src/test/regress/expected/collate.icu.utf8_1.out [new file with mode: 0644]
src/test/regress/expected/collate.linux.utf8.out
src/test/regress/expected/collate.linux.utf8_1.out [new file with mode: 0644]
src/test/regress/parallel_schedule
src/test/regress/serial_schedule
src/test/regress/sql/collate.icu.utf8.sql
src/test/regress/sql/collate.linux.utf8.sql

index 7b68213266840278d5a00d50a9532f2740c837f1..d98187c970e9de989fb595197f7ac140f7a38cea 100644 (file)
@@ -363,14 +363,6 @@ make check LANG=C ENCODING=EUC_JP
 <screen>
 make check EXTRA_TESTS=numeric_big
 </screen>
-    To run the collation tests:
-<screen>
-make check EXTRA_TESTS='collate.linux.utf8 collate.icu.utf8' LANG=en_US.utf8
-</screen>
-    The <literal>collate.linux.utf8</literal> test works only on Linux/glibc
-    platforms.  The <literal>collate.icu.utf8</literal> test only works when
-    support for ICU was built.  Both tests will only succeed when run in a
-    database that uses UTF-8 encoding.
    </para>
   </sect2>
 
index 01bd9fb5dd798305c02b3c8569d812e6af2a5eb5..51262e0bf44b3d79b84b08c2253233bf6fbd53a4 100644 (file)
@@ -1,6 +1,13 @@
 /*
  * This test is for ICU collations.
  */
+/* skip test if not UTF8 server encoding or no ICU collations installed */
+SELECT getdatabaseencoding() <> 'UTF8' OR
+       (SELECT count(*) FROM pg_collation WHERE collprovider = 'i') = 0
+       AS skip_test \gset
+\if :skip_test
+\quit
+\endif
 SET client_encoding TO UTF8;
 CREATE SCHEMA collate_tests;
 SET search_path = collate_tests;
diff --git a/src/test/regress/expected/collate.icu.utf8_1.out b/src/test/regress/expected/collate.icu.utf8_1.out
new file mode 100644 (file)
index 0000000..a6a33b3
--- /dev/null
@@ -0,0 +1,9 @@
+/*
+ * This test is for ICU collations.
+ */
+/* skip test if not UTF8 server encoding or no ICU collations installed */
+SELECT getdatabaseencoding() <> 'UTF8' OR
+       (SELECT count(*) FROM pg_collation WHERE collprovider = 'i') = 0
+       AS skip_test \gset
+\if :skip_test
+\quit
index 619688f851aa3816955750b466183b69d9e4a92c..ad56ff9caa37d07577c271202f77dad36ffb3aaa 100644 (file)
@@ -3,6 +3,13 @@
  * locales is installed.  It must be run in a database with UTF-8 encoding,
  * because other encodings don't support all the characters used.
  */
+SELECT getdatabaseencoding() <> 'UTF8' OR
+       (SELECT count(*) FROM pg_collation WHERE collname IN ('de_DE', 'en_US', 'sv_SE', 'tr_TR') AND collencoding = pg_char_to_encoding('UTF8')) <> 4 OR
+       version() !~ 'linux-gnu'
+       AS skip_test \gset
+\if :skip_test
+\quit
+\endif
 SET client_encoding TO UTF8;
 CREATE SCHEMA collate_tests;
 SET search_path = collate_tests;
diff --git a/src/test/regress/expected/collate.linux.utf8_1.out b/src/test/regress/expected/collate.linux.utf8_1.out
new file mode 100644 (file)
index 0000000..ede5fdb
--- /dev/null
@@ -0,0 +1,11 @@
+/*
+ * This test is for Linux/glibc systems and assumes that a full set of
+ * locales is installed.  It must be run in a database with UTF-8 encoding,
+ * because other encodings don't support all the characters used.
+ */
+SELECT getdatabaseencoding() <> 'UTF8' OR
+       (SELECT count(*) FROM pg_collation WHERE collname IN ('de_DE', 'en_US', 'sv_SE', 'tr_TR') AND collencoding = pg_char_to_encoding('UTF8')) <> 4 OR
+       version() !~ 'linux-gnu'
+       AS skip_test \gset
+\if :skip_test
+\quit
index 8fb55f045e67e281a807dd6cbc1fb4b2491a7a96..fc0f14122bb0672b1c2ebd807034d9e41fa06e99 100644 (file)
@@ -78,11 +78,12 @@ test: brin gin gist spgist privileges init_privs security_label collate matview
 # ----------
 # Another group of parallel tests
 # ----------
-test: create_table_like alter_generic alter_operator misc async dbsize misc_functions sysviews tsrf tidscan
+test: create_table_like alter_generic alter_operator misc async dbsize misc_functions sysviews tsrf tidscan collate.icu.utf8
 
 # rules cannot run concurrently with any test that creates
 # a view or rule in the public schema
-test: rules psql psql_crosstab amutils stats_ext
+# collate.*.utf8 tests cannot be run in parallel with each other
+test: rules psql psql_crosstab amutils stats_ext collate.linux.utf8
 
 # run by itself so it can run parallel workers
 test: select_parallel
index a39ca1012a3134b9f4e37293521c220aead09ada..68ac56acdb2c5b310468477942cdfd4ab5749752 100644 (file)
@@ -133,11 +133,13 @@ test: misc_functions
 test: sysviews
 test: tsrf
 test: tidscan
+test: collate.icu.utf8
 test: rules
 test: psql
 test: psql_crosstab
 test: amutils
 test: stats_ext
+test: collate.linux.utf8
 test: select_parallel
 test: write_parallel
 test: publication
index 2be7759c92d4f1b962ae2e1706ca7c106c8ca596..46999fb9266fc70b375058793f6c33270fd1c5f4 100644 (file)
@@ -2,6 +2,14 @@
  * This test is for ICU collations.
  */
 
+/* skip test if not UTF8 server encoding or no ICU collations installed */
+SELECT getdatabaseencoding() <> 'UTF8' OR
+       (SELECT count(*) FROM pg_collation WHERE collprovider = 'i') = 0
+       AS skip_test \gset
+\if :skip_test
+\quit
+\endif
+
 SET client_encoding TO UTF8;
 
 CREATE SCHEMA collate_tests;
index c009fd2372d92af133a0b73c95714954b9afcd76..eac2f900142b11d3f5e273a28d1fa7255c7032ce 100644 (file)
@@ -4,6 +4,14 @@
  * because other encodings don't support all the characters used.
  */
 
+SELECT getdatabaseencoding() <> 'UTF8' OR
+       (SELECT count(*) FROM pg_collation WHERE collname IN ('de_DE', 'en_US', 'sv_SE', 'tr_TR') AND collencoding = pg_char_to_encoding('UTF8')) <> 4 OR
+       version() !~ 'linux-gnu'
+       AS skip_test \gset
+\if :skip_test
+\quit
+\endif
+
 SET client_encoding TO UTF8;
 
 CREATE SCHEMA collate_tests;