/[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.5 by wakaba, Tue May 1 10:47:37 2007 UTC revision 1.12 by wakaba, Sat Jun 30 13:12:33 2007 UTC
# Line 24  BEGIN { Line 24  BEGIN {
24  }  }
25    
26  use Test;  use Test;
27  BEGIN { plan tests => 70 }  BEGIN { plan tests => 179 }
28    
29  use Data::Dumper;  use Data::Dumper;
30  $Data::Dumper::Useqq = 1;  $Data::Dumper::Useqq = 1;
# Line 40  for my $file_name (grep {$_} split /\s+/ Line 40  for my $file_name (grep {$_} split /\s+/
40                        ${dir_name}test1.test                        ${dir_name}test1.test
41                        ${dir_name}test2.test                        ${dir_name}test2.test
42                        ${dir_name}contentModelFlags.test                        ${dir_name}contentModelFlags.test
43                          ${dir_name}escapeFlag.test
44                        ${test_dir_name}tokenizer-test-1.test                        ${test_dir_name}tokenizer-test-1.test
45                       ]) {                       ]) {
46    open my $file, '<', $file_name    open my $file, '<', $file_name
# Line 47  for my $file_name (grep {$_} split /\s+/ Line 48  for my $file_name (grep {$_} split /\s+/
48    local $/ = undef;    local $/ = undef;
49    my $js = <$file>;    my $js = <$file>;
50    close $file;    close $file;
51      
52      print "# $file_name\n";
53    my $tests = jsonToObj ($js)->{tests};    my $tests = jsonToObj ($js)->{tests};
54    TEST: for my $test (@$tests) {    TEST: for my $test (@$tests) {
55      my $s = $test->{input};      my $s = $test->{input};
# Line 70  for my $file_name (grep {$_} split /\s+/ Line 72  for my $file_name (grep {$_} split /\s+/
72      for my $cm (@cm) {      for my $cm (@cm) {
73        my $p = Whatpm::HTML->new;        my $p = Whatpm::HTML->new;
74        my $i = 0;        my $i = 0;
75          my @token;
76        $p->{set_next_input_character} = sub {        $p->{set_next_input_character} = sub {
77          my $self = shift;          my $self = shift;
78    
79            pop @{$self->{prev_input_character}};
80            unshift @{$self->{prev_input_character}}, $self->{next_input_character};
81    
82          $self->{next_input_character} = -1 and return if $i >= length $s;          $self->{next_input_character} = -1 and return if $i >= length $s;
83          $self->{next_input_character} = ord substr $s, $i++, 1;          $self->{next_input_character} = ord substr $s, $i++, 1;
84    
# Line 89  for my $file_name (grep {$_} split /\s+/ Line 96  for my $file_name (grep {$_} split /\s+/
96            $self->{next_input_character} = 0x000A; # LF # MUST            $self->{next_input_character} = 0x000A; # LF # MUST
97          } elsif ($self->{next_input_character} > 0x10FFFF) {          } elsif ($self->{next_input_character} > 0x10FFFF) {
98            $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST            $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST
99              push @token, 'ParseError';
100          } elsif ($self->{next_input_character} == 0x0000) { # NULL          } elsif ($self->{next_input_character} == 0x0000) { # NULL
101            $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST            $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST
102              push @token, 'ParseError';
103          }          }
104        };        };
105          $p->{prev_input_character} = [-1, -1, -1];
106          $p->{next_input_character} = -1;
107                
       my @token;  
108        $p->{parse_error} = sub {        $p->{parse_error} = sub {
109          push @token, 'ParseError';          push @token, 'ParseError';
110        };        };
# Line 116  for my $file_name (grep {$_} split /\s+/ Line 126  for my $file_name (grep {$_} split /\s+/
126            character => 'Character',            character => 'Character',
127           }->{$token->{type}} || $token->{type},           }->{$token->{type}} || $token->{type},
128          ];          ];
         $test_token->[1] = $token->{name} if defined $token->{name};  
129          $test_token->[1] = $token->{tag_name} if defined $token->{tag_name};          $test_token->[1] = $token->{tag_name} if defined $token->{tag_name};
130          $test_token->[1] = $token->{data} if defined $token->{data};          $test_token->[1] = $token->{data} if defined $token->{data};
131          $test_token->[2] = $token->{error} ? 1 : 0 if $token->{type} eq 'DOCTYPE';          if ($token->{type} eq 'start tag') {
132          $test_token->[2] = {map {$_->{name} => $_->{value}} values %{$token->{attributes}}}            $test_token->[2] = {map {$_->{name} => $_->{value}} values %{$token->{attributes}}};
133            if $token->{type} eq 'start tag';          } elsif ($token->{type} eq 'DOCTYPE') {
134                      $test_token->[1] = $token->{name};
135              $test_token->[2] = $token->{public_identifier};
136              $test_token->[3] = $token->{system_identifier};
137              $test_token->[4] = $token->{correct} ? 1 : 0;
138            }
139    
140          if (@token and ref $token[-1] and $token[-1]->[0] eq 'Character' and          if (@token and ref $token[-1] and $token[-1]->[0] eq 'Character' and
141              $test_token->[0] eq 'Character') {              $test_token->[0] eq 'Character') {
142            $token[-1]->[1] .= $test_token->[1];            $token[-1]->[1] .= $test_token->[1];

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.12

[email protected]
ViewVC Help
Powered by ViewVC 1.1.24