nokogiri 1.8.5 → 1.15.3

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 (358) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +40 -18
  3. data/LICENSE-DEPENDENCIES.md +1636 -1024
  4. data/LICENSE.md +5 -28
  5. data/README.md +203 -90
  6. data/bin/nokogiri +63 -50
  7. data/dependencies.yml +33 -61
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +867 -417
  10. data/ext/nokogiri/gumbo.c +594 -0
  11. data/ext/nokogiri/html4_document.c +165 -0
  12. data/ext/nokogiri/html4_element_description.c +299 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser_context.c +108 -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 +251 -105
  18. data/ext/nokogiri/nokogiri.h +215 -90
  19. data/ext/nokogiri/test_global_handlers.c +40 -0
  20. data/ext/nokogiri/xml_attr.c +42 -37
  21. data/ext/nokogiri/xml_attribute_decl.c +22 -22
  22. data/ext/nokogiri/xml_cdata.c +40 -31
  23. data/ext/nokogiri/xml_comment.c +20 -27
  24. data/ext/nokogiri/xml_document.c +401 -237
  25. data/ext/nokogiri/xml_document_fragment.c +13 -17
  26. data/ext/nokogiri/xml_dtd.c +64 -58
  27. data/ext/nokogiri/xml_element_content.c +63 -55
  28. data/ext/nokogiri/xml_element_decl.c +31 -31
  29. data/ext/nokogiri/xml_encoding_handler.c +54 -21
  30. data/ext/nokogiri/xml_entity_decl.c +37 -35
  31. data/ext/nokogiri/xml_entity_reference.c +17 -19
  32. data/ext/nokogiri/xml_namespace.c +136 -62
  33. data/ext/nokogiri/xml_node.c +1387 -678
  34. data/ext/nokogiri/xml_node_set.c +246 -216
  35. data/ext/nokogiri/xml_processing_instruction.c +18 -20
  36. data/ext/nokogiri/xml_reader.c +347 -212
  37. data/ext/nokogiri/xml_relax_ng.c +86 -77
  38. data/ext/nokogiri/xml_sax_parser.c +149 -124
  39. data/ext/nokogiri/xml_sax_parser_context.c +145 -103
  40. data/ext/nokogiri/xml_sax_push_parser.c +64 -36
  41. data/ext/nokogiri/xml_schema.c +138 -81
  42. data/ext/nokogiri/xml_syntax_error.c +42 -21
  43. data/ext/nokogiri/xml_text.c +36 -26
  44. data/ext/nokogiri/xml_xpath_context.c +366 -178
  45. data/ext/nokogiri/xslt_stylesheet.c +335 -189
  46. data/gumbo-parser/CHANGES.md +63 -0
  47. data/gumbo-parser/Makefile +111 -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 +630 -0
  59. data/gumbo-parser/src/error.h +148 -0
  60. data/gumbo-parser/src/foreign_attrs.c +103 -0
  61. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  62. data/gumbo-parser/src/insertion_mode.h +33 -0
  63. data/gumbo-parser/src/macros.h +91 -0
  64. data/gumbo-parser/src/nokogiri_gumbo.h +944 -0
  65. data/gumbo-parser/src/parser.c +4891 -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 +223 -0
  76. data/gumbo-parser/src/tag_lookup.c +382 -0
  77. data/gumbo-parser/src/tag_lookup.gperf +170 -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 +66 -0
  88. data/gumbo-parser/src/util.h +34 -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 -8
  93. data/lib/nokogiri/css/parser.rb +397 -377
  94. data/lib/nokogiri/css/parser.y +250 -245
  95. data/lib/nokogiri/css/parser_extras.rb +54 -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 +3 -2
  99. data/lib/nokogiri/css/xpath_visitor.rb +224 -95
  100. data/lib/nokogiri/css.rb +56 -17
  101. data/lib/nokogiri/decorators/slop.rb +9 -7
  102. data/lib/nokogiri/encoding_handler.rb +57 -0
  103. data/lib/nokogiri/extension.rb +32 -0
  104. data/lib/nokogiri/gumbo.rb +15 -0
  105. data/lib/nokogiri/html.rb +38 -27
  106. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  107. data/lib/nokogiri/html4/document.rb +214 -0
  108. data/lib/nokogiri/html4/document_fragment.rb +54 -0
  109. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  110. data/lib/nokogiri/html4/element_description_defaults.rb +2040 -0
  111. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  112. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  113. data/lib/nokogiri/{html → html4}/sax/parser.rb +17 -16
  114. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  115. data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
  116. data/lib/nokogiri/html4.rb +47 -0
  117. data/lib/nokogiri/html5/document.rb +168 -0
  118. data/lib/nokogiri/html5/document_fragment.rb +90 -0
  119. data/lib/nokogiri/html5/node.rb +103 -0
  120. data/lib/nokogiri/html5.rb +392 -0
  121. data/lib/nokogiri/jruby/dependencies.rb +3 -0
  122. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  123. data/lib/nokogiri/syntax_error.rb +2 -0
  124. data/lib/nokogiri/version/constant.rb +6 -0
  125. data/lib/nokogiri/version/info.rb +223 -0
  126. data/lib/nokogiri/version.rb +3 -108
  127. data/lib/nokogiri/xml/attr.rb +55 -3
  128. data/lib/nokogiri/xml/attribute_decl.rb +6 -2
  129. data/lib/nokogiri/xml/builder.rb +98 -54
  130. data/lib/nokogiri/xml/cdata.rb +3 -1
  131. data/lib/nokogiri/xml/character_data.rb +2 -0
  132. data/lib/nokogiri/xml/document.rb +312 -126
  133. data/lib/nokogiri/xml/document_fragment.rb +104 -48
  134. data/lib/nokogiri/xml/dtd.rb +4 -2
  135. data/lib/nokogiri/xml/element_content.rb +12 -2
  136. data/lib/nokogiri/xml/element_decl.rb +6 -2
  137. data/lib/nokogiri/xml/entity_decl.rb +7 -3
  138. data/lib/nokogiri/xml/entity_reference.rb +2 -0
  139. data/lib/nokogiri/xml/namespace.rb +45 -0
  140. data/lib/nokogiri/xml/node/save_options.rb +23 -8
  141. data/lib/nokogiri/xml/node.rb +1093 -411
  142. data/lib/nokogiri/xml/node_set.rb +173 -67
  143. data/lib/nokogiri/xml/notation.rb +13 -0
  144. data/lib/nokogiri/xml/parse_options.rb +145 -52
  145. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  146. data/lib/nokogiri/xml/pp/node.rb +42 -30
  147. data/lib/nokogiri/xml/pp.rb +4 -2
  148. data/lib/nokogiri/xml/processing_instruction.rb +4 -1
  149. data/lib/nokogiri/xml/reader.rb +21 -28
  150. data/lib/nokogiri/xml/relax_ng.rb +8 -2
  151. data/lib/nokogiri/xml/sax/document.rb +45 -49
  152. data/lib/nokogiri/xml/sax/parser.rb +39 -36
  153. data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
  154. data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
  155. data/lib/nokogiri/xml/sax.rb +6 -4
  156. data/lib/nokogiri/xml/schema.rb +19 -9
  157. data/lib/nokogiri/xml/searchable.rb +120 -72
  158. data/lib/nokogiri/xml/syntax_error.rb +6 -4
  159. data/lib/nokogiri/xml/text.rb +2 -0
  160. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  161. data/lib/nokogiri/xml/xpath.rb +15 -4
  162. data/lib/nokogiri/xml/xpath_context.rb +3 -3
  163. data/lib/nokogiri/xml.rb +38 -37
  164. data/lib/nokogiri/xslt/stylesheet.rb +3 -1
  165. data/lib/nokogiri/xslt.rb +101 -22
  166. data/lib/nokogiri.rb +59 -75
  167. data/lib/xsd/xmlparser/nokogiri.rb +29 -25
  168. data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
  169. data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  170. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  171. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  172. data/patches/libxml2/0010-update-config.guess-and-config.sub-for-libxml2.patch +224 -0
  173. data/patches/libxml2/0011-rip-out-libxml2-s-libc_single_threaded-support.patch +30 -0
  174. data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
  175. data/ports/archives/libxml2-2.11.4.tar.xz +0 -0
  176. data/ports/archives/libxslt-1.1.38.tar.xz +0 -0
  177. metadata +126 -399
  178. data/.autotest +0 -22
  179. data/.cross_rubies +0 -8
  180. data/.editorconfig +0 -17
  181. data/.gemtest +0 -0
  182. data/.travis.yml +0 -63
  183. data/CHANGELOG.md +0 -1368
  184. data/CONTRIBUTING.md +0 -42
  185. data/C_CODING_STYLE.rdoc +0 -33
  186. data/Gemfile-libxml-ruby +0 -3
  187. data/Manifest.txt +0 -370
  188. data/ROADMAP.md +0 -111
  189. data/Rakefile +0 -348
  190. data/SECURITY.md +0 -19
  191. data/STANDARD_RESPONSES.md +0 -47
  192. data/Y_U_NO_GEMSPEC.md +0 -155
  193. data/appveyor.yml +0 -29
  194. data/build_all +0 -44
  195. data/ext/nokogiri/html_document.c +0 -170
  196. data/ext/nokogiri/html_document.h +0 -10
  197. data/ext/nokogiri/html_element_description.c +0 -279
  198. data/ext/nokogiri/html_element_description.h +0 -10
  199. data/ext/nokogiri/html_entity_lookup.c +0 -32
  200. data/ext/nokogiri/html_entity_lookup.h +0 -8
  201. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  202. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  203. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  204. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  205. data/ext/nokogiri/xml_attr.h +0 -9
  206. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  207. data/ext/nokogiri/xml_cdata.h +0 -9
  208. data/ext/nokogiri/xml_comment.h +0 -9
  209. data/ext/nokogiri/xml_document.h +0 -23
  210. data/ext/nokogiri/xml_document_fragment.h +0 -10
  211. data/ext/nokogiri/xml_dtd.h +0 -10
  212. data/ext/nokogiri/xml_element_content.h +0 -10
  213. data/ext/nokogiri/xml_element_decl.h +0 -9
  214. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  215. data/ext/nokogiri/xml_entity_decl.h +0 -10
  216. data/ext/nokogiri/xml_entity_reference.h +0 -9
  217. data/ext/nokogiri/xml_io.c +0 -61
  218. data/ext/nokogiri/xml_io.h +0 -11
  219. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  220. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  221. data/ext/nokogiri/xml_namespace.h +0 -15
  222. data/ext/nokogiri/xml_node.h +0 -13
  223. data/ext/nokogiri/xml_node_set.h +0 -12
  224. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  225. data/ext/nokogiri/xml_reader.h +0 -10
  226. data/ext/nokogiri/xml_relax_ng.h +0 -9
  227. data/ext/nokogiri/xml_sax_parser.h +0 -39
  228. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  229. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  230. data/ext/nokogiri/xml_schema.h +0 -9
  231. data/ext/nokogiri/xml_syntax_error.h +0 -13
  232. data/ext/nokogiri/xml_text.h +0 -9
  233. data/ext/nokogiri/xml_xpath_context.h +0 -10
  234. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  235. data/lib/nokogiri/html/document.rb +0 -335
  236. data/lib/nokogiri/html/document_fragment.rb +0 -49
  237. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  238. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  239. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  240. data/patches/libxml2/0002-Fix-nullptr-deref-with-XPath-logic-ops.patch +0 -54
  241. data/patches/libxml2/0003-Fix-infinite-loop-in-LZMA-decompression.patch +0 -50
  242. data/patches/sort-patches-by-date +0 -25
  243. data/ports/archives/libxml2-2.9.8.tar.gz +0 -0
  244. data/ports/archives/libxslt-1.1.32.tar.gz +0 -0
  245. data/suppressions/README.txt +0 -1
  246. data/suppressions/nokogiri_ruby-2.supp +0 -10
  247. data/tasks/test.rb +0 -100
  248. data/test/css/test_nthiness.rb +0 -226
  249. data/test/css/test_parser.rb +0 -386
  250. data/test/css/test_tokenizer.rb +0 -215
  251. data/test/css/test_xpath_visitor.rb +0 -96
  252. data/test/decorators/test_slop.rb +0 -23
  253. data/test/files/2ch.html +0 -108
  254. data/test/files/GH_1042.html +0 -18
  255. data/test/files/address_book.rlx +0 -12
  256. data/test/files/address_book.xml +0 -10
  257. data/test/files/atom.xml +0 -344
  258. data/test/files/bar/bar.xsd +0 -4
  259. data/test/files/bogus.xml +0 -0
  260. data/test/files/dont_hurt_em_why.xml +0 -422
  261. data/test/files/encoding.html +0 -82
  262. data/test/files/encoding.xhtml +0 -84
  263. data/test/files/exslt.xml +0 -8
  264. data/test/files/exslt.xslt +0 -35
  265. data/test/files/foo/foo.xsd +0 -4
  266. data/test/files/metacharset.html +0 -10
  267. data/test/files/namespace_pressure_test.xml +0 -1684
  268. data/test/files/noencoding.html +0 -47
  269. data/test/files/po.xml +0 -32
  270. data/test/files/po.xsd +0 -66
  271. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  272. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  273. data/test/files/saml/xenc_schema.xsd +0 -146
  274. data/test/files/saml/xmldsig_schema.xsd +0 -318
  275. data/test/files/shift_jis.html +0 -10
  276. data/test/files/shift_jis.xml +0 -5
  277. data/test/files/shift_jis_no_charset.html +0 -9
  278. data/test/files/slow-xpath.xml +0 -25509
  279. data/test/files/snuggles.xml +0 -3
  280. data/test/files/staff.dtd +0 -10
  281. data/test/files/staff.xml +0 -59
  282. data/test/files/staff.xslt +0 -32
  283. data/test/files/test_document_url/bar.xml +0 -2
  284. data/test/files/test_document_url/document.dtd +0 -4
  285. data/test/files/test_document_url/document.xml +0 -6
  286. data/test/files/tlm.html +0 -851
  287. data/test/files/to_be_xincluded.xml +0 -2
  288. data/test/files/valid_bar.xml +0 -2
  289. data/test/files/xinclude.xml +0 -4
  290. data/test/helper.rb +0 -271
  291. data/test/html/sax/test_parser.rb +0 -168
  292. data/test/html/sax/test_parser_context.rb +0 -46
  293. data/test/html/sax/test_parser_text.rb +0 -163
  294. data/test/html/sax/test_push_parser.rb +0 -87
  295. data/test/html/test_attributes.rb +0 -85
  296. data/test/html/test_builder.rb +0 -164
  297. data/test/html/test_document.rb +0 -712
  298. data/test/html/test_document_encoding.rb +0 -143
  299. data/test/html/test_document_fragment.rb +0 -310
  300. data/test/html/test_element_description.rb +0 -105
  301. data/test/html/test_named_characters.rb +0 -14
  302. data/test/html/test_node.rb +0 -212
  303. data/test/html/test_node_encoding.rb +0 -91
  304. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  305. data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
  306. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  307. data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
  308. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  309. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
  310. data/test/namespaces/test_namespaces_preservation.rb +0 -31
  311. data/test/test_convert_xpath.rb +0 -135
  312. data/test/test_css_cache.rb +0 -47
  313. data/test/test_encoding_handler.rb +0 -48
  314. data/test/test_memory_leak.rb +0 -156
  315. data/test/test_nokogiri.rb +0 -138
  316. data/test/test_soap4r_sax.rb +0 -52
  317. data/test/test_xslt_transforms.rb +0 -314
  318. data/test/xml/node/test_save_options.rb +0 -28
  319. data/test/xml/node/test_subclass.rb +0 -44
  320. data/test/xml/sax/test_parser.rb +0 -402
  321. data/test/xml/sax/test_parser_context.rb +0 -115
  322. data/test/xml/sax/test_parser_text.rb +0 -202
  323. data/test/xml/sax/test_push_parser.rb +0 -265
  324. data/test/xml/test_attr.rb +0 -74
  325. data/test/xml/test_attribute_decl.rb +0 -86
  326. data/test/xml/test_builder.rb +0 -341
  327. data/test/xml/test_c14n.rb +0 -180
  328. data/test/xml/test_cdata.rb +0 -54
  329. data/test/xml/test_comment.rb +0 -40
  330. data/test/xml/test_document.rb +0 -982
  331. data/test/xml/test_document_encoding.rb +0 -31
  332. data/test/xml/test_document_fragment.rb +0 -298
  333. data/test/xml/test_dtd.rb +0 -187
  334. data/test/xml/test_dtd_encoding.rb +0 -31
  335. data/test/xml/test_element_content.rb +0 -56
  336. data/test/xml/test_element_decl.rb +0 -73
  337. data/test/xml/test_entity_decl.rb +0 -122
  338. data/test/xml/test_entity_reference.rb +0 -262
  339. data/test/xml/test_namespace.rb +0 -96
  340. data/test/xml/test_node.rb +0 -1325
  341. data/test/xml/test_node_attributes.rb +0 -115
  342. data/test/xml/test_node_encoding.rb +0 -75
  343. data/test/xml/test_node_inheritance.rb +0 -32
  344. data/test/xml/test_node_reparenting.rb +0 -592
  345. data/test/xml/test_node_set.rb +0 -809
  346. data/test/xml/test_parse_options.rb +0 -64
  347. data/test/xml/test_processing_instruction.rb +0 -30
  348. data/test/xml/test_reader.rb +0 -620
  349. data/test/xml/test_reader_encoding.rb +0 -134
  350. data/test/xml/test_relax_ng.rb +0 -60
  351. data/test/xml/test_schema.rb +0 -142
  352. data/test/xml/test_syntax_error.rb +0 -36
  353. data/test/xml/test_text.rb +0 -60
  354. data/test/xml/test_unparented_node.rb +0 -483
  355. data/test/xml/test_xinclude.rb +0 -83
  356. data/test/xml/test_xpath.rb +0 -470
  357. data/test/xslt/test_custom_functions.rb +0 -133
  358. data/test/xslt/test_exception_handling.rb +0 -37
@@ -1,202 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "helper"
3
-
4
- module Nokogiri
5
- module XML
6
- module SAX
7
- class TestParserText < Nokogiri::SAX::TestCase
8
- def setup
9
- super
10
- @doc = DocWithOrderedItems.new
11
- @parser = XML::SAX::Parser.new @doc
12
- end
13
-
14
- def test_texts_order
15
- xml = <<-eoxml
16
- <?xml version="1.0" ?>
17
- <root>
18
- text 0
19
- <p>
20
- text 1
21
- <span>text 2</span>
22
- text 3
23
- </p>
24
-
25
- text 4
26
- <!--
27
- text 5
28
- -->
29
-
30
- <p>
31
- <!-- text 6 -->
32
- <span><!-- text 7 --></span>
33
- <!-- text 8 -->
34
- </p>
35
-
36
- <!-- text 9 -->
37
- <![CDATA[ text 10 ]]>
38
-
39
- <p>
40
- <![CDATA[ text 11 ]]>
41
- <span><![CDATA[ text 12 ]]></span>
42
- <![CDATA[ text 13 ]]>
43
- </p>
44
- </root>
45
- eoxml
46
-
47
- @parser.parse xml
48
- items = @doc.items.get_root_content "root"
49
- items = items.select_methods [
50
- :start_element, :end_element,
51
- :characters, :comment, :cdata_block
52
- ]
53
- items.strip_text! [:characters, :comment, :cdata_block]
54
-
55
- assert_equal [
56
- [:characters, 'text 0'],
57
-
58
- [:start_element, 'p', []],
59
- [:characters, 'text 1'],
60
-
61
- [:start_element, 'span', []],
62
- [:characters, 'text 2'],
63
- [:end_element, 'span'],
64
-
65
- [:characters, 'text 3'],
66
- [:end_element, 'p'],
67
-
68
- [:characters, 'text 4'],
69
- [:comment, 'text 5'],
70
- [:characters, ''],
71
-
72
- [:start_element, 'p', []],
73
- [:characters, ''],
74
- [:comment, 'text 6'],
75
- [:characters, ''],
76
-
77
- [:start_element, 'span', []],
78
- [:comment, 'text 7'],
79
- [:end_element, 'span'],
80
- [:characters, ''],
81
-
82
- [:comment, 'text 8'],
83
- [:characters, ''],
84
- [:end_element, 'p'],
85
- [:characters, ''],
86
-
87
- [:comment, 'text 9'],
88
- [:characters, ''],
89
- [:cdata_block, 'text 10'],
90
- [:characters, ''],
91
-
92
- [:start_element, 'p', []],
93
- [:characters, ''],
94
- [:cdata_block, 'text 11'],
95
- [:characters, ''],
96
-
97
- [:start_element, 'span', []],
98
- [:cdata_block, 'text 12'],
99
- [:end_element, 'span'],
100
- [:characters, ''],
101
-
102
- [:cdata_block, 'text 13'],
103
- [:characters, ''],
104
-
105
- [:end_element, 'p'],
106
- [:characters, '']
107
- ], items
108
-
109
- nil
110
- end
111
-
112
- def text_whitespace
113
- xml = <<-eoxml
114
- <?xml version="1.0" ?>
115
- <root>
116
- <p>
117
- <span></span>
118
- <span> </span>
119
- <span>
120
-
121
- </span>
122
- </p>
123
- <p>
124
- <!---->
125
- <!-- -->
126
- <!--
127
-
128
- -->
129
- </p>
130
- <p>
131
- <![CDATA[]]>
132
- <![CDATA[ ]]>
133
- <![CDATA[
134
-
135
- ]]>
136
- </p>
137
- </root>
138
- eoxml
139
-
140
- @parser.parse xml
141
- items = @doc.items.get_root_content "root"
142
- items = items.select_methods [
143
- :start_element, :end_element,
144
- :characters, :comment, :cdata_block
145
- ]
146
- items.strip_text! [:characters, :comment, :cdata_block]
147
-
148
- assert_equal [
149
- [:characters, ''],
150
- [:start_element, 'p', []],
151
-
152
- [:characters, ''],
153
- [:start_element, 'span', []],
154
- [:end_element, 'span'],
155
- [:characters, ''],
156
-
157
- [:start_element, 'span', []],
158
- [:characters, ''],
159
- [:end_element, 'span'],
160
- [:characters, ''],
161
-
162
- [:start_element, 'span', []],
163
- [:characters, ''],
164
- [:end_element, 'span'],
165
- [:characters, ''],
166
-
167
- [:end_element, 'p'],
168
- [:characters, ''],
169
-
170
- [:start_element, 'p', []],
171
- [:characters, ''],
172
-
173
- [:comment, ''],
174
- [:characters, ''],
175
- [:comment, ''],
176
- [:characters, ''],
177
- [:comment, ''],
178
- [:characters, ''],
179
-
180
- [:end_element, 'p'],
181
- [:characters, ''],
182
-
183
- [:start_element, 'p', []],
184
- [:characters, ''],
185
-
186
- [:cdata_block, ''],
187
- [:characters, ''],
188
- [:cdata_block, ''],
189
- [:characters, ''],
190
- [:cdata_block, ''],
191
- [:characters, ''],
192
-
193
- [:end_element, 'p'],
194
- [:characters, '']
195
- ], items
196
-
197
- nil
198
- end
199
- end
200
- end
201
- end
202
- end
@@ -1,265 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "helper"
4
-
5
- module Nokogiri
6
- module XML
7
- module SAX
8
- class TestPushParser < Nokogiri::SAX::TestCase
9
- def setup
10
- super
11
- @parser = XML::SAX::PushParser.new(Doc.new)
12
- end
13
-
14
- def test_exception
15
- assert_raises(SyntaxError) do
16
- @parser << "<foo /><foo />"
17
- end
18
-
19
- assert_raises(SyntaxError) do
20
- @parser << nil
21
- end
22
- end
23
-
24
- def test_early_finish
25
- @parser << "<foo>"
26
- assert_raises(SyntaxError) do
27
- @parser.finish
28
- end
29
- end
30
-
31
- def test_write_last_chunk
32
- @parser << "<foo>"
33
- @parser.write "</foo>", true
34
- assert_equal [["foo", []]], @parser.document.start_elements
35
- assert_equal [["foo"]], @parser.document.end_elements
36
- end
37
-
38
- def test_empty_doc
39
- @parser.options |= XML::ParseOptions::RECOVER
40
- @parser.write "", true
41
- assert_nil @parser.document.start_elements
42
- assert_nil @parser.document.end_elements
43
- end
44
-
45
-
46
- def test_finish_should_rethrow_last_error
47
- begin
48
- @parser << "</foo>"
49
- rescue => e
50
- expected = e
51
- end
52
-
53
- begin
54
- @parser.finish
55
- rescue => e
56
- actual = e
57
- end
58
-
59
- assert_equal actual.message, expected.message
60
- end
61
-
62
- def test_should_throw_error_returned_by_document
63
- doc = Doc.new
64
- class << doc
65
- def error msg
66
- raise "parse error"
67
- end
68
- end
69
-
70
- @parser = XML::SAX::PushParser.new(doc)
71
- begin
72
- @parser << "</foo>"
73
- rescue => e
74
- actual = e
75
- end
76
-
77
- assert_equal actual.message, "parse error"
78
- end
79
-
80
- def test_writing_nil
81
- assert_equal @parser.write(nil), @parser
82
- end
83
-
84
- def test_end_document_called
85
- @parser.<<(<<-eoxml)
86
- <p id="asdfasdf">
87
- <!-- This is a comment -->
88
- Paragraph 1
89
- </p>
90
- eoxml
91
- assert ! @parser.document.end_document_called
92
- @parser.finish
93
- assert @parser.document.end_document_called
94
- end
95
-
96
- def test_start_element
97
- @parser.<<(<<-eoxml)
98
- <p id="asdfasdf">
99
- eoxml
100
-
101
- assert_equal [["p", [["id", "asdfasdf"]]]],
102
- @parser.document.start_elements
103
-
104
- @parser.<<(<<-eoxml)
105
- <!-- This is a comment -->
106
- Paragraph 1
107
- </p>
108
- eoxml
109
- assert_equal [' This is a comment '], @parser.document.comments
110
- @parser.finish
111
- end
112
-
113
- def test_start_element_with_namespaces
114
- @parser.<<(<<-eoxml)
115
- <p xmlns:foo="http://foo.example.com/">
116
- eoxml
117
-
118
- assert_equal [["p", [["xmlns:foo", "http://foo.example.com/"]]]],
119
- @parser.document.start_elements
120
-
121
- @parser.<<(<<-eoxml)
122
- <!-- This is a comment -->
123
- Paragraph 1
124
- </p>
125
- eoxml
126
- assert_equal [' This is a comment '], @parser.document.comments
127
- @parser.finish
128
- end
129
-
130
- def test_start_element_ns
131
- @parser.<<(<<-eoxml)
132
- <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' size='large'></stream:stream>
133
- eoxml
134
-
135
- assert_equal 1, @parser.document.start_elements_namespace.length
136
- el = @parser.document.start_elements_namespace.first
137
-
138
- assert_equal 'stream', el.first
139
- assert_equal 2, el[1].length
140
- assert_equal [['version', '1.0'], ['size', 'large']],
141
- el[1].map { |x| [x.localname, x.value] }
142
-
143
- assert_equal 'stream', el[2]
144
- assert_equal 'http://etherx.jabber.org/streams', el[3]
145
- @parser.finish
146
- end
147
-
148
- def test_end_element_ns
149
- @parser.<<(<<-eoxml)
150
- <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'></stream:stream>
151
- eoxml
152
-
153
- assert_equal [['stream', 'stream', 'http://etherx.jabber.org/streams']],
154
- @parser.document.end_elements_namespace
155
- @parser.finish
156
- end
157
-
158
- def test_chevron_partial_xml
159
- @parser.<<(<<-eoxml)
160
- <p id="asdfasdf">
161
- eoxml
162
-
163
- @parser.<<(<<-eoxml)
164
- <!-- This is a comment -->
165
- Paragraph 1
166
- </p>
167
- eoxml
168
- assert_equal [' This is a comment '], @parser.document.comments
169
- @parser.finish
170
- end
171
-
172
- def test_chevron
173
- @parser.<<(<<-eoxml)
174
- <p id="asdfasdf">
175
- <!-- This is a comment -->
176
- Paragraph 1
177
- </p>
178
- eoxml
179
- @parser.finish
180
- assert_equal [' This is a comment '], @parser.document.comments
181
- end
182
-
183
- def test_default_options
184
- assert_equal 0, @parser.options
185
- end
186
-
187
- def test_recover
188
- @parser.options |= XML::ParseOptions::RECOVER
189
- @parser.<<(<<-eoxml)
190
- <p>
191
- Foo
192
- <bar>
193
- Bar
194
- </p>
195
- eoxml
196
- @parser.finish
197
- assert(@parser.document.errors.size >= 1)
198
- assert_equal [["p", []], ["bar", []]], @parser.document.start_elements
199
- assert_equal "FooBar", @parser.document.data.map { |x|
200
- x.gsub(/\s/, '')
201
- }.join
202
- end
203
-
204
- def test_broken_encoding
205
- skip("ultra hard to fix for pure Java version") if Nokogiri.jruby?
206
- @parser.options |= XML::ParseOptions::RECOVER
207
- # This is ISO_8859-1:
208
- @parser.<< "<?xml version='1.0' encoding='UTF-8'?><r>Gau\337</r>"
209
- @parser.finish
210
- assert(@parser.document.errors.size >= 1)
211
- assert_equal "Gau\337", @parser.document.data.join
212
- assert_equal [["r"]], @parser.document.end_elements
213
- end
214
-
215
- def test_replace_entities_attribute_behavior
216
- if Nokogiri.uses_libxml?
217
- # initially false
218
- assert_equal false, @parser.replace_entities
219
-
220
- # can be set to true
221
- @parser.replace_entities = true
222
- assert_equal true, @parser.replace_entities
223
-
224
- # can be set to false
225
- @parser.replace_entities = false
226
- assert_equal false, @parser.replace_entities
227
- else
228
- # initially true
229
- assert_equal true, @parser.replace_entities
230
-
231
- # ignore attempts to set to false
232
- @parser.replace_entities = false # TODO: should we raise an exception here?
233
- assert_equal true, @parser.replace_entities
234
- end
235
- end
236
-
237
- def test_untouched_entities
238
- skip("entities are always replaced in pure Java version") if Nokogiri.jruby?
239
- @parser.<<(<<-eoxml)
240
- <p id="asdf&amp;asdf">
241
- <!-- This is a comment -->
242
- Paragraph 1 &amp; 2
243
- </p>
244
- eoxml
245
- @parser.finish
246
- assert_equal [["p", [["id", "asdf&#38;asdf"]]]], @parser.document.start_elements
247
- assert_equal "Paragraph 1 & 2", @parser.document.data.join.strip
248
- end
249
-
250
- def test_replaced_entities
251
- @parser.replace_entities = true
252
- @parser.<<(<<-eoxml)
253
- <p id="asdf&amp;asdf">
254
- <!-- This is a comment -->
255
- Paragraph 1 &amp; 2
256
- </p>
257
- eoxml
258
- @parser.finish
259
- assert_equal [["p", [["id", "asdf&asdf"]]]], @parser.document.start_elements
260
- assert_equal "Paragraph 1 & 2", @parser.document.data.join.strip
261
- end
262
- end
263
- end
264
- end
265
- end
@@ -1,74 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestAttr < Nokogiri::TestCase
6
- def test_new
7
- 100.times {
8
- doc = Nokogiri::XML::Document.new
9
- assert doc
10
- assert Nokogiri::XML::Attr.new(doc, 'foo')
11
- }
12
- end
13
-
14
- def test_new_raises_argerror_on_nondocument
15
- document = Nokogiri::XML "<root><foo/></root>"
16
- assert_raises ArgumentError do
17
- Nokogiri::XML::Attr.new document.at_css("foo"), "bar"
18
- end
19
- end
20
-
21
- def test_content=
22
- xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
23
- address = xml.xpath('//address')[3]
24
- street = address.attributes['street']
25
- street.content = "Y&ent1;"
26
- assert_equal "Y&ent1;", street.value
27
- end
28
-
29
- def test_value=
30
- xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
31
- address = xml.xpath('//address')[3]
32
- street = address.attributes['street']
33
- street.value = "Y&ent1;"
34
- assert_equal "Y&ent1;", street.value
35
- end
36
-
37
- def test_unlink # aliased as :remove
38
- xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
39
- address = xml.xpath('/staff/employee/address').first
40
- assert_equal 'Yes', address['domestic']
41
-
42
- attr = address.attribute_nodes.first
43
- return_val = attr.unlink
44
- assert_nil address['domestic']
45
- assert_equal attr, return_val
46
- end
47
-
48
- def test_parsing_attribute_namespace
49
- doc = Nokogiri::XML <<-EOXML
50
- <root xmlns='http://google.com/' xmlns:f='http://flavorjon.es/'>
51
- <div f:myattr='foo'></div>
52
- </root>
53
- EOXML
54
-
55
- node = doc.at_css "div"
56
- attr = node.attributes["myattr"]
57
- assert_equal "http://flavorjon.es/", attr.namespace.href
58
- end
59
-
60
- def test_setting_attribute_namespace
61
- doc = Nokogiri::XML <<-EOXML
62
- <root xmlns='http://google.com/' xmlns:f='http://flavorjon.es/'>
63
- <div f:myattr='foo'></div>
64
- </root>
65
- EOXML
66
-
67
- node = doc.at_css "div"
68
- attr = node.attributes["myattr"]
69
- attr.add_namespace("fizzle", "http://fizzle.com/")
70
- assert_equal "http://fizzle.com/", attr.namespace.href
71
- end
72
- end
73
- end
74
- end
@@ -1,86 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestAttributeDecl < Nokogiri::TestCase
6
- def setup
7
- super
8
- @xml = Nokogiri::XML(<<-eoxml)
9
- <?xml version="1.0"?><?TEST-STYLE PIDATA?>
10
- <!DOCTYPE staff SYSTEM "staff.dtd" [
11
- <!ATTLIST br width CDATA "0">
12
- <!ATTLIST a width CDATA "0">
13
- <!ATTLIST payment type (check|cash) "cash">
14
- ]>
15
- <root />
16
- eoxml
17
- @attrs = @xml.internal_subset.children
18
- @attr_decl = @attrs.first
19
- end
20
-
21
- def test_inspect
22
- assert_equal(
23
- "#<#{@attr_decl.class.name}:#{sprintf("0x%x", @attr_decl.object_id)} #{@attr_decl.to_s.inspect}>",
24
- @attr_decl.inspect
25
- )
26
- end
27
-
28
- def test_type
29
- assert_equal 16, @attr_decl.type
30
- end
31
-
32
- def test_class
33
- assert_instance_of Nokogiri::XML::AttributeDecl, @attr_decl
34
- end
35
-
36
- def test_content
37
- assert_raise NoMethodError do
38
- @attr_decl.content
39
- end
40
- end
41
-
42
- def test_attributes
43
- assert_raise NoMethodError do
44
- @attr_decl.attributes
45
- end
46
- end
47
-
48
- def test_namespace
49
- assert_raise NoMethodError do
50
- @attr_decl.namespace
51
- end
52
- end
53
-
54
- def test_namespace_definitions
55
- assert_raise NoMethodError do
56
- @attr_decl.namespace_definitions
57
- end
58
- end
59
-
60
- def test_line
61
- assert_raise NoMethodError do
62
- @attr_decl.line
63
- end
64
- end
65
-
66
- def test_attribute_type
67
- if Nokogiri.uses_libxml?
68
- assert_equal 1, @attr_decl.attribute_type
69
- else
70
- assert_equal 'CDATA', @attr_decl.attribute_type
71
- end
72
- end
73
-
74
- def test_default
75
- assert_equal '0', @attr_decl.default
76
- assert_equal '0', @attrs[1].default
77
- end
78
-
79
- def test_enumeration
80
- assert_equal [], @attr_decl.enumeration
81
- assert_equal ['check', 'cash'], @attrs[2].enumeration
82
- end
83
- end
84
- end
85
- end
86
-