Commit f1400070 authored by Peter Eisentraut's avatar Peter Eisentraut

Run UTF8-requiring collation tests by default

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: default avatarTom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/052295c2-a2e1-9a21-bd36-8fbff8686cf3%402ndquadrant.com
parent 870b1d68
......@@ -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>
......
/*
* 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;
......
/*
* 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
......@@ -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;
......
/*
* 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
......@@ -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
......
......@@ -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
......
......@@ -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;
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment