libxml-ruby 0.9.5-x86-mswin32-60 → 0.9.6-x86-mswin32-60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) 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/mingw/libxml_ruby.dll.a +0 -0
  52. data/ext/mingw/libxml_ruby.so +0 -0
  53. data/ext/vc/libxml_ruby.vcproj +13 -5
  54. data/lib/libxml.rb +4 -1
  55. data/lib/libxml/document.rb +40 -6
  56. data/lib/libxml/hpricot.rb +76 -76
  57. data/lib/libxml/namespace.rb +60 -0
  58. data/lib/libxml/namespaces.rb +36 -0
  59. data/lib/libxml/node.rb +90 -26
  60. data/lib/libxml/ns.rb +20 -0
  61. data/test/model/bands.xml +5 -0
  62. data/test/tc_attributes.rb +1 -1
  63. data/test/tc_document.rb +24 -41
  64. data/test/tc_document_write.rb +87 -115
  65. data/test/tc_namespace.rb +59 -0
  66. data/test/tc_namespaces.rb +174 -0
  67. data/test/tc_node.rb +41 -33
  68. data/test/tc_node_copy.rb +1 -1
  69. data/test/tc_node_edit.rb +6 -0
  70. data/test/tc_node_write.rb +76 -0
  71. data/test/tc_xinclude.rb +2 -9
  72. data/test/tc_xpath.rb +38 -11
  73. data/test/test_suite.rb +3 -1
  74. metadata +16 -9
  75. data/ext/libxml/ruby_xml_ns.c +0 -150
  76. data/test/ets_copy_bug.rb +0 -21
  77. data/test/ets_copy_bug3.rb +0 -38
  78. data/test/model/default_validation_bug.rb +0 -0
  79. 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