File: test-elem-new.rb

package info (click to toggle)
ruby-htree 0.8%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 448 kB
  • ctags: 703
  • sloc: ruby: 5,931; makefile: 24
file content (101 lines) | stat: -rw-r--r-- 3,315 bytes parent folder | download | duplicates (7)
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 'test/unit'
require 'htree/doc'
require 'htree/elem'
require 'htree/equality'
require 'htree/traverse'

class TestElemNew < Test::Unit::TestCase
  def test_empty
    e = HTree::Elem.new('a')
    assert_equal('a', e.qualified_name)
    assert_equal({}, e.attributes)
    assert_equal(HTree::DefaultContext, e.instance_variable_get(:@stag).inherited_context)
    assert_equal([], e.children)
    assert_equal(true, e.empty_element?)
    assert_nil(e.instance_variable_get(:@etag))
  end

  def test_empty_array
    e = HTree::Elem.new('a', [])
    assert_equal('a', e.qualified_name)
    assert_equal({}, e.attributes)
    assert_equal(HTree::DefaultContext, e.instance_variable_get(:@stag).inherited_context)
    assert_equal([], e.children)
    assert_equal(false, e.empty_element?)
    assert_equal(nil, e.instance_variable_get(:@etag))
  end

  def test_empty_attr
    e = HTree::Elem.new('a', {'href'=>'xxx'})
    assert_equal('a', e.qualified_name)
    assert_equal({HTree::Name.parse_attribute_name('href', HTree::DefaultContext)=>HTree::Text.new('xxx')}, e.attributes)
    assert_equal(HTree::DefaultContext, e.instance_variable_get(:@stag).inherited_context)
    assert_equal([], e.children)
    assert_equal(true, e.empty_element?)
    assert_equal(nil, e.instance_variable_get(:@etag))
  end

  def test_node
    t = HTree::Text.new('t')
    e = HTree::Elem.new('a', t)
    assert_equal({}, e.attributes)
    assert_equal([t], e.children)
  end

  def test_hash
    t = HTree::Text.new('t')
    e = HTree::Elem.new('a', {'b' => t})
    assert_equal([['b', t]], e.attributes.map {|n,v| [n.universal_name, v] })
    assert_equal([], e.children)
  end

  def test_string
    t = HTree::Text.new('s')
    e = HTree::Elem.new('a', "s")
    assert_equal({}, e.attributes)
    assert_equal([t], e.children)
  end

  def test_interleave
    t = HTree::Text.new('t')
    e = HTree::Elem.new('a', t, {'b' => t}, t, {'c' => 'd'}, t)
    assert_equal([['b', t], ['c', HTree::Text.new('d')]],
      e.attributes.map {|n,v| [n.universal_name, v] }.sort)
    assert_equal([t, t, t], e.children)
  end

  def test_nest
    t = HTree::Text.new('t')
    b = HTree::BogusETag.new('a')
    x = HTree::Elem.new('e', HTree::XMLDecl.new('1.0'))
    d = HTree::Elem.new('e', HTree::DocType.new('html'))
    e = HTree::Elem.new('a', [t, t, t, b, x, d])
    assert_equal({}, e.attributes)
    assert_equal([t, t, t, b, x, d], e.children)
  end

  def test_err
    assert_raises(TypeError) { HTree::Elem.new('e', HTree::STag.new('a')) }
    assert_raises(TypeError) { HTree::Elem.new('e', HTree::ETag.new('a')) }
  end

  def test_context
    context = HTree::DefaultContext.subst_namespaces({'p'=>'u'})
    elem = HTree::Elem.new('p:n', {'p:a'=>'t'}, context)
    assert_equal('{u}n', elem.name)
    assert_equal('t', elem.get_attr('{u}a'))

    assert_same(context, elem.instance_variable_get(:@stag).inherited_context)
    assert_raises(ArgumentError) { HTree::Elem.new('e', context, context) }
  end
  
  def test_hash_in_array
    attrs = [{'a'=>'1'}, {'a'=>'2'}]
    assert_raises(TypeError) { HTree::Elem.new('e', attrs) }
    attrs.pop
    assert_raises(TypeError) { HTree::Elem.new('e', attrs) }
    attrs.pop
    assert_equal([], attrs)
    assert_equal(false, HTree::Elem.new('e', attrs).empty_element?)
  end
end