/[suikacvs]/messaging/manakai/t/markup-xml-nodetree.t
Suika

Contents of /messaging/manakai/t/markup-xml-nodetree.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download) (as text)
Fri Dec 5 08:24:34 2003 UTC (20 years, 11 months ago) by wakaba
Branch: MAIN
CVS Tags: before-dis2-200411, manakai-release-0-3-2, manakai-release-0-3-1, manakai-release-0-4-0, manakai-200612, HEAD
Branch point for: experimental-xml-parser-200401
File MIME type: application/x-troff
New test for construct_xml_node

1 wakaba 1.1 #!/usr/bin/perl -w
2     use strict;
3     require Test::Simple;
4     use Message::Markup::XML::NodeTree qw/construct_xml_tree/;
5     use Message::Markup::XML::Node qw(SGML_GENERAL_ENTITY SGML_PARAM_ENTITY
6     SGML_DOCTYPE
7     SGML_NCR SGML_HEX_CHAR_REF);
8     use Message::Markup::XML::QName qw/:prefix :special-uri/;
9     my $NODEMOD = 'Message::Markup::XML';
10     sub OK ($$;$) {
11     my ($result, $expect, $testname) = @_;
12     my @expect = ref $expect ?@ $expect : ($expect);
13     for (@expect) {
14     if ($_ eq $result) {
15     ok (1);
16     return;
17     }
18     }
19     my $e = sub {
20     my $s = shift;
21     $s =~ s/\t/\\t/g;
22     $s;
23     };
24     ok (0, sprintf '%s: "%s" ("%s" expected)', ($testname || 'Node'),
25     $e->($result), join '" or "', map {$e->($_)} @expect);
26     }
27    
28     my $tests = 0;
29    
30     my @s = (
31     {
32     main => sub {
33     my $n = $NODEMOD->new
34     (type => '#element', local_name => 'foo');
35     $n->append_text ('text');
36     my $ref = $n->append_new_node
37     (type => '#reference', namespace_uri => SGML_GENERAL_ENTITY,
38     local_name => 'ent');
39     $ref->append_text ('other_text');
40     OK $n->outer_xml,
41     q<<foo xmlns="">text&ent;</foo>>,
42     'First, serialization of reference-containing-tree work as expected?';
43     },
44     },
45     {
46     main => sub {
47     my $n = $NODEMOD->new
48     (type => '#element', local_name => 'foo');
49     $n->append_text ('text');
50     my $ref = $n->append_new_node
51     (type => '#reference', namespace_uri => SGML_GENERAL_ENTITY,
52     local_name => 'ent');
53     $ref->append_text ('other_text');
54     $ref->flag (smxp__ref_expanded => 1);
55     $n->remove_references;
56     OK $n->outer_xml,
57     q<<foo xmlns="">textother_text</foo>>,
58     'Simple removing of #reference';
59     },
60     },
61     {
62     main => sub {
63     my $n = $NODEMOD->new
64     (type => '#element', local_name => 'foo');
65     $n->append_text ('text');
66     my $ref = $n->append_new_node
67     (type => '#reference', namespace_uri => SGML_GENERAL_ENTITY,
68     local_name => 'ent');
69     $ref->append_text ('other_text');
70     $ref->flag (smxp__ref_expanded => 0);
71     $n->remove_references;
72     OK $n->outer_xml,
73     q<<foo xmlns="">text&ent;</foo>>,
74     q(Don't remove unexpanded #reference);
75     },
76     },
77     {
78     main => sub {
79     my $e = new $NODEMOD (type => '#fragment');
80     my $ent = $e->append_new_node (type => '#reference',
81     namespace_uri => SGML_PARAM_ENTITY,
82     local_name => 'ent');
83     $ent->append_new_node (type => '#comment');
84     $ent->flag (smxp__ref_expanded => 1);
85     $e->remove_references;
86     OK $e->outer_xml,
87     q<<!---->>,
88     'Derefering parameter entity reference in declaration subset';
89     },
90     },
91     {
92     main => sub {
93     my $e = new $NODEMOD (type => '#declaration',
94     namespace_uri => SGML_PARAM_ENTITY);
95     $e->flag (smxp__defined_with_param_ref => 1);
96     my $ent = $e->append_new_node (type => '#reference',
97     namespace_uri => SGML_PARAM_ENTITY,
98     local_name => 'ent');
99     $ent->append_new_node (type => '#xml',
100     value => '% name SYSTEM "somewhere"');
101     $ent->flag (smxp__ref_expanded => 1);
102     $e->remove_references;
103     OK $e->outer_xml,
104     q<<!ENTITY % name SYSTEM "somewhere">>,
105     'Derefering parameter entity reference in ps';
106     },
107     },
108     {
109     main => sub {
110     my $e = new $NODEMOD (type => '#declaration',
111     namespace_uri => SGML_PARAM_ENTITY);
112     $e->flag (smxp__defined_with_param_ref => 1);
113     my $ent = $e->append_new_node (type => '#reference',
114     namespace_uri => SGML_PARAM_ENTITY,
115     local_name => 'ent');
116     $ent->append_new_node (type => '#xml',
117     value => '% name SYSTEM "somewhere"');
118     $ent->flag (smxp__ref_expanded => 1);
119     $ent->flag (smxp__non_processed_declaration => 1);
120     $e->remove_references;
121     OK $e->outer_xml,
122     [q<<!ENTITY %ent;>>,
123     q<<!ENTITY % name SYSTEM "somewhere">>],
124     'Derefering parameter entity reference in ps : ENTITY declaration is not processed';
125     },
126     },
127     {
128     main => sub {
129     my $e = new $NODEMOD (type => '#fragment');
130     $e->append_text ('text1');
131     $e->append_new_node (type => '#reference',
132     namespace_uri => SGML_NCR,
133     value => 0x00004E00);
134     $e->append_text ('text2');
135     $e->remove_references;
136     OK $e->outer_xml,
137     qq<text1\x{4E00}text2>,
138     'Derefering NCR';
139     },
140     },
141     {
142     main => sub {
143     my $e = new $NODEMOD (type => '#fragment');
144     $e->append_text ('text1');
145     $e->append_new_node (type => '#reference',
146     namespace_uri => SGML_HEX_CHAR_REF,
147     value => 0x00004E00);
148     $e->append_text ('text2');
149     $e->remove_references;
150     OK $e->outer_xml,
151     qq<text1\x{4E00}text2>,
152     'Derefering HCR';
153     },
154     },
155     );
156     $tests += @s + 1;
157    
158     Test::Simple->import (tests => $tests);
159    
160     for (@s) {
161     $_->{main}->() if ref $_;
162     }
163    
164     sub NS_XHTML1 { q<http://www.w3.org/1999/xhtml> }
165     sub NS_XHTML2 { q<http://www.w3.org/2002/06/xhtml2> }
166     my $tree = construct_xml_tree
167     type => '#element',
168     local_name => 'html',
169     namespace_uri => NS_XHTML1,
170     -child =>
171     [
172     {
173     type => '#element',
174     local_name => 'head',
175     namespace_uri => NS_XHTML1,
176     -child =>
177     [
178     {
179     type => '#element',
180     local_name => 'title',
181     namespace_uri => NS_XHTML1,
182     -child =>
183     [
184     {
185     type => '#text',
186     value => 'An Example Document',
187     },
188     ],
189     },
190     ],
191     },
192     {
193     type => '#element',
194     local_name => 'body',
195     namespace_uri => NS_XHTML1,
196     -attr =>
197     {
198     class => 'example',
199     },
200     -child =>
201     [
202     {
203     type => '#comment',
204     value => '===== main =====',
205     },
206     {
207     type => '#element',
208     local_name => 'p',
209     namespace_uri => q<http://www.w3.org/2002/06/xhtml2>,
210     -attr =>
211     {
212     class => 'introduction',
213     },
214     -child =>
215     [
216     {
217     type => '#text',
218     value => 'foo',
219     },
220     ],
221     -ns =>
222     {
223     h2 => q<http://www.w3.org/2002/06/xhtml2>,
224     },
225     },
226     ],
227     },
228     ],
229     -ns =>
230     {
231     (DEFAULT_PFX) => q<http://www.w3.org/1999/xhtml>,
232     };
233    
234     OK $tree->stringify, q<<html xmlns="http://www.w3.org/1999/xhtml"><head><title>An Example Document</title></head><body class="example"><!--===== main =====--><h2:p class="introduction" xmlns:h2="http://www.w3.org/2002/06/xhtml2">foo</h2:p></body></html>>;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24