File: tc_xml_reader.rb

package info (click to toggle)
libxml-ruby 0.5.2.0-3%2Blenny1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 652 kB
  • ctags: 875
  • sloc: ansic: 5,874; ruby: 1,524; xml: 144; makefile: 9
file content (101 lines) | stat: -rw-r--r-- 3,078 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
require 'libxml_test'
require 'test/unit'

class TC_XML_Reader < Test::Unit::TestCase
  
  SIMPLE_XML = File.join(File.dirname(__FILE__), 'model/simple.xml')

  def test_new_file
    reader = XML::Reader.file(SIMPLE_XML)
    do_test_simple(reader)
    assert_raises(RuntimeError) { XML::Reader.file('/does/not/exist') }
  end

  def test_new_data
    reader = XML::Reader.new(File.read(SIMPLE_XML))
    do_test_simple(reader)
  end

  def test_new_walker
    reader = XML::Reader.walker(XML::Document.file(SIMPLE_XML))
    do_test_simple(reader)
  end

  def test_reader_error
    reader = XML::Reader.new('<foo/>')
    assert_raises(RuntimeError) { reader.set_error_handler }
    called = false
    reader.set_error_handler { |*a| called = true }
    while reader.read > 0; end
    assert(!called)
    reader = XML::Reader.new('<foo blah')
    reader.set_error_handler do |*a| 
      assert_equal(5, a.size)
      assert_equal(reader, a[0])
      assert_equal(XML::Reader::SEVERITY_ERROR, a[2])
      assert_nil(a[3])
      assert_equal(1, a[4])
      called = true
    end
    while reader.read > 0; end
    assert(called)
  end

  def test_attr
    parser = XML::Reader.new("<foo x='1' y='2'/>")
    assert_equal(1, parser.read)
    assert_equal('foo', parser.name)
    assert_equal('1', parser['x'])
    assert_equal('1', parser[0])
    assert_equal('2', parser['y'])
    assert_equal('2', parser[1])
    assert_equal(nil, parser['z'])
    assert_equal(nil, parser[2])
  end

  def test_value
    parser = XML::Reader.new("<foo><bar>1</bar><bar>2</bar><bar>3</bar></foo>")
    assert_equal(1, parser.read)
    assert_equal('foo', parser.name)
    assert_equal(nil, parser.value)
    3.times do |i|
      assert_equal(1, parser.read)
      assert_equal(XML::Reader::TYPE_ELEMENT, parser.node_type)
      assert_equal('bar', parser.name)
      assert_equal(1, parser.read)
      assert_equal(XML::Reader::TYPE_TEXT, parser.node_type)
      assert_equal((i + 1).to_s, parser.value)
      assert_equal(1, parser.read)
      assert_equal(XML::Reader::TYPE_END_ELEMENT, parser.node_type)
    end
  end

  def do_test_simple(reader)
    node_types = []
    19.times do 
      assert_equal(1, reader.read)
      node_types << reader.node_type  
    end
    assert_equal(0, reader.read)
    assert_equal(node_types,
      [XML::Reader::TYPE_ELEMENT, 
       XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
       XML::Reader::TYPE_ELEMENT, 
       XML::Reader::TYPE_TEXT,
       XML::Reader::TYPE_END_ELEMENT, 
       XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
       XML::Reader::TYPE_ELEMENT, 
       XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
       XML::Reader::TYPE_ELEMENT, 
       XML::Reader::TYPE_TEXT,
       XML::Reader::TYPE_END_ELEMENT, 
       XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
       XML::Reader::TYPE_ELEMENT, 
       XML::Reader::TYPE_TEXT,
       XML::Reader::TYPE_END_ELEMENT, 
       XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
       XML::Reader::TYPE_END_ELEMENT, 
       XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
       XML::Reader::TYPE_END_ELEMENT])
  end
end