libxml-ruby 4.1.2 → 6.0.0

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 (172) hide show
  1. checksums.yaml +4 -4
  2. data/{HISTORY → CHANGELOG.md} +875 -887
  3. data/LICENSE +20 -20
  4. data/README.md +67 -0
  5. data/Rakefile +77 -98
  6. data/ext/libxml/extconf.rb +39 -20
  7. data/ext/libxml/libxml.c +67 -79
  8. data/ext/libxml/ruby_libxml.h +43 -44
  9. data/ext/libxml/ruby_xml.c +556 -899
  10. data/ext/libxml/ruby_xml.h +9 -10
  11. data/ext/libxml/ruby_xml_attr.c +338 -333
  12. data/ext/libxml/ruby_xml_attr.h +13 -12
  13. data/ext/libxml/ruby_xml_attr_decl.c +19 -12
  14. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  15. data/ext/libxml/ruby_xml_attributes.c +18 -9
  16. data/ext/libxml/ruby_xml_attributes.h +17 -15
  17. data/ext/libxml/ruby_xml_document.c +1142 -1129
  18. data/ext/libxml/ruby_xml_document.h +12 -11
  19. data/ext/libxml/ruby_xml_dtd.c +287 -248
  20. data/ext/libxml/ruby_xml_dtd.h +10 -9
  21. data/ext/libxml/ruby_xml_encoding.c +250 -250
  22. data/ext/libxml/ruby_xml_encoding.h +20 -18
  23. data/ext/libxml/ruby_xml_error.c +1003 -996
  24. data/ext/libxml/ruby_xml_error.h +14 -14
  25. data/ext/libxml/ruby_xml_html_parser.c +91 -91
  26. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  27. data/ext/libxml/ruby_xml_html_parser_context.c +364 -337
  28. data/ext/libxml/ruby_xml_html_parser_context.h +11 -10
  29. data/ext/libxml/ruby_xml_html_parser_options.c +48 -48
  30. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  31. data/ext/libxml/ruby_xml_input_cbg.c +216 -188
  32. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  33. data/ext/libxml/ruby_xml_io.c +49 -47
  34. data/ext/libxml/ruby_xml_io.h +10 -10
  35. data/ext/libxml/ruby_xml_namespace.c +159 -154
  36. data/ext/libxml/ruby_xml_namespace.h +11 -10
  37. data/ext/libxml/ruby_xml_namespaces.c +313 -293
  38. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  39. data/ext/libxml/ruby_xml_node.c +1433 -1398
  40. data/ext/libxml/ruby_xml_node.h +15 -13
  41. data/ext/libxml/ruby_xml_parser.c +91 -91
  42. data/ext/libxml/ruby_xml_parser.h +10 -10
  43. data/ext/libxml/ruby_xml_parser_context.c +1016 -1001
  44. data/ext/libxml/ruby_xml_parser_context.h +11 -10
  45. data/ext/libxml/ruby_xml_parser_options.c +74 -66
  46. data/ext/libxml/ruby_xml_parser_options.h +10 -10
  47. data/ext/libxml/ruby_xml_reader.c +40 -31
  48. data/ext/libxml/ruby_xml_reader.h +14 -14
  49. data/ext/libxml/ruby_xml_registry.c +31 -0
  50. data/ext/libxml/ruby_xml_registry.h +22 -0
  51. data/ext/libxml/ruby_xml_relaxng.c +21 -5
  52. data/ext/libxml/ruby_xml_relaxng.h +9 -8
  53. data/ext/libxml/ruby_xml_sax2_handler.c +326 -326
  54. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  55. data/ext/libxml/ruby_xml_sax_parser.c +108 -116
  56. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  57. data/ext/libxml/ruby_xml_schema.c +22 -15
  58. data/ext/libxml/ruby_xml_schema.h +26 -25
  59. data/ext/libxml/ruby_xml_schema_attribute.c +7 -7
  60. data/ext/libxml/ruby_xml_schema_attribute.h +37 -37
  61. data/ext/libxml/ruby_xml_schema_element.c +8 -8
  62. data/ext/libxml/ruby_xml_schema_element.h +11 -11
  63. data/ext/libxml/ruby_xml_schema_facet.c +50 -50
  64. data/ext/libxml/ruby_xml_schema_facet.h +9 -9
  65. data/ext/libxml/ruby_xml_schema_type.c +12 -19
  66. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  67. data/ext/libxml/ruby_xml_version.h +9 -9
  68. data/ext/libxml/ruby_xml_writer.c +183 -185
  69. data/ext/libxml/ruby_xml_writer.h +6 -6
  70. data/ext/libxml/ruby_xml_xinclude.c +20 -20
  71. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  72. data/ext/libxml/ruby_xml_xpath.c +195 -195
  73. data/ext/libxml/ruby_xml_xpath.h +15 -15
  74. data/ext/libxml/ruby_xml_xpath_context.c +408 -362
  75. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  76. data/ext/libxml/ruby_xml_xpath_expression.c +12 -6
  77. data/ext/libxml/ruby_xml_xpath_expression.h +11 -10
  78. data/ext/libxml/ruby_xml_xpath_object.c +69 -54
  79. data/ext/libxml/ruby_xml_xpath_object.h +19 -17
  80. data/ext/vc/libxml_ruby/libxml_ruby.vcxproj +271 -0
  81. data/ext/xcode/libxml-ruby.xcodeproj/project.pbxproj +633 -0
  82. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  83. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  84. data/ext/xcode/libxml-ruby.xcodeproj/xcshareddata/xcschemes/libxml-ruby.xcscheme +80 -0
  85. data/lib/libxml/attr.rb +122 -122
  86. data/lib/libxml/attr_decl.rb +80 -80
  87. data/lib/libxml/attributes.rb +13 -13
  88. data/lib/libxml/document.rb +165 -194
  89. data/lib/libxml/error.rb +122 -95
  90. data/lib/libxml/html_parser.rb +80 -96
  91. data/lib/libxml/namespace.rb +61 -61
  92. data/lib/libxml/namespaces.rb +37 -37
  93. data/lib/libxml/node.rb +321 -323
  94. data/lib/libxml/parser.rb +94 -100
  95. data/lib/libxml/sax_callbacks.rb +179 -179
  96. data/lib/libxml/sax_parser.rb +40 -40
  97. data/lib/libxml/schema/attribute.rb +27 -19
  98. data/lib/libxml/schema/element.rb +20 -0
  99. data/lib/libxml/schema/type.rb +44 -21
  100. data/lib/libxml/schema.rb +47 -47
  101. data/lib/libxml/tree.rb +28 -28
  102. data/lib/libxml-ruby.rb +30 -30
  103. data/libxml-ruby.gemspec +46 -48
  104. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  105. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  106. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  107. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  108. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  109. data/test/c14n/result/with-comments/example-1 +5 -5
  110. data/test/c14n/result/with-comments/example-2 +10 -10
  111. data/test/c14n/result/with-comments/example-3 +13 -13
  112. data/test/c14n/result/with-comments/example-4 +8 -8
  113. data/test/c14n/result/with-comments/example-5 +3 -3
  114. data/test/c14n/result/without-comments/example-1 +3 -3
  115. data/test/c14n/result/without-comments/example-2 +10 -10
  116. data/test/c14n/result/without-comments/example-3 +13 -13
  117. data/test/c14n/result/without-comments/example-4 +8 -8
  118. data/test/c14n/result/without-comments/example-5 +2 -2
  119. data/test/test_attr.rb +179 -180
  120. data/test/test_attr_decl.rb +131 -131
  121. data/test/test_attributes.rb +135 -135
  122. data/test/test_canonicalize.rb +122 -120
  123. data/test/test_document.rb +138 -132
  124. data/test/test_document_write.rb +142 -145
  125. data/test/test_dtd.rb +134 -129
  126. data/test/test_encoding.rb +126 -129
  127. data/test/test_encoding_sax.rb +114 -114
  128. data/test/test_error.rb +197 -194
  129. data/test/test_helper.rb +21 -13
  130. data/test/test_html_parser.rb +166 -162
  131. data/test/test_html_parser_context.rb +22 -22
  132. data/test/test_input_callbacks.rb +36 -0
  133. data/test/test_namespace.rb +58 -60
  134. data/test/test_namespaces.rb +200 -200
  135. data/test/test_node.rb +251 -237
  136. data/test/test_node_cdata.rb +50 -50
  137. data/test/test_node_comment.rb +32 -32
  138. data/test/test_node_copy.rb +40 -40
  139. data/test/test_node_edit.rb +176 -158
  140. data/test/test_node_pi.rb +37 -37
  141. data/test/test_node_text.rb +69 -69
  142. data/test/test_node_write.rb +93 -96
  143. data/test/test_node_xlink.rb +28 -28
  144. data/test/test_parser.rb +297 -324
  145. data/test/test_parser_context.rb +198 -198
  146. data/test/test_properties.rb +38 -38
  147. data/test/test_reader.rb +413 -364
  148. data/test/test_relaxng.rb +59 -53
  149. data/test/test_sax_parser.rb +345 -326
  150. data/test/test_schema.rb +28 -0
  151. data/test/test_traversal.rb +152 -152
  152. data/test/test_writer.rb +469 -468
  153. data/test/test_xinclude.rb +20 -20
  154. data/test/test_xml.rb +164 -267
  155. data/test/test_xpath.rb +244 -244
  156. data/test/test_xpath_context.rb +87 -87
  157. data/test/test_xpath_expression.rb +37 -37
  158. metadata +49 -31
  159. data/README.rdoc +0 -217
  160. data/ext/libxml/extconf.h +0 -3
  161. data/ext/libxml/ruby_xml_cbg.c +0 -85
  162. data/lib/libxml/hpricot.rb +0 -78
  163. data/lib/libxml.rb +0 -5
  164. data/lib/xml/libxml.rb +0 -10
  165. data/lib/xml.rb +0 -14
  166. data/script/benchmark/depixelate +0 -634
  167. data/script/benchmark/hamlet.xml +0 -9055
  168. data/script/benchmark/parsecount +0 -170
  169. data/script/benchmark/sock_entries.xml +0 -507
  170. data/script/benchmark/throughput +0 -41
  171. data/script/test +0 -6
  172. data/test/test_deprecated_require.rb +0 -12
@@ -1,4 +1,4 @@
1
- <?xml-stylesheet href="doc.xsl"
2
- type="text/xsl" ?>
3
- <doc>Hello, world!</doc>
1
+ <?xml-stylesheet href="doc.xsl"
2
+ type="text/xsl" ?>
3
+ <doc>Hello, world!</doc>
4
4
  <?pi-without-data?>
@@ -1,11 +1,11 @@
1
- <doc>
2
- <clean> </clean>
3
- <dirty> A B </dirty>
4
- <mixed>
5
- A
6
- <clean> </clean>
7
- B
8
- <dirty> A B </dirty>
9
- C
10
- </mixed>
1
+ <doc>
2
+ <clean> </clean>
3
+ <dirty> A B </dirty>
4
+ <mixed>
5
+ A
6
+ <clean> </clean>
7
+ B
8
+ <dirty> A B </dirty>
9
+ C
10
+ </mixed>
11
11
  </doc>
@@ -1,14 +1,14 @@
1
- <doc>
2
- <e1></e1>
3
- <e2></e2>
4
- <e3 id="elem3" name="elem3"></e3>
5
- <e4 id="elem4" name="elem4"></e4>
6
- <e5 xmlns="http://www.uvic.ca" xmlns:a="http://www.w3.org" xmlns:b="http://www.ietf.org" attr="I'm" attr2="all" b:attr="sorted" a:attr="out"></e5>
7
- <e6 xmlns:a="http://www.w3.org">
8
- <e7 xmlns="http://www.ietf.org">
9
- <e8 xmlns="">
10
- <e9 xmlns:a="http://www.ietf.org" attr="default"></e9>
11
- </e8>
12
- </e7>
13
- </e6>
1
+ <doc>
2
+ <e1></e1>
3
+ <e2></e2>
4
+ <e3 id="elem3" name="elem3"></e3>
5
+ <e4 id="elem4" name="elem4"></e4>
6
+ <e5 xmlns="http://www.uvic.ca" xmlns:a="http://www.w3.org" xmlns:b="http://www.ietf.org" attr="I'm" attr2="all" b:attr="sorted" a:attr="out"></e5>
7
+ <e6 xmlns:a="http://www.w3.org">
8
+ <e7 xmlns="http://www.ietf.org">
9
+ <e8 xmlns="">
10
+ <e9 xmlns:a="http://www.ietf.org" attr="default"></e9>
11
+ </e8>
12
+ </e7>
13
+ </e6>
14
14
  </doc>
@@ -1,9 +1,9 @@
1
- <doc>
2
- <text>First line&#xD;
3
- Second line</text>
4
- <value>2</value>
5
- <compute>value&gt;"0" &amp;&amp; value&lt;"10" ?"valid":"error"</compute>
6
- <compute expr="value>&quot;0&quot; &amp;&amp; value&lt;&quot;10&quot; ?&quot;valid&quot;:&quot;error&quot;">valid</compute>
7
- <norm attr=" ' &#xD;&#xA;&#x9; ' "></norm>
8
- <normId id="' &#xD;&#xA;&#x9; '"></normId>
1
+ <doc>
2
+ <text>First line&#xD;
3
+ Second line</text>
4
+ <value>2</value>
5
+ <compute>value&gt;"0" &amp;&amp; value&lt;"10" ?"valid":"error"</compute>
6
+ <compute expr="value>&quot;0&quot; &amp;&amp; value&lt;&quot;10&quot; ?&quot;valid&quot;:&quot;error&quot;">valid</compute>
7
+ <norm attr=" ' &#xD;&#xA;&#x9; ' "></norm>
8
+ <normId id="' &#xD;&#xA;&#x9; '"></normId>
9
9
  </doc>
@@ -1,3 +1,3 @@
1
- <doc attrExtEnt="entExt">
2
- Hello, world!
1
+ <doc attrExtEnt="entExt">
2
+ Hello, world!
3
3
  </doc>
data/test/test_attr.rb CHANGED
@@ -1,181 +1,180 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
- class AttrNodeTest < Minitest::Test
6
- def setup
7
- xp = LibXML::XML::Parser.string(<<-EOS)
8
- <CityModel
9
- xmlns="http://www.opengis.net/examples"
10
- xmlns:city="http://www.opengis.net/examples"
11
- xmlns:gml="http://www.opengis.net/gml"
12
- xmlns:xlink="http://www.w3.org/1999/xlink"
13
- xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
14
- xsi:schemaLocation="http://www.opengis.net/examples city.xsd">
15
- <type>City</type>
16
- <cityMember name="Cambridge"
17
- xlink:type="simple"
18
- xlink:title="Trinity Lane"
19
- xlink:href="http://www.foo.net/cgi-bin/wfs?FeatureID=C10239"
20
- gml:remoteSchema="city.xsd#xpointer(//complexType[@name='RoadType'])"/>
21
- </CityModel>
22
- EOS
23
-
24
- @doc = xp.parse
25
- end
26
-
27
- def teardown
28
- @doc = nil
29
- end
30
-
31
- def city_member
32
- @doc.find('/city:CityModel/city:cityMember').first
33
- end
34
-
35
- def test_doc
36
- refute_nil(@doc)
37
- assert_equal(LibXML::XML::Encoding::NONE, @doc.encoding)
38
- end
39
-
40
- def test_types
41
- attribute = city_member.attributes.get_attribute('name')
42
- assert_instance_of(LibXML::XML::Attr, attribute)
43
- assert_equal('attribute', attribute.node_type_name)
44
- end
45
-
46
- def test_name
47
- attribute = city_member.attributes.get_attribute('name')
48
- assert_equal('name', attribute.name)
49
- assert_equal(Encoding::UTF_8, attribute.name.encoding)
50
-
51
- attribute = city_member.attributes.get_attribute('href')
52
- assert_equal('href', attribute.name)
53
- assert_equal('xlink', attribute.ns.prefix)
54
- assert_equal('http://www.w3.org/1999/xlink', attribute.ns.href)
55
-
56
- attribute = city_member.attributes.get_attribute_ns('http://www.w3.org/1999/xlink', 'href')
57
- assert_equal('href', attribute.name)
58
- assert_equal('xlink', attribute.ns.prefix)
59
- assert_equal('http://www.w3.org/1999/xlink', attribute.ns.href)
60
- end
61
-
62
- def test_value
63
- attribute = city_member.attributes.get_attribute('name')
64
- assert_equal('Cambridge', attribute.value)
65
- assert_equal(Encoding::UTF_8, attribute.value.encoding)
66
-
67
- attribute = city_member.attributes.get_attribute('href')
68
- assert_equal('http://www.foo.net/cgi-bin/wfs?FeatureID=C10239', attribute.value)
69
- end
70
-
71
- def test_set_value
72
- attribute = city_member.attributes.get_attribute('name')
73
- attribute.value = 'London'
74
- assert_equal('London', attribute.value)
75
- assert_equal(Encoding::UTF_8, attribute.value.encoding)
76
-
77
- attribute = city_member.attributes.get_attribute('href')
78
- attribute.value = 'http://i.have.changed'
79
- assert_equal('http://i.have.changed', attribute.value)
80
- assert_equal(Encoding::UTF_8, attribute.value.encoding)
81
- end
82
-
83
- def test_set_nil
84
- attribute = city_member.attributes.get_attribute('name')
85
- assert_raises(TypeError) do
86
- attribute.value = nil
87
- end
88
- end
89
-
90
- def test_create
91
- attributes = city_member.attributes
92
- assert_equal(5, attributes.length)
93
-
94
- attr = LibXML::XML::Attr.new(city_member, 'size', '50,000')
95
- assert_instance_of(LibXML::XML::Attr, attr)
96
-
97
- attributes = city_member.attributes
98
- assert_equal(6, attributes.length)
99
-
100
- assert_equal(attributes['size'], '50,000')
101
- end
102
-
103
- def test_create_on_node
104
- attributes = city_member.attributes
105
- assert_equal(5, attributes.length)
106
-
107
- attributes['country'] = 'England'
108
-
109
- attributes = city_member.attributes
110
- assert_equal(6, attributes.length)
111
-
112
- assert_equal(attributes['country'], 'England')
113
- end
114
-
115
- def test_create_ns
116
- assert_equal(5, city_member.attributes.length)
117
-
118
- ns = LibXML::XML::Namespace.new(city_member, 'my_namepace', 'http://www.mynamespace.com')
119
- attr = LibXML::XML::Attr.new(city_member, 'rating', 'rocks', ns)
120
- assert_instance_of(LibXML::XML::Attr, attr)
121
- assert_equal('rating', attr.name)
122
- assert_equal('rocks', attr.value)
123
-
124
- attributes = city_member.attributes
125
- assert_equal(6, attributes.length)
126
-
127
- assert_equal('rocks', city_member['rating'])
128
- end
129
-
130
- def test_remove
131
- attributes = city_member.attributes
132
- assert_equal(5, attributes.length)
133
-
134
- attribute = attributes.get_attribute('name')
135
- refute_nil(attribute.parent)
136
- assert(attribute.parent?)
137
-
138
- attribute.remove!
139
- assert_equal(4, attributes.length)
140
-
141
- attribute = attributes.get_attribute('name')
142
- assert_nil(attribute)
143
- end
144
-
145
- def test_first
146
- attribute = city_member.attributes.first
147
- assert_instance_of(LibXML::XML::Attr, attribute)
148
- assert_equal('name', attribute.name)
149
- assert_equal('Cambridge', attribute.value)
150
-
151
- attribute = attribute.next
152
- assert_instance_of(LibXML::XML::Attr, attribute)
153
- assert_equal('type', attribute.name)
154
- assert_equal('simple', attribute.value)
155
-
156
- attribute = attribute.next
157
- assert_instance_of(LibXML::XML::Attr, attribute)
158
- assert_equal('title', attribute.name)
159
- assert_equal('Trinity Lane', attribute.value)
160
-
161
- attribute = attribute.next
162
- assert_instance_of(LibXML::XML::Attr, attribute)
163
- assert_equal('href', attribute.name)
164
- assert_equal('http://www.foo.net/cgi-bin/wfs?FeatureID=C10239', attribute.value)
165
-
166
- attribute = attribute.next
167
- assert_instance_of(LibXML::XML::Attr, attribute)
168
- assert_equal('remoteSchema', attribute.name)
169
- assert_equal("city.xsd#xpointer(//complexType[@name='RoadType'])", attribute.value)
170
-
171
- attribute = attribute.next
172
- assert_nil(attribute)
173
- end
174
-
175
- def test_no_attributes
176
- element = @doc.find('/city:CityModel/city:type').first
177
-
178
- refute_nil(element.attributes)
179
- assert_equal(0, element.attributes.length)
180
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+ class AttrNodeTest < Minitest::Test
6
+ def setup
7
+ xp = LibXML::XML::Parser.string(<<-EOS)
8
+ <CityModel
9
+ xmlns="http://www.opengis.net/examples"
10
+ xmlns:city="http://www.opengis.net/examples"
11
+ xmlns:gml="http://www.opengis.net/gml"
12
+ xmlns:xlink="http://www.w3.org/1999/xlink"
13
+ xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
14
+ xsi:schemaLocation="http://www.opengis.net/examples city.xsd">
15
+ <type>City</type>
16
+ <cityMember name="Cambridge"
17
+ xlink:type="simple"
18
+ xlink:title="Trinity Lane"
19
+ xlink:href="http://www.foo.net/cgi-bin/wfs?FeatureID=C10239"
20
+ gml:remoteSchema="city.xsd#xpointer(//complexType[@name='RoadType'])"/>
21
+ </CityModel>
22
+ EOS
23
+ @doc = xp.parse
24
+ end
25
+
26
+ def teardown
27
+ @doc = nil
28
+ end
29
+
30
+ def city_member
31
+ @doc.find('/city:CityModel/city:cityMember').first
32
+ end
33
+
34
+ def test_doc
35
+ refute_nil(@doc)
36
+ assert_equal(LibXML::XML::Encoding::NONE, @doc.encoding)
37
+ end
38
+
39
+ def test_types
40
+ attribute = city_member.attributes.get_attribute('name')
41
+ assert_instance_of(LibXML::XML::Attr, attribute)
42
+ assert_equal('attribute', attribute.node_type_name)
43
+ end
44
+
45
+ def test_name
46
+ attribute = city_member.attributes.get_attribute('name')
47
+ assert_equal('name', attribute.name)
48
+ assert_equal(Encoding::UTF_8, attribute.name.encoding)
49
+
50
+ attribute = city_member.attributes.get_attribute('href')
51
+ assert_equal('href', attribute.name)
52
+ assert_equal('xlink', attribute.ns.prefix)
53
+ assert_equal('http://www.w3.org/1999/xlink', attribute.ns.href)
54
+
55
+ attribute = city_member.attributes.get_attribute_ns('http://www.w3.org/1999/xlink', 'href')
56
+ assert_equal('href', attribute.name)
57
+ assert_equal('xlink', attribute.ns.prefix)
58
+ assert_equal('http://www.w3.org/1999/xlink', attribute.ns.href)
59
+ end
60
+
61
+ def test_value
62
+ attribute = city_member.attributes.get_attribute('name')
63
+ assert_equal('Cambridge', attribute.value)
64
+ assert_equal(Encoding::UTF_8, attribute.value.encoding)
65
+
66
+ attribute = city_member.attributes.get_attribute('href')
67
+ assert_equal('http://www.foo.net/cgi-bin/wfs?FeatureID=C10239', attribute.value)
68
+ end
69
+
70
+ def test_set_value
71
+ attribute = city_member.attributes.get_attribute('name')
72
+ attribute.value = 'London'
73
+ assert_equal('London', attribute.value)
74
+ assert_equal(Encoding::UTF_8, attribute.value.encoding)
75
+
76
+ attribute = city_member.attributes.get_attribute('href')
77
+ attribute.value = 'http://i.have.changed'
78
+ assert_equal('http://i.have.changed', attribute.value)
79
+ assert_equal(Encoding::UTF_8, attribute.value.encoding)
80
+ end
81
+
82
+ def test_set_nil
83
+ attribute = city_member.attributes.get_attribute('name')
84
+ assert_raises(TypeError) do
85
+ attribute.value = nil
86
+ end
87
+ end
88
+
89
+ def test_create
90
+ attributes = city_member.attributes
91
+ assert_equal(5, attributes.length)
92
+
93
+ attr = LibXML::XML::Attr.new(city_member, 'size', '50,000')
94
+ assert_instance_of(LibXML::XML::Attr, attr)
95
+
96
+ attributes = city_member.attributes
97
+ assert_equal(6, attributes.length)
98
+
99
+ assert_equal(attributes['size'], '50,000')
100
+ end
101
+
102
+ def test_create_on_node
103
+ attributes = city_member.attributes
104
+ assert_equal(5, attributes.length)
105
+
106
+ attributes['country'] = 'England'
107
+
108
+ attributes = city_member.attributes
109
+ assert_equal(6, attributes.length)
110
+
111
+ assert_equal(attributes['country'], 'England')
112
+ end
113
+
114
+ def test_create_ns
115
+ assert_equal(5, city_member.attributes.length)
116
+
117
+ ns = LibXML::XML::Namespace.new(city_member, 'my_namepace', 'http://www.mynamespace.com')
118
+ attr = LibXML::XML::Attr.new(city_member, 'rating', 'rocks', ns)
119
+ assert_instance_of(LibXML::XML::Attr, attr)
120
+ assert_equal('rating', attr.name)
121
+ assert_equal('rocks', attr.value)
122
+
123
+ attributes = city_member.attributes
124
+ assert_equal(6, attributes.length)
125
+
126
+ assert_equal('rocks', city_member['rating'])
127
+ end
128
+
129
+ def test_remove
130
+ attributes = city_member.attributes
131
+ assert_equal(5, attributes.length)
132
+
133
+ attribute = attributes.get_attribute('name')
134
+ refute_nil(attribute.parent)
135
+ assert(attribute.parent?)
136
+
137
+ attribute.remove!
138
+ assert_equal(4, attributes.length)
139
+
140
+ attribute = attributes.get_attribute('name')
141
+ assert_nil(attribute)
142
+ end
143
+
144
+ def test_first
145
+ attribute = city_member.attributes.first
146
+ assert_instance_of(LibXML::XML::Attr, attribute)
147
+ assert_equal('name', attribute.name)
148
+ assert_equal('Cambridge', attribute.value)
149
+
150
+ attribute = attribute.next
151
+ assert_instance_of(LibXML::XML::Attr, attribute)
152
+ assert_equal('type', attribute.name)
153
+ assert_equal('simple', attribute.value)
154
+
155
+ attribute = attribute.next
156
+ assert_instance_of(LibXML::XML::Attr, attribute)
157
+ assert_equal('title', attribute.name)
158
+ assert_equal('Trinity Lane', attribute.value)
159
+
160
+ attribute = attribute.next
161
+ assert_instance_of(LibXML::XML::Attr, attribute)
162
+ assert_equal('href', attribute.name)
163
+ assert_equal('http://www.foo.net/cgi-bin/wfs?FeatureID=C10239', attribute.value)
164
+
165
+ attribute = attribute.next
166
+ assert_instance_of(LibXML::XML::Attr, attribute)
167
+ assert_equal('remoteSchema', attribute.name)
168
+ assert_equal("city.xsd#xpointer(//complexType[@name='RoadType'])", attribute.value)
169
+
170
+ attribute = attribute.next
171
+ assert_nil(attribute)
172
+ end
173
+
174
+ def test_no_attributes
175
+ element = @doc.find('/city:CityModel/city:type').first
176
+
177
+ refute_nil(element.attributes)
178
+ assert_equal(0, element.attributes.length)
179
+ end
181
180
  end