stas 2004/09/04 11:07:36
Modified: t/conf extra.conf.in
t/response/TestApache util.pm
Log:
fix the test to run under UTF-8 locales
Revision Changes Path
1.15 +4 -0 modperl-2.0/t/conf/extra.conf.in
Index: extra.conf.in
===================================================================
RCS file: /home/cvs/modperl-2.0/t/conf/extra.conf.in,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -u -r1.14 -r1.15
--- extra.conf.in 21 Aug 2004 20:13:39 -0000 1.14
+++ extra.conf.in 4 Sep 2004 18:07:36 -0000 1.15
@@ -84,3 +84,7 @@
SetHandler modperl
PerlResponseHandler Apache::Status
</Location>
+
+# for TestApache::util
+PerlPassEnv LC_CTYPE
+PerlPassEnv LC_TIME
1.8 +26 -5 modperl-2.0/t/response/TestApache/util.pm
Index: util.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/t/response/TestApache/util.pm,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -u -r1.7 -r1.8
--- util.pm 25 Aug 2004 19:49:23 -0000 1.7
+++ util.pm 4 Sep 2004 18:07:36 -0000 1.8
@@ -5,6 +5,16 @@
use strict;
use warnings FATAL => 'all';
+# to fully test this test the following locale settings need to be run:
+#
+# some /^en_/ locale, e.g. /^en_GB*
+# LC_CTYPE=en_GB.UTF-8 LC_TIME=en_GB.UTF-8 t/TEST -verbose apache/util.t
+# LC_CTYPE=en_GB LC_TIME=en_GB t/TEST -verbose apache/util.t
+#
+# some non-/^en_/ locale, e.g. ru_RU
+# LC_CTYPE=ru_RU.UTF-8 LC_TIME=ru_RU.UTF-8 t/TEST -verbose apache/util.t
+# LC_CTYPE=ru_RU LC_TIME=ru_RU t/TEST -verbose apache/util.t
+
# regex matching (LC_CTYPE) of strftime-like (LC_TIME) strings
use locale;
@@ -18,11 +28,11 @@
use Apache::Const -compile => 'OK';
-# XXX: need to use PerlPassEnv to get these %ENV vars
-my $locale = $ENV{LANG} || $ENV{LC_TIME} || '';
-# XXX: will any en_XXX work with http_parse? try setlocale?
-# XXX: should we set $ENV{LANG} to en_US instead of skipping?
-my $parse_time_ok = $locale =~ /^en_/ ? 1 : 0;
+# those are passed via PerlPassEnv
+my $locale = $ENV{LC_TIME} || '';
+
+my $parse_time_ok = $locale =~ /^en_/ ? 1 : 0;
+my $locale_is_utf8 = $locale =~ /UTF-8$/ ? 1 : 0;
sub handler {
my $r = shift;
@@ -96,6 +106,17 @@
ok t_cmp $ptime, $time, $comment;
}
else {
+ if ($locale_is_utf8) {
+ if (have_min_perl_version(5.008)) {
+ require Encode;
+ # perl doesn't know yet that $fmtdate is a utf8 string
+ $fmtdate = Encode::decode_utf8($fmtdate);
+ }
+ else {
+ skip "Skip locale $locale needs perl 5.8.0+", 0;
+ return;
+ }
+ }
ok t_cmp $fmtdate, $fmtdate_re, $comment;
}
}