/[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 - (hide 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 wakaba 1.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