File: test_node_attributes.rb

package info (click to toggle)
ruby-nokogiri 1.11.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 5,576 kB
  • sloc: xml: 28,086; ruby: 18,456; java: 13,067; ansic: 5,138; yacc: 265; sh: 208; makefile: 27
file content (115 lines) | stat: -rw-r--r-- 3,336 bytes parent folder | download | duplicates (2)
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
require "helper"

module Nokogiri
  module XML
    class TestNodeAttributes < Nokogiri::TestCase
      def test_attribute_with_ns
        doc = Nokogiri::XML <<-eoxml
          <root xmlns:tlm='http://tenderlovemaking.com/'>
            <node tlm:foo='bar' foo='baz' />
          </root>
        eoxml

        node = doc.at('node')

        assert_equal 'bar',
          node.attribute_with_ns('foo', 'http://tenderlovemaking.com/').value
      end

      def test_prefixed_attributes
        doc = Nokogiri::XML "<root xml:lang='en-GB' />"

        node = doc.root

        assert_equal 'en-GB', node['xml:lang']
        assert_equal 'en-GB', node.attributes['lang'].value
        assert_nil node['lang']
      end

      def test_unknown_namespace_prefix_should_not_be_removed
        doc = Nokogiri::XML ''
        elem = doc.create_element 'foo', 'bar:attr' => 'something'
        assert_equal elem.attribute_nodes.first.name, 'bar:attr'
      end

      def test_set_prefixed_attributes
        doc = Nokogiri::XML %Q{<root xmlns:foo="x"/>}

        node = doc.root

        node['xml:lang'] = 'en-GB'
        node['foo:bar']  = 'bazz'

        assert_equal 'en-GB', node['xml:lang']
        assert_equal 'en-GB', node.attributes['lang'].value
        assert_nil node['lang']
        assert_equal 'http://www.w3.org/XML/1998/namespace', node.attributes['lang'].namespace.href

        assert_equal 'bazz', node['foo:bar']
        assert_equal 'bazz', node.attributes['bar'].value
        assert_nil node['bar']
        assert_equal 'x', node.attributes['bar'].namespace.href
      end

      def test_append_child_namespace_definitions_prefixed_attributes
        doc = Nokogiri::XML "<root/>"
        node = doc.root

        node['xml:lang'] = 'en-GB'

        assert_equal [], node.namespace_definitions.map(&:prefix)

        child_node = Nokogiri::XML::Node.new 'foo', doc
        node << child_node

        assert_equal [], node.namespace_definitions.map(&:prefix)
      end

      def test_append_child_element_with_prefixed_attributes
        doc = Nokogiri::XML "<root/>"
        node = doc.root

        assert_equal [], node.namespace_definitions.map(&:prefix)


        # assert_nothing_raised do
          child_node = Nokogiri::XML::Node.new 'foo', doc
          child_node['xml:lang'] = 'en-GB'

          node << child_node
        # end

        assert_equal [], child_node.namespace_definitions.map(&:prefix)
      end

      def test_namespace_key?
        doc = Nokogiri::XML <<-eoxml
          <root xmlns:tlm='http://tenderlovemaking.com/'>
            <node tlm:foo='bar' foo='baz' />
          </root>
        eoxml

        node = doc.at('node')

        assert node.namespaced_key?('foo', 'http://tenderlovemaking.com/')
        assert node.namespaced_key?('foo', nil)
        assert !node.namespaced_key?('foo', 'foo')
      end

      def test_set_attribute_frees_nodes # testing a segv
        skip("JRuby doesn't do GC.") if Nokogiri.jruby?
        document = Nokogiri::XML.parse("<foo></foo>")

        node = document.root
        node['visible'] = 'foo'
        attribute = node.attribute('visible')
        text = Nokogiri::XML::Text.new 'bar', document
        attribute.add_child(text)

        stress_memory_while do
          node['visible'] = 'attr'
        end
      end
    end
  end
end