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
|
require "helper"
module Nokogiri
module XML
class TestNamespace < Nokogiri::TestCase
def setup
super
@xml = Nokogiri::XML <<-eoxml
<root xmlns="http://tenderlovemaking.com/" xmlns:foo="bar">
<awesome/>
</root>
eoxml
end
if Nokogiri.uses_libxml?
def test_namespace_is_in_node_cache
node = @xml.root.namespace
assert @xml.instance_variable_get(:@node_cache).include?(node)
end
end
def test_built_nodes_keep_namespace_decls
doc = Document.new
e = Node.new 'element', doc
c = Node.new 'child', doc
c.default_namespace = 'woop:de:doo'
assert c.namespace, 'has a namespace'
e.add_child c
assert c.namespace, 'has a namespace'
doc.add_child e
assert c.namespace, 'has a namespace'
end
def test_inspect
ns = @xml.root.namespace
assert_equal "#<#{ns.class.name}:#{sprintf("0x%x", ns.object_id)} href=#{ns.href.inspect}>", ns.inspect
end
def test_namespace_node_prefix
namespaces = @xml.root.namespace_definitions
assert_equal [nil, 'foo'], namespaces.map(&:prefix)
end
def test_namespace_node_href
namespaces = @xml.root.namespace_definitions
assert_equal [
'http://tenderlovemaking.com/',
'bar'
], namespaces.map(&:href)
end
def test_equality
namespaces = @xml.root.namespace_definitions
assert_equal namespaces, @xml.root.namespace_definitions
end
def test_add_definition
@xml.root.add_namespace_definition('baz', 'bar')
assert_equal 3, @xml.root.namespace_definitions.length
end
def test_add_definition_return
ns = @xml.root.add_namespace_definition('baz', 'bar')
assert_equal 'baz', ns.prefix
end
def test_remove_entity_namespace
s = %q{<?xml version='1.0'?><!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" [<!ENTITY % p ''>]>}
Nokogiri::XML(s).remove_namespaces!
# TODO: we should probably assert something here. See commit 14d2f59.
end
def test_maintain_element_namespaces
doc = Document.new
subject = Nokogiri::XML::Node.new 'foo', doc
subject << '<foobar xmlns="barfoo"/>'
child = subject.children.first
assert_equal 'foobar', child.name
assert_equal 'barfoo', child.namespace.href
assert_empty child.attributes
end
def test_maintain_element_namespaces_in_urn
doc = Document.new
subject = Nokogiri::XML::Node.new 'foo', doc
subject << '<foobar xmlns="urn:xmpp:foospec:barfoo"/>'
child = subject.children.first
assert_equal 'foobar', child.name
assert_equal 'urn:xmpp:foospec:barfoo', child.namespace.href
assert_empty child.attributes
end
end
end
end
|