This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
locale.t: Add tests for IN_UNI_8_BIT
authorKarl Williamson <public@khwilliamson.com>
Mon, 30 Jan 2012 17:25:25 +0000 (10:25 -0700)
committerKarl Williamson <public@khwilliamson.com>
Tue, 31 Jan 2012 02:28:11 +0000 (19:28 -0700)
These are more tests for commit b36bf33f6564c3e9a9ff131f4f3c9980b7a8af15

lib/locale.t

index b4e5b39..68078eb 100644 (file)
@@ -1336,9 +1336,12 @@ $test_num = $final_locales_test_number;
 # Test that tainting and case changing works on utf8 strings.  These tests are
 # placed last to avoid disturbing the hard-coded test numbers that existed at
 # the time these were added above this in this file.
+# This also tests that locale overrides unicode_strings in the same scope for
+# non-utf8 strings.
 setlocale(LC_ALL, "C");
 {
     use locale;
+    use feature 'unicode_strings';
 
     foreach my $function ("uc", "ucfirst", "lc", "lcfirst") {
         my @list;   # List of code points to test for $function
@@ -1373,7 +1376,8 @@ setlocale(LC_ALL, "C");
         foreach my $is_utf8_locale (0 .. 1) {
             foreach my $j (0 .. $#list) {
                 my $char = $list[$j];
-                utf8::upgrade($char);
+
+                for my $encoded_in_utf8 (0 .. 1) {
                 my $should_be;
                 my $changed;
                 if (! $is_utf8_locale) {
@@ -1419,8 +1423,9 @@ setlocale(LC_ALL, "C");
                 }
                 ok($changed eq $should_be, "$function(\"$char\") in C locale "
                                         . (($is_utf8_locale)
-                                            ? "(use locale ':not_characters')"
-                                            : "(use locale)")
+                                            ? "(use locale ':not_characters'"
+                                            : "(use locale")
+                                        . (($encoded_in_utf8) ? "; encoded in utf8)" : "; not encoded in utf8)")
                                         . " should be \"$should_be\", got \"$changed\"");
 
                 # Tainting shouldn't happen for utf8 locales, empty strings,
@@ -1428,6 +1433,10 @@ setlocale(LC_ALL, "C");
                 (! $is_utf8_locale && length($char) > 0 && ord($char) < 256)
                 ? check_taint($changed)
                 : check_taint_not($changed);
+
+                # Use UTF-8 next time through the loop
+                utf8::upgrade($char);
+                }
             }
         }
     }