/[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.2 - (hide annotations) (download) (as text)
Sun May 13 10:40:07 2007 UTC (18 years, 2 months ago) by wakaba
Branch: MAIN
Changes since 1.1: +1 -23 lines
File MIME type: application/x-troff
++ whatpm/t/ChangeLog	13 May 2007 10:39:43 -0000
	* ContentChecker.pm (manakai_element_type_match): Removed.

2007-05-13  Wakaba  <wakaba@suika.fam.cx>

++ whatpm/Whatpm/ChangeLog	13 May 2007 10:40:03 -0000
	* ContentChecker.pm: Don't use |manakai_element_type_match|.

2007-05-13  Wakaba  <wakaba@suika.fam.cx>

1 wakaba 1.1 #!/usr/bin/perl
2     use strict;
3    
4     use Test;
5     BEGIN { plan tests => 34 }
6    
7     my @FILES = qw[t/content-model-1.dat];
8    
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     } elsif ($node->node_type == 3) {
75     $rs = '"' . $node->data . '"';
76     } elsif ($node->node_type == 9) {
77     $rs = '';
78     } else {
79     $rs = '#' . $node->node_type;
80     }
81     unshift @r, $rs;
82     $node = $node->parent_node;
83     }
84     return join '/', @r;
85     } # get_node_path
86    
87     ## License: Public Domain.
88 wakaba 1.2 ## $Date: 2007/05/13 05:35:22 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24