From 0c19cb8555914cddd9a00184f9e29c4e6882ec58 Mon Sep 17 00:00:00 2001 From: Michael Klein Date: Thu, 13 Dec 2012 17:09:40 -0600 Subject: [PATCH] Added thorough namespace compliance testing for parsed, created, and built documents --- .../test_namespaces_in_builder_doc.rb | 61 +++++++++++++++++++ .../test_namespaces_in_created_doc.rb | 61 +++++++++++++++++++ .../test_namespaces_in_parsed_doc.rb | 59 ++++++++++++++++++ 3 files changed, 181 insertions(+) create mode 100644 test/namespaces/test_namespaces_in_builder_doc.rb create mode 100644 test/namespaces/test_namespaces_in_created_doc.rb create mode 100644 test/namespaces/test_namespaces_in_parsed_doc.rb diff --git a/test/namespaces/test_namespaces_in_builder_doc.rb b/test/namespaces/test_namespaces_in_builder_doc.rb new file mode 100644 index 00000000000..fcab36ae9fa --- /dev/null +++ b/test/namespaces/test_namespaces_in_builder_doc.rb @@ -0,0 +1,61 @@ +require "helper" + +module Nokogiri + module XML + class TestNamespacesInBuilderDoc < Nokogiri::TestCase + def setup + super + b = Nokogiri::XML::Builder.new do |x| + x.fruit(:xmlns => 'ns:fruit', :'xmlns:veg' => 'ns:veg', :'xmlns:xlink' => 'http://www.w3.org/1999/xlink') do + x.pear { x.bosc } + x.orange + x[:veg].carrot do + x.cheese(:xmlns => 'ns:dairy', :'xlink:href' => 'http://example.com/cheese/') + end + x.shim(:'xmlns:meat' => 'ns:meat') do + x[:meat].bacon do + x.apple :count => 2 + x[:veg].tomato + end + end + end + end + + @doc = b.doc + end + + def check_namespace e + e.namespace.nil? ? nil : e.namespace.href + end + + def test_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root) + end + def test_parent_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0]) + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1]) + end + def test_grandparent_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0]) + end + def test_parent_nondefault_ns + assert_equal 'ns:veg', check_namespace(@doc.root.elements[2]) + end + def test_single_decl_ns_1 + assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0]) + end + def test_nondefault_attr_ns + assert_equal 'http://www.w3.org/1999/xlink', check_namespace(@doc.root.elements[2].elements[0].attribute_nodes[0]) + end + def test_single_decl_ns_2 + assert_equal 'ns:meat', check_namespace(@doc.root.elements[3].elements[0]) + end + def test_buried_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0].elements[0]) + end + def test_buried_decl_ns + assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[0].elements[1]) + end + end + end +end diff --git a/test/namespaces/test_namespaces_in_created_doc.rb b/test/namespaces/test_namespaces_in_created_doc.rb new file mode 100644 index 00000000000..6ad33bc74c7 --- /dev/null +++ b/test/namespaces/test_namespaces_in_created_doc.rb @@ -0,0 +1,61 @@ +require "helper" + +module Nokogiri + module XML + class TestNamespacesInBuilderDoc < Nokogiri::TestCase + def setup + super + @doc = Nokogiri::XML('') + pear = @doc.create_element('pear') + bosc = @doc.create_element('bosc') + pear.add_child(bosc) + @doc.root << pear + @doc.root.add_child('') + carrot = @doc.create_element('veg:carrot') + @doc.root << carrot + cheese = @doc.create_element('cheese', :xmlns => 'ns:dairy', :'xlink:href' => 'http://example.com/cheese/') + carrot << cheese + bacon = @doc.create_element('meat:bacon', :'xmlns:meat' => 'ns:meat') + apple = @doc.create_element('apple') + apple['count'] = 2 + bacon << apple + tomato = @doc.create_element('veg:tomato') + bacon << tomato + @doc.root << bacon + end + + def check_namespace e + e.namespace.nil? ? nil : e.namespace.href + end + + def test_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root) + end + def test_parent_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0]) + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1]) + end + def test_grandparent_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0]) + end + def test_parent_nondefault_ns + assert_equal 'ns:veg', check_namespace(@doc.root.elements[2]) + end + def test_single_decl_ns_1 + assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0]) + end + def test_nondefault_attr_ns + assert_equal 'http://www.w3.org/1999/xlink', check_namespace(@doc.root.elements[2].elements[0].attribute_nodes[0]) + end + def test_single_decl_ns_2 + assert_equal 'ns:meat', check_namespace(@doc.root.elements[3]) + end + def test_buried_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0]) + end + def test_buried_decl_ns + assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1]) + end + end + end +end diff --git a/test/namespaces/test_namespaces_in_parsed_doc.rb b/test/namespaces/test_namespaces_in_parsed_doc.rb new file mode 100644 index 00000000000..9f42962c925 --- /dev/null +++ b/test/namespaces/test_namespaces_in_parsed_doc.rb @@ -0,0 +1,59 @@ +require "helper" + +module Nokogiri + module XML + class TestNamespacesInParsedDoc < Nokogiri::TestCase + def setup + super + @doc = Nokogiri::XML <<-eoxml + + + + + + + + + + + + + + eoxml + end + + def check_namespace e + e.namespace.nil? ? nil : e.namespace.href + end + + def test_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root) + end + def test_parent_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0]) + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1]) + end + def test_grandparent_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0]) + end + def test_parent_nondefault_ns + assert_equal 'ns:veg', check_namespace(@doc.root.elements[2]) + end + def test_single_decl_ns_1 + assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0]) + end + def test_nondefault_attr_ns + assert_equal 'http://www.w3.org/1999/xlink', check_namespace(@doc.root.elements[2].elements[0].attribute_nodes[0]) + end + def test_single_decl_ns_2 + assert_equal 'ns:meat', check_namespace(@doc.root.elements[3]) + end + def test_buried_default_ns + assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0]) + end + def test_buried_decl_ns + assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1]) + end + end + end +end