Fix regression tests of unaccent to work without UTF8 support

The tests of unaccent rely on UTF8 characters, and unlike any other test
suite in the tree (fuzzystrmatch, citext, hstore, etc.), they would fail
if run on a database that does not support UTF8 encoding.

This commit fixes the tests of unaccent so as these are skipped when run
on a database without UTF8 support, using the same method as the other
test suits based on \if, getdatabaseencoding() and an alternate output
file.

This has been broken for a long time, but nobody has complained about
that either, so no backpatch is done.  This can be reproduced with
something like REGRESS_OPTS="--no-locale --encoding=sql_ascii", for
instance.  To defend against that, this module's Makefile and
meson.build enforced a UTF8 encoding without locales, but it did not
offer protection for options given by REGRESS_OPTS.  This switch makes
this regression test suite more consistent with all the others, as
well.

Reviewed-by: Peter Eisentraut
Discussion: https://postgr.es/m/ZIq1HUnIV2ksW85x@paquier.xyz
This commit is contained in:
Michael Paquier 2023-07-04 08:05:00 +09:00
parent 72df1d3f1b
commit 44e73a498c
5 changed files with 28 additions and 15 deletions

View File

@ -12,10 +12,6 @@ PGFILEDESC = "unaccent - text search dictionary that removes accents"
REGRESS = unaccent
# We need a UTF8 database
ENCODING = UTF8
NO_LOCALE = 1
ifdef USE_PGXS
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)

View File

@ -1,11 +1,13 @@
/*
* This test must be run in a database with UTF-8 encoding,
* because other encodings don't support all the characters used.
*/
SELECT getdatabaseencoding() <> 'UTF8'
AS skip_test \gset
\if :skip_test
\quit
\endif
CREATE EXTENSION unaccent;
-- must have a UTF8 database
SELECT getdatabaseencoding();
getdatabaseencoding
---------------------
UTF8
(1 row)
SET client_encoding TO 'UTF8';
SELECT unaccent('foobar');
unaccent

View File

@ -0,0 +1,8 @@
/*
* This test must be run in a database with UTF-8 encoding,
* because other encodings don't support all the characters used.
*/
SELECT getdatabaseencoding() <> 'UTF8'
AS skip_test \gset
\if :skip_test
\quit

View File

@ -37,6 +37,5 @@ tests += {
'sql': [
'unaccent',
],
'regress_args': ['--no-locale', '--encoding=UTF8'],
},
}

View File

@ -1,7 +1,15 @@
CREATE EXTENSION unaccent;
/*
* This test must be run in a database with UTF-8 encoding,
* because other encodings don't support all the characters used.
*/
-- must have a UTF8 database
SELECT getdatabaseencoding();
SELECT getdatabaseencoding() <> 'UTF8'
AS skip_test \gset
\if :skip_test
\quit
\endif
CREATE EXTENSION unaccent;
SET client_encoding TO 'UTF8';