File: test_namespaces_in_builder_doc.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 (75 lines) | stat: -rw-r--r-- 2,637 bytes parent folder | download | duplicates (4)
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
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[:meat].bacon(:'xmlns:meat' => 'ns:meat') do
              x.apple :count => 2
              x[:veg].tomato
            end
          end
        end

        @doc = b.doc
      end

      def check_namespace e
        e.namespace.nil? ? nil : e.namespace.href
      end

      def test_builder_default_ns
        assert_equal 'ns:fruit', check_namespace(@doc.root)
      end
      def test_builder_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_builder_grandparent_default_ns
        assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
      end
      def test_builder_parent_nondefault_ns
        assert_equal 'ns:veg',   check_namespace(@doc.root.elements[2])
      end
      def test_builder_single_decl_ns_1
        assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
      end
      def test_builder_nondefault_attr_ns
        assert_equal 'http://www.w3.org/1999/xlink', 
          check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
      end
      def test_builder_single_decl_ns_2
        assert_equal 'ns:meat',  check_namespace(@doc.root.elements[3])
      end
      def test_builder_buried_default_ns
        assert_equal 'ns:fruit',  check_namespace(@doc.root.elements[3].elements[0])
      end
      def test_builder_buried_decl_ns
        assert_equal 'ns:veg',  check_namespace(@doc.root.elements[3].elements[1])
      end
      def test_builder_namespace_count
        n = @doc.root.clone
        n.children.each(&:remove)
        ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
        assert_equal 3, ns_attrs.length
      end

      def test_builder_namespaced_attribute_on_unparented_node
        doc = Nokogiri::XML::Builder.new do |x|
          x.root('xmlns:foo' => 'http://foo.io') {
            x.obj('foo:attr' => 'baz')
          }
        end.doc
        assert_equal 'http://foo.io', doc.root.children.first.attribute_nodes.first.namespace.href
      end
    end
  end
end