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,120 +1,122 @@
1
- # encoding: UTF-8
2
- require_relative './test_helper'
3
-
4
- class TestCanonicalize < Minitest::Test
5
- def path(file)
6
- File.join(File.dirname(__FILE__), file)
7
- end
8
-
9
- # (www.w3.org) 3.1 PIs, Comments, and Outside of Document Element
10
- # http://www.w3.org/TR/xml-c14n#Example-OutsideDoc
11
- def test_canonicalize_with_w3c_c14n_3_1
12
- given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-1.xml'))
13
-
14
- # With Comments
15
- expected_with_comments = IO.read(self.path('c14n/result/with-comments/example-1'))
16
- assert_equal(expected_with_comments, given_doc.canonicalize(:comments => true))
17
-
18
- # Without Comments
19
- expected_without_comments = IO.read(self.path('c14n/result/without-comments/example-1'))
20
- assert_equal(expected_without_comments, given_doc.canonicalize)
21
- assert_equal(expected_without_comments, given_doc.canonicalize(:comments => false))
22
-
23
- # Without Comments (XML_C14N_1_1)
24
- expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-1'))
25
- mode = LibXML::XML::Document::XML_C14N_1_1
26
- assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
27
- end#test_canonicalize_with_w3c_c14n_3_1
28
-
29
-
30
- # (www.w3.org) 3.2 Whitespace in Document Content
31
- # http://www.w3.org/TR/xml-c14n#Example-WhitespaceInContent
32
- def test_canonicalize_with_w3c_c14n_3_2
33
- given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-2.xml'))
34
- expected = IO.read(self.path('c14n/result/without-comments/example-2'))
35
- assert_equal(expected, given_doc.canonicalize)
36
-
37
- expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-2'))
38
- mode = LibXML::XML::Document::XML_C14N_1_1
39
- assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
40
- end
41
-
42
- # (www.w3.org) 3.3 Start and End Tags
43
- # http://www.w3.org/TR/xml-c14n#Example-SETags
44
- # (2012-02-20) Test failing due to missing 'attr' in 'e9' node.
45
- # - Embedded DTD not parsed out of XML, therefore default attributes are
46
- # not applied to canonicalization.
47
- def test_canonicalize_with_w3c_c14n_3_3
48
- given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-3.xml'))
49
- expected = IO.read(self.path('c14n/result/without-comments/example-3'))
50
- assert_equal(expected, given_doc.canonicalize)
51
-
52
- expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-3'))
53
- mode = LibXML::XML::Document::XML_C14N_1_1
54
- assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
55
- end
56
-
57
- # (www.w3.org) 3.4 Character Modifications and Character References
58
- # http://www.w3.org/TR/xml-c14n#Example-Chars
59
- def test_canonicalize_with_w3c_c14n_3_4
60
- given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-4.xml'))
61
- expected = IO.read(self.path('c14n/result/without-comments/example-4'))
62
- assert_equal(expected, given_doc.canonicalize)
63
-
64
- expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-4'))
65
- mode = LibXML::XML::Document::XML_C14N_1_1
66
- assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
67
- end
68
-
69
- # (www.w3.org) 3.5 Entity References
70
- # http://www.w3.org/TR/xml-c14n#Example-Entities
71
- # (2012-02-20) Failing likely due to a logic error
72
- # - libxml2(c14n.c:1788) XML_ENTITY_REF_NODE is invalid node for parsing.
73
- def test_canonicalize_with_w3c_c14n_3_5
74
- #given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-5.xml'))
75
-
76
- # With Comments
77
- #expected_with_comments = IO.read(self.path('c14n/result/with-comments/example-5'))
78
-
79
- # TODO - CANNOT COMPLETE TEST unless libxml2 supports additional node types.
80
- #assert_equal(expected_with_comments, given_doc.canonicalize(:comments => true))
81
-
82
- # Without Comments
83
- #expected_without_comments = IO.read(self.path('c14n/result/without-comments/example-5'))
84
- # TODO - CANNOT COMPLETE TEST unless libxml2 supports additional node types.
85
- #assert_equal(expected_without_comments, given_doc.canonicalize(:comments => false))
86
- #expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-5'))
87
- #mode = LibXML::XML::Document::XML_C14N_1_1
88
-
89
- # TODO - CANNOT COMPLETE TEST unless libxml2 supports additional node types.
90
- #assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
91
- end
92
-
93
- # (www.w3.org) 3.6 UTF-8 Encoding
94
- # http://www.w3.org/TR/xml-c14n#Example-UTF8
95
- def test_canonicalize_with_w3c_c14n_3_6
96
- given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-6.xml'))
97
- expected = IO.read(self.path('c14n/result/without-comments/example-6'), :encoding => Encoding::UTF_8)
98
- assert_equal(expected, given_doc.canonicalize)
99
-
100
- expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-6'), :encoding => Encoding::UTF_8)
101
- mode = LibXML::XML::Document::XML_C14N_1_1
102
- assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
103
- end
104
-
105
- # (www.w3.org) 3.7 Document Subsets
106
- # http://www.w3.org/TR/xml-c14n#Example-DocSubsets
107
- def test_canonicalize_with_w3c_c14n_3_7
108
- # Non Canonicalized Document
109
- # given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-7.xml'))
110
- #expected = IO.read(self.path('c14n/result/without-comments/example-7'))
111
-
112
- # e1_node = given_doc.find_first('ietf:e1', 'ietf:http://www.ietf.org')
113
-
114
- # Select current node, all child nodes, all attributes and namespace nodes
115
- #subdoc_nodes = e1_node.find("(.//.|.//@id|namespace::*)")
116
-
117
- # TODO - This fails because the namespace nodes aren't taken into account
118
- # assert_equal(expected, given_doc.canonicalize(:nodes => subdoc_nodes))
119
- end
120
- end
1
+ # encoding: UTF-8
2
+ require_relative './test_helper'
3
+
4
+ class TestCanonicalize < Minitest::Test
5
+ def path(file)
6
+ File.join(File.dirname(__FILE__), file)
7
+ end
8
+
9
+ # (www.w3.org) 3.1 PIs, Comments, and Outside of Document Element
10
+ # http://www.w3.org/TR/xml-c14n#Example-OutsideDoc
11
+ def test_canonicalize_with_w3c_c14n_3_1
12
+ given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-1.xml'))
13
+
14
+ # With Comments
15
+ expected_with_comments = IO.read(self.path('c14n/result/with-comments/example-1'))
16
+ assert_equal(expected_with_comments, given_doc.canonicalize(:comments => true))
17
+
18
+ # Without Comments
19
+ expected_without_comments = IO.read(self.path('c14n/result/without-comments/example-1'))
20
+ assert_equal(expected_without_comments, given_doc.canonicalize)
21
+ assert_equal(expected_without_comments, given_doc.canonicalize(:comments => false))
22
+
23
+ # Without Comments (XML_C14N_1_1)
24
+ expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-1'))
25
+ mode = LibXML::XML::Document::XML_C14N_1_1
26
+ assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
27
+ end
28
+
29
+ # (www.w3.org) 3.2 Whitespace in Document Content
30
+ # http://www.w3.org/TR/xml-c14n#Example-WhitespaceInContent
31
+ def test_canonicalize_with_w3c_c14n_3_2
32
+ given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-2.xml'))
33
+ expected = IO.read(self.path('c14n/result/without-comments/example-2'))
34
+ assert_equal(expected, given_doc.canonicalize)
35
+
36
+ expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-2'))
37
+ mode = LibXML::XML::Document::XML_C14N_1_1
38
+ assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
39
+ end
40
+
41
+ # (www.w3.org) 3.3 Start and End Tags
42
+ # http://www.w3.org/TR/xml-c14n#Example-SETags
43
+ # (2012-02-20) Test failing due to missing 'attr' in 'e9' node.
44
+ # - Embedded DTD not parsed out of XML, therefore default attributes are
45
+ # not applied to canonicalization.
46
+ def test_canonicalize_with_w3c_c14n_3_3
47
+ given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-3.xml'))
48
+ expected = IO.read(self.path('c14n/result/without-comments/example-3'))
49
+ assert_equal(expected, given_doc.canonicalize)
50
+
51
+ expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-3'))
52
+ mode = LibXML::XML::Document::XML_C14N_1_1
53
+ assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
54
+ end
55
+
56
+ # (www.w3.org) 3.4 Character Modifications and Character References
57
+ # http://www.w3.org/TR/xml-c14n#Example-Chars
58
+ def test_canonicalize_with_w3c_c14n_3_4
59
+ given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-4.xml'))
60
+ expected = IO.read(self.path('c14n/result/without-comments/example-4'))
61
+ assert_equal(expected, given_doc.canonicalize)
62
+
63
+ expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-4'))
64
+ mode = LibXML::XML::Document::XML_C14N_1_1
65
+ assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
66
+ end
67
+
68
+ # (www.w3.org) 3.5 Entity References
69
+ # http://www.w3.org/TR/xml-c14n#Example-Entities
70
+ def test_canonicalize_with_w3c_c14n_3_5
71
+ # NOENT resolves entity references, DTDLOAD loads the external entity
72
+ options = LibXML::XML::Parser::Options::NOENT | LibXML::XML::Parser::Options::DTDLOAD
73
+ given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-5.xml'), options: options)
74
+
75
+ # With Comments
76
+ expected_with_comments = IO.read(self.path('c14n/result/with-comments/example-5'))
77
+ assert_equal(expected_with_comments, given_doc.canonicalize(:comments => true))
78
+
79
+ # Without Comments
80
+ expected_without_comments = IO.read(self.path('c14n/result/without-comments/example-5'))
81
+ assert_equal(expected_without_comments, given_doc.canonicalize(:comments => false))
82
+
83
+ # Without Comments (XML_C14N_1_1)
84
+ expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-5'))
85
+ mode = LibXML::XML::Document::XML_C14N_1_1
86
+ assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
87
+ end
88
+
89
+ # (www.w3.org) 3.6 UTF-8 Encoding
90
+ # http://www.w3.org/TR/xml-c14n#Example-UTF8
91
+ def test_canonicalize_with_w3c_c14n_3_6
92
+ given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-6.xml'))
93
+ expected = IO.read(self.path('c14n/result/without-comments/example-6'), :encoding => Encoding::UTF_8)
94
+ assert_equal(expected, given_doc.canonicalize)
95
+
96
+ expected_1_1_without_comments = IO.read(self.path('c14n/result/1-1-without-comments/example-6'), :encoding => Encoding::UTF_8)
97
+ mode = LibXML::XML::Document::XML_C14N_1_1
98
+ assert_equal(expected_1_1_without_comments, given_doc.canonicalize(:mode => mode))
99
+ end
100
+
101
+ # (www.w3.org) 3.7 Document Subsets
102
+ # http://www.w3.org/TR/xml-c14n#Example-DocSubsets
103
+ def test_canonicalize_with_w3c_c14n_3_7
104
+ # Parse with DTDATTR and DTDLOAD so default attributes and ID types
105
+ # from the internal DTD subset are materialized
106
+ options = LibXML::XML::Parser::Options::DTDATTR | LibXML::XML::Parser::Options::DTDLOAD
107
+ given_doc = LibXML::XML::Document.file(self.path('c14n/given/example-7.xml'),
108
+ options: options)
109
+ expected = IO.read(self.path('c14n/result/without-comments/example-7'))
110
+
111
+ ctx = given_doc.context
112
+ ctx.register_namespace('ietf', 'http://www.ietf.org')
113
+
114
+ # W3C C14N spec example 3.7 XPath expression for document subsets
115
+ subdoc_nodes = ctx.find(
116
+ "(//. | //@* | //namespace::*)" \
117
+ "[self::ietf:e1 or (parent::ietf:e1 and not(self::text() or self::e2))" \
118
+ " or count(id('E3')|ancestor-or-self::node()) = count(ancestor-or-self::node())]")
119
+
120
+ assert_equal(expected, given_doc.canonicalize(:nodes => subdoc_nodes))
121
+ end
122
+ end
@@ -1,132 +1,138 @@
1
- # encoding: UTF-8
2
- require_relative './test_helper'
3
-
4
- class TestDocument < Minitest::Test
5
- def setup
6
- xp = LibXML::XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
7
- assert_instance_of(LibXML::XML::Parser, xp)
8
- @doc = xp.parse
9
- assert_instance_of(LibXML::XML::Document, @doc)
10
- end
11
-
12
- def teardown
13
- @doc = nil
14
- end
15
-
16
- def test_klass
17
- assert_instance_of(LibXML::XML::Document, @doc)
18
- end
19
-
20
- def test_context
21
- context = @doc.context
22
- assert_instance_of(LibXML::XML::XPath::Context, context)
23
- end
24
-
25
- def test_find
26
- set = @doc.find('/ruby_array/fixnum')
27
- assert_instance_of(LibXML::XML::XPath::Object, set)
28
- assert_raises(NoMethodError) {
29
- set.xpath
30
- }
31
- end
32
-
33
- def test_compression
34
- if LibXML::XML.enabled_zlib?
35
- 0.upto(9) do |i|
36
- assert_equal(i, @doc.compression = i)
37
- assert_equal(i, @doc.compression)
38
- end
39
-
40
- 9.downto(0) do |i|
41
- assert_equal(i, @doc.compression = i)
42
- assert_equal(i, @doc.compression)
43
- end
44
-
45
- 10.upto(20) do |i|
46
- # assert_equal(9, @doc.compression = i)
47
- assert_equal(i, @doc.compression = i) # This works around a bug in Ruby 1.8
48
- assert_equal(9, @doc.compression)
49
- end
50
-
51
- -1.downto(-10) do |i|
52
- # assert_equal(0, @doc.compression = i)
53
- assert_equal(i, @doc.compression = i) # FIXME This bug should get fixed ASAP
54
- assert_equal(0, @doc.compression)
55
- end
56
- end
57
- end
58
-
59
- def test_version
60
- assert_equal('1.0', @doc.version)
61
-
62
- doc = LibXML::XML::Document.new('6.9')
63
- assert_equal('6.9', doc.version)
64
- end
65
-
66
- def test_write_root
67
- @doc.root = LibXML::XML::Node.new('rubynet')
68
- assert_instance_of(LibXML::XML::Node, @doc.root)
69
- assert_instance_of(LibXML::XML::Document, @doc.root.doc)
70
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rubynet/>\n",
71
- @doc.to_s(:indent => false))
72
- end
73
-
74
- def test_doc_node_type
75
- assert_equal(LibXML::XML::Node::DOCUMENT_NODE, LibXML::XML::Document.new.node_type)
76
- end
77
-
78
- def test_doc_node_type_name
79
- assert_equal('document_xml', LibXML::XML::Document.new.node_type_name)
80
- end
81
-
82
- def test_xhtml
83
- doc = LibXML::XML::Document.new
84
- assert(!doc.xhtml?)
85
- LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, doc, true
86
- assert(doc.xhtml?)
87
- end
88
-
89
- def test_document_root
90
- doc1 = LibXML::XML::Document.string("<one/>")
91
- doc2 = LibXML::XML::Document.string("<two/>")
92
-
93
- error = assert_raises(LibXML::XML::Error) do
94
- doc1.root = doc2.root
95
- end
96
- assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
97
- error.to_s)
98
-
99
- doc2.root << doc2.import(doc1.root)
100
- assert_equal('<one/>', doc1.root.to_s)
101
- assert_equal('<two><one/></two>', doc2.root.to_s(:indent => false))
102
-
103
- assert(!doc1.root.equal?(doc2.root))
104
- assert(doc1.root.doc != doc2.root.doc)
105
- end
106
-
107
- def test_import_node
108
- doc1 = LibXML::XML::Parser.string('<nums><one></one></nums>').parse
109
- doc2 = LibXML::XML::Parser.string('<nums><two></two></nums>').parse
110
-
111
- node = doc1.root.child
112
-
113
- error = assert_raises(LibXML::XML::Error) do
114
- doc2.root << node
115
- end
116
-
117
- assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
118
- error.to_s)
119
-
120
- doc2.root << doc2.import(node)
121
-
122
- assert_equal("<nums><two/><one/></nums>",
123
- doc2.root.to_s(:indent => false))
124
- end
125
-
126
- def test_nonet
127
- xml_string = '<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>'
128
- xml = LibXML::XML::Document.string(xml_string, options: LibXML::XML::Parser::Options::NONET)
129
- file = File.join(File.dirname(__FILE__), 'model/atom.xml')
130
- schema_document = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NONET)
131
- end
132
- end
1
+ # encoding: UTF-8
2
+ require_relative './test_helper'
3
+
4
+ class TestDocument < Minitest::Test
5
+ def setup
6
+ xp = LibXML::XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
7
+ assert_instance_of(LibXML::XML::Parser, xp)
8
+ @doc = xp.parse
9
+ assert_instance_of(LibXML::XML::Document, @doc)
10
+ end
11
+
12
+ def teardown
13
+ @doc = nil
14
+ end
15
+
16
+ def test_klass
17
+ assert_instance_of(LibXML::XML::Document, @doc)
18
+ end
19
+
20
+ def test_context
21
+ context = @doc.context
22
+ assert_instance_of(LibXML::XML::XPath::Context, context)
23
+ end
24
+
25
+ def test_find
26
+ set = @doc.find('/ruby_array/fixnum')
27
+ assert_instance_of(LibXML::XML::XPath::Object, set)
28
+ assert_raises(NoMethodError) {
29
+ set.xpath
30
+ }
31
+ end
32
+
33
+ def test_compression
34
+ if LibXML::XML.enabled_zlib?
35
+ 0.upto(9) do |i|
36
+ assert_equal(i, @doc.compression = i)
37
+ assert_equal(i, @doc.compression)
38
+ end
39
+
40
+ 9.downto(0) do |i|
41
+ assert_equal(i, @doc.compression = i)
42
+ assert_equal(i, @doc.compression)
43
+ end
44
+
45
+ 10.upto(20) do |i|
46
+ assert_equal(i, @doc.compression = i)
47
+ assert_equal(9, @doc.compression)
48
+ end
49
+
50
+ -1.downto(-10) do |i|
51
+ @doc.compression = i
52
+ assert_equal(0, @doc.compression)
53
+ end
54
+ end
55
+ end
56
+
57
+ def test_version
58
+ assert_equal('1.0', @doc.version)
59
+
60
+ doc = LibXML::XML::Document.new('6.9')
61
+ assert_equal('6.9', doc.version)
62
+ end
63
+
64
+ def test_write_root
65
+ @doc.root = LibXML::XML::Node.new('rubynet')
66
+ assert_instance_of(LibXML::XML::Node, @doc.root)
67
+ assert_instance_of(LibXML::XML::Document, @doc.root.doc)
68
+ assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rubynet/>\n",
69
+ @doc.to_s(:indent => false))
70
+ end
71
+
72
+ def test_doc_node_type
73
+ assert_equal(LibXML::XML::Node::DOCUMENT_NODE, LibXML::XML::Document.new.node_type)
74
+ end
75
+
76
+ def test_doc_node_type_name
77
+ assert_equal('document_xml', LibXML::XML::Document.new.node_type_name)
78
+ end
79
+
80
+ def test_xhtml
81
+ doc = LibXML::XML::Document.new
82
+ assert(!doc.xhtml?)
83
+ LibXML::XML::Dtd.new("-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, doc, true)
84
+ assert(doc.xhtml?)
85
+ end
86
+
87
+ def test_document_root
88
+ doc1 = LibXML::XML::Document.string("<one/>")
89
+ doc2 = LibXML::XML::Document.string("<two/>")
90
+
91
+ error = assert_raises(LibXML::XML::Error) do
92
+ doc1.root = doc2.root
93
+ end
94
+ assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
95
+ error.to_s)
96
+
97
+ doc2.root << doc2.import(doc1.root)
98
+ assert_equal('<one/>', doc1.root.to_s)
99
+ assert_equal('<two><one/></two>', doc2.root.to_s(:indent => false))
100
+
101
+ assert(!doc1.root.equal?(doc2.root))
102
+ assert(doc1.root.doc != doc2.root.doc)
103
+ end
104
+
105
+ def test_import_node
106
+ doc1 = LibXML::XML::Parser.string('<nums><one></one></nums>').parse
107
+ doc2 = LibXML::XML::Parser.string('<nums><two></two></nums>').parse
108
+
109
+ node = doc1.root.child
110
+
111
+ error = assert_raises(LibXML::XML::Error) do
112
+ doc2.root << node
113
+ end
114
+
115
+ assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
116
+ error.to_s)
117
+
118
+ doc2.root << doc2.import(node)
119
+
120
+ assert_equal("<nums><two/><one/></nums>",
121
+ doc2.root.to_s(:indent => false))
122
+ end
123
+
124
+ def test_nonet
125
+ xml_string = '<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>'
126
+ xml = LibXML::XML::Document.string(xml_string, options: LibXML::XML::Parser::Options::NONET)
127
+ file = File.join(File.dirname(__FILE__), 'model/atom.xml')
128
+ schema_document = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NONET)
129
+ end
130
+
131
+ def test_io
132
+ File.open(File.join(File.dirname(__FILE__), 'model/rubynet.xml')) do |io|
133
+ doc = LibXML::XML::Document.io(io)
134
+ assert_instance_of(LibXML::XML::Document, doc)
135
+ end
136
+ end
137
+
138
+ end