1 |
#!/usr/bin/perl |
#!/usr/bin/perl |
2 |
use strict; |
use strict; |
3 |
use Test; |
use Test; |
4 |
BEGIN { plan tests => 2808 } |
BEGIN { plan tests => 5310 } |
5 |
|
|
6 |
require Message::DOM::DOMImplementation; |
require Message::DOM::DOMImplementation; |
7 |
use Message::Util::Error; |
use Message::Util::Error; |
42 |
); |
); |
43 |
} # create_parent_nodes |
} # create_parent_nodes |
44 |
|
|
45 |
|
sub create_leaf_nodes () { |
46 |
|
( |
47 |
|
$doc->create_cdata_section ('cdata1'), |
48 |
|
$doc->create_comment ('comment1'), |
49 |
|
$doc->create_notation ('notation1'), |
50 |
|
$doc->create_processing_instruction ('pi1', 'pi1data'), |
51 |
|
$doc->create_text_node ('text1'), |
52 |
|
); |
53 |
|
} # create_leaf_nodes |
54 |
|
|
55 |
## Constants |
## Constants |
56 |
my $constants = [ |
my $constants = [ |
57 |
[ELEMENT_NODE => 1], |
[ELEMENT_NODE => 1], |
75 |
[DOCUMENT_POSITION_CONTAINS => 0x08], |
[DOCUMENT_POSITION_CONTAINS => 0x08], |
76 |
[DOCUMENT_POSITION_CONTAINED_BY => 0x10], |
[DOCUMENT_POSITION_CONTAINED_BY => 0x10], |
77 |
[DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC => 0x20], |
[DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC => 0x20], |
78 |
|
|
79 |
|
[NODE_CLONED => 1], |
80 |
|
[NODE_IMPORTED => 2], |
81 |
|
[NODE_DELETED => 3], |
82 |
|
[NODE_RENAMED => 4], |
83 |
|
[NODE_ADOPTED => 5], |
84 |
]; |
]; |
85 |
|
|
86 |
my $tests = { |
my $tests = { |
110 |
attr_get_bool => { |
attr_get_bool => { |
111 |
has_attributes => 0, |
has_attributes => 0, |
112 |
has_child_nodes => 0, |
has_child_nodes => 0, |
113 |
|
is_id => 0, |
114 |
manakai_read_only => 0, |
manakai_read_only => 0, |
115 |
specified => 1, |
specified => 1, |
116 |
}, |
}, |
143 |
attr_get_bool => { |
attr_get_bool => { |
144 |
has_attributes => 0, |
has_attributes => 0, |
145 |
has_child_nodes => 1, |
has_child_nodes => 1, |
146 |
|
is_id => 0, |
147 |
manakai_read_only => 0, |
manakai_read_only => 0, |
148 |
specified => 1, |
specified => 1, |
149 |
}, |
}, |
171 |
attr_get_bool => { |
attr_get_bool => { |
172 |
has_attributes => 0, |
has_attributes => 0, |
173 |
has_child_nodes => 0, |
has_child_nodes => 0, |
174 |
|
is_id => 0, |
175 |
manakai_read_only => 0, |
manakai_read_only => 0, |
176 |
specified => 1, |
specified => 1, |
177 |
}, |
}, |
199 |
attr_get_bool => { |
attr_get_bool => { |
200 |
has_attributes => 0, |
has_attributes => 0, |
201 |
has_child_nodes => 0, |
has_child_nodes => 0, |
202 |
|
is_id => 0, |
203 |
manakai_read_only => 0, |
manakai_read_only => 0, |
204 |
specified => 1, |
specified => 1, |
205 |
}, |
}, |
227 |
attr_get_bool => { |
attr_get_bool => { |
228 |
has_attributes => 0, |
has_attributes => 0, |
229 |
has_child_nodes => 0, |
has_child_nodes => 0, |
230 |
|
is_id => 0, |
231 |
manakai_read_only => 0, |
manakai_read_only => 0, |
232 |
specified => 1, |
specified => 1, |
233 |
}, |
}, |
431 |
}, |
}, |
432 |
}, |
}, |
433 |
document_type => { |
document_type => { |
434 |
node => sub { return $doc->implementation->create_document_type ('n') }, |
node => sub { |
435 |
|
return $doc->implementation->create_document_type ('n', '', ''); |
436 |
|
}, |
437 |
attr_get => { |
attr_get => { |
438 |
attributes => undef, |
attributes => undef, |
439 |
base_uri => undef, |
base_uri => undef, |
442 |
manakai_expanded_uri => undef, |
manakai_expanded_uri => undef, |
443 |
first_child => undef, |
first_child => undef, |
444 |
implementation => $dom, |
implementation => $dom, |
445 |
|
internal_subset => '', |
446 |
last_child => undef, |
last_child => undef, |
447 |
local_name => undef, |
local_name => undef, |
448 |
manakai_local_name => undef, |
manakai_local_name => undef, |
455 |
parent_node => undef, |
parent_node => undef, |
456 |
prefix => undef, |
prefix => undef, |
457 |
previous_sibling => undef, |
previous_sibling => undef, |
458 |
public_id => undef, |
public_id => '', |
459 |
system_id => undef, |
system_id => '', |
460 |
}, |
}, |
461 |
attr_get_bool => { |
attr_get_bool => { |
462 |
has_attributes => 0, |
has_attributes => 0, |
474 |
manakai_expanded_uri => undef, |
manakai_expanded_uri => undef, |
475 |
first_child => undef, |
first_child => undef, |
476 |
implementation => $dom, |
implementation => $dom, |
477 |
|
internal_subset => '', |
478 |
last_child => undef, |
last_child => undef, |
479 |
local_name => undef, |
local_name => undef, |
480 |
manakai_local_name => undef, |
manakai_local_name => undef, |
487 |
parent_node => undef, |
parent_node => undef, |
488 |
prefix => undef, |
prefix => undef, |
489 |
previous_sibling => undef, |
previous_sibling => undef, |
490 |
public_id => undef, |
public_id => '', |
491 |
system_id => undef, |
system_id => '', |
492 |
}, |
}, |
493 |
attr_get_bool => { |
attr_get_bool => { |
494 |
has_attributes => 0, |
has_attributes => 0, |
499 |
element => { |
element => { |
500 |
node => sub { return $doc->create_element ('e') }, |
node => sub { return $doc->create_element ('e') }, |
501 |
attr_get => { |
attr_get => { |
|
## TODO: attributes => |
|
502 |
base_uri => undef, |
base_uri => undef, |
503 |
manakai_base_uri => undef, |
manakai_base_uri => undef, |
504 |
manakai_expanded_uri => 'e', |
manakai_expanded_uri => 'e', |
515 |
parent_node => undef, |
parent_node => undef, |
516 |
prefix => undef, |
prefix => undef, |
517 |
previous_sibling => undef, |
previous_sibling => undef, |
518 |
|
tag_name => 'e', |
519 |
}, |
}, |
520 |
attr_get_bool => { |
attr_get_bool => { |
521 |
has_attributes => 0, |
has_attributes => 0, |
526 |
element_ns_default => { |
element_ns_default => { |
527 |
node => sub { return $doc->create_element_ns ('http://test/', 'f') }, |
node => sub { return $doc->create_element_ns ('http://test/', 'f') }, |
528 |
attr_get => { |
attr_get => { |
|
## TODO: attributes => |
|
529 |
base_uri => undef, |
base_uri => undef, |
530 |
manakai_base_uri => undef, |
manakai_base_uri => undef, |
531 |
manakai_expanded_uri => 'http://test/f', |
manakai_expanded_uri => 'http://test/f', |
542 |
parent_node => undef, |
parent_node => undef, |
543 |
prefix => undef, |
prefix => undef, |
544 |
previous_sibling => undef, |
previous_sibling => undef, |
545 |
|
tag_name => 'f', |
546 |
}, |
}, |
547 |
attr_get_bool => { |
attr_get_bool => { |
548 |
has_attributes => 0, |
has_attributes => 0, |
553 |
element_ns_prefiexed => { |
element_ns_prefiexed => { |
554 |
node => sub { return $doc->create_element_ns ('http://test/', 'e:f') }, |
node => sub { return $doc->create_element_ns ('http://test/', 'e:f') }, |
555 |
attr_get => { |
attr_get => { |
|
## TODO: attributes => |
|
556 |
base_uri => undef, |
base_uri => undef, |
557 |
manakai_base_uri => undef, |
manakai_base_uri => undef, |
558 |
manakai_expanded_uri => 'http://test/f', |
manakai_expanded_uri => 'http://test/f', |
569 |
parent_node => undef, |
parent_node => undef, |
570 |
prefix => 'e', |
prefix => 'e', |
571 |
previous_sibling => undef, |
previous_sibling => undef, |
572 |
|
tag_name => 'e:f', |
573 |
}, |
}, |
574 |
attr_get_bool => { |
attr_get_bool => { |
575 |
has_attributes => 0, |
has_attributes => 0, |
594 |
node_value => undef, |
node_value => undef, |
595 |
notation_name => undef, |
notation_name => undef, |
596 |
owner_document => $doc, |
owner_document => $doc, |
597 |
|
owner_document_type_definition => undef, |
598 |
parent_node => undef, |
parent_node => undef, |
599 |
previous_sibling => undef, |
previous_sibling => undef, |
600 |
public_id => undef, |
public_id => undef, |
652 |
node_type => 12, |
node_type => 12, |
653 |
node_value => undef, |
node_value => undef, |
654 |
owner_document => $doc, |
owner_document => $doc, |
655 |
|
owner_document_type_definition => undef, |
656 |
parent_node => undef, |
parent_node => undef, |
657 |
prefix => undef, |
prefix => undef, |
658 |
previous_sibling => undef, |
previous_sibling => undef, |
735 |
node_type => 81001, |
node_type => 81001, |
736 |
node_value => undef, |
node_value => undef, |
737 |
owner_document => $doc, |
owner_document => $doc, |
738 |
|
owner_document_type_definition => undef, |
739 |
parent_node => undef, |
parent_node => undef, |
740 |
prefix => undef, |
prefix => undef, |
741 |
previous_sibling => undef, |
previous_sibling => undef, |
762 |
next_sibling => undef, |
next_sibling => undef, |
763 |
node_name => 'e', |
node_name => 'e', |
764 |
node_type => 81002, |
node_type => 81002, |
765 |
node_value => undef, |
node_value => '', |
766 |
owner_document => $doc, |
owner_document => $doc, |
767 |
|
owner_element_type_definition => undef, |
768 |
parent_node => undef, |
parent_node => undef, |
769 |
prefix => undef, |
prefix => undef, |
770 |
previous_sibling => undef, |
previous_sibling => undef, |
771 |
|
text_content => '', |
772 |
}, |
}, |
773 |
attr_get_bool => { |
attr_get_bool => { |
774 |
has_attributes => 0, |
has_attributes => 0, |
805 |
|
|
806 |
## Child node accessors' tests |
## Child node accessors' tests |
807 |
for my $parent (create_parent_nodes ()) { |
for my $parent (create_parent_nodes ()) { |
808 |
|
my $doc = $parent->owner_document || $parent; |
809 |
my $node1; |
my $node1; |
810 |
my $node2; |
my $node2; |
811 |
my $node3; |
my $node3; |
823 |
$node3 = $doc->create_text_node ('text3'); |
$node3 = $doc->create_text_node ('text3'); |
824 |
} |
} |
825 |
|
|
826 |
|
$parent->manakai_set_read_only (0, 1); |
827 |
$parent->append_child ($node1); |
$parent->append_child ($node1); |
828 |
ok $parent->first_child, $node1, $parent->node_name."->first_child [1]"; |
ok $parent->first_child, $node1, $parent->node_name."->first_child [1]"; |
829 |
ok $parent->last_child, $node1, $parent->node_name."->last_child [1]"; |
ok $parent->last_child, $node1, $parent->node_name."->last_child [1]"; |
1151 |
ok $node->text_content, 'stringSTRING', $node->node_name . ' [2]'; |
ok $node->text_content, 'stringSTRING', $node->node_name . ' [2]'; |
1152 |
ok 0+@{$node->child_nodes}, 1, $node->node_name . ' childNodes @{} 0+ [2]'; |
ok 0+@{$node->child_nodes}, 1, $node->node_name . ' childNodes @{} 0+ [2]'; |
1153 |
|
|
1154 |
my $er = $doc->create_entity_reference ('er'); |
my $er = ($node->owner_document || $node)->create_entity_reference ('er'); |
1155 |
$node->append_child ($er); |
$node->append_child ($er); |
1156 |
|
|
1157 |
$node->manakai_append_text ('text'); |
$node->manakai_append_text ('text'); |
1270 |
]->[$i]; |
]->[$i]; |
1271 |
|
|
1272 |
my $doc2 = $doc->implementation->create_document; |
my $doc2 = $doc->implementation->create_document; |
1273 |
|
$doc2->strict_error_checking (0); |
1274 |
|
|
1275 |
my $el = $doc2->create_element_ns (undef, 'el'); |
my $el = $doc2->create_element_ns (undef, 'el'); |
1276 |
|
|
1805 |
ok 0+@{$el->child_nodes}, 1, 'normalize [21]'; |
ok 0+@{$el->child_nodes}, 1, 'normalize [21]'; |
1806 |
} |
} |
1807 |
|
|
1808 |
|
## |getFeature| and |isSupported| |
1809 |
|
for my $node (create_nodes ()) { |
1810 |
|
for ( |
1811 |
|
[Core => '1.0', 1], |
1812 |
|
[Core => '2.0', 1], |
1813 |
|
[Core => '3.0', 1], |
1814 |
|
['+Core' => '3.0', 1], |
1815 |
|
['++Core' => '3.0', 0], |
1816 |
|
[Core => '', 1], |
1817 |
|
[Core => undef, 1], |
1818 |
|
[Core => 3, 0], |
1819 |
|
[Traversal => '2.0', 1], [Traversal => '', 1], [Traversal => '1.0', 0], |
1820 |
|
[XML => '1.0', 1], |
1821 |
|
[XML => '2.0', 1], |
1822 |
|
[XML => '3.0', 1], |
1823 |
|
[XML => '', 1], |
1824 |
|
[XML => undef, 1], |
1825 |
|
['+XML' => undef, 1], |
1826 |
|
[XMLVersion => '1.0', 1], |
1827 |
|
[XMLVersion => '1.1', 1], |
1828 |
|
[XMLVersion => '', 1], |
1829 |
|
[XMLVersion => undef, 1], |
1830 |
|
['+XMLVersion' => undef, 1], |
1831 |
|
[unknown => 3, 0], |
1832 |
|
[unknown => '', 0], |
1833 |
|
[unknown => undef, 0], |
1834 |
|
['+unknown' => undef, 0], |
1835 |
|
[q<http://suika.fam.cx/www/2006/feature/xdoctype> => '', 1], |
1836 |
|
[q<http://suika.fam.cx/www/2006/feature/xdoctype> => '3.0', 1], |
1837 |
|
[q<http://suika.fam.cx/www/2006/feature/Atom> => '', 1], |
1838 |
|
[q<http://suika.fam.cx/www/2006/feature/Atom> => '1.0', 1], |
1839 |
|
[q<http://suika.fam.cx/www/2006/feature/AtomThreading> => '', 1], |
1840 |
|
[q<http://suika.fam.cx/www/2006/feature/AtomThreading> => '1.0', 1], |
1841 |
|
) { |
1842 |
|
my $label = $node->node_name . ' ' . $_->[0] . ', ' . |
1843 |
|
(defined $_->[1] ? $_->[1] : 'undef'); |
1844 |
|
ok $node->can ('get_feature') ? 1 : 0, 1, 'can get_feature ' . $label; |
1845 |
|
ok $node->get_feature ($_->[0], $_->[1]), $_->[2] ? $node : undef, |
1846 |
|
'get_feature ' . $label; |
1847 |
|
ok $node->can ('is_supported') ? 1 : 0, 1, 'can is_supported ' . $label; |
1848 |
|
ok $node->is_supported ($_->[0], $_->[1]) ? 1 : 0, $_->[2], |
1849 |
|
'is_supported ' . $label; |
1850 |
|
} |
1851 |
|
} |
1852 |
|
|
1853 |
|
## |isEqualNode| |
1854 |
|
for my $node (create_nodes ()) { |
1855 |
|
ok $node->can ('is_equal_node') ? 1 : 0, 1, $node->node_name . '->is_eq_n can'; |
1856 |
|
|
1857 |
|
ok $node->is_equal_node ($node) ? 1 : 0, 1, $node->node_name . '->iseq self'; |
1858 |
|
ok $node == $node ? 1 : 0, 1, $node->node_name . ' == self'; |
1859 |
|
ok $node != $node ? 1 : 0, 0, $node->node_name . ' != self'; |
1860 |
|
ok $node == 'node' ? 1 : 0, 0, $node->node_name . ' == string'; |
1861 |
|
ok $node != 'node' ? 1 : 0, 1, $node->node_name . ' != string'; |
1862 |
|
ok $node == 0 ? 1 : 0, 0, $node->node_name . ' == num'; |
1863 |
|
ok $node != 0 ? 1 : 0, 1, $node->node_name . ' != num'; |
1864 |
|
ok $node == '' ? 1 : 0, 0, $node->node_name . ' == empty'; |
1865 |
|
ok $node != '' ? 1 : 0, 1, $node->node_name . ' != empty'; |
1866 |
|
ok $node == undef () ? 1 : 0, 0, $node->node_name . ' == undef'; |
1867 |
|
ok $node != undef () ? 1 : 0, 1, $node->node_name . ' != undef'; |
1868 |
|
} |
1869 |
|
|
1870 |
|
{ |
1871 |
|
my $el1 = $doc->create_element_ns (undef, 'type'); |
1872 |
|
my $el2 = $doc->create_element_ns (undef, 'type'); |
1873 |
|
my $el3 = $doc->create_element_ns (undef, 'TYPE'); |
1874 |
|
|
1875 |
|
ok $el1 == $el2 ? 1 : 0, 1, 'Element == [1]'; |
1876 |
|
ok $el1 != $el2 ? 1 : 0, 0, 'Element != [1]'; |
1877 |
|
ok $el1 == $el3 ? 1 : 0, 0, 'Element == [2]'; |
1878 |
|
ok $el1 != $el3 ? 1 : 0, 1, 'Element != [2]'; |
1879 |
|
|
1880 |
|
my $el4 = $doc->create_element_ns ('about:', 'type'); |
1881 |
|
my $el5 = $doc->create_element_ns ('about:', 'type'); |
1882 |
|
my $el6 = $doc->create_element_ns ('about:', 'TYPE'); |
1883 |
|
my $el7 = $doc->create_element_ns ('DAV:', 'type'); |
1884 |
|
|
1885 |
|
ok $el1 == $el4 ? 1 : 0, 0, 'Element == [3]'; |
1886 |
|
ok $el1 != $el4 ? 1 : 0, 1, 'Element != [3]'; |
1887 |
|
ok $el4 == $el5 ? 1 : 0, 1, 'Element == [4]'; |
1888 |
|
ok $el4 != $el5 ? 1 : 0, 0, 'Element != [4]'; |
1889 |
|
ok $el4 == $el6 ? 1 : 0, 0, 'Element == [5]'; |
1890 |
|
ok $el4 != $el6 ? 1 : 0, 1, 'Element != [5]'; |
1891 |
|
ok $el4 == $el7 ? 1 : 0, 0, 'Element == [6]'; |
1892 |
|
ok $el4 != $el7 ? 1 : 0, 1, 'Element != [6]'; |
1893 |
|
|
1894 |
|
$el5->prefix ('prefix'); |
1895 |
|
ok $el4 == $el5 ? 1 : 0, 0, 'Element == [7]'; |
1896 |
|
ok $el4 != $el5 ? 1 : 0, 1, 'Element != [7]'; |
1897 |
|
} |
1898 |
|
|
1899 |
|
## |getUserData|, |setUserData| |
1900 |
|
{ |
1901 |
|
my $node = $dom->create_document; |
1902 |
|
|
1903 |
|
my $data = ['2']; |
1904 |
|
my $handler = sub { 1 }; |
1905 |
|
|
1906 |
|
ok $node->set_user_data ('key1', $data, $handler), undef, |
1907 |
|
'set_user_data [1]'; |
1908 |
|
|
1909 |
|
my $key1_data = $node->get_user_data ('key1'); |
1910 |
|
ok $key1_data, $data, 'set_user_data [2]'; |
1911 |
|
ok $key1_data->[0], $data->[0], 'set_user_data [3]'; |
1912 |
|
|
1913 |
|
my $data2 = ['4']; |
1914 |
|
ok $node->set_user_data ('key1', $data2, undef), $data, 'set_user_data [4]'; |
1915 |
|
ok $node->get_user_data ('key1'), $data2, 'set_user_data [5]'; |
1916 |
|
|
1917 |
|
$node->set_user_data (key1 => undef, $handler); |
1918 |
|
ok $node->get_user_data ('key1'), undef, 'set_user_data [6]'; |
1919 |
|
|
1920 |
|
$node->set_user_data (key1 => undef, undef); |
1921 |
|
ok $node->get_user_data ('key1'), undef, 'set_user_data [7]'; |
1922 |
|
} |
1923 |
|
|
1924 |
|
## |removeChild| |
1925 |
|
{ |
1926 |
|
my $el = $doc->create_element ('p'); |
1927 |
|
my $c1 = $doc->create_element ('e'); |
1928 |
|
$el->append_child ($c1); |
1929 |
|
my $c2 = $doc->create_element ('f'); |
1930 |
|
$el->append_child ($c2); |
1931 |
|
my $c3 = $doc->create_element ('g'); |
1932 |
|
$el->append_child ($c3); |
1933 |
|
ok $el->can ('remove_child') ? 1 : 0, 1, 'Node->remove_child can [0]'; |
1934 |
|
|
1935 |
|
my $return = $el->remove_child ($c1); |
1936 |
|
ok $return, $c1, 'Node->remove_child return [1]'; |
1937 |
|
ok $c1->parent_node, undef, 'Node->remove_child parent_node [1]'; |
1938 |
|
ok $el->first_child, $c2, 'Node->remove_child first_child [1]'; |
1939 |
|
ok $el->last_child, $c3, 'Node->remove_child last_child [1]'; |
1940 |
|
ok 0+@{$el->child_nodes}, 2, 'Node->remove_child child_nodes [1]'; |
1941 |
|
} |
1942 |
|
{ |
1943 |
|
my $el = $doc->create_element ('p'); |
1944 |
|
my $c1 = $doc->create_element ('e'); |
1945 |
|
$el->append_child ($c1); |
1946 |
|
my $c2 = $doc->create_element ('f'); |
1947 |
|
$el->append_child ($c2); |
1948 |
|
my $c3 = $doc->create_element ('g'); |
1949 |
|
$el->append_child ($c3); |
1950 |
|
|
1951 |
|
my $return = $el->remove_child ($c2); |
1952 |
|
ok $return, $c2, 'Node->remove_child return [2]'; |
1953 |
|
ok $c2->parent_node, undef, 'Node->remove_child parent_node [2]'; |
1954 |
|
ok $el->first_child, $c1, 'Node->remove_child first_child [2]'; |
1955 |
|
ok $el->last_child, $c3, 'Node->remove_child last_child [2]'; |
1956 |
|
ok 0+@{$el->child_nodes}, 2, 'Node->remove_child child_nodes [2]'; |
1957 |
|
} |
1958 |
|
{ |
1959 |
|
my $el = $doc->create_element ('p'); |
1960 |
|
my $c1 = $doc->create_element ('e'); |
1961 |
|
$el->append_child ($c1); |
1962 |
|
my $c2 = $doc->create_element ('f'); |
1963 |
|
$el->append_child ($c2); |
1964 |
|
my $c3 = $doc->create_element ('g'); |
1965 |
|
$el->append_child ($c3); |
1966 |
|
|
1967 |
|
my $return = $el->remove_child ($c3); |
1968 |
|
ok $return, $c3, 'Node->remove_child return [3]'; |
1969 |
|
ok $c3->parent_node, undef, 'Node->remove_child parent_node [3]'; |
1970 |
|
ok $el->first_child, $c1, 'Node->remove_child first_child [3]'; |
1971 |
|
ok $el->last_child, $c2, 'Node->remove_child last_child [3]'; |
1972 |
|
ok 0+@{$el->child_nodes}, 2, 'Node->remove_child child_nodes [3]'; |
1973 |
|
} |
1974 |
|
{ |
1975 |
|
my $el = $doc->create_element ('p'); |
1976 |
|
my $c1 = $doc->create_element ('e'); |
1977 |
|
$el->append_child ($c1); |
1978 |
|
|
1979 |
|
my $return = $el->remove_child ($c1); |
1980 |
|
ok $return, $c1, 'Node->remove_child return [4]'; |
1981 |
|
ok $c1->parent_node, undef, 'Node->remove_child parent_node [4]'; |
1982 |
|
ok $el->first_child, undef, 'Node->remove_child first_child [4]'; |
1983 |
|
ok $el->last_child, undef, 'Node->remove_child last_child [4]'; |
1984 |
|
ok 0+@{$el->child_nodes}, 0, 'Node->remove_child child_nodes [4]'; |
1985 |
|
} |
1986 |
|
|
1987 |
|
## |appendChild|, |insertBefore|, |replaceChild| |
1988 |
|
for my $node (create_leaf_nodes) { |
1989 |
|
for my $method_name (qw/append_child insert_before replace_child/) { |
1990 |
|
ok $node->can ($method_name) ? 1 : 0, 1, |
1991 |
|
$node->node_name . '->can ' . $method_name; |
1992 |
|
|
1993 |
|
for my $node2 (create_nodes) { |
1994 |
|
try { |
1995 |
|
if ($method_name eq 'replace_child') { |
1996 |
|
$node->replace_child ($node2, $node2); |
1997 |
|
} else { |
1998 |
|
$node->$method_name ($node2); |
1999 |
|
} |
2000 |
|
ok 1, 0, |
2001 |
|
$node->node_name . '->' . $method_name . ' ' . $node2->node_name; |
2002 |
|
} catch Message::IF::DOMException with { |
2003 |
|
if ($_[0]->type eq 'HIERARCHY_REQUEST_ERR' or |
2004 |
|
($_[0]->type eq 'WRONG_DOCUMENT_ERR' and |
2005 |
|
($node2->owner_document or $node2) ne $doc) or |
2006 |
|
($_[0]->type eq 'NOT_FOUND_ERR' and |
2007 |
|
$method_name eq 'replace_child')) { |
2008 |
|
ok 1, 1, |
2009 |
|
$node->node_name . '->' . $method_name . ' ' . $node2->node_name; |
2010 |
|
} |
2011 |
|
}; |
2012 |
|
} |
2013 |
|
} |
2014 |
|
} |
2015 |
|
|
2016 |
## TODO: parent_node tests, as with append_child tests |
## TODO: parent_node tests, as with append_child tests |
2017 |
|
|
2018 |
## TODO: text_content tests for CharacterData and PI |
## TODO: text_content tests for CharacterData and PI |
2019 |
|
|
2020 |
|
## |UserDataHandler|, |setData|, and |NODE_DELETED| |
2021 |
|
## NOTE: This should be the last test, since it does define |
2022 |
|
## Node.DESTORY. |
2023 |
|
{ |
2024 |
|
my $doc = $dom->create_document ('http://test/', 'ex'); |
2025 |
|
my $node = $doc->document_element; |
2026 |
|
|
2027 |
|
$node->set_user_data (key => {}, sub { |
2028 |
|
my ($op, $key, $data, $src, $dest) = @_; |
2029 |
|
|
2030 |
|
ok $op, 3, 'set_user_data operation [8]'; # NODE_DELETED |
2031 |
|
ok $key, 'key', 'set_user_data key [8]'; |
2032 |
|
ok ref $data, 'HASH', 'set_user_data data [8]'; |
2033 |
|
ok $src, undef, 'set_user_data src [8]'; |
2034 |
|
ok $dest, undef, 'set_user_data dest [8]'; |
2035 |
|
}); |
2036 |
|
|
2037 |
|
undef $node; |
2038 |
|
undef $doc; |
2039 |
|
|
2040 |
|
## NOTE: We cannot control exactly when it is called. |
2041 |
|
} |
2042 |
|
|
2043 |
=head1 LICENSE |
=head1 LICENSE |
2044 |
|
|
2045 |
Copyright 2007 Wakaba <w@suika.fam.cx> |
Copyright 2007 Wakaba <w@suika.fam.cx> |