require "helper" module Nokogiri module XML class TestNodeAttributes < Nokogiri::TestCase def test_attribute_with_ns doc = Nokogiri::XML <<-eoxml 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 "" node = doc.root assert_equal 'en-GB', node['xml:lang'] assert_equal 'en-GB', node.attributes['lang'].value assert_equal nil, node['lang'] end def test_set_prefixed_attributes doc = Nokogiri::XML %Q{} 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_equal 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_equal nil, node['bar'] assert_equal 'x', node.attributes['bar'].namespace.href end def test_append_child_namespace_definitions_prefixed_attributes doc = Nokogiri::XML "" 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 "" 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 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("") node = document.root node['visible'] = 'foo' attribute = node.attribute('visible') text = Nokogiri::XML::Text.new 'bar', document attribute.add_child(text) begin gc_previous = GC.stress GC.stress = true node['visible'] = 'attr' ensure GC.stress = gc_previous end end end end end