}
}
-use Test::More tests => 190;
+use Test::More tests => 208;
package UTF8Toggle;
use strict;
-use overload '""' => 'stringify';
+use overload '""' => 'stringify', fallback => 1;
sub new {
my $class = shift;
my $u = UTF8Toggle->new("\311");
my $lc = lc $u;
is (length $lc, 1);
-is ($lc, "\311", "E accute -> e accute");
+is ($lc, "\311", "E acute -> e acute");
$lc = lc $u;
is (length $lc, 1);
-is ($lc, "\351", "E accute -> e accute");
+is ($lc, "\351", "E acute -> e acute");
$lc = lc $u;
is (length $lc, 1);
-is ($lc, "\311", "E accute -> e accute");
+is ($lc, "\311", "E acute -> e acute");
$u = UTF8Toggle->new("\351");
my $uc = uc $u;
is (length $uc, 1);
-is ($uc, "\351", "e accute -> E accute");
+is ($uc, "\351", "e acute -> E acute");
$uc = uc $u;
is (length $uc, 1);
-is ($uc, "\311", "e accute -> E accute");
+is ($uc, "\311", "e acute -> E acute");
$uc = uc $u;
is (length $uc, 1);
-is ($uc, "\351", "e accute -> E accute");
+is ($uc, "\351", "e acute -> E acute");
$u = UTF8Toggle->new("\311");
$lc = lcfirst $u;
is (length $lc, 1);
-is ($lc, "\311", "E accute -> e accute");
+is ($lc, "\311", "E acute -> e acute");
$lc = lcfirst $u;
is (length $lc, 1);
-is ($lc, "\351", "E accute -> e accute");
+is ($lc, "\351", "E acute -> e acute");
$lc = lcfirst $u;
is (length $lc, 1);
-is ($lc, "\311", "E accute -> e accute");
+is ($lc, "\311", "E acute -> e acute");
$u = UTF8Toggle->new("\351");
$uc = ucfirst $u;
is (length $uc, 1);
-is ($uc, "\351", "e accute -> E accute");
+is ($uc, "\351", "e acute -> E acute");
$uc = ucfirst $u;
is (length $uc, 1);
-is ($uc, "\311", "e accute -> E accute");
+is ($uc, "\311", "e acute -> E acute");
$uc = ucfirst $u;
is (length $uc, 1);
-is ($uc, "\351", "e accute -> E accute");
+is ($uc, "\351", "e acute -> E acute");
my $have_setlocale = 0;
eval {
skip "No setlocale", 24;
} elsif (!setlocale(&POSIX::LC_ALL, "en_GB.ISO8859-1")) {
skip "Could not setlocale to en_GB.ISO8859-1", 24;
+ } elsif ($^O eq 'dec_osf' || $^O eq 'VMS') {
+ skip "$^O has broken en_GB.ISO8859-1 locale", 24;
} else {
use locale;
my $u = UTF8Toggle->new("\311");
my $lc = lc $u;
is (length $lc, 1);
- is ($lc, "\351", "E accute -> e accute");
+ is ($lc, "\351", "E acute -> e acute");
$lc = lc $u;
is (length $lc, 1);
- is ($lc, "\351", "E accute -> e accute");
+ is ($lc, "\351", "E acute -> e acute");
$lc = lc $u;
is (length $lc, 1);
- is ($lc, "\351", "E accute -> e accute");
+ is ($lc, "\351", "E acute -> e acute");
$u = UTF8Toggle->new("\351");
my $uc = uc $u;
is (length $uc, 1);
- is ($uc, "\311", "e accute -> E accute");
+ is ($uc, "\311", "e acute -> E acute");
$uc = uc $u;
is (length $uc, 1);
- is ($uc, "\311", "e accute -> E accute");
+ is ($uc, "\311", "e acute -> E acute");
$uc = uc $u;
is (length $uc, 1);
- is ($uc, "\311", "e accute -> E accute");
+ is ($uc, "\311", "e acute -> E acute");
$u = UTF8Toggle->new("\311");
$lc = lcfirst $u;
is (length $lc, 1);
- is ($lc, "\351", "E accute -> e accute");
+ is ($lc, "\351", "E acute -> e acute");
$lc = lcfirst $u;
is (length $lc, 1);
- is ($lc, "\351", "E accute -> e accute");
+ is ($lc, "\351", "E acute -> e acute");
$lc = lcfirst $u;
is (length $lc, 1);
- is ($lc, "\351", "E accute -> e accute");
+ is ($lc, "\351", "E acute -> e acute");
$u = UTF8Toggle->new("\351");
$uc = ucfirst $u;
is (length $uc, 1);
- is ($uc, "\311", "e accute -> E accute");
+ is ($uc, "\311", "e acute -> E acute");
$uc = ucfirst $u;
is (length $uc, 1);
- is ($uc, "\311", "e accute -> E accute");
+ is ($uc, "\311", "e acute -> E acute");
$uc = ucfirst $u;
is (length $uc, 1);
- is ($uc, "\311", "e accute -> E accute");
+ is ($uc, "\311", "e acute -> E acute");
}
}
my $u = UTF8Toggle->new("$pad\311\n$trail");
my $l = UTF8Toggle->new("$pad\351\n$trail", 1);
if ($operator eq 'print') {
+ no warnings 'utf8';
print $fh $u;
print $fh $u;
print $fh $u;
}
}
+my $bits = "\311";
+foreach my $pieces ($bits, UTF8Toggle->new($bits)) {
+ like ($bits ^ $pieces, qr/\A\0+\z/, "something xor itself is zeros");
+ like ($bits ^ $pieces, qr/\A\0+\z/, "something xor itself is zeros");
+ like ($bits ^ $pieces, qr/\A\0+\z/, "something xor itself is zeros");
+
+ like ($pieces ^ $bits, qr/\A\0+\z/, "something xor itself is zeros");
+ like ($pieces ^ $bits, qr/\A\0+\z/, "something xor itself is zeros");
+ like ($pieces ^ $bits, qr/\A\0+\z/, "something xor itself is zeros");
+}
+
+foreach my $value ("\243", UTF8Toggle->new("\243")) {
+ is (pack ("A/A", $value), pack ("A/A", "\243"),
+ "pack copes with overloading");
+ is (pack ("A/A", $value), pack ("A/A", "\243"));
+ is (pack ("A/A", $value), pack ("A/A", "\243"));
+}
+
END {
1 while -f $tmpfile and unlink $tmpfile || die "unlink '$tmpfile': $!";
}