nokogiri 1.5.10 → 1.13.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (334) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +5 -0
  3. data/LICENSE-DEPENDENCIES.md +1903 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +280 -0
  6. data/bin/nokogiri +84 -31
  7. data/dependencies.yml +73 -0
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +956 -100
  10. data/ext/nokogiri/gumbo.c +584 -0
  11. data/ext/nokogiri/html4_document.c +166 -0
  12. data/ext/nokogiri/html4_element_description.c +294 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser_context.c +120 -0
  15. data/ext/nokogiri/html4_sax_push_parser.c +95 -0
  16. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  17. data/ext/nokogiri/nokogiri.c +232 -87
  18. data/ext/nokogiri/nokogiri.h +188 -129
  19. data/ext/nokogiri/test_global_handlers.c +40 -0
  20. data/ext/nokogiri/xml_attr.c +49 -40
  21. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  22. data/ext/nokogiri/xml_cdata.c +24 -23
  23. data/ext/nokogiri/xml_comment.c +29 -21
  24. data/ext/nokogiri/xml_document.c +327 -223
  25. data/ext/nokogiri/xml_document_fragment.c +12 -16
  26. data/ext/nokogiri/xml_dtd.c +56 -50
  27. data/ext/nokogiri/xml_element_content.c +31 -26
  28. data/ext/nokogiri/xml_element_decl.c +22 -22
  29. data/ext/nokogiri/xml_encoding_handler.c +45 -20
  30. data/ext/nokogiri/xml_entity_decl.c +32 -30
  31. data/ext/nokogiri/xml_entity_reference.c +16 -18
  32. data/ext/nokogiri/xml_namespace.c +74 -32
  33. data/ext/nokogiri/xml_node.c +1290 -680
  34. data/ext/nokogiri/xml_node_set.c +239 -208
  35. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  36. data/ext/nokogiri/xml_reader.c +227 -189
  37. data/ext/nokogiri/xml_relax_ng.c +52 -28
  38. data/ext/nokogiri/xml_sax_parser.c +123 -125
  39. data/ext/nokogiri/xml_sax_parser_context.c +138 -79
  40. data/ext/nokogiri/xml_sax_push_parser.c +88 -35
  41. data/ext/nokogiri/xml_schema.c +112 -33
  42. data/ext/nokogiri/xml_syntax_error.c +50 -23
  43. data/ext/nokogiri/xml_text.c +14 -18
  44. data/ext/nokogiri/xml_xpath_context.c +227 -140
  45. data/ext/nokogiri/xslt_stylesheet.c +162 -168
  46. data/gumbo-parser/CHANGES.md +63 -0
  47. data/gumbo-parser/Makefile +101 -0
  48. data/gumbo-parser/THANKS +27 -0
  49. data/gumbo-parser/src/Makefile +34 -0
  50. data/gumbo-parser/src/README.md +41 -0
  51. data/gumbo-parser/src/ascii.c +75 -0
  52. data/gumbo-parser/src/ascii.h +115 -0
  53. data/gumbo-parser/src/attribute.c +42 -0
  54. data/gumbo-parser/src/attribute.h +17 -0
  55. data/gumbo-parser/src/char_ref.c +22225 -0
  56. data/gumbo-parser/src/char_ref.h +29 -0
  57. data/gumbo-parser/src/char_ref.rl +2154 -0
  58. data/gumbo-parser/src/error.c +626 -0
  59. data/gumbo-parser/src/error.h +148 -0
  60. data/gumbo-parser/src/foreign_attrs.c +104 -0
  61. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  62. data/gumbo-parser/src/gumbo.h +943 -0
  63. data/gumbo-parser/src/insertion_mode.h +33 -0
  64. data/gumbo-parser/src/macros.h +91 -0
  65. data/gumbo-parser/src/parser.c +4875 -0
  66. data/gumbo-parser/src/parser.h +41 -0
  67. data/gumbo-parser/src/replacement.h +33 -0
  68. data/gumbo-parser/src/string_buffer.c +103 -0
  69. data/gumbo-parser/src/string_buffer.h +68 -0
  70. data/gumbo-parser/src/string_piece.c +48 -0
  71. data/gumbo-parser/src/svg_attrs.c +174 -0
  72. data/gumbo-parser/src/svg_attrs.gperf +77 -0
  73. data/gumbo-parser/src/svg_tags.c +137 -0
  74. data/gumbo-parser/src/svg_tags.gperf +55 -0
  75. data/gumbo-parser/src/tag.c +222 -0
  76. data/gumbo-parser/src/tag_lookup.c +382 -0
  77. data/gumbo-parser/src/tag_lookup.gperf +169 -0
  78. data/gumbo-parser/src/tag_lookup.h +13 -0
  79. data/gumbo-parser/src/token_buffer.c +79 -0
  80. data/gumbo-parser/src/token_buffer.h +71 -0
  81. data/gumbo-parser/src/token_type.h +17 -0
  82. data/gumbo-parser/src/tokenizer.c +3463 -0
  83. data/gumbo-parser/src/tokenizer.h +112 -0
  84. data/gumbo-parser/src/tokenizer_states.h +339 -0
  85. data/gumbo-parser/src/utf8.c +245 -0
  86. data/gumbo-parser/src/utf8.h +164 -0
  87. data/gumbo-parser/src/util.c +68 -0
  88. data/gumbo-parser/src/util.h +30 -0
  89. data/gumbo-parser/src/vector.c +111 -0
  90. data/gumbo-parser/src/vector.h +45 -0
  91. data/lib/nokogiri/class_resolver.rb +67 -0
  92. data/lib/nokogiri/css/node.rb +10 -58
  93. data/lib/nokogiri/css/parser.rb +327 -288
  94. data/lib/nokogiri/css/parser.y +67 -45
  95. data/lib/nokogiri/css/parser_extras.rb +52 -49
  96. data/lib/nokogiri/css/syntax_error.rb +3 -1
  97. data/lib/nokogiri/css/tokenizer.rb +107 -104
  98. data/lib/nokogiri/css/tokenizer.rex +7 -6
  99. data/lib/nokogiri/css/xpath_visitor.rb +263 -75
  100. data/lib/nokogiri/css.rb +50 -17
  101. data/lib/nokogiri/decorators/slop.rb +17 -8
  102. data/lib/nokogiri/extension.rb +31 -0
  103. data/lib/nokogiri/gumbo.rb +15 -0
  104. data/lib/nokogiri/html.rb +38 -27
  105. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  106. data/lib/nokogiri/html4/document.rb +331 -0
  107. data/lib/nokogiri/html4/document_fragment.rb +54 -0
  108. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  109. data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
  110. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  111. data/lib/nokogiri/{html → html4}/sax/parser.rb +24 -15
  112. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  113. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  114. data/lib/nokogiri/html4.rb +46 -0
  115. data/lib/nokogiri/html5/document.rb +88 -0
  116. data/lib/nokogiri/html5/document_fragment.rb +83 -0
  117. data/lib/nokogiri/html5/node.rb +96 -0
  118. data/lib/nokogiri/html5.rb +477 -0
  119. data/lib/nokogiri/jruby/dependencies.rb +21 -0
  120. data/lib/nokogiri/syntax_error.rb +2 -0
  121. data/lib/nokogiri/version/constant.rb +6 -0
  122. data/lib/nokogiri/version/info.rb +221 -0
  123. data/lib/nokogiri/version.rb +3 -90
  124. data/lib/nokogiri/xml/attr.rb +6 -3
  125. data/lib/nokogiri/xml/attribute_decl.rb +3 -1
  126. data/lib/nokogiri/xml/builder.rb +96 -54
  127. data/lib/nokogiri/xml/cdata.rb +3 -1
  128. data/lib/nokogiri/xml/character_data.rb +2 -0
  129. data/lib/nokogiri/xml/document.rb +234 -95
  130. data/lib/nokogiri/xml/document_fragment.rb +86 -36
  131. data/lib/nokogiri/xml/dtd.rb +16 -4
  132. data/lib/nokogiri/xml/element_content.rb +2 -0
  133. data/lib/nokogiri/xml/element_decl.rb +3 -1
  134. data/lib/nokogiri/xml/entity_decl.rb +4 -2
  135. data/lib/nokogiri/xml/entity_reference.rb +20 -0
  136. data/lib/nokogiri/xml/namespace.rb +3 -0
  137. data/lib/nokogiri/xml/node/save_options.rb +8 -4
  138. data/lib/nokogiri/xml/node.rb +947 -502
  139. data/lib/nokogiri/xml/node_set.rb +168 -159
  140. data/lib/nokogiri/xml/notation.rb +13 -0
  141. data/lib/nokogiri/xml/parse_options.rb +40 -5
  142. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  143. data/lib/nokogiri/xml/pp/node.rb +25 -26
  144. data/lib/nokogiri/xml/pp.rb +4 -2
  145. data/lib/nokogiri/xml/processing_instruction.rb +3 -1
  146. data/lib/nokogiri/xml/reader.rb +23 -28
  147. data/lib/nokogiri/xml/relax_ng.rb +8 -2
  148. data/lib/nokogiri/xml/sax/document.rb +45 -49
  149. data/lib/nokogiri/xml/sax/parser.rb +43 -41
  150. data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
  151. data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
  152. data/lib/nokogiri/xml/sax.rb +6 -4
  153. data/lib/nokogiri/xml/schema.rb +19 -9
  154. data/lib/nokogiri/xml/searchable.rb +259 -0
  155. data/lib/nokogiri/xml/syntax_error.rb +25 -1
  156. data/lib/nokogiri/xml/text.rb +2 -0
  157. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  158. data/lib/nokogiri/xml/xpath.rb +15 -4
  159. data/lib/nokogiri/xml/xpath_context.rb +3 -3
  160. data/lib/nokogiri/xml.rb +38 -36
  161. data/lib/nokogiri/xslt/stylesheet.rb +3 -1
  162. data/lib/nokogiri/xslt.rb +18 -16
  163. data/lib/nokogiri.rb +69 -69
  164. data/lib/xsd/xmlparser/nokogiri.rb +26 -24
  165. data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
  166. data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  167. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  168. data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
  169. data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
  170. data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
  171. data/patches/libxml2/0007-Fix-XPath-recursion-limit.patch +31 -0
  172. data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
  173. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  174. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
  175. data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
  176. data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
  177. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  178. metadata +382 -460
  179. data/.autotest +0 -26
  180. data/.gemtest +0 -0
  181. data/CHANGELOG.ja.rdoc +0 -785
  182. data/CHANGELOG.rdoc +0 -783
  183. data/C_CODING_STYLE.rdoc +0 -33
  184. data/Manifest.txt +0 -303
  185. data/README.ja.rdoc +0 -106
  186. data/README.rdoc +0 -175
  187. data/ROADMAP.md +0 -90
  188. data/Rakefile +0 -228
  189. data/STANDARD_RESPONSES.md +0 -47
  190. data/Y_U_NO_GEMSPEC.md +0 -155
  191. data/build_all +0 -105
  192. data/ext/nokogiri/html_document.c +0 -170
  193. data/ext/nokogiri/html_document.h +0 -10
  194. data/ext/nokogiri/html_element_description.c +0 -279
  195. data/ext/nokogiri/html_element_description.h +0 -10
  196. data/ext/nokogiri/html_entity_lookup.c +0 -32
  197. data/ext/nokogiri/html_entity_lookup.h +0 -8
  198. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  199. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  200. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  201. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  202. data/ext/nokogiri/xml_attr.h +0 -9
  203. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  204. data/ext/nokogiri/xml_cdata.h +0 -9
  205. data/ext/nokogiri/xml_comment.h +0 -9
  206. data/ext/nokogiri/xml_document.h +0 -23
  207. data/ext/nokogiri/xml_document_fragment.h +0 -10
  208. data/ext/nokogiri/xml_dtd.h +0 -10
  209. data/ext/nokogiri/xml_element_content.h +0 -10
  210. data/ext/nokogiri/xml_element_decl.h +0 -9
  211. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  212. data/ext/nokogiri/xml_entity_decl.h +0 -10
  213. data/ext/nokogiri/xml_entity_reference.h +0 -9
  214. data/ext/nokogiri/xml_io.c +0 -56
  215. data/ext/nokogiri/xml_io.h +0 -11
  216. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  217. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  218. data/ext/nokogiri/xml_namespace.h +0 -13
  219. data/ext/nokogiri/xml_node.h +0 -13
  220. data/ext/nokogiri/xml_node_set.h +0 -14
  221. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  222. data/ext/nokogiri/xml_reader.h +0 -10
  223. data/ext/nokogiri/xml_relax_ng.h +0 -9
  224. data/ext/nokogiri/xml_sax_parser.h +0 -39
  225. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  226. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  227. data/ext/nokogiri/xml_schema.h +0 -9
  228. data/ext/nokogiri/xml_syntax_error.h +0 -13
  229. data/ext/nokogiri/xml_text.h +0 -9
  230. data/ext/nokogiri/xml_xpath_context.h +0 -10
  231. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  232. data/lib/nokogiri/html/document.rb +0 -254
  233. data/lib/nokogiri/html/document_fragment.rb +0 -41
  234. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  235. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  236. data/lib/nokogiri/html/sax/push_parser.rb +0 -16
  237. data/tasks/cross_compile.rb +0 -150
  238. data/tasks/nokogiri.org.rb +0 -24
  239. data/tasks/test.rb +0 -95
  240. data/test/css/test_nthiness.rb +0 -159
  241. data/test/css/test_parser.rb +0 -341
  242. data/test/css/test_tokenizer.rb +0 -198
  243. data/test/css/test_xpath_visitor.rb +0 -91
  244. data/test/decorators/test_slop.rb +0 -16
  245. data/test/files/2ch.html +0 -108
  246. data/test/files/address_book.rlx +0 -12
  247. data/test/files/address_book.xml +0 -10
  248. data/test/files/bar/bar.xsd +0 -4
  249. data/test/files/dont_hurt_em_why.xml +0 -422
  250. data/test/files/encoding.html +0 -82
  251. data/test/files/encoding.xhtml +0 -84
  252. data/test/files/exslt.xml +0 -8
  253. data/test/files/exslt.xslt +0 -35
  254. data/test/files/foo/foo.xsd +0 -4
  255. data/test/files/metacharset.html +0 -10
  256. data/test/files/noencoding.html +0 -47
  257. data/test/files/po.xml +0 -32
  258. data/test/files/po.xsd +0 -66
  259. data/test/files/shift_jis.html +0 -10
  260. data/test/files/shift_jis.xml +0 -5
  261. data/test/files/snuggles.xml +0 -3
  262. data/test/files/staff.dtd +0 -10
  263. data/test/files/staff.xml +0 -59
  264. data/test/files/staff.xslt +0 -32
  265. data/test/files/test_document_url/bar.xml +0 -2
  266. data/test/files/test_document_url/document.dtd +0 -4
  267. data/test/files/test_document_url/document.xml +0 -6
  268. data/test/files/tlm.html +0 -850
  269. data/test/files/to_be_xincluded.xml +0 -2
  270. data/test/files/valid_bar.xml +0 -2
  271. data/test/files/xinclude.xml +0 -4
  272. data/test/helper.rb +0 -154
  273. data/test/html/sax/test_parser.rb +0 -141
  274. data/test/html/sax/test_parser_context.rb +0 -46
  275. data/test/html/test_builder.rb +0 -164
  276. data/test/html/test_document.rb +0 -552
  277. data/test/html/test_document_encoding.rb +0 -138
  278. data/test/html/test_document_fragment.rb +0 -261
  279. data/test/html/test_element_description.rb +0 -105
  280. data/test/html/test_named_characters.rb +0 -14
  281. data/test/html/test_node.rb +0 -196
  282. data/test/html/test_node_encoding.rb +0 -27
  283. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  284. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  285. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  286. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
  287. data/test/test_convert_xpath.rb +0 -135
  288. data/test/test_css_cache.rb +0 -45
  289. data/test/test_encoding_handler.rb +0 -46
  290. data/test/test_memory_leak.rb +0 -156
  291. data/test/test_nokogiri.rb +0 -132
  292. data/test/test_reader.rb +0 -555
  293. data/test/test_soap4r_sax.rb +0 -52
  294. data/test/test_xslt_transforms.rb +0 -254
  295. data/test/xml/node/test_save_options.rb +0 -28
  296. data/test/xml/node/test_subclass.rb +0 -44
  297. data/test/xml/sax/test_parser.rb +0 -366
  298. data/test/xml/sax/test_parser_context.rb +0 -106
  299. data/test/xml/sax/test_push_parser.rb +0 -157
  300. data/test/xml/test_attr.rb +0 -64
  301. data/test/xml/test_attribute_decl.rb +0 -86
  302. data/test/xml/test_builder.rb +0 -306
  303. data/test/xml/test_c14n.rb +0 -151
  304. data/test/xml/test_cdata.rb +0 -48
  305. data/test/xml/test_comment.rb +0 -29
  306. data/test/xml/test_document.rb +0 -828
  307. data/test/xml/test_document_encoding.rb +0 -28
  308. data/test/xml/test_document_fragment.rb +0 -223
  309. data/test/xml/test_dtd.rb +0 -103
  310. data/test/xml/test_dtd_encoding.rb +0 -33
  311. data/test/xml/test_element_content.rb +0 -56
  312. data/test/xml/test_element_decl.rb +0 -73
  313. data/test/xml/test_entity_decl.rb +0 -122
  314. data/test/xml/test_entity_reference.rb +0 -245
  315. data/test/xml/test_namespace.rb +0 -95
  316. data/test/xml/test_node.rb +0 -1137
  317. data/test/xml/test_node_attributes.rb +0 -96
  318. data/test/xml/test_node_encoding.rb +0 -107
  319. data/test/xml/test_node_inheritance.rb +0 -32
  320. data/test/xml/test_node_reparenting.rb +0 -374
  321. data/test/xml/test_node_set.rb +0 -755
  322. data/test/xml/test_parse_options.rb +0 -64
  323. data/test/xml/test_processing_instruction.rb +0 -30
  324. data/test/xml/test_reader_encoding.rb +0 -142
  325. data/test/xml/test_relax_ng.rb +0 -60
  326. data/test/xml/test_schema.rb +0 -103
  327. data/test/xml/test_syntax_error.rb +0 -12
  328. data/test/xml/test_text.rb +0 -45
  329. data/test/xml/test_unparented_node.rb +0 -422
  330. data/test/xml/test_xinclude.rb +0 -83
  331. data/test/xml/test_xpath.rb +0 -295
  332. data/test/xslt/test_custom_functions.rb +0 -133
  333. data/test/xslt/test_exception_handling.rb +0 -37
  334. data/test_all +0 -81
data/test/test_reader.rb DELETED
@@ -1,555 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "helper"
3
-
4
- class TestReader < Nokogiri::TestCase
5
- def test_from_io_sets_io_as_source
6
- io = File.open SNUGGLES_FILE
7
- reader = Nokogiri::XML::Reader.from_io(io)
8
- assert_equal io, reader.source
9
- end
10
-
11
- def test_empty_element?
12
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
13
- <xml><city>Paris</city><state/></xml>
14
- eoxml
15
-
16
- results = reader.map do |node|
17
- if node.node_type == Nokogiri::XML::Node::ELEMENT_NODE
18
- node.empty_element?
19
- end
20
- end
21
- assert_equal [false, false, nil, nil, true, nil], results
22
- end
23
-
24
- def test_self_closing?
25
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
26
- <xml><city>Paris</city><state/></xml>
27
- eoxml
28
-
29
- results = reader.map do |node|
30
- if node.node_type == Nokogiri::XML::Node::ELEMENT_NODE
31
- node.self_closing?
32
- end
33
- end
34
- assert_equal [false, false, nil, nil, true, nil], results
35
- end
36
-
37
- # Issue #831
38
- # Make sure that the reader doesn't block reading the entire input
39
- def test_reader_blocking
40
- rd, wr = IO.pipe()
41
- node_out = nil
42
- t = Thread.start do
43
- reader = Nokogiri::XML::Reader(rd, 'UTF-8')
44
- reader.each do |node|
45
- node_out = node
46
- break
47
- end
48
- end
49
- sleep(1) # sleep for one second to make sure the reader will actually block for input
50
- wr.puts "<foo>"
51
- wr.puts "<bar/>" * 10000
52
- wr.flush
53
- res = t.join(5) # wait 5 seconds for the thread to finish
54
- wr.close
55
- rd.close
56
- refute_nil node_out, "Didn't read any nodes, exclude the trivial case"
57
- refute_nil res, "Reader blocks trying to read the entire stream"
58
- end
59
-
60
- def test_reader_takes_block
61
- options = nil
62
- Nokogiri::XML::Reader(File.read(XML_FILE), XML_FILE) do |cfg|
63
- options = cfg
64
- options.nonet.nowarning.dtdattr
65
- end
66
- assert options.nonet?
67
- assert options.nowarning?
68
- assert options.dtdattr?
69
- end
70
-
71
- def test_nil_raises
72
- assert_raises(ArgumentError) {
73
- Nokogiri::XML::Reader.from_memory(nil)
74
- }
75
- assert_raises(ArgumentError) {
76
- Nokogiri::XML::Reader.from_io(nil)
77
- }
78
- end
79
-
80
- def test_from_io
81
- io = File.open SNUGGLES_FILE
82
- reader = Nokogiri::XML::Reader.from_io(io)
83
- assert_equal false, reader.default?
84
- assert_equal [false, false, false, false, false, false, false],
85
- reader.map { |x| x.default? }
86
- end
87
-
88
- def test_io
89
- io = File.open SNUGGLES_FILE
90
- reader = Nokogiri::XML::Reader(io)
91
- assert_equal false, reader.default?
92
- assert_equal [false, false, false, false, false, false, false],
93
- reader.map { |x| x.default? }
94
- end
95
-
96
- def test_string_io
97
- io = StringIO.new(<<-eoxml)
98
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
99
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
100
- </x>
101
- eoxml
102
- reader = Nokogiri::XML::Reader(io)
103
- assert_equal false, reader.default?
104
- assert_equal [false, false, false, false, false, false, false],
105
- reader.map { |x| x.default? }
106
- end
107
-
108
- class ReallyBadIO
109
- def read(size)
110
- 'a' * size ** 10
111
- end
112
- end
113
-
114
- class ReallyBadIO4Java
115
- def read(size=1)
116
- 'a' * size ** 10
117
- end
118
- end
119
-
120
- def test_io_that_reads_too_much
121
- if Nokogiri.jruby?
122
- io = ReallyBadIO4Java.new
123
- Nokogiri::XML::Reader(io)
124
- else
125
- io = ReallyBadIO.new
126
- Nokogiri::XML::Reader(io)
127
- end
128
- end
129
-
130
- def test_in_memory
131
- assert Nokogiri::XML::Reader(<<-eoxml)
132
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
133
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
134
- </x>
135
- eoxml
136
- end
137
-
138
- def test_reader_holds_on_to_string
139
- xml = <<-eoxml
140
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
141
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
142
- </x>
143
- eoxml
144
- reader = Nokogiri::XML::Reader(xml)
145
- assert_equal xml, reader.source
146
- end
147
-
148
- def test_default?
149
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
150
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
151
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
152
- </x>
153
- eoxml
154
- assert_equal false, reader.default?
155
- assert_equal [false, false, false, false, false, false, false],
156
- reader.map { |x| x.default? }
157
- end
158
-
159
- def test_value?
160
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
161
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
162
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
163
- </x>
164
- eoxml
165
- assert_equal false, reader.value?
166
- assert_equal [false, true, false, true, false, true, false],
167
- reader.map { |x| x.value? }
168
- end
169
-
170
- def test_read_error_document
171
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
172
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
173
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
174
- <foo>
175
- </x>
176
- eoxml
177
- assert_raises(Nokogiri::XML::SyntaxError) do
178
- reader.each { |node| }
179
- end
180
- assert 1, reader.errors.length
181
- end
182
-
183
- def test_attributes?
184
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
185
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
186
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
187
- </x>
188
- eoxml
189
- assert_equal false, reader.attributes?
190
- assert_equal [true, false, true, false, true, false, true],
191
- reader.map { |x| x.attributes? }
192
- end
193
-
194
- def test_attributes
195
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
196
- <x xmlns:tenderlove='http://tenderlovemaking.com/'
197
- xmlns='http://mothership.connection.com/'
198
- >
199
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
200
- </x>
201
- eoxml
202
- assert_equal({}, reader.attributes)
203
- assert_equal [{'xmlns:tenderlove'=>'http://tenderlovemaking.com/',
204
- 'xmlns'=>'http://mothership.connection.com/'},
205
- {}, {"awesome"=>"true"}, {}, {"awesome"=>"true"}, {},
206
- {'xmlns:tenderlove'=>'http://tenderlovemaking.com/',
207
- 'xmlns'=>'http://mothership.connection.com/'}],
208
- reader.map { |x| x.attributes }
209
- end
210
-
211
- def test_attribute_roundtrip
212
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
213
- <x xmlns:tenderlove='http://tenderlovemaking.com/'
214
- xmlns='http://mothership.connection.com/'
215
- >
216
- <tenderlove:foo awesome='true' size='giant'>snuggles!</tenderlove:foo>
217
- </x>
218
- eoxml
219
- reader.each do |node|
220
- node.attributes.each do |key, value|
221
- assert_equal value, node.attribute(key)
222
- end
223
- end
224
- end
225
-
226
- def test_attribute_at
227
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
228
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
229
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
230
- </x>
231
- eoxml
232
- assert_nil reader.attribute_at(nil)
233
- assert_nil reader.attribute_at(0)
234
- assert_equal ['http://tenderlovemaking.com/', nil, 'true', nil, 'true', nil, 'http://tenderlovemaking.com/'],
235
- reader.map { |x| x.attribute_at(0) }
236
- end
237
-
238
- def test_attribute
239
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
240
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
241
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
242
- </x>
243
- eoxml
244
- assert_nil reader.attribute(nil)
245
- assert_nil reader.attribute('awesome')
246
- assert_equal [nil, nil, 'true', nil, 'true', nil, nil],
247
- reader.map { |x| x.attribute('awesome') }
248
- end
249
-
250
- def test_attribute_length
251
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
252
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
253
- <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
254
- </x>
255
- eoxml
256
- assert_equal 0, reader.attribute_count
257
- assert_equal [1, 0, 1, 0, 0, 0, 0], reader.map { |x| x.attribute_count }
258
- end
259
-
260
- def test_depth
261
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
262
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
263
- <tenderlove:foo>snuggles!</tenderlove:foo>
264
- </x>
265
- eoxml
266
- assert_equal 0, reader.depth
267
- assert_equal [0, 1, 1, 2, 1, 1, 0], reader.map { |x| x.depth }
268
- end
269
-
270
- def test_encoding
271
- string = <<-eoxml
272
- <awesome>
273
- <p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
274
- <p xml:lang="ja">日本語が上手です</p>
275
- </awesome>
276
- eoxml
277
- reader = Nokogiri::XML::Reader.from_memory(string, nil, 'UTF-8')
278
- assert_equal ['UTF-8'], reader.map { |x| x.encoding }.uniq
279
- end
280
-
281
- def test_xml_version
282
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
283
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
284
- <tenderlove:foo>snuggles!</tenderlove:foo>
285
- </x>
286
- eoxml
287
- assert_nil reader.xml_version
288
- assert_equal ['1.0'], reader.map { |x| x.xml_version }.uniq
289
- end
290
-
291
- def test_lang
292
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
293
- <awesome>
294
- <p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
295
- <p xml:lang="ja">日本語が上手です</p>
296
- </awesome>
297
- eoxml
298
- assert_nil reader.lang
299
- assert_equal [nil, nil, "en", "en", "en", nil, "ja", "ja", "ja", nil, nil],
300
- reader.map { |x| x.lang }
301
- end
302
-
303
- def test_value
304
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
305
- <x xmlns:tenderlove='http://tenderlovemaking.com/'>
306
- <tenderlove:foo>snuggles!</tenderlove:foo>
307
- </x>
308
- eoxml
309
- assert_nil reader.value
310
- assert_equal [nil, "\n ", nil, "snuggles!", nil, "\n ", nil],
311
- reader.map { |x| x.value }
312
- end
313
-
314
- def test_prefix
315
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
316
- <x xmlns:edi='http://ecommerce.example.org/schema'>
317
- <edi:foo>hello</edi:foo>
318
- </x>
319
- eoxml
320
- assert_nil reader.prefix
321
- assert_equal [nil, nil, "edi", nil, "edi", nil, nil],
322
- reader.map { |n| n.prefix }
323
- end
324
-
325
- def test_node_type
326
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
327
- <x>
328
- <y>hello</y>
329
- </x>
330
- eoxml
331
- assert_equal 0, reader.node_type
332
- assert_equal [1, 14, 1, 3, 15, 14, 15], reader.map { |n| n.node_type }
333
- end
334
-
335
- def test_inner_xml
336
- str = "<x><y>hello</y></x>"
337
- reader = Nokogiri::XML::Reader.from_memory(str)
338
-
339
- reader.read
340
-
341
- assert_equal "<y>hello</y>", reader.inner_xml
342
- end
343
-
344
- def test_outer_xml
345
- str = ["<x><y>hello</y></x>", "<y>hello</y>", "hello", "<y/>", "<x/>"]
346
- reader = Nokogiri::XML::Reader.from_memory(str.first)
347
-
348
- xml = []
349
- reader.map { |node| xml << node.outer_xml }
350
-
351
- assert_equal str, xml
352
- end
353
-
354
- def test_outer_xml_with_empty_nodes
355
- str = ["<x><y/></x>", "<y/>", "<x/>"]
356
- reader = Nokogiri::XML::Reader.from_memory(str.first)
357
-
358
- xml = []
359
- reader.map { |node| xml << node.outer_xml }
360
-
361
- assert_equal str, xml
362
- end
363
-
364
- def test_state
365
- reader = Nokogiri::XML::Reader.from_memory('<foo>bar</bar>')
366
- assert reader.state
367
- end
368
-
369
- def test_ns_uri
370
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
371
- <x xmlns:edi='http://ecommerce.example.org/schema'>
372
- <edi:foo>hello</edi:foo>
373
- </x>
374
- eoxml
375
- assert_nil reader.namespace_uri
376
- assert_equal([nil,
377
- nil,
378
- "http://ecommerce.example.org/schema",
379
- nil,
380
- "http://ecommerce.example.org/schema",
381
- nil,
382
- nil],
383
- reader.map { |n| n.namespace_uri })
384
- end
385
-
386
- def test_local_name
387
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
388
- <x xmlns:edi='http://ecommerce.example.org/schema'>
389
- <edi:foo>hello</edi:foo>
390
- </x>
391
- eoxml
392
- assert_nil reader.local_name
393
- assert_equal(["x", "#text", "foo", "#text", "foo", "#text", "x"],
394
- reader.map { |n| n.local_name })
395
- end
396
-
397
- def test_name
398
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
399
- <x xmlns:edi='http://ecommerce.example.org/schema'>
400
- <edi:foo>hello</edi:foo>
401
- </x>
402
- eoxml
403
- assert_nil reader.name
404
- assert_equal(["x", "#text", "edi:foo", "#text", "edi:foo", "#text", "x"],
405
- reader.map { |n| n.name })
406
- end
407
-
408
- def test_base_uri
409
- reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
410
- <x xml:base="http://base.example.org/base/">
411
- <link href="link"/>
412
- <other xml:base="http://other.example.org/"/>
413
- <relative xml:base="relative">
414
- <link href="stuff" />
415
- </relative>
416
- </x>
417
- eoxml
418
-
419
- assert_nil reader.base_uri
420
- assert_equal(["http://base.example.org/base/",
421
- "http://base.example.org/base/",
422
- "http://base.example.org/base/",
423
- "http://base.example.org/base/",
424
- "http://other.example.org/",
425
- "http://base.example.org/base/",
426
- "http://base.example.org/base/relative",
427
- "http://base.example.org/base/relative",
428
- "http://base.example.org/base/relative",
429
- "http://base.example.org/base/relative",
430
- "http://base.example.org/base/relative",
431
- "http://base.example.org/base/",
432
- "http://base.example.org/base/"],
433
- reader.map {|n| n.base_uri })
434
- end
435
-
436
- def test_xlink_href_without_base_uri
437
- reader = Nokogiri::XML::Reader(<<-eoxml)
438
- <x xmlns:xlink="http://www.w3.org/1999/xlink">
439
- <link xlink:href="#other">Link</link>
440
- <other id="other">Linked Element</other>
441
- </x>
442
- eoxml
443
-
444
- reader.each do |node|
445
- if node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT
446
- if node.name == 'link'
447
- assert_nil node.base_uri
448
- end
449
- end
450
- end
451
- end
452
-
453
- def test_xlink_href_with_base_uri
454
- reader = Nokogiri::XML::Reader(<<-eoxml)
455
- <x xml:base="http://base.example.org/base/"
456
- xmlns:xlink="http://www.w3.org/1999/xlink">
457
- <link xlink:href="#other">Link</link>
458
- <other id="other">Linked Element</other>
459
- </x>
460
- eoxml
461
-
462
- reader.each do |node|
463
- if node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT
464
- assert_equal node.base_uri, "http://base.example.org/base/"
465
- end
466
- end
467
- end
468
-
469
- def test_read_from_memory
470
- called = false
471
- reader = Nokogiri::XML::Reader.from_memory('<foo>bar</foo>')
472
- reader.each do |node|
473
- called = true
474
- assert node
475
- end
476
- assert called
477
- end
478
-
479
- def test_large_document_smoke_test
480
- # simply run on a large document to verify that there no GC issues
481
- xml = []
482
- xml << "<elements>"
483
- 10000.times { |j| xml << "<element id=\"#{j}\"/>" }
484
- xml << "</elements>"
485
- xml = xml.join("\n")
486
-
487
- Nokogiri::XML::Reader.from_memory(xml).each do |e|
488
- e.attributes
489
- end
490
- end
491
-
492
- def test_correct_outer_xml_inclusion
493
- xml = Nokogiri::XML::Reader.from_io(StringIO.new(<<-eoxml))
494
- <root-element>
495
- <children>
496
- <child n="1">
497
- <field>child-1</field>
498
- </child>
499
- <child n="2">
500
- <field>child-2</field>
501
- </child>
502
- <child n="3">
503
- <field>child-3</field>
504
- </child>
505
- </children>
506
- </root-element>
507
- eoxml
508
-
509
- nodelengths = []
510
- has_child2 = []
511
-
512
- xml.each do |node|
513
- if node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT and node.name == "child"
514
- nodelengths << node.outer_xml.length
515
- has_child2 << !!(node.outer_xml =~ /child-2/)
516
- end
517
- end
518
-
519
- assert_equal(nodelengths[0], nodelengths[1])
520
- assert(has_child2[1])
521
- assert(!has_child2[0])
522
- end
523
-
524
- def test_correct_inner_xml_inclusion
525
- xml = Nokogiri::XML::Reader.from_io(StringIO.new(<<-eoxml))
526
- <root-element>
527
- <children>
528
- <child n="1">
529
- <field>child-1</field>
530
- </child>
531
- <child n="2">
532
- <field>child-2</field>
533
- </child>
534
- <child n="3">
535
- <field>child-3</field>
536
- </child>
537
- </children>
538
- </root-element>
539
- eoxml
540
-
541
- nodelengths = []
542
- has_child2 = []
543
-
544
- xml.each do |node|
545
- if node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT and node.name == "child"
546
- nodelengths << node.inner_xml.length
547
- has_child2 << !!(node.inner_xml =~ /child-2/)
548
- end
549
- end
550
-
551
- assert_equal(nodelengths[0], nodelengths[1])
552
- assert(has_child2[1])
553
- assert(!has_child2[0])
554
- end
555
- end
@@ -1,52 +0,0 @@
1
- require "helper"
2
-
3
- module XSD
4
- module XMLParser
5
- class Parser
6
- @factory_added = nil
7
-
8
- class << self; attr_reader :factory_added; end
9
-
10
- def self.add_factory o
11
- @factory_added = o
12
- end
13
-
14
- def initialize *args
15
- @charset = nil
16
- end
17
-
18
- def characters foo
19
- end
20
-
21
- def start_element *args
22
- end
23
-
24
- def end_element *args
25
- end
26
- end
27
- end
28
- end
29
-
30
- require 'xsd/xmlparser/nokogiri'
31
-
32
- class TestSoap4rSax < Nokogiri::TestCase
33
- def test_factory_added
34
- assert_equal XSD::XMLParser::Nokogiri, XSD::XMLParser::Nokogiri.factory_added
35
- end
36
-
37
- def test_parse
38
- o = Class.new(::XSD::XMLParser::Nokogiri) do
39
- attr_accessor :element_started
40
- def initialize *args
41
- super
42
- @element_started = false
43
- end
44
-
45
- def start_element *args
46
- @element_started = true
47
- end
48
- end.new 'foo'
49
- o.do_parse '<?xml version="1.0" ?><root xmlns="http://example.com/"/>'
50
- assert o.element_started, 'element started'
51
- end
52
- end