/[suikacvs]/markup/html/whatpm/t/HTML-tokenizer.t
Suika

Diff of /markup/html/whatpm/t/HTML-tokenizer.t

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by wakaba, Mon Apr 30 09:59:35 2007 UTC revision 1.3 by wakaba, Mon Apr 30 14:12:02 2007 UTC
# Line 1  Line 1 
1  #!/usr/bin/perl  #!/usr/bin/perl
2  use strict;  use strict;
3    
4    my $dir_name;
5  BEGIN {  BEGIN {
6      my $test_dir_name = 't/';
7      $dir_name = 't/tokenizer/';
8    my $skip = "You don't have JSON module";    my $skip = "You don't have JSON module";
9    eval q{    eval q{
10           use JSON 1.00;           use JSON 1.00;
11           $skip = "You don't have make command";           $skip = "You don't have make command";
12           system ('make', 'tokenizer-files') == 0 or die           system ("cd $test_dir_name; make tokenizer-files") == 0 or die
13             unless -f 'tokenizer/test1.test';             unless -f $dir_name.'test1.test';
14           $skip = '';           $skip = '';
15          };          };
16    if ($skip) {    if ($skip) {
# Line 16  BEGIN { Line 19  BEGIN {
19      exit;      exit;
20    }    }
21    $JSON::UnMapping = 1;    $JSON::UnMapping = 1;
22      $JSON::UTF8 = 1;
23  }  }
24    
25  use Test;  use Test;
26    BEGIN { plan tests => 67 }
27    
28  use Data::Dumper;  use Data::Dumper;
29  BEGIN { plan tests => 38 }  $Data::Dumper::Useqq = 1;
30    sub Data::Dumper::qquote {
31      my $s = shift;
32      $s =~ s/([^\x20\x21-\x26\x28-\x5B\x5D-\x7E])/sprintf '\x{%02X}', ord $1/ge;
33      return q<qq'> . $s . q<'>;
34    } # Data::Dumper::qquote
35    
36  use What::HTML;  use What::HTML;
37    
38  for my $file_name (qw[  for my $file_name (qw[
39                        tokenizer/test1.test                        test1.test
40                        tokenizer/test2.test                        test2.test
41                        tokenizer/contentModelFlags.test                        contentModelFlags.test
42                       ]) {                       ]) {
43    open my $file, '<:utf8', $file_name or die "$0: $file_name: $!";    open my $file, '<', $dir_name.$file_name
44        or die "$0: $dir_name$file_name: $!";
45    local $/ = undef;    local $/ = undef;
46    my $js = <$file>;    my $js = <$file>;
47    close $file;    close $file;
# Line 51  for my $file_name (qw[ Line 63  for my $file_name (qw[
63        $j++;        $j++;
64      }      }
65    
66      my @cm = @{$test->{content_model_flags} || ['PCDATA']};      my @cm = @{$test->{contentModelFlags} || ['PCDATA']};
67        my $last_start_tag = $test->{lastStartTag};
68      for my $cm (@cm) {      for my $cm (@cm) {
69        my $p = What::HTML->new;        my $p = What::HTML->new;
70        my $i = 0;        my $i = 0;
# Line 59  for my $file_name (qw[ Line 72  for my $file_name (qw[
72          my $self = shift;          my $self = shift;
73          $self->{next_input_character} = -1 and return if $i >= length $s;          $self->{next_input_character} = -1 and return if $i >= length $s;
74          $self->{next_input_character} = ord substr $s, $i++, 1;          $self->{next_input_character} = ord substr $s, $i++, 1;
75    
76            if ($self->{next_input_character} == 0x000D) { # CR
77              if ($i >= length $s) {
78                #
79              } else {
80                my $next_char = ord substr $s, $i++, 1;
81                if ($next_char == 0x000A) { # LF
82                  #
83                } else {
84                  push @{$self->{char}}, $next_char;
85                }
86              }
87              $self->{next_input_character} = 0x000A; # LF # MUST
88            } elsif ($self->{next_input_character} > 0x10FFFF) {
89              $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST
90            } elsif ($self->{next_input_character} == 0x0000) { # NULL
91              $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST
92            }
93        };        };
94                
95        my @token;        my @token;
# Line 68  for my $file_name (qw[ Line 99  for my $file_name (qw[
99                
100        $p->_initialize_tokenizer;        $p->_initialize_tokenizer;
101        $p->{content_model_flag} = $cm;        $p->{content_model_flag} = $cm;
102          $p->{last_emitted_start_tag_name} = $last_start_tag;
103    
104        while (1) {        while (1) {
105          my $token = $p->_get_next_token;          my $token = $p->_get_next_token;
# Line 99  for my $file_name (qw[ Line 131  for my $file_name (qw[
131                
132        my $expected_dump = Dumper ($test->{output});        my $expected_dump = Dumper ($test->{output});
133        my $parser_dump = Dumper (\@token);        my $parser_dump = Dumper (\@token);
134        ok $parser_dump, $expected_dump, $test->{description};        ok $parser_dump, $expected_dump,
135            $test->{description} . ': ' . $test->{input};
136      }      }
137    }    }
138  }  }
139    
140    ## $Date$

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.3

[email protected]
ViewVC Help
Powered by ViewVC 1.1.24