root / test / test_elements.rb

Revision 549:e07d72733cae, 3.0 kB (checked in by Sean Russell <ser@…>, 5 months ago)

Moved and renamed files to conform to Ruby's test suite.

Line 
1require 'test/unit/testcase'
2require 'rexml/document'
3
4class ElementsTester < Test::Unit::TestCase
5        include REXML
6        def test_elements_accessor
7                doc = Document.new '<a><b/><c id="1"/><c id="2"/><d/></a>'
8                assert_equal 'b', doc.root.elements[1].name
9                assert_equal '1', doc.root.elements['c'].attributes['id']
10                assert_equal '2', doc.root.elements[2,'c'].attributes['id']
11        end
12
13        def test_elements_indexing
14                doc = Document.new '<a/>'
15                doc.root.elements[10] = Element.new('b')
16                assert_equal 'b', doc.root.elements[1].name
17                doc.root.elements[1] = Element.new('c')
18                assert_equal 'c', doc.root.elements[1].name
19                doc.root.elements['c'] = Element.new('d')
20                assert_equal 'd', doc.root.elements[1].name
21        end
22       
23        def test_elements_delete
24                doc = Document.new '<a><b/><c/><c id="1"/></a>'
25                block = proc { |str|
26                        out = ''
27                        doc.write out
28                        assert_equal str, out
29                }
30                b = doc.root.elements[1]
31                doc.root.elements.delete b
32                block.call( "<a><c/><c id='1'/></a>" )
33                doc.elements.delete("a/c[@id='1']")
34                block.call( '<a><c/></a>' )
35                doc.root.elements.delete 1
36    block.call( '<a/>' )
37        end
38
39        def test_elements_delete_all
40                doc = Document.new '<a><c/><c/><c/><c/></a>'
41                deleted = doc.elements.delete_all 'a/c'
42                assert_equal 4, deleted.size
43        end
44
45  def test_ticket_36
46    doc = Document.new( "<a xmlns:xi='foo'><b><xi:c id='1'/></b><xi:c id='2'/></a>" )
47
48    deleted = doc.root.elements.delete_all( "xi:c" )
49    assert_equal( 1, deleted.size )
50
51    doc = Document.new( "<a xmlns:xi='foo'><b><xi:c id='1'/></b><xi:c id='2'/></a>" )
52    deleted = doc.root.elements.delete_all( "//xi:c" )
53    assert_equal( 2, deleted.size )
54  end
55
56        def test_elements_add
57                a = Element.new 'a'
58                a.elements.add Element.new('b')
59                assert_equal 'b', a.elements[1].name
60                a.elements.add 'c'
61                assert_equal 'c', a.elements[2].name
62        end
63
64        def test_elements_size
65                doc = Document.new '<a>sean<b/>elliott<b/>russell<b/></a>'
66                assert_equal 6, doc.root.size
67                assert_equal 3, doc.root.elements.size
68        end
69
70        def test_elements_each
71                doc = Document.new '<a><b/><c/><d/>sean<b/><c/><d/></a>'
72                count = 0
73                block = proc {|e| count += 1}
74                doc.root.elements.each(&block)
75                assert_equal 6, count
76                count = 0
77                doc.root.elements.each('b', &block)
78                assert_equal 2, count
79                count = 0
80                doc.root.elements.each('child::node()', &block)
81                assert_equal 6, count
82                count = 0
83                XPath.each(doc.root, 'child::node()', &block)
84                assert_equal 7, count
85        end
86
87        def test_elements_to_a
88                doc = Document.new '<a>sean<b/>elliott<c/></a>'
89                assert_equal 2, doc.root.elements.to_a.size
90                assert_equal 2, doc.root.elements.to_a("child::node()").size
91                assert_equal 4, XPath.match(doc.root, "child::node()").size
92        end
93       
94        def test_elements_collect
95                doc = Document.new( "<a><b id='1'/><b id='2'/></a>" )
96                r = doc.elements.collect( "/a/b" ) { |e| e.attributes["id"].to_i }
97                assert_equal( [1,2], r )
98        end
99       
100        def test_elements_inject
101                doc = Document.new( "<a><b id='1'/><b id='2'/></a>" )
102                r = doc.elements.inject( "/a/b", 3 ) { |s, e|
103                        s + e.attributes["id"].to_i
104                }
105                assert_equal 6, r
106        end
107end
Note: See TracBrowser for help on using the browser.