/[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.3 - (hide annotations) (download) (as text)
Sat May 19 03:49:58 2007 UTC (18 years, 2 months ago) by wakaba
Branch: MAIN
Changes since 1.2: +4 -2 lines
File MIME type: application/x-troff
++ whatpm/t/ChangeLog	19 May 2007 03:49:54 -0000
2007-05-19  Wakaba  <wakaba@suika.fam.cx>

	* content-model-2.dat: New test.

	* ContentChecker.t (@FILES): |content-model-2.dat| is added.
	(get_node_path): |ATTRIBUTE_NODE| support.

	* content-model-1.dat: New tests for unknown
	element in HTML namespace.

	* ContentChecker.t (manakai_element_type_match): Removed.
++ whatpm/Whatpm/ChangeLog	19 May 2007 03:48:44 -0000
2007-05-19  Wakaba  <wakaba@suika.fam.cx>

	* ContentChecker.pm ($AttrChecker, $HTMLAttrChecker,
	$AnyChecker->{attr_checker}, $HTMLAttrsChecker,
	$Element->{$HTML_NS}->{''}): New.
	(check_element): Invoke attrs_checker for each element.

1 wakaba 1.1 #!/usr/bin/perl
2     use strict;
3    
4     use Test;
5     BEGIN { plan tests => 34 }
6    
7 wakaba 1.3 my @FILES = qw[t/content-model-1.dat t/content-model-2.dat];
8 wakaba 1.1
9     require Whatpm::ContentChecker;
10    
11     ## ISSUE: Currently we require manakai XML parser to test arbitrary XML tree.
12     use lib qw[/home/wakaba/work/manakai/lib];
13     require Message::DOM::DOMCore;
14     require Message::DOM::XMLParser;
15    
16     my $dom = $Message::DOM::DOMImplementationRegistry->get_dom_implementation;
17     my $parser = $dom->create_ls_parser (1);
18    
19     for my $file_name (@FILES) {
20     open my $file, '<', $file_name or die "$0: $file_name: $!";
21    
22     my $test;
23     my $mode = 'data';
24     while (<$file>) {
25     s/\x0D\x0A/\x0A/;
26     if (/^#data$/) {
27     undef $test;
28     $test->{data} = '';
29     $mode = 'data';
30     } elsif (/^#errors$/) {
31     $test->{errors} = [];
32     $mode = 'errors';
33     $test->{data} =~ s/\x0D?\x0A\z//;
34     } elsif (defined $test->{errors} and /^$/) {
35     test ($test);
36     undef $test;
37     } else {
38     if ($mode eq 'data') {
39     $test->{$mode} .= $_;
40     } elsif ($mode eq 'errors') {
41     tr/\x0D\x0A//d;
42     push @{$test->{errors}}, $_;
43     }
44     }
45     }
46     } # @FILES
47    
48     sub test ($) {
49     my $test = shift;
50    
51     my $doc = $parser->parse ({string_data => $test->{data}});
52     ## NOTE: There should be no well-formedness error; if there is,
53     ## then it is an error of the test case itself.
54    
55     my @error;
56     my $cc = Whatpm::ContentChecker->new;
57     $cc->check_element
58     ($doc->document_element, sub {
59     my %opt = @_;
60     push @error, get_node_path ($opt{node}) . ';' . $opt{type};
61     });
62    
63     ok join ("\n", sort {$a cmp $b} @error),
64     join ("\n", sort {$a cmp $b} @{$test->{errors}}), $test->{data};
65     } # test
66    
67     sub get_node_path ($) {
68     my $node = shift;
69     my @r;
70     while (defined $node) {
71     my $rs;
72     if ($node->node_type == 1) {
73     $rs = $node->manakai_local_name;
74 wakaba 1.3 } elsif ($node->node_type == 2) {
75     $rs = '@' . $node->manakai_local_name;
76 wakaba 1.1 } elsif ($node->node_type == 3) {
77     $rs = '"' . $node->data . '"';
78     } elsif ($node->node_type == 9) {
79     $rs = '';
80     } else {
81     $rs = '#' . $node->node_type;
82     }
83     unshift @r, $rs;
84     $node = $node->parent_node;
85     }
86     return join '/', @r;
87     } # get_node_path
88    
89     ## License: Public Domain.
90 wakaba 1.3 ## $Date: 2007/05/13 10:40:07 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24