libxml-ruby 5.0.6 → 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 (131) hide show
  1. checksums.yaml +4 -4
  2. data/{HISTORY → CHANGELOG.md} +875 -930
  3. data/LICENSE +20 -20
  4. data/README.md +67 -0
  5. data/Rakefile +13 -34
  6. data/ext/libxml/extconf.rb +34 -20
  7. data/ext/libxml/libxml.c +2 -14
  8. data/ext/libxml/ruby_libxml.h +1 -1
  9. data/ext/libxml/ruby_xml_attr.c +27 -22
  10. data/ext/libxml/ruby_xml_attr.h +1 -0
  11. data/ext/libxml/ruby_xml_attr_decl.c +19 -12
  12. data/ext/libxml/ruby_xml_attributes.c +18 -9
  13. data/ext/libxml/ruby_xml_document.c +111 -98
  14. data/ext/libxml/ruby_xml_document.h +1 -0
  15. data/ext/libxml/ruby_xml_dtd.c +49 -19
  16. data/ext/libxml/ruby_xml_dtd.h +1 -0
  17. data/ext/libxml/ruby_xml_html_parser.c +1 -1
  18. data/ext/libxml/ruby_xml_html_parser_context.c +19 -6
  19. data/ext/libxml/ruby_xml_html_parser_context.h +1 -0
  20. data/ext/libxml/ruby_xml_input_cbg.c +45 -17
  21. data/ext/libxml/ruby_xml_io.c +3 -1
  22. data/ext/libxml/ruby_xml_namespace.c +20 -12
  23. data/ext/libxml/ruby_xml_namespace.h +1 -0
  24. data/ext/libxml/ruby_xml_namespaces.c +40 -20
  25. data/ext/libxml/ruby_xml_node.c +71 -32
  26. data/ext/libxml/ruby_xml_node.h +2 -0
  27. data/ext/libxml/ruby_xml_parser.c +1 -1
  28. data/ext/libxml/ruby_xml_parser_context.c +54 -47
  29. data/ext/libxml/ruby_xml_parser_context.h +1 -0
  30. data/ext/libxml/ruby_xml_reader.c +25 -15
  31. data/ext/libxml/ruby_xml_registry.c +31 -0
  32. data/ext/libxml/ruby_xml_registry.h +22 -0
  33. data/ext/libxml/ruby_xml_relaxng.c +21 -5
  34. data/ext/libxml/ruby_xml_relaxng.h +1 -0
  35. data/ext/libxml/ruby_xml_sax_parser.c +1 -1
  36. data/ext/libxml/ruby_xml_schema.c +18 -11
  37. data/ext/libxml/ruby_xml_schema.h +1 -0
  38. data/ext/libxml/ruby_xml_schema_attribute.c +7 -7
  39. data/ext/libxml/ruby_xml_schema_element.c +8 -8
  40. data/ext/libxml/ruby_xml_schema_facet.c +7 -7
  41. data/ext/libxml/ruby_xml_schema_type.c +12 -19
  42. data/ext/libxml/ruby_xml_version.h +4 -4
  43. data/ext/libxml/ruby_xml_writer.c +18 -6
  44. data/ext/libxml/ruby_xml_xpath.c +2 -2
  45. data/ext/libxml/ruby_xml_xpath.h +1 -1
  46. data/ext/libxml/ruby_xml_xpath_context.c +72 -26
  47. data/ext/libxml/ruby_xml_xpath_expression.c +11 -5
  48. data/ext/libxml/ruby_xml_xpath_expression.h +1 -0
  49. data/ext/libxml/ruby_xml_xpath_object.c +69 -54
  50. data/ext/libxml/ruby_xml_xpath_object.h +3 -1
  51. data/ext/vc/libxml_ruby/libxml_ruby.vcxproj +271 -0
  52. data/ext/xcode/libxml-ruby.xcodeproj/project.pbxproj +633 -0
  53. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  54. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  55. data/ext/xcode/libxml-ruby.xcodeproj/xcshareddata/xcschemes/libxml-ruby.xcscheme +80 -0
  56. data/lib/libxml/document.rb +0 -29
  57. data/lib/libxml/error.rb +30 -3
  58. data/lib/libxml/html_parser.rb +0 -16
  59. data/lib/libxml/node.rb +1 -3
  60. data/lib/libxml/parser.rb +0 -8
  61. data/lib/libxml/schema/attribute.rb +27 -19
  62. data/lib/libxml/schema/element.rb +20 -0
  63. data/lib/libxml/schema/type.rb +44 -21
  64. data/lib/libxml/schema.rb +47 -47
  65. data/lib/libxml-ruby.rb +30 -30
  66. data/libxml-ruby.gemspec +12 -16
  67. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  68. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  69. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  70. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  71. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  72. data/test/c14n/result/with-comments/example-1 +5 -5
  73. data/test/c14n/result/with-comments/example-2 +10 -10
  74. data/test/c14n/result/with-comments/example-3 +13 -13
  75. data/test/c14n/result/with-comments/example-4 +8 -8
  76. data/test/c14n/result/with-comments/example-5 +3 -3
  77. data/test/c14n/result/without-comments/example-1 +3 -3
  78. data/test/c14n/result/without-comments/example-2 +10 -10
  79. data/test/c14n/result/without-comments/example-3 +13 -13
  80. data/test/c14n/result/without-comments/example-4 +8 -8
  81. data/test/c14n/result/without-comments/example-5 +2 -2
  82. data/test/test_attr.rb +179 -180
  83. data/test/test_attr_decl.rb +131 -131
  84. data/test/test_attributes.rb +135 -135
  85. data/test/test_canonicalize.rb +122 -120
  86. data/test/test_document.rb +2 -4
  87. data/test/test_dtd.rb +12 -4
  88. data/test/test_encoding_sax.rb +114 -114
  89. data/test/test_error.rb +1 -1
  90. data/test/test_html_parser.rb +6 -2
  91. data/test/test_html_parser_context.rb +22 -22
  92. data/test/test_input_callbacks.rb +36 -0
  93. data/test/test_namespace.rb +1 -1
  94. data/test/test_namespaces.rb +200 -200
  95. data/test/test_node.rb +16 -0
  96. data/test/test_node_cdata.rb +50 -50
  97. data/test/test_node_comment.rb +32 -32
  98. data/test/test_node_copy.rb +40 -40
  99. data/test/test_node_edit.rb +176 -158
  100. data/test/test_node_pi.rb +37 -37
  101. data/test/test_node_text.rb +69 -69
  102. data/test/test_node_xlink.rb +28 -28
  103. data/test/test_parser.rb +5 -41
  104. data/test/test_parser_context.rb +198 -198
  105. data/test/test_properties.rb +38 -38
  106. data/test/test_reader.rb +55 -6
  107. data/test/test_relaxng.rb +59 -53
  108. data/test/test_sax_parser.rb +345 -345
  109. data/test/test_schema.rb +28 -0
  110. data/test/test_traversal.rb +152 -152
  111. data/test/test_writer.rb +0 -31
  112. data/test/test_xinclude.rb +20 -20
  113. data/test/test_xml.rb +3 -7
  114. data/test/test_xpath.rb +244 -244
  115. data/test/test_xpath_context.rb +87 -87
  116. data/test/test_xpath_expression.rb +37 -37
  117. metadata +32 -25
  118. data/README.rdoc +0 -208
  119. data/ext/libxml/extconf.h +0 -4
  120. data/ext/libxml/ruby_xml_cbg.c +0 -85
  121. data/lib/libxml/hpricot.rb +0 -78
  122. data/lib/libxml.rb +0 -5
  123. data/lib/xml/libxml.rb +0 -10
  124. data/lib/xml.rb +0 -14
  125. data/script/benchmark/depixelate +0 -634
  126. data/script/benchmark/hamlet.xml +0 -9055
  127. data/script/benchmark/parsecount +0 -170
  128. data/script/benchmark/sock_entries.xml +0 -507
  129. data/script/benchmark/throughput +0 -41
  130. data/script/test +0 -6
  131. data/test/test_deprecated_require.rb +0 -12
@@ -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>
@@ -1,6 +1,6 @@
1
- <?xml-stylesheet href="doc.xsl"
2
- type="text/xsl" ?>
3
- <doc>Hello, world!<!-- Comment 1 --></doc>
4
- <?pi-without-data?>
5
- <!-- Comment 2 -->
1
+ <?xml-stylesheet href="doc.xsl"
2
+ type="text/xsl" ?>
3
+ <doc>Hello, world!<!-- Comment 1 --></doc>
4
+ <?pi-without-data?>
5
+ <!-- Comment 2 -->
6
6
  <!-- Comment 3 -->
@@ -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,4 +1,4 @@
1
- <doc attrExtEnt="entExt">
2
- Hello, world!
3
- </doc>
1
+ <doc attrExtEnt="entExt">
2
+ Hello, world!
3
+ </doc>
4
4
  <!-- Let world.txt contain "world" (excluding the quotes) -->
@@ -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