/[suikacvs]/messaging/manakai/t/DOM-TreeWalker.t
Suika

Contents of /messaging/manakai/t/DOM-TreeWalker.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download) (as text)
Sat Jul 14 16:32:28 2007 UTC (17 years, 4 months ago) by wakaba
Branch: MAIN
CVS Tags: manakai-release-0-4-0, HEAD
File MIME type: application/x-troff
++ manakai/t/ChangeLog	14 Jul 2007 16:32:13 -0000
2007-07-15  Wakaba  <wakaba@suika.fam.cx>

	* DOM-TreeWalker.t, DOM-SerialWalker.t: New test scripts.

	* DOM-DOMImplementation.t: Tests for |Traversal| feature
	are added.

	* DOM-Node.t: Tests for |Traversal| feature are added.

++ manakai/lib/Message/DOM/ChangeLog	14 Jul 2007 16:31:23 -0000
2007-07-15  Wakaba  <wakaba@suika.fam.cx>

	* TreeWalker.pm, SerialWalker.pm: New Perl modules.

	* Text.pm (whole_text): Parameter index number has
	been changed to support new |NodeFilter| Perl binding
	definition.

2007-07-14  Wakaba  <wakaba@suika.fam.cx>

	* AttributeDefinition.pm, DOMElement.pm, DocumentType.pm,
	ElementTypeDefinition.pm, Entity.pm, EntityReference.pm,
	Notation.pm, ProcessingInstruction.pm (AUTOLOAD): Don't croak even if an attempt is made to modify a read-only attribute.

	* DOMConfiguration.pm (can_set_parameter,
	set_parameter): Don't allow to set the value
	to a string other than <http://www.w3.org/TR/REC-xml> (XML 1.0 DTD).

	* DOMDocument.pm (Message::IF::DocumentTraversal): New interface.
	(create_tree_walker, manakai_create_serial_walker): References
	and prototypes are added.

	* DOMException.pm (NULLPO_ERR): New error type:-).

	* DOMImplementation.pm ($HasFeature): Feature |Traversal|,
	version |2.0|, is added.

1 #!/usr/bin/perl
2 use strict;
3 use Test;
4 BEGIN { plan tests => 423 }
5
6 require Message::DOM::DOMImplementation;
7 use Message::Util::Error;
8
9 my $dom = Message::DOM::DOMImplementation->new;
10 my $doc = $dom->create_document;
11
12 ## |create_tree_walker| and attributes
13 {
14 ok $doc->can ('create_tree_walker') ? 1 : 0, 1, 'Document->create_tw can';
15
16 my $el = $doc->create_element ('e');
17 my $tw = $doc->create_tree_walker ($el);
18
19 ok $tw->isa ('Message::IF::TreeWalker') ? 1 : 0, 1, 'create_tw [1] if';
20 ok $tw->what_to_show, 0, 'create_tw [1] what_to_show';
21 ok $tw->filter, undef, 'create_tw [1] filter';
22 ok $tw->expand_entity_references ? 1 : 0, 0, 'create_tw [1] xent';
23 ok $tw->current_node, $el, 'create_tw [1] current_node';
24 ok $tw->root, $el, 'create_tw [1] root';
25 }
26 {
27 my $el = $doc->create_element ('e');
28 my $filter = sub { };
29 my $tw = $doc->create_tree_walker ($el, 0xFFFFFFFF, $filter, 1);
30
31 ok $tw->isa ('Message::IF::TreeWalker') ? 1 : 0, 1, 'create_tw [2] if';
32 ok $tw->what_to_show, 0xFFFFFFFF, 'create_tw [2] what_to_show';
33 ok $tw->filter, $filter, 'create_tw [2] filter';
34 ok $tw->expand_entity_references ? 1 : 0, 1, 'create_tw [2] xent';
35 ok $tw->current_node, $el, 'create_tw [2] current_node';
36 ok $tw->root, $el, 'create_tw [2] root';
37 }
38 {
39 my $el = $doc->create_element ('e');
40 my $filter = sub { };
41 my $tw = $doc->create_tree_walker ($el, 0xFFFFFFFF, $filter, 0);
42
43 ok $tw->isa ('Message::IF::TreeWalker') ? 1 : 0, 1, 'create_tw [3] if';
44 ok $tw->what_to_show, 0xFFFFFFFF, 'create_tw [3] what_to_show';
45 ok $tw->filter, $filter, 'create_tw [3] filter';
46 ok $tw->expand_entity_references ? 1 : 0, 0, 'create_tw [3] xent';
47 ok $tw->current_node, $el, 'create_tw [3] current_node';
48 ok $tw->root, $el, 'create_tw [3] root';
49 }
50 try {
51 $doc->create_tree_walker;
52 ok 1, 0, 'create_tw [4]';
53 } catch Message::IF::DOMException with {
54 ok $_[0]->type, 'NOT_SUPPORTED_ERR', 'create_tw [4]';
55 };
56
57 my $tw = $doc->create_tree_walker ($doc);
58
59 my %tree1;
60 $tree1{el1} = $doc->create_element ('el1');
61 $tree1{el2} = $doc->create_element ('el2');
62 $tree1{el3} = $doc->create_element ('el3');
63 $tree1{el4} = $doc->create_element ('el4');
64 $tree1{el1}->append_child ($tree1{el2});
65 $tree1{el1}->append_child ($tree1{el3});
66 $tree1{el3}->append_child ($tree1{el4});
67
68 my %tree2;
69 $tree2{el1} = $doc->create_element ('el1');
70 $tree2{el2} = $doc->create_element ('el2');
71 $tree2{el3} = $doc->create_element ('el3');
72 $tree2{el4} = $doc->create_element ('el4');
73 $tree2{el5} = $doc->create_element ('el5');
74 $tree2{el1}->append_child ($tree2{el2});
75 $tree2{el1}->append_child ($tree2{el3});
76 $tree2{el3}->append_child ($tree2{el4});
77 $tree2{el3}->append_child ($tree2{el5});
78
79 my %tree3;
80 $tree3{el1} = $doc->create_element ('el1');
81 $tree3{el2} = $doc->create_element ('el2');
82 $tree3{el3} = $doc->create_element ('el3');
83 $tree3{el4} = $doc->create_element ('el4');
84 $tree3{el5} = $doc->create_element ('el5');
85 $tree3{el1}->append_child ($tree3{el2});
86 $tree3{el1}->append_child ($tree3{el3});
87 $tree3{el3}->append_child ($tree3{el4});
88 $tree3{el1}->append_child ($tree3{el5});
89
90 my %tree4;
91 $tree4{el1} = $doc->create_element ('el1');
92 $tree4{er1} = $doc->create_entity_reference ('er1');
93 $tree4{er1}->manakai_set_read_only (0, 1);
94 $tree4{el3} = $doc->create_element ('el3');
95 $tree4{el4} = $doc->create_element ('el4');
96 $tree4{el5} = $doc->create_element ('el5');
97 $tree4{el6} = $doc->create_element ('el6');
98 $tree4{el1}->append_child ($tree4{er1});
99 $tree4{er1}->append_child ($tree4{el3});
100 $tree4{el3}->append_child ($tree4{el4});
101 $tree4{er1}->append_child ($tree4{el5});
102 $tree4{el1}->append_child ($tree4{el6});
103
104 my %tree5;
105 $tree5{el1} = $doc->create_element ('el1');
106 $tree5{el2} = $doc->create_element ('el2');
107 $tree5{er1} = $doc->create_entity_reference ('er1');
108 $tree5{er1}->manakai_set_read_only (0, 1);
109 $tree5{el3} = $doc->create_element ('el3');
110 $tree5{el4} = $doc->create_element ('el4');
111 $tree5{el5} = $doc->create_element ('el5');
112 $tree5{el1}->append_child ($tree5{el2});
113 $tree5{el1}->append_child ($tree5{er1});
114 $tree5{er1}->append_child ($tree5{el3});
115 $tree5{er1}->append_child ($tree5{el5});
116 $tree5{el3}->append_child ($tree5{el4});
117
118 ## |currentNode|
119 {
120 my $el = $doc->create_element ('e');
121 $tw->current_node ($el);
122 ok $tw->current_node, $el, 'current_node set [1]';
123 }
124 try {
125 $tw->current_node (undef);
126 ok 1, 0, 'current_node set null';
127 } catch Message::IF::DOMException with {
128 ok shift->type, 'NOT_SUPPORTED_ERR', 'current_node set null';
129 };
130
131 ## |firstChild|
132 {
133 my $tw = $doc->create_tree_walker ($tree2{el1}, 0xFFFFFFFF);
134 ok $tw->can ('first_child') ? 1 : 0, 1, 'can first_child';
135
136 ok $tw->first_child, $tree2{el2}, 'fc fc [1]';
137 ok $tw->current_node, $tree2{el2}, 'fc cn [1]';
138
139 ok $tw->first_child, undef, 'fc fc [2]';
140 ok $tw->current_node, $tree2{el2}, 'fc cn [2]';
141
142 $tw->current_node ($tree2{el3});
143 ok $tw->first_child, $tree2{el4}, 'fc fc [3]';
144 ok $tw->current_node, $tree2{el4}, 'fc cn [3]';
145
146 ok $tw->first_child, undef, 'fc fc [4]';
147 ok $tw->current_node, $tree2{el4}, 'fc cn [4]';
148 }
149 {
150 my $tw = $doc->create_tree_walker ($tree1{el1}, 0x00000002); # SHOW_ATTRIBUTE
151
152 ok $tw->first_child, undef, 'fc fc [5]';
153 ok $tw->current_node, $tree1{el1}, 'fc cn [5]';
154
155 $tw->current_node ($tree1{el2});
156 ok $tw->first_child, undef, 'fc fc [6]';
157 ok $tw->current_node, $tree1{el2}, 'fc cn [6]';
158
159 $tw->current_node ($tree1{el3});
160 ok $tw->first_child, undef, 'fc fc [7]';
161 ok $tw->current_node, $tree1{el3}, 'fc cn [7]';
162
163 $tw->current_node ($tree1{el4});
164 ok $tw->first_child, undef, 'fc fc [8]';
165 ok $tw->current_node, $tree1{el4}, 'fc cn [8]';
166 }
167 {
168 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF, undef, 0);
169
170 ok $tw->first_child, $tree4{er1}, 'fc fc [9]';
171 ok $tw->current_node, $tree4{er1}, 'fc cn [9]';
172
173 $tw->current_node ($tree4{er1});
174 ok $tw->first_child, undef, 'fc fc [10]';
175 ok $tw->current_node, $tree4{er1}, 'fc cn [10]';
176
177 $tw->current_node ($tree4{el3});
178 ok $tw->first_child, $tree4{el4}, 'fc fc [11]';
179 ok $tw->current_node, $tree4{el4}, 'fc cn [11]';
180
181 ok $tw->first_child, undef, 'fc fc [12]';
182 ok $tw->current_node, $tree4{el4}, 'fc cn [12]';
183
184 $tw->current_node ($tree4{el5});
185 ok $tw->first_child, undef, 'fc fc [13]';
186 ok $tw->current_node, $tree4{el5}, 'fc cn [13]';
187
188 $tw->current_node ($tree4{el6});
189 ok $tw->first_child, undef, 'fc fc [14]';
190 ok $tw->current_node, $tree4{el6}, 'fc cn [14]';
191 }
192 {
193 ## expandEntityReferences emulated by MANAKAI_FILTER_OPAQUE
194
195 my $tw = $doc->create_tree_walker
196 ($tree4{el1}, 0xFFFFFFFF, sub {
197 $_[0]->node_type == $_[0]->ENTITY_REFERENCE_NODE
198 ? 12101 : 1;
199 }, 1);
200
201 for (
202 ['el1', undef, 'er1', 'er1'],
203 ['er1', 'er1', undef, 'er1'],
204 ['el3', 'el3', 'el4', 'el4'],
205 ['el4', undef, undef, 'el4'],
206 ['el5', 'el5', undef, 'el5'],
207 ['el6', 'el6', undef, 'el6'],
208 ) {
209 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
210 ok $tw->first_child, $_->[2] ? $tree4{$_->[2]} : undef,
211 'first_child [4] ' . $_->[0] . ' first_child';
212 ok $tw->current_node, $tree4{$_->[3]},
213 'first_child [4] ' . $_->[0] . ' current_node';
214 }
215 }
216
217 ## |lastChild|
218 {
219 my $tw = $doc->create_tree_walker ($tree2{el1}, 0xFFFFFFFF);
220 ok $tw->can ('last_child') ? 1 : 0, 1, 'can last_child';
221
222 for (
223 ['el1', undef, 'el3', 'el3'],
224 ['el3', undef, 'el5', 'el5'],
225 ['el5', undef, undef, 'el5'],
226 ['el2', 'el2', undef, 'el2'],
227 ['el4', 'el4', undef, 'el4'],
228 ) {
229 $tw->current_node ($tree2{$_->[1]}) if $_->[1];
230 ok $tw->last_child, $_->[2] ? $tree2{$_->[2]} : undef,
231 'last_child [1] ' . $_->[0] . ' last_child';
232 ok $tw->current_node, $tree2{$_->[3]},
233 'last_child [1] ' . $_->[0] . ' current_node';
234 }
235 }
236 {
237 my $tw = $doc->create_tree_walker ($tree1{el1}, 0x00000002); # SHOW_ATTRIBUTE
238
239 for (
240 ['el1', undef, undef],
241 ['el2', 'el2', undef],
242 ['el3', 'el3', undef],
243 ['el4', 'el4', undef],
244 ) {
245 $tw->current_node ($tree1{$_->[1]}) if $_->[1];
246 ok $tw->last_child, $_->[2] ? $tree1{$_->[2]} : undef,
247 'last_child [2] ' . $_->[0] . ' last_child';
248 ok $tw->current_node, $tree1{$_->[2] || $_->[1] || $_->[0]},
249 'last_child [2] ' . $_->[0] . ' current_node';
250 }
251 }
252 {
253 my $tw = $doc->create_tree_walker ($tree5{el1}, 0xFFFFFFFF, undef, 0);
254
255 for (
256 ['el1', undef, 'er1'],
257 ['er1', undef, undef],
258 ['el2', 'el2', undef],
259 ['el3', 'el3', 'el4'],
260 ['el4', undef, undef],
261 ['el5', 'el5', undef],
262 ) {
263 $tw->current_node ($tree5{$_->[1]}) if $_->[1];
264 ok $tw->last_child, $_->[2] ? $tree5{$_->[2]} : undef,
265 'last_child [3] ' . $_->[0] . ' last_child';
266 ok $tw->current_node, $tree5{$_->[2] || $_->[1] || $_->[0]},
267 'last_child [3] ' . $_->[0] . ' current_node';
268 }
269 }
270 {
271 my $tw = $doc->create_tree_walker ($tree5{el1}, 0xFFFFFFFF, sub {
272 $_[0]->node_type == $_[0]->ENTITY_REFERENCE_NODE
273 ? 12101 : 1;
274 }, 1);
275
276 for (
277 ['el1', undef, 'er1'],
278 ['er1', undef, undef],
279 ['el3', 'el3', 'el4'],
280 ['el4', undef, undef],
281 ['el5', 'el5', undef],
282 ['el2', 'el2', undef],
283 ) {
284 $tw->current_node ($tree5{$_->[1]}) if $_->[1];
285 ok $tw->last_child, $_->[2] ? $tree5{$_->[2]} : undef,
286 'last_child [4] ' . $_->[0] . ' last_child';
287 ok $tw->current_node, $tree5{$_->[2] || $_->[1] || $_->[0]},
288 'last_child [4] ' . $_->[0] . ' current_node';
289 }
290 }
291
292 ## |parentNode|
293 {
294 my $tw = $doc->create_tree_walker ($tree1{el1}, 0xFFFFFFFF);
295 ok $tw->can ('parent_node') ? 1 : 0, 1, 'can parent_node';
296
297 for (
298 ['el1', undef, undef],
299 ['el4', 'el4', 'el3'],
300 ['el3', undef, 'el1'],
301 ['el2', 'el2', 'el1'],
302 ) {
303 $tw->current_node ($tree1{$_->[1]}) if $_->[1];
304 ok $tw->parent_node, $_->[2] ? $tree1{$_->[2]} : undef,
305 'parent_node [1] ' . $_->[0] . ' parent_node';
306 ok $tw->current_node, $tree1{$_->[2] || $_->[1] || $_->[0]},
307 'parent_node [1] ' . $_->[0] . ' current_node';
308 }
309 }
310 {
311 my $tw = $doc->create_tree_walker ($tree1{el1}, 0xFFFFFFFF, sub {
312 $_[0]->local_name eq 'el3' ? 1 : 2 # ACCEPT : REJECT
313 });
314
315 for (
316 ['el1', undef, undef],
317 ['el2', 'el2', undef],
318 ['el3', 'el3', undef],
319 ['el4', 'el4', 'el3'],
320 ) {
321 $tw->current_node ($tree1{$_->[1]}) if $_->[1];
322 ok $tw->parent_node, $_->[2] ? $tree1{$_->[2]} : undef,
323 'parent_node [2] ' . $_->[0] . ' parent_node';
324 ok $tw->current_node, $tree1{$_->[2] || $_->[1] || $_->[0]},
325 'parent_node [2] ' . $_->[0] . ' current_node';
326 }
327 }
328 {
329 my $tw = $doc->create_tree_walker ($tree1{el1}, 0xFFFFFFFF, sub {
330 $_[0]->local_name eq 'el3' ? 3 : 1 # SKIP : ACCEPT
331 });
332
333 for (
334 ['el1', undef, undef],
335 ['el2', 'el2', 'el1'],
336 ['el3', 'el3', 'el1'],
337 ['el4', 'el4', 'el1'],
338 ) {
339 $tw->current_node ($tree1{$_->[1]}) if $_->[1];
340 ok $tw->parent_node, $_->[2] ? $tree1{$_->[2]} : undef,
341 'parent_node [3] ' . $_->[0] . ' parent_node';
342 ok $tw->current_node, $tree1{$_->[2] || $_->[1] || $_->[0]},
343 'parent_node [3] ' . $_->[0] . ' current_node';
344 }
345 }
346 {
347 ## NOTE: FILTER_REJECT works as if FILTER_SKIP if the currentNode
348 ## is in the rejected subtree.
349
350 my $tw = $doc->create_tree_walker ($tree1{el1}, 0xFFFFFFFF, sub {
351 $_[0]->local_name eq 'el3' ? 2 : 1 # REJECT : ACCEPT
352 });
353
354 for (
355 ['el1', undef, undef],
356 ['el2', 'el2', 'el1'],
357 ['el3', 'el3', 'el1'],
358 ['el4', 'el4', 'el1'],
359 ) {
360 $tw->current_node ($tree1{$_->[1]}) if $_->[1];
361 ok $tw->parent_node, $_->[2] ? $tree1{$_->[2]} : undef,
362 'parent_node [4] ' . $_->[0] . ' parent_node';
363 ok $tw->current_node, $tree1{$_->[2] || $_->[1] || $_->[0]},
364 'parent_node [4] ' . $_->[0] . ' current_node';
365 }
366 }
367 {
368 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF, undef, 0);
369
370 for (
371 ['el1', undef, undef],
372 ['er1', 'er1', 'el1'],
373 ['el3', 'el3', 'er1'],
374 ['el4', 'el4', 'er1'],
375 ['el5', 'el5', 'er1'],
376 ['el6', 'el6', 'el1'],
377 ) {
378 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
379 ok $tw->parent_node, $_->[2] ? $tree4{$_->[2]} : undef,
380 'parent_node [5] ' . $_->[0] . ' parent_node';
381 ok $tw->current_node, $tree4{$_->[2] || $_->[1] || $_->[0]},
382 'parent_node [5] ' . $_->[0] . ' current_node';
383 }
384 }
385 {
386 my $tw = $doc->create_tree_walker
387 ($tree5{el1}, 0xFFFFFFFF, sub {
388 $_[0]->node_type == $_[0]->ENTITY_REFERENCE_NODE
389 ? 12101 : 1;
390 }, 1);
391
392 for (
393 ['el1', undef, undef],
394 ['er1', 'er1', 'el1'],
395 ['el3', 'el3', 'er1'],
396 ['el4', 'el4', 'el3'],
397 ['el5', 'el5', 'er1'],
398 ['el2', 'el2', 'el1'],
399 ) {
400 $tw->current_node ($tree5{$_->[1]}) if $_->[1];
401 ok $tw->parent_node, $_->[2] ? $tree5{$_->[2]} : undef,
402 'parent_node [6] ' . $_->[0] . ' parent_node';
403 ok $tw->current_node, $tree5{$_->[2] || $_->[1] || $_->[0]},
404 'parent_node [6] ' . $_->[0] . ' current_node';
405 }
406 }
407
408 ## |nextNode|
409 {
410 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF);
411 ok $tw->can ('next_node') ? 1 : 0, 1, 'can next_node';
412
413 for (
414 ['el1', undef, 'el2'],
415 ['el2', undef, 'el3'],
416 ['el3', undef, 'el4'],
417 ['el4', undef, 'el5'],
418 ['el5', undef, undef],
419 ) {
420 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
421 ok $tw->next_node, $_->[2] ? $tree3{$_->[2]} : undef,
422 'next_node [1] ' . $_->[0] . ' next_node';
423 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
424 'next_node [1] ' . $_->[0] . ' current_node';
425 }
426 }
427 {
428 my $tw = $doc->create_tree_walker ($tree3{el3}, 0xFFFFFFFF);
429
430 for (
431 ['el1', 'el1', 'el2'],
432 ['el2', undef, 'el3'],
433 ['el3', undef, 'el4'],
434 ['el4', undef, undef],
435 ['el5', 'el5', undef],
436 ) {
437 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
438 ok $tw->next_node, $_->[2] ? $tree3{$_->[2]} : undef,
439 'next_node [2] ' . $_->[0] . ' next_node';
440 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
441 'next_node [2] ' . $_->[0] . ' current_node';
442 }
443 }
444 {
445 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF, sub {
446 $_[0]->local_name eq 'el3' ? 3 : 1 # SKIP : ACCEPT
447 });
448
449 for (
450 ['el1', undef, 'el2'],
451 ['el2', undef, 'el4'],
452 ['el3', 'el3', 'el4'],
453 ['el4', undef, 'el5'],
454 ['el5', undef, undef],
455 ) {
456 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
457 ok $tw->next_node, $_->[2] ? $tree3{$_->[2]} : undef,
458 'next_node [3] ' . $_->[0] . ' next_node';
459 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
460 'next_node [3] ' . $_->[0] . ' current_node';
461 }
462 }
463 {
464 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF, sub {
465 $_[0]->local_name eq 'el3' ? 2 : 1 # REJECT : ACCEPT
466 });
467
468 for (
469 ['el1', undef, 'el2'],
470 ['el2', undef, 'el5'],
471 ['el3', 'el3', 'el4'],
472 ['el4', undef, 'el5'],
473 ['el5', undef, undef],
474 ) {
475 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
476 ok $tw->next_node, $_->[2] ? $tree3{$_->[2]} : undef,
477 'next_node [4] ' . $_->[0] . ' next_node';
478 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
479 'next_node [4] ' . $_->[0] . ' current_node';
480 }
481 }
482 {
483 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF);
484
485 for (
486 ['el1', undef, 'er1'],
487 ['er1', undef, 'el6'],
488 ['el3', 'el3', 'el4'],
489 ['el4', undef, 'el6'],
490 ['el5', 'el5', 'el6'],
491 ['el6', undef, undef],
492 ) {
493 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
494 ok $tw->next_node, $_->[2] ? $tree4{$_->[2]} : undef,
495 'next_node [5] ' . $_->[0] . ' next_node';
496 ok $tw->current_node, $tree4{$_->[2] || $_->[1] || $_->[0]},
497 'next_node [5] ' . $_->[0] . ' current_node';
498 }
499 }
500 {
501 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF, sub {
502 $_[0]->node_type == $_[0]->ENTITY_REFERENCE_NODE ? 12101 : 1;
503 }, 1);
504
505 for (
506 ['el1', undef, 'er1'],
507 ['er1', undef, 'el6'],
508 ['el3', 'el3', 'el4'],
509 ['el4', undef, 'el5'],
510 ['el5', undef, 'el6'],
511 ['el6', undef, undef],
512 ) {
513 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
514 ok $tw->next_node, $_->[2] ? $tree4{$_->[2]} : undef,
515 'next_node [6] ' . $_->[0] . ' next_node';
516 ok $tw->current_node, $tree4{$_->[2] || $_->[1] || $_->[0]},
517 'next_node [6] ' . $_->[0] . ' current_node';
518 }
519 }
520
521 ## |nextSibling|
522 {
523 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF);
524 ok $tw->can ('next_sibling') ? 1 : 0, 1, 'can next_sibling';
525
526 for (
527 ['el1', undef, undef],
528 ['el2', 'el2', 'el3'],
529 ['el3', undef, 'el5'],
530 ['el4', 'el4', undef],
531 ['el5', 'el5', undef],
532 ) {
533 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
534 ok $tw->next_sibling, $_->[2] ? $tree3{$_->[2]} : undef,
535 'next_sibling [1] ' . $_->[0] . ' next_sibling';
536 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
537 'next_sibling [1] ' . $_->[0] . ' current_node';
538 }
539 }
540 {
541 my $tw = $doc->create_tree_walker ($tree3{el3}, 0xFFFFFFFF);
542
543 for (
544 ['el1', 'el1', undef],
545 ['el2', 'el2', 'el3'],
546 ['el3', 'el3', undef],
547 ['el4', 'el4', undef],
548 ['el5', 'el5', undef],
549 ) {
550 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
551 ok $tw->next_sibling, $_->[2] ? $tree3{$_->[2]} : undef,
552 'next_sibling [2] ' . $_->[0] . ' next_sibling';
553 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
554 'next_sibling [2] ' . $_->[0] . ' current_node';
555 }
556 }
557 {
558 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF, sub {
559 $_[0]->local_name eq 'el3' ? 3 : 1 # SKIP : ACCEPT
560 });
561
562 for (
563 ['el1', undef, undef],
564 ['el2', 'el2', 'el4'],
565 ['el3', 'el3', 'el5'],
566 ['el4', 'el4', 'el5'],
567 ['el5', 'el5', undef],
568 ) {
569 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
570 ok $tw->next_sibling, $_->[2] ? $tree3{$_->[2]} : undef,
571 'next_sibling [3] ' . $_->[0] . ' next_sibling';
572 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
573 'next_sibling [3] ' . $_->[0] . ' current_node';
574 }
575 }
576 {
577 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF, sub {
578 $_[0]->local_name eq 'el3' ? 2 : 1 # REJECT : ACCEPT
579 });
580
581 for (
582 ['el1', undef, undef],
583 ['el2', 'el2', 'el5'],
584 ['el3', 'el3', 'el5'],
585 ['el4', 'el4', undef],
586 ['el5', 'el5', undef],
587 ) {
588 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
589 ok $tw->next_sibling, $_->[2] ? $tree3{$_->[2]} : undef,
590 'next_sibling [4] ' . $_->[0] . ' next_sibling';
591 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
592 'next_sibling [4] ' . $_->[0] . ' current_node';
593 }
594 }
595 {
596 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF, undef, 0);
597
598 for (
599 ['el1', undef, undef],
600 ['er1', 'er1', 'el6'],
601 ['el3', 'el3', undef],
602 ['el4', 'el4', undef],
603 ['el5', 'el5', undef],
604 ['el6', 'el6', undef],
605 ) {
606 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
607 ok $tw->next_sibling, $_->[2] ? $tree4{$_->[2]} : undef,
608 'next_sibling [5] ' . $_->[0] . ' next_sibling';
609 ok $tw->current_node, $tree4{$_->[2] || $_->[1] || $_->[0]},
610 'next_sibling [5] ' . $_->[0] . ' current_node';
611 }
612 }
613 {
614 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF, sub {
615 $_[0]->node_type == $_[0]->ENTITY_REFERENCE_NODE ? 12101 : 1;
616 }, 1);
617
618 for (
619 ['el1', undef, undef],
620 ['er1', 'er1', 'el6'],
621 ['el3', 'el3', 'el5'],
622 ['el4', 'el4', undef],
623 ['el5', 'el5', undef],
624 ['el6', 'el6', undef],
625 ) {
626 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
627 ok $tw->next_sibling, $_->[2] ? $tree4{$_->[2]} : undef,
628 'next_sibling [6] ' . $_->[0] . ' next_sibling';
629 ok $tw->current_node, $tree4{$_->[2] || $_->[1] || $_->[0]},
630 'next_sibling [6] ' . $_->[0] . ' current_node';
631 }
632 }
633
634 ## |previousNode|
635 {
636 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF);
637 ok $tw->can ('previous_node') ? 1 : 0, 1, 'can previous_node';
638
639 for (
640 ['el1', undef, undef],
641 ['el2', 'el2', 'el1'],
642 ['el3', 'el3', 'el2'],
643 ['el4', 'el4', 'el3'],
644 ['el5', 'el5', 'el4'],
645 ) {
646 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
647 ok $tw->previous_node, $_->[2] ? $tree3{$_->[2]} : undef,
648 'previous_node [1] ' . $_->[0] . ' previous_node';
649 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
650 'previous_node [1] ' . $_->[0] . ' current_node';
651 }
652 }
653 {
654 my $tw = $doc->create_tree_walker ($tree3{el3}, 0xFFFFFFFF);
655
656 for (
657 ['el1', 'el1', undef],
658 ['el2', 'el2', 'el1'],
659 ['el3', 'el3', undef],
660 ['el4', 'el4', 'el3'],
661 ['el5', 'el5', 'el4'],
662 ) {
663 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
664 ok $tw->previous_node, $_->[2] ? $tree3{$_->[2]} : undef,
665 'previous_node [2] ' . $_->[0] . ' next_node';
666 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
667 'previous_node [2] ' . $_->[0] . ' current_node';
668 }
669 }
670 {
671 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF, sub {
672 $_[0]->local_name eq 'el3' ? 3 : 1 # SKIP : ACCEPT
673 });
674
675 for (
676 ['el1', undef, undef],
677 ['el2', 'el2', 'el1'],
678 ['el3', 'el3', 'el2'],
679 ['el4', 'el4', 'el2'],
680 ['el5', 'el5', 'el4'],
681 ) {
682 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
683 ok $tw->previous_node, $_->[2] ? $tree3{$_->[2]} : undef,
684 'previous_node [3] ' . $_->[0] . ' next_node';
685 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
686 'previous_node [3] ' . $_->[0] . ' current_node';
687 }
688 }
689 {
690 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF, sub {
691 $_[0]->local_name eq 'el3' ? 2 : 1 # REJECT : ACCEPT
692 });
693
694 for (
695 ['el1', undef, undef],
696 ['el2', 'el2', 'el1'],
697 ['el3', 'el3', 'el2'],
698 ['el4', 'el4', 'el2'],
699 ['el5', 'el5', 'el2'],
700 ) {
701 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
702 ok $tw->previous_node, $_->[2] ? $tree3{$_->[2]} : undef,
703 'previous_node [4] ' . $_->[0] . ' next_node';
704 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
705 'previous_node [4] ' . $_->[0] . ' current_node';
706 }
707 }
708 {
709 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF, undef, 0);
710
711 for (
712 ['el1', undef, undef],
713 ['er1', 'er1', 'el1'],
714 ['el3', 'el3', 'er1'],
715 ['el4', 'el4', 'er1'],
716 ['el5', 'el5', 'er1'],
717 ['el6', 'el6', 'er1'],
718 ) {
719 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
720 ok $tw->previous_node, $_->[2] ? $tree4{$_->[2]} : undef,
721 'previous_node [5] ' . $_->[0] . ' next_node';
722 ok $tw->current_node, $tree4{$_->[2] || $_->[1] || $_->[0]},
723 'previous_node [5] ' . $_->[0] . ' current_node';
724 }
725 }
726 {
727 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF, sub {
728 $_[0]->node_type == $_[0]->ENTITY_REFERENCE_NODE ? 12101 : 1;
729 }, 1);
730
731 for (
732 ['el1', undef, undef],
733 ['er1', 'er1', 'el1'],
734 ['el3', 'el3', 'er1'],
735 ['el4', 'el4', 'el3'],
736 ['el5', 'el5', 'el4'],
737 ['el6', 'el6', 'er1'],
738 ) {
739 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
740 ok $tw->previous_node, $_->[2] ? $tree4{$_->[2]} : undef,
741 'previous_node [6] ' . $_->[0] . ' previous_node';
742 ok $tw->current_node, $tree4{$_->[2] || $_->[1] || $_->[0]},
743 'previous_node [6] ' . $_->[0] . ' current_node';
744 }
745 }
746
747 ## |previousSibling|
748 {
749 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF);
750 ok $tw->can ('previous_sibling') ? 1 : 0, 1, 'can previous_sibling';
751
752 for (
753 ['el1', undef, undef],
754 ['el2', 'el2', undef],
755 ['el3', 'el3', 'el2'],
756 ['el4', 'el4', undef],
757 ['el5', 'el5', 'el3'],
758 ) {
759 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
760 ok $tw->previous_sibling, $_->[2] ? $tree3{$_->[2]} : undef,
761 'previous_sibling [1] ' . $_->[0] . ' previous_sibling';
762 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
763 'previous_sibling [1] ' . $_->[0] . ' current_node';
764 }
765 }
766 {
767 my $tw = $doc->create_tree_walker ($tree3{el3}, 0xFFFFFFFF);
768
769 for (
770 ['el1', 'el1', undef],
771 ['el2', 'el2', undef],
772 ['el3', 'el3', undef],
773 ['el4', 'el4', undef],
774 ['el5', 'el5', 'el3'],
775 ) {
776 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
777 ok $tw->previous_sibling, $_->[2] ? $tree3{$_->[2]} : undef,
778 'previous_sibling [2] ' . $_->[0] . ' previous_sibling';
779 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
780 'previous_sibling [2] ' . $_->[0] . ' current_node';
781 }
782 }
783 {
784 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF, sub {
785 $_[0]->local_name eq 'el3' ? 3 : 1 # SKIP : ACCEPT
786 });
787
788 for (
789 ['el1', undef, undef],
790 ['el2', 'el2', undef],
791 ['el3', 'el3', 'el2'],
792 ['el4', 'el4', 'el2'],
793 ['el5', 'el5', 'el4'],
794 ) {
795 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
796 ok $tw->previous_sibling, $_->[2] ? $tree3{$_->[2]} : undef,
797 'previous_sibling [3] ' . $_->[0] . ' previous_sibling';
798 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
799 'previous_sibling [3] ' . $_->[0] . ' current_node';
800 }
801 }
802 {
803 my $tw = $doc->create_tree_walker ($tree3{el1}, 0xFFFFFFFF, sub {
804 $_[0]->local_name eq 'el3' ? 2 : 1 # REJECT : ACCEPT
805 });
806
807 for (
808 ['el1', undef, undef],
809 ['el2', 'el2', undef],
810 ['el3', 'el3', 'el2'],
811 ['el4', 'el4', 'el2'],
812 ['el5', 'el5', 'el2'],
813 ) {
814 $tw->current_node ($tree3{$_->[1]}) if $_->[1];
815 ok $tw->previous_sibling, $_->[2] ? $tree3{$_->[2]} : undef,
816 'previous_sibling [4] ' . $_->[0] . ' previous_sibling';
817 ok $tw->current_node, $tree3{$_->[2] || $_->[1] || $_->[0]},
818 'previous_sibling [4] ' . $_->[0] . ' current_node';
819 }
820 }
821 {
822 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF, undef, 0);
823
824 for (
825 ['el1', undef, undef],
826 ['er1', 'er1', undef],
827 ['el3', 'el3', undef],
828 ['el4', 'el4', undef],
829 ['el5', 'el5', undef],
830 ['el6', 'el6', 'er1'],
831 ) {
832 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
833 ok $tw->previous_sibling, $_->[2] ? $tree4{$_->[2]} : undef,
834 'previous_sibling [5] ' . $_->[0] . ' previous_sibling';
835 ok $tw->current_node, $tree4{$_->[2] || $_->[1] || $_->[0]},
836 'previous_sibling [5] ' . $_->[0] . ' current_node';
837 }
838 }
839 {
840 my $tw = $doc->create_tree_walker ($tree4{el1}, 0xFFFFFFFF, sub {
841 $_[0]->node_type == $_[0]->ENTITY_REFERENCE_NODE ? 12101 : 1;
842 }, 1);
843
844 for (
845 ['el1', undef, undef],
846 ['er1', 'er1', undef],
847 ['el3', 'el3', undef],
848 ['el4', 'el4', undef],
849 ['el5', 'el5', 'el3'],
850 ['el6', 'el6', 'er1'],
851 ) {
852 $tw->current_node ($tree4{$_->[1]}) if $_->[1];
853 ok $tw->previous_sibling, $_->[2] ? $tree4{$_->[2]} : undef,
854 'previous_sibling [6] ' . $_->[0] . ' previous_sibling';
855 ok $tw->current_node, $tree4{$_->[2] || $_->[1] || $_->[0]},
856 'previous_sibling [6] ' . $_->[0] . ' current_node';
857 }
858 }
859
860 =head1 LICENSE
861
862 Copyright 2007 Wakaba <w@suika.fam.cx>
863
864 This program is free software; you can redistribute it and/or
865 modify it under the same terms as Perl itself.
866
867 =cut
868
869 ## $Date: 2007/07/14 09:19:11 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24