This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #119043] Allow utf8 up/downgrade on ro COWs
[perl5.git] / lib / utf8.t
index 8e2b8ea..e6c94e6 100644 (file)
@@ -563,4 +563,29 @@ for my $pos (0..5) {
     is($s, "A\xc8\x81\xe8\xab\x86","(pos $pos) str after  U; utf8::encode");
 }
 
+# [perl #119043] utf8::upgrade should not croak on read-only COWs
+for(__PACKAGE__) {
+    # First make sure we have a COW, otherwise this test is useless.
+    my $copy = $_;
+    my @addrs = unpack "L!L!", pack "pp", $copy, $_;
+    if ($addrs[0] != $addrs[1]) {
+       fail("__PACKAGE__ did not produce a COW - if this change was "
+           ."intentional, please provide me with another ro COW scalar")
+    }
+    else {
+       eval { utf8::upgrade($_) };
+       is $@, "", 'no error with utf8::upgrade on read-only COW';
+    }
+}
+# This one croaks, but not because the scalar is read-only
+eval "package \x{100};\n" . <<'END'
+    for(__PACKAGE__) {
+       eval { utf8::downgrade($_) };
+       ::like $@, qr/^Wide character/,
+           'right error with utf8::downgrade on read-only COW';
+    }
+    1
+END
+or die $@;
+
 done_testing();