libxml-ruby 0.9.5 → 0.9.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/CHANGES +28 -0
  2. data/README +8 -12
  3. data/ext/libxml/cbg.c +86 -86
  4. data/ext/libxml/libxml.c +875 -899
  5. data/ext/libxml/ruby_libxml.h +91 -65
  6. data/ext/libxml/ruby_xml_attr.c +485 -485
  7. data/ext/libxml/ruby_xml_attr.h +3 -3
  8. data/ext/libxml/ruby_xml_attributes.h +2 -2
  9. data/ext/libxml/ruby_xml_document.c +124 -307
  10. data/ext/libxml/ruby_xml_document.h +3 -3
  11. data/ext/libxml/ruby_xml_dtd.c +119 -119
  12. data/ext/libxml/ruby_xml_dtd.h +2 -2
  13. data/ext/libxml/ruby_xml_error.c +1 -1
  14. data/ext/libxml/ruby_xml_error.h +2 -2
  15. data/ext/libxml/ruby_xml_html_parser.c +119 -119
  16. data/ext/libxml/ruby_xml_html_parser.h +3 -3
  17. data/ext/libxml/ruby_xml_input.c +13 -11
  18. data/ext/libxml/ruby_xml_input.h +3 -3
  19. data/ext/libxml/ruby_xml_input_cbg.c +197 -197
  20. data/ext/libxml/ruby_xml_namespace.c +158 -0
  21. data/ext/libxml/ruby_xml_namespace.h +12 -0
  22. data/ext/libxml/ruby_xml_namespaces.c +303 -0
  23. data/ext/libxml/{ruby_xml_ns.h → ruby_xml_namespaces.h} +4 -5
  24. data/ext/libxml/ruby_xml_node.c +88 -293
  25. data/ext/libxml/ruby_xml_node.h +4 -4
  26. data/ext/libxml/ruby_xml_parser.c +152 -152
  27. data/ext/libxml/ruby_xml_parser.h +3 -3
  28. data/ext/libxml/ruby_xml_parser_context.c +630 -657
  29. data/ext/libxml/ruby_xml_parser_context.h +3 -3
  30. data/ext/libxml/ruby_xml_reader.c +899 -904
  31. data/ext/libxml/ruby_xml_reader.h +2 -2
  32. data/ext/libxml/ruby_xml_relaxng.h +2 -2
  33. data/ext/libxml/ruby_xml_sax_parser.c +175 -175
  34. data/ext/libxml/ruby_xml_sax_parser.h +3 -3
  35. data/ext/libxml/ruby_xml_schema.c +165 -165
  36. data/ext/libxml/ruby_xml_schema.h +2 -2
  37. data/ext/libxml/ruby_xml_state.h +2 -2
  38. data/ext/libxml/ruby_xml_xinclude.c +24 -24
  39. data/ext/libxml/ruby_xml_xinclude.h +3 -3
  40. data/ext/libxml/ruby_xml_xpath.c +108 -108
  41. data/ext/libxml/ruby_xml_xpath.h +3 -3
  42. data/ext/libxml/ruby_xml_xpath_context.c +84 -35
  43. data/ext/libxml/ruby_xml_xpath_context.h +3 -3
  44. data/ext/libxml/ruby_xml_xpath_expression.c +5 -7
  45. data/ext/libxml/ruby_xml_xpath_expression.h +2 -2
  46. data/ext/libxml/ruby_xml_xpath_object.c +7 -7
  47. data/ext/libxml/ruby_xml_xpath_object.h +2 -2
  48. data/ext/libxml/ruby_xml_xpointer.c +107 -107
  49. data/ext/libxml/ruby_xml_xpointer.h +3 -3
  50. data/ext/libxml/version.h +2 -2
  51. data/ext/vc/libxml_ruby.vcproj +13 -5
  52. data/lib/libxml.rb +4 -1
  53. data/lib/libxml/document.rb +40 -6
  54. data/lib/libxml/hpricot.rb +76 -76
  55. data/lib/libxml/namespace.rb +60 -0
  56. data/lib/libxml/namespaces.rb +36 -0
  57. data/lib/libxml/node.rb +90 -26
  58. data/lib/libxml/ns.rb +20 -0
  59. data/test/model/bands.xml +5 -0
  60. data/test/tc_attributes.rb +1 -1
  61. data/test/tc_document.rb +24 -41
  62. data/test/tc_document_write.rb +87 -115
  63. data/test/tc_namespace.rb +59 -0
  64. data/test/tc_namespaces.rb +174 -0
  65. data/test/tc_node.rb +41 -33
  66. data/test/tc_node_copy.rb +1 -1
  67. data/test/tc_node_edit.rb +6 -0
  68. data/test/tc_node_write.rb +76 -0
  69. data/test/tc_xinclude.rb +2 -9
  70. data/test/tc_xpath.rb +38 -11
  71. data/test/test_suite.rb +3 -1
  72. metadata +16 -9
  73. data/ext/libxml/ruby_xml_ns.c +0 -150
  74. data/test/ets_copy_bug.rb +0 -21
  75. data/test/ets_copy_bug3.rb +0 -38
  76. data/test/model/default_validation_bug.rb +0 -0
  77. data/test/tc_ns.rb +0 -18
@@ -1,146 +1,118 @@
1
- require "xml"
1
+ require 'xml'
2
+ require 'tmpdir'
2
3
  require 'test/unit'
3
4
 
4
5
  class TestDocumentWrite < Test::Unit::TestCase
5
6
  def setup
6
- @doc = XML::Document.new('1.0')
7
+ # Strip spaces to make testing easier
8
+ XML.default_keep_blanks = false
9
+ file = File.join(File.dirname(__FILE__), 'model/bands.xml')
10
+ @doc = XML::Document.file(file)
7
11
  end
8
12
 
9
13
  def teardown
14
+ XML.default_keep_blanks = true
10
15
  @doc = nil
11
16
  end
12
17
 
13
- def test_klass
14
- assert_instance_of(XML::Document, @doc)
18
+ # --- to_s tests ---
19
+ def test_to_s_default
20
+ # Default to_s has indentation
21
+ assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
22
+ @doc.to_s)
15
23
  end
16
24
 
17
- def test_version
18
- assert_equal('1.0', @doc.version)
19
-
20
- doc = XML::Document.new('6.9')
21
- assert_equal('6.9', doc.version)
22
- end
23
-
24
- def test_write_root
25
- @doc.root = XML::Node.new('rubynet')
26
- assert_instance_of(XML::Node, @doc.root)
27
- assert_instance_of(XML::Document, @doc.root.doc)
28
- assert_equal("<?xml version=\"1.0\"?>\n<rubynet/>\n", @doc.to_s)
25
+ def test_to_s_no_global_indentation
26
+ # No indentation due to global setting
27
+ XML.indent_tree_output = false
28
+ assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n<m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n<iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
29
+ @doc.to_s)
30
+ ensure
31
+ XML.indent_tree_output = true
29
32
  end
30
33
 
31
- def test_write_root
32
- @doc.root = XML::Node.new('rubynet')
33
- assert_instance_of(XML::Node, @doc.root)
34
- assert_instance_of(XML::Document, @doc.root.doc)
35
- assert_equal("<?xml version=\"1.0\"?>\n<rubynet/>\n", @doc.to_s(false))
34
+ def test_to_s_no_indentation
35
+ # No indentation due to local setting
36
+ assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\"><m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e><iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden></bands>\n",
37
+ @doc.to_s(:indent => false))
36
38
  end
37
39
 
38
- def test_child()
39
- xml = "<?xml version=\"1.0\"?>\n<rubynet>\n <pkg/>\n</rubynet>\n"
40
- @doc.root = XML::Node.new('rubynet')
41
- @doc.root.child = XML::Node.new('pkg')
42
- assert_equal(xml, @doc.to_s)
43
- end
40
+ def test_to_s_encoding
41
+ # Test encodings
44
42
 
45
- def test_append
46
- xml = "<?xml version=\"1.0\"?>\n"
47
- xml << "<rubynet>\n"
48
- xml << " <pkg>\n"
49
- xml << " <meta>\n"
50
- xml << " <pkgname>libxml</pkgname>\n"
51
- xml << " </meta>\n"
52
- xml << " </pkg>\n"
53
- xml << "</rubynet>\n"
54
-
55
- @doc.root = XML::Node.new('rubynet')
56
- pkg = @doc.root.child = XML::Node.new('pkg')
57
- meta = pkg.child = XML::Node.new('meta')
58
- assert_equal(meta, meta << (pkgname = XML::Node.new('pkgname')))
59
- pkgname << 'libxml'
60
- assert_equal(xml, @doc.to_s)
61
- end
43
+ # UTF8:
44
+ # ö - c3 b6 in hex, \303\266 in octal
45
+ # ü - c3 bc in hex, \303\274 in octal
46
+ assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
47
+ @doc.to_s(:encoding => XML::Input::UTF_8))
62
48
 
63
- def test_node_search_href
64
- prefix = 'xlink'
65
- uri = 'http://www.rubynet.org'
66
- xml = "<?xml version=\"1.0\"?>\n"
67
- xml << "<rubynet xmlns:#{prefix}=\"#{uri}\">\n"
68
- xml << " <pkg/>\n"
69
- xml << "</rubynet>\n"
70
-
71
- @doc.root = XML::Node.new('rubynet')
72
- @doc = XML::Parser.string(xml).parse
73
- assert_equal(xml, @doc.to_s)
74
- ns = @doc.root.search_href(uri)
75
- assert_instance_of(XML::NS, ns)
76
- assert_equal(uri, ns.href)
77
- assert_equal(prefix, ns.prefix)
78
- end
49
+ # ISO_8859_1:
50
+ # ö - f6 in hex, \366 in octal
51
+ # ü - fc in hex, \374 in octal
52
+ assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\">\n <m\366tley_cr\374e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
53
+ @doc.to_s(:encoding => XML::Input::ISO_8859_1))
79
54
 
80
- def test_sibling
81
- xml = "<?xml version=\"1.0\"?>\n<rubynet>\n <pkg/>\n <pkg2/>\n</rubynet>\n"
82
55
 
83
- @doc.root = XML::Node.new('rubynet')
84
- child = @doc.root.child = XML::Node.new('pkg')
85
- assert_instance_of(XML::Node, child)
86
- child.sibling = XML::Node.new('pkg2')
87
- assert_equal(xml, @doc.to_s)
56
+ # Invalid encoding
57
+ error = assert_raise(ArgumentError) do
58
+ @doc.to_s(:encoding => -9999)
59
+ end
60
+ assert_equal('Unknown encoding.', error.to_s)
88
61
  end
89
62
 
90
- def test_set_doc_property
91
- xml = "<?xml version=\"1.0\"?>\n"
92
- xml << "<rubynet xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n"
93
- xml << " <pkg/>\n"
94
- xml << "</rubynet>\n"
95
-
96
- @doc.root = XML::Node.new('rubynet')
97
- @doc.root['xmlns:xlink'] = "http://www.w3.org/1999/xlink"
98
- pkg = @doc.root.child = XML::Node.new('pkg')
99
- assert_equal(xml, @doc.to_s)
63
+ # --- save tests -----
64
+ def test_save_utf8
65
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8.xml")
66
+
67
+ bytes = @doc.save(temp_filename)
68
+ assert_equal(271, bytes)
69
+
70
+ contents = File.read(temp_filename)
71
+ assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
72
+ contents)
73
+ ensure
74
+ File.delete(temp_filename)
100
75
  end
101
76
 
102
- def test_set_node_base
103
- xml = "<?xml version=\"1.0\"?>\n"
104
- xml << "<rubynet>\n"
105
- xml << " <pkg xml:base=\"http://www.rubynet.org/\"/>\n"
106
- xml << "</rubynet>\n"
107
-
108
- @doc.root = XML::Node.new('rubynet')
109
- pkg = @doc.root.child = XML::Node.new('pkg')
110
- pkg.base = 'http://www.rubynet.org/'
111
- assert_equal(xml, @doc.to_s)
77
+ def test_save_utf8_no_indents
78
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8_no_indents.xml")
79
+
80
+ bytes = @doc.save(temp_filename, :indent => false)
81
+ assert_equal(264, bytes)
82
+
83
+ contents = File.read(temp_filename)
84
+ assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bands genre=\"metal\"><m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e><iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden></bands>\n",
85
+ contents)
86
+ ensure
87
+ File.delete(temp_filename)
112
88
  end
113
89
 
114
- def test_set_node_property
115
- xml = "<?xml version=\"1.0\"?>\n"
116
- xml << "<rubynet xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n"
117
- xml << " <pkg version=\"1.0\">\n"
118
- xml << " <meta>\n"
119
- xml << " <pkgname>libxml</pkgname>\n"
120
- xml << " </meta>\n"
121
- xml << " </pkg>\n"
122
- xml << "</rubynet>\n"
123
-
124
- @doc.root = XML::Node.new('rubynet')
125
- @doc.root['xmlns:xlink'] = "http://www.w3.org/1999/xlink"
126
- pkg = @doc.root.child = XML::Node.new('pkg')
127
- pkg['version'] = '1.0'
128
- meta = pkg.child = XML::Node.new('meta')
129
- pkgname = meta.child = XML::Node.new('pkgname', 'libxml')
130
- assert_equal(xml, @doc.to_s)
90
+ def test_save_iso_8859_1
91
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1.xml")
92
+ bytes = @doc.save(temp_filename, :encoding => XML::Input::ISO_8859_1)
93
+ assert_equal(272, bytes)
94
+
95
+ contents = File.read(temp_filename)
96
+ assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\">\n <m\366tley_cr\374e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
97
+ contents)
98
+ ensure
99
+ File.delete(temp_filename)
131
100
  end
132
101
 
133
- def test_encoding_utf
134
- @doc.root = XML::Node.new('rubynet')
135
- @doc.encoding = XML::Input.encoding_to_s(XML::Input::UTF8)
136
- assert_instance_of(XML::Node, @doc.root)
137
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rubynet/>\n", @doc.to_s)
102
+ def test_save_iso_8859_1_no_indent
103
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1_no_indent.xml")
104
+ bytes = @doc.save(temp_filename, :indent => false, :encoding => XML::Input::ISO_8859_1)
105
+ assert_equal(265, bytes)
106
+
107
+ contents = File.read(temp_filename)
108
+ assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\"><m\366tley_cr\374e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e><iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden></bands>\n",
109
+ contents)
110
+ ensure
111
+ File.delete(temp_filename)
138
112
  end
139
113
 
140
- def test_encoding_latin1
141
- @doc.root = XML::Node.new('rubynet')
142
- @doc.encoding = XML::Input.encoding_to_s(XML::Input::ISO_8859_1)
143
- assert_instance_of(XML::Node, @doc.root)
144
- assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<rubynet/>\n", @doc.to_s)
114
+ # --- Debug ---
115
+ def test_debug
116
+ assert(@doc.debug)
145
117
  end
146
- end
118
+ end
@@ -0,0 +1,59 @@
1
+ require "xml"
2
+ require 'test/unit'
3
+
4
+ class TestNS < Test::Unit::TestCase
5
+ def setup
6
+ file = File.join(File.dirname(__FILE__), 'model/soap.xml')
7
+ @doc = XML::Document.file(file)
8
+ end
9
+
10
+ def teardown
11
+ @doc = nil
12
+ end
13
+
14
+ def test_create_ns
15
+ node = XML::Node.new('foo')
16
+ ns = XML::Namespace.new(node, 'my_namepace', 'http://www.mynamespace.com')
17
+ assert_equal(ns.prefix, 'my_namepace')
18
+ assert_equal(ns.href, 'http://www.mynamespace.com')
19
+ end
20
+
21
+ def test_create_default_ns
22
+ node = XML::Node.new('foo')
23
+ ns = XML::Namespace.new(node, nil, 'http://www.mynamespace.com')
24
+ assert_equal(ns.prefix, nil)
25
+ assert_equal(ns.href, 'http://www.mynamespace.com')
26
+ end
27
+
28
+ def test_create_unbound_ns
29
+ error = assert_raise(TypeError) do
30
+ XML::Namespace.new(nil, 'my_namepace', 'http://www.mynamespace.com')
31
+ end
32
+ assert_equal('wrong argument type nil (expected Data)', error.to_s)
33
+ end
34
+
35
+ def test_duplicate_ns
36
+ node = XML::Node.new('foo')
37
+ XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
38
+ assert_raises(XML::Error) do
39
+ XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
40
+ end
41
+ end
42
+
43
+ def test_eql
44
+ node = XML::Node.new('Envelope')
45
+ ns = XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
46
+
47
+ assert(node.namespaces.namespace.eql?(node.namespaces.namespace))
48
+ end
49
+
50
+ def test_equal
51
+ node1 = XML::Node.new('Envelope')
52
+ ns1 = XML::Namespace.new(node1, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
53
+
54
+ node2 = XML::Node.new('Envelope')
55
+ ns2 = XML::Namespace.new(node2, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
56
+
57
+ assert(ns1 == ns2)
58
+ end
59
+ end
@@ -0,0 +1,174 @@
1
+ require "xml"
2
+ require 'test/unit'
3
+
4
+ class TestNamespaces < Test::Unit::TestCase
5
+ def setup
6
+ file = File.join(File.dirname(__FILE__), 'model/soap.xml')
7
+ @doc = XML::Document.file(file)
8
+ end
9
+
10
+ def teardown
11
+ @doc = nil
12
+ end
13
+
14
+ def test_namespace
15
+ node = @doc.root
16
+ ns = node.namespaces.namespace
17
+ assert_equal('soap', ns.prefix)
18
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', ns.href)
19
+ end
20
+
21
+ def test_set_namespace
22
+ node = XML::Node.new('Envelope')
23
+ assert_equal('<Envelope/>', node.to_s)
24
+
25
+ ns = XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
26
+ assert_equal("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
27
+ assert_nil(node.namespaces.namespace)
28
+
29
+ # Now put the node in the soap namespace
30
+ node.namespaces.namespace = ns
31
+ assert_not_nil(node.namespaces.namespace)
32
+ assert_equal("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
33
+ end
34
+
35
+ def test_define_namespace
36
+ node = XML::Node.new('Envelope')
37
+ assert_equal('<Envelope/>', node.to_s)
38
+
39
+ XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
40
+ assert_equal("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
41
+ assert_nil(node.namespaces.namespace)
42
+ end
43
+
44
+ def test_define_default_namespace
45
+ node = XML::Node.new('Envelope')
46
+ assert_equal('<Envelope/>', node.to_s)
47
+
48
+ XML::Namespace.new(node, nil, 'http://schemas.xmlsoap.org/soap/envelope/')
49
+ assert_equal("<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
50
+ # This seems wrong, but appears to be the way libxml works
51
+ assert_nil(node.namespaces.namespace)
52
+ end
53
+
54
+ def test_namespaces
55
+ node = @doc.find_first('//ns1:IdAndName',
56
+ :ns1 => 'http://domain.somewhere.com')
57
+
58
+ namespaces = node.namespaces.sort
59
+ assert_equal(5, namespaces.length)
60
+
61
+ namespace = namespaces[0]
62
+ assert_instance_of(XML::Namespace, namespace)
63
+ assert_equal(nil, namespace.prefix)
64
+ assert_equal('http://services.somewhere.com', namespace.href)
65
+
66
+ namespace = namespaces[1]
67
+ assert_instance_of(XML::Namespace, namespace)
68
+ assert_equal('ns1', namespace.prefix)
69
+ assert_equal('http://domain.somewhere.com', namespace.href)
70
+
71
+ namespace = namespaces[2]
72
+ assert_instance_of(XML::Namespace, namespace)
73
+ assert_equal('soap', namespace.prefix)
74
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
75
+
76
+ namespace = namespaces[3]
77
+ assert_instance_of(XML::Namespace, namespace)
78
+ assert_equal('xsd', namespace.prefix)
79
+ assert_equal('http://www.w3.org/2001/XMLSchema', namespace.href)
80
+
81
+ namespace = namespaces[4]
82
+ assert_instance_of(XML::Namespace, namespace)
83
+ assert_equal('xsi', namespace.prefix)
84
+ assert_equal('http://www.w3.org/2001/XMLSchema-instance', namespace.href)
85
+ end
86
+
87
+ def test_namespaces
88
+ node = @doc.find_first('//ns1:IdAndName',
89
+ :ns1 => 'http://domain.somewhere.com')
90
+
91
+ namespaces = node.namespaces.each do |namespace|
92
+ assert_instance_of(XML::Namespace, namespace)
93
+ end
94
+ end
95
+
96
+ def test_namespace_definitions
97
+ ns_defs = @doc.root.namespaces.definitions
98
+ assert_equal(3, ns_defs.size)
99
+
100
+ namespace = ns_defs[0]
101
+ assert_instance_of(XML::Namespace, namespace)
102
+ assert_equal('soap', namespace.prefix)
103
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
104
+
105
+ namespace = ns_defs[1]
106
+ assert_instance_of(XML::Namespace, namespace)
107
+ assert_equal('xsd', namespace.prefix)
108
+ assert_equal('http://www.w3.org/2001/XMLSchema', namespace.href)
109
+
110
+ namespace = ns_defs[2]
111
+ assert_instance_of(XML::Namespace, namespace)
112
+ assert_equal('xsi', namespace.prefix)
113
+ assert_equal('http://www.w3.org/2001/XMLSchema-instance', namespace.href)
114
+
115
+ node = @doc.root.find_first('//ns:getManufacturerNamesResponse',
116
+ :ns => 'http://services.somewhere.com')
117
+ ns_defs = node.namespaces.definitions
118
+ assert_equal(1, ns_defs.size)
119
+
120
+ namespace = ns_defs[0]
121
+ assert_instance_of(XML::Namespace, namespace)
122
+ assert_equal(nil, namespace.prefix)
123
+ assert_equal('http://services.somewhere.com', namespace.href)
124
+ end
125
+
126
+ def test_find_by_prefix
127
+ node = @doc.find_first('//ns1:getManufacturerNamesResponse',
128
+ :ns1 => 'http://services.somewhere.com')
129
+
130
+ namespace = @doc.root.namespaces.find_by_prefix('soap')
131
+
132
+ assert_instance_of(XML::Namespace, namespace)
133
+ assert_equal('soap', namespace.prefix)
134
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
135
+ end
136
+
137
+ def test_find_default_ns
138
+ namespace = @doc.root.namespaces.find_by_prefix(nil)
139
+ assert_nil(namespace)
140
+
141
+ node = @doc.find_first('//ns1:getManufacturerNamesResponse',
142
+ :ns1 => 'http://services.somewhere.com')
143
+ namespace = node.namespaces.find_by_prefix(nil)
144
+
145
+ assert_instance_of(XML::Namespace, namespace)
146
+ assert_equal(nil, namespace.prefix)
147
+ assert_equal('http://services.somewhere.com', namespace.href)
148
+ end
149
+
150
+ def test_find_ns_by_href
151
+ node = @doc.find_first('//ns1:getManufacturerNamesResponse',
152
+ :ns1 => 'http://services.somewhere.com')
153
+
154
+ namespace = node.namespaces.find_by_href('http://schemas.xmlsoap.org/soap/envelope/')
155
+
156
+ assert_instance_of(XML::Namespace, namespace)
157
+ assert_equal('soap', namespace.prefix)
158
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
159
+ end
160
+
161
+ def test_default_namespace
162
+ doc = XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
163
+ ns = doc.root.namespaces.default
164
+ assert_equal(ns.href, 'http://schemas.xmlsoap.org/soap/envelope/')
165
+ end
166
+
167
+ def test_default_prefix
168
+ doc = XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
169
+ doc.root.namespaces.default_prefix = 'soap'
170
+
171
+ node = doc.root.find_first('/soap:Envelope')
172
+ assert_not_nil(node)
173
+ end
174
+ end