/[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 - (show 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 #!/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