Some low-hanging fruit for EBCDIC portability
[p5sagit/p5-mst-13.2.git] / lib / utf8.t
index e11d856..223bb1d 100644 (file)
@@ -13,6 +13,8 @@ EOF
     }
 }
 
+no utf8; # Ironic, no?
+
 # NOTE!
 #
 # Think carefully before adding tests here.  In general this should be
@@ -35,7 +37,7 @@ EOF
 #
 #
 
-plan tests => 94;
+plan tests => 99;
 
 {
     # bug id 20001009.001
@@ -187,7 +189,7 @@ BANG
     print
         "# Again! Again! [but this time as eval, and not the explosive one]\n";
     # and now we've safely done them all as separate files, check that the
-    # evals do the same thing. Hopefully doing it later sucessfully decouples
+    # evals do the same thing. Hopefully doing it later successfully decouples
     # the previous tests from anything messy that may go wrong with the evals.
     foreach (@tests) {
         my ($why, $prog, $expect) = @$_;
@@ -263,3 +265,70 @@ BANG
         like ($result, $expect, $why);
     }
 }
+
+#
+# bug fixed by change #17928
+# separate perl used because we rely on 'strict' not yet loaded;
+# before the patch, the eval died with an error like:
+#   "my" variable $strict::VERSION can't be in a package
+#
+SKIP: {
+    skip("Embedded UTF-8 does not work in EBCDIC", 1) if ord("A") == 193;
+    ok('' eq runperl(prog => <<'CODE'), "change #17928");
+       my $code = qq{ my \$\xe3\x83\x95\xe3\x83\xbc = 5; };
+    {
+       use utf8;
+       eval $code;
+       print $@ if $@;
+    }
+CODE
+}
+
+{
+    use utf8;
+    $a = <<'END';
+0 ....... 1 ....... 2 ....... 3 ....... 4 ....... 5 ....... 6 ....... 7 ....... 
+END
+    my (@i, $s);
+
+    @i = ();
+    push @i, $s = index($a, '6');     # 60
+    push @i, $s = index($a, '.', $s); # next . after 60 is 62
+    push @i, $s = index($a, '5');     # 50
+    push @i, $s = index($a, '.', $s); # next . after 52 is 52
+    push @i, $s = index($a, '7');     # 70 
+    push @i, $s = index($a, '.', $s); # next . after 70 is 72
+    push @i, $s = index($a, '4');     # 40
+    push @i, $s = index($a, '.', $s); # next . after 40 is 42
+    is("@i", "60 62 50 52 70 72 40 42", "utf8 heredoc index");
+
+    @i = ();
+    push @i, $s = rindex($a, '6');     # 60
+    push @i, $s = rindex($a, '.', $s); # previous . before 60 is 58
+    push @i, $s = rindex($a, '5');     # 50
+    push @i, $s = rindex($a, '.', $s); # previous . before 52 is 48
+    push @i, $s = rindex($a, '7');     # 70 
+    push @i, $s = rindex($a, '.', $s); # previous . before 70 is 68
+    push @i, $s = rindex($a, '4');     # 40
+    push @i, $s = rindex($a, '.', $s); # previous . before 40 is 38
+    is("@i", "60 58 50 48 70 68 40 38", "utf8 heredoc rindex");
+
+    @i = ();
+    push @i, $s =  index($a, '6');     # 60
+    push @i,  index($a, '.', $s);      # next     . after  60 is 62
+    push @i, rindex($a, '.', $s);      # previous . before 60 is 58
+    push @i, $s = rindex($a, '5');     # 60
+    push @i,  index($a, '.', $s);      # next     . after  50 is 52
+    push @i, rindex($a, '.', $s);      # previous . before 50 is 48
+    push @i, $s =  index($a, '7', $s); # 70
+    push @i,  index($a, '.', $s);      # next     . after  70 is 72
+    push @i, rindex($a, '.', $s);      # previous . before 70 is 68
+    is("@i", "60 62 58 50 52 48 70 72 68", "utf8 heredoc index and rindex");
+}
+
+SKIP: {
+    skip("Embedded UTF-8 does not work in EBCDIC", 1) if ord("A") == 193;
+    use utf8;
+    eval qq{is(q \xc3\xbc test \xc3\xbc, qq\xc2\xb7 test \xc2\xb7,
+              "utf8 quote delimiters [perl #16823]");};
+}