X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Funi%2Fclass.t;h=107a20274d24fe1cbb2a7e678a9f46207319b54a;hb=8a38a8369536df0f4eac69e5a26e9b86f9123d1d;hp=fa4cbf58aebdbe34cebcc3cc80736108471a2d32;hpb=cd1c2c6905a80e547b6f46f140e4e8bf42c8dc0d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/uni/class.t b/t/uni/class.t index fa4cbf5..107a202 100644 --- a/t/uni/class.t +++ b/t/uni/class.t @@ -4,7 +4,7 @@ BEGIN { require "test.pl"; } -plan tests => 4670; +plan tests => 10; sub MyUniClass { <updir; - -# the %utf8::... hashes are already in existence -# because utf8_pva.pl was run by utf8_heavy.pl - -*utf8::PropertyAlias = *utf8::PropertyAlias; # thwart a warning - -no warnings 'utf8'; # we do not want warnings about surrogates etc - -# non-General Category and non-Script -while (my ($abbrev, $files) = each %utf8::PVA_abbr_map) { - my $prop_name = $utf8::PropertyAlias{$abbrev}; - next unless $prop_name; - next if $abbrev eq "gc_sc"; - - for (sort keys %$files) { - my $filename = File::Spec->catfile( - $updir => lib => unicore => lib => $abbrev => "$files->{$_}.pl" - ); - - next unless -e $filename; - my ($h1, $h2) = map hex, (split(/\t/, (do $filename), 3))[0,1]; - my $str = join "", map chr, $h1 .. (($h2 || $h1) + 1); - - for my $p ($prop_name, $abbrev) { - for my $c ($files->{$_}, $_) { - is($str =~ /(\p{$p: $c}+)/ && $1, substr($str, 0, -1)); - is($str =~ /(\P{$p= $c}+)/ && $1, substr($str, -1)); - } - } - } -} - -# General Category and Script -for my $p ('gc', 'sc') { - while (my ($abbr) = each %{ $utf8::PropValueAlias{$p} }) { - my $filename = File::Spec->catfile( - $updir => lib => unicore => lib => gc_sc => "$utf8::PVA_abbr_map{gc_sc}{$abbr}.pl" - ); - - next unless -e $filename; - my ($h1, $h2) = map hex, (split(/\t/, (do $filename), 3))[0,1]; - my $str = join "", map chr, $h1 .. (($h2 || $h1) + 1); - - for my $x ($p, { gc => 'General Category', sc => 'Script' }->{$p}) { - for my $y ($abbr, $utf8::PropValueAlias{$p}{$abbr}, $utf8::PVA_abbr_map{gc_sc}{$abbr}) { - is($str =~ /(\p{$x: $y}+)/ && $1, substr($str, 0, -1)); - is($str =~ /(\P{$x= $y}+)/ && $1, substr($str, -1)); - test_regexp ($str, $y); - } - } - } -} - -# test extra properties (ASCII_Hex_Digit, Bidi_Control, etc.) -SKIP: -{ - skip "Can't reliably derive class names from file names", 592 if $^O eq 'VMS'; - - # On case tolerant filesystems, Cf.pl will cause a -e test for cf.pl to - # return true. Try to work around this by reading the filenames explicitly - # to get a case sensitive test. N.B. This will fail if filename case is - # not preserved because you might go looking for a class name of CF or cf - # when you really want Cf. Storing case sensitive data in filenames is - # simply not portable. - - my %files; - - my $dirname = File::Spec->catdir($updir => lib => unicore => lib => 'gc_sc'); - opendir D, $dirname or die $!; - @files{readdir(D)} = (); - closedir D; - - for (keys %utf8::PA_reverse) { - my $leafname = "$utf8::PA_reverse{$_}.pl"; - next unless exists $files{$leafname}; - - my $filename = File::Spec->catfile($dirname, $leafname); - - my ($h1, $h2) = map hex, (split(/\t/, (do $filename), 3))[0,1]; - my $str = join "", map chr, $h1 .. (($h2 || $h1) + 1); - - for my $x ('gc', 'General Category') { - print "# $filename $x $_, $utf8::PA_reverse{$_}\n"; - for my $y ($_, $utf8::PA_reverse{$_}) { - is($str =~ /(\p{$x: $y}+)/ && $1, substr($str, 0, -1)); - is($str =~ /(\P{$x= $y}+)/ && $1, substr($str, -1)); - test_regexp ($str, $y); - } - } - } -} - -# test the blocks (InFoobar) -for (grep $utf8::Canonical{$_} =~ /^In/, keys %utf8::Canonical) { - my $filename = File::Spec->catfile( - $updir => lib => unicore => lib => gc_sc => "$utf8::Canonical{$_}.pl" - ); - - next unless -e $filename; - - print "# In$_ $filename\n"; - - my ($h1, $h2) = map hex, (split(/\t/, (do $filename), 3))[0,1]; - my $str = join "", map chr, $h1 .. (($h2 || $h1) + 1); - - my $blk = $_; - - test_regexp ($str, $blk); - $blk =~ s/^In/Block:/; - test_regexp ($str, $blk); -} +# The other tests that are based on looking at the generated files are now +# in t/re/uniprops.t