/[suikacvs]/markup/html/whatpm/t/ContentChecker.t
Suika

Contents of /markup/html/whatpm/t/ContentChecker.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.24 - (hide annotations) (download) (as text)
Sun Nov 25 08:04:21 2007 UTC (17 years, 7 months ago) by wakaba
Branch: MAIN
Changes since 1.23: +3 -2 lines
File MIME type: application/x-troff
++ whatpm/t/ChangeLog	25 Nov 2007 07:57:28 -0000
2007-11-25  Wakaba  <wakaba@suika.fam.cx>

	* content-model-1.dat, content-model-2.dat, content-model-3.dat,
	content-model-4.dat, table-1.dat: Test data are updated
	for the significant content check.

	* content-model-5.dat: New test data.

	* ContentChecker.t: New test data file is added.

++ whatpm/Whatpm/ChangeLog	25 Nov 2007 07:59:33 -0000
	* ContentChecker.pm ($AnyChecker): Old way to add child elements
	for checking had been used.

2007-11-25  Wakaba  <wakaba@suika.fam.cx>

++ whatpm/Whatpm/ContentChecker/ChangeLog	25 Nov 2007 08:00:46 -0000
	* HTML.pm: Support for checking for significant content (HTML5
	revision 1114).  Note that the current implementation has
	an issue on treatment for transparent or semi-transparent
	elements.

	* Atom.pm: Support for significant content checking (for composed
	HTML-Atom documents).

2007-11-25  Wakaba  <wakaba@suika.fam.cx>

1 wakaba 1.1 #!/usr/bin/perl
2     use strict;
3    
4     use Test;
5 wakaba 1.24 BEGIN { plan tests => 1502 }
6 wakaba 1.1
7 wakaba 1.5 my @FILES = qw[
8     t/content-model-1.dat
9     t/content-model-2.dat
10     t/content-model-3.dat
11 wakaba 1.13 t/content-model-4.dat
12 wakaba 1.24 t/content-model-5.dat
13 wakaba 1.15 t/table-1.dat
14 wakaba 1.19 t/content-model-atom-1.dat
15     t/content-model-atom-2.dat
16 wakaba 1.5 ];
17 wakaba 1.1
18     require Whatpm::ContentChecker;
19    
20     ## ISSUE: Currently we require manakai XML parser to test arbitrary XML tree.
21 wakaba 1.23 use lib qw[/home/wakaba/work/manakai2/lib];
22 wakaba 1.12 require Message::DOM::DOMImplementation;
23     require Message::DOM::XMLParserTemp;
24 wakaba 1.4 require Whatpm::HTML;
25     require Whatpm::NanoDOM;
26 wakaba 1.1
27 wakaba 1.20 my $dom = Message::DOM::DOMImplementation->new;
28 wakaba 1.1
29     for my $file_name (@FILES) {
30     open my $file, '<', $file_name or die "$0: $file_name: $!";
31 wakaba 1.19 print "# $file_name\n";
32 wakaba 1.1
33     my $test;
34     my $mode = 'data';
35     while (<$file>) {
36     s/\x0D\x0A/\x0A/;
37     if (/^#data$/) {
38     undef $test;
39     $test->{data} = '';
40     $mode = 'data';
41 wakaba 1.4 $test->{parse_as} = 'xml';
42     } elsif (/^#data html$/) {
43     undef $test;
44     $test->{data} = '';
45     $mode = 'data';
46     $test->{parse_as} = 'html';
47 wakaba 1.1 } elsif (/^#errors$/) {
48     $test->{errors} = [];
49     $mode = 'errors';
50     $test->{data} =~ s/\x0D?\x0A\z//;
51     } elsif (defined $test->{errors} and /^$/) {
52     test ($test);
53     undef $test;
54     } else {
55     if ($mode eq 'data') {
56     $test->{$mode} .= $_;
57     } elsif ($mode eq 'errors') {
58     tr/\x0D\x0A//d;
59     push @{$test->{errors}}, $_;
60     }
61     }
62     }
63     } # @FILES
64    
65     sub test ($) {
66     my $test = shift;
67    
68 wakaba 1.4 my $doc;
69     if ($test->{parse_as} eq 'xml') {
70 wakaba 1.12 open my $fh, '<', \($test->{data});
71     $doc = Message::DOM::XMLParserTemp->parse_byte_stream
72     ($fh => $dom, sub { }, charset => 'utf-8');
73 wakaba 1.23 $doc->input_encoding (undef);
74 wakaba 1.4 ## NOTE: There should be no well-formedness error; if there is,
75     ## then it is an error of the test case itself.
76     } else {
77     $doc = Whatpm::NanoDOM::Document->new;
78     Whatpm::HTML->parse_string ($test->{data} => $doc);
79     }
80 wakaba 1.1
81     my @error;
82 wakaba 1.10 Whatpm::ContentChecker->check_element
83 wakaba 1.1 ($doc->document_element, sub {
84     my %opt = @_;
85 wakaba 1.14 push @error, get_node_path ($opt{node}) . ';' . $opt{type} .
86     (defined $opt{level} ? ';'.$opt{level} : '');
87 wakaba 1.1 });
88    
89     ok join ("\n", sort {$a cmp $b} @error),
90     join ("\n", sort {$a cmp $b} @{$test->{errors}}), $test->{data};
91     } # test
92    
93     sub get_node_path ($) {
94     my $node = shift;
95     my @r;
96     while (defined $node) {
97     my $rs;
98     if ($node->node_type == 1) {
99     $rs = $node->manakai_local_name;
100 wakaba 1.4 $node = $node->parent_node;
101 wakaba 1.3 } elsif ($node->node_type == 2) {
102     $rs = '@' . $node->manakai_local_name;
103 wakaba 1.4 $node = $node->owner_element;
104 wakaba 1.1 } elsif ($node->node_type == 3) {
105     $rs = '"' . $node->data . '"';
106 wakaba 1.4 $node = $node->parent_node;
107 wakaba 1.1 } elsif ($node->node_type == 9) {
108     $rs = '';
109 wakaba 1.4 $node = $node->parent_node;
110 wakaba 1.1 } else {
111     $rs = '#' . $node->node_type;
112 wakaba 1.4 $node = $node->parent_node;
113 wakaba 1.1 }
114     unshift @r, $rs;
115     }
116     return join '/', @r;
117     } # get_node_path
118    
119     ## License: Public Domain.
120 wakaba 1.24 ## $Date: 2007/11/23 05:39:43 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24