nokogiri 1.8.5 → 1.13.6

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 (356) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -21
  3. data/LICENSE-DEPENDENCIES.md +1159 -868
  4. data/LICENSE.md +5 -28
  5. data/README.md +196 -90
  6. data/bin/nokogiri +63 -50
  7. data/dependencies.yml +13 -59
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +750 -420
  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 +119 -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 +228 -91
  18. data/ext/nokogiri/nokogiri.h +191 -89
  19. data/ext/nokogiri/test_global_handlers.c +40 -0
  20. data/ext/nokogiri/xml_attr.c +41 -36
  21. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  22. data/ext/nokogiri/xml_cdata.c +13 -18
  23. data/ext/nokogiri/xml_comment.c +19 -26
  24. data/ext/nokogiri/xml_document.c +291 -216
  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 +43 -18
  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 +61 -52
  33. data/ext/nokogiri/xml_node.c +1044 -616
  34. data/ext/nokogiri/xml_node_set.c +174 -162
  35. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  36. data/ext/nokogiri/xml_reader.c +226 -175
  37. data/ext/nokogiri/xml_relax_ng.c +52 -28
  38. data/ext/nokogiri/xml_sax_parser.c +112 -112
  39. data/ext/nokogiri/xml_sax_parser_context.c +112 -86
  40. data/ext/nokogiri/xml_sax_push_parser.c +36 -27
  41. data/ext/nokogiri/xml_schema.c +112 -33
  42. data/ext/nokogiri/xml_syntax_error.c +42 -21
  43. data/ext/nokogiri/xml_text.c +13 -17
  44. data/ext/nokogiri/xml_xpath_context.c +223 -115
  45. data/ext/nokogiri/xslt_stylesheet.c +265 -173
  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 -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 +218 -91
  100. data/lib/nokogiri/css.rb +50 -17
  101. data/lib/nokogiri/decorators/slop.rb +9 -7
  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/{html → html4}/document.rb +103 -105
  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 +17 -16
  112. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  113. data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
  114. data/lib/nokogiri/html4.rb +46 -0
  115. data/lib/nokogiri/html5/document.rb +91 -0
  116. data/lib/nokogiri/html5/document_fragment.rb +83 -0
  117. data/lib/nokogiri/html5/node.rb +100 -0
  118. data/lib/nokogiri/html5.rb +478 -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 +222 -0
  123. data/lib/nokogiri/version.rb +3 -108
  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 +97 -53
  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 +224 -86
  130. data/lib/nokogiri/xml/document_fragment.rb +57 -44
  131. data/lib/nokogiri/xml/dtd.rb +4 -2
  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 +2 -0
  136. data/lib/nokogiri/xml/namespace.rb +3 -0
  137. data/lib/nokogiri/xml/node/save_options.rb +10 -5
  138. data/lib/nokogiri/xml/node.rb +895 -377
  139. data/lib/nokogiri/xml/node_set.rb +92 -65
  140. data/lib/nokogiri/xml/notation.rb +13 -0
  141. data/lib/nokogiri/xml/parse_options.rb +22 -8
  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 +38 -34
  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 +112 -72
  155. data/lib/nokogiri/xml/syntax_error.rb +6 -4
  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 -37
  161. data/lib/nokogiri/xslt/stylesheet.rb +3 -1
  162. data/lib/nokogiri/xslt.rb +29 -20
  163. data/lib/nokogiri.rb +49 -65
  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 +3040 -0
  171. data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
  172. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  173. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +3037 -0
  174. data/ports/archives/libxml2-2.9.14.tar.xz +0 -0
  175. data/ports/archives/libxslt-1.1.35.tar.xz +0 -0
  176. metadata +220 -266
  177. data/.autotest +0 -22
  178. data/.cross_rubies +0 -8
  179. data/.editorconfig +0 -17
  180. data/.gemtest +0 -0
  181. data/.travis.yml +0 -63
  182. data/CHANGELOG.md +0 -1368
  183. data/CONTRIBUTING.md +0 -42
  184. data/C_CODING_STYLE.rdoc +0 -33
  185. data/Gemfile-libxml-ruby +0 -3
  186. data/Manifest.txt +0 -370
  187. data/ROADMAP.md +0 -111
  188. data/Rakefile +0 -348
  189. data/SECURITY.md +0 -19
  190. data/STANDARD_RESPONSES.md +0 -47
  191. data/Y_U_NO_GEMSPEC.md +0 -155
  192. data/appveyor.yml +0 -29
  193. data/build_all +0 -44
  194. data/ext/nokogiri/html_document.c +0 -170
  195. data/ext/nokogiri/html_document.h +0 -10
  196. data/ext/nokogiri/html_element_description.c +0 -279
  197. data/ext/nokogiri/html_element_description.h +0 -10
  198. data/ext/nokogiri/html_entity_lookup.c +0 -32
  199. data/ext/nokogiri/html_entity_lookup.h +0 -8
  200. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  201. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  202. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  203. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  204. data/ext/nokogiri/xml_attr.h +0 -9
  205. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  206. data/ext/nokogiri/xml_cdata.h +0 -9
  207. data/ext/nokogiri/xml_comment.h +0 -9
  208. data/ext/nokogiri/xml_document.h +0 -23
  209. data/ext/nokogiri/xml_document_fragment.h +0 -10
  210. data/ext/nokogiri/xml_dtd.h +0 -10
  211. data/ext/nokogiri/xml_element_content.h +0 -10
  212. data/ext/nokogiri/xml_element_decl.h +0 -9
  213. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  214. data/ext/nokogiri/xml_entity_decl.h +0 -10
  215. data/ext/nokogiri/xml_entity_reference.h +0 -9
  216. data/ext/nokogiri/xml_io.c +0 -61
  217. data/ext/nokogiri/xml_io.h +0 -11
  218. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  219. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  220. data/ext/nokogiri/xml_namespace.h +0 -15
  221. data/ext/nokogiri/xml_node.h +0 -13
  222. data/ext/nokogiri/xml_node_set.h +0 -12
  223. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  224. data/ext/nokogiri/xml_reader.h +0 -10
  225. data/ext/nokogiri/xml_relax_ng.h +0 -9
  226. data/ext/nokogiri/xml_sax_parser.h +0 -39
  227. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  228. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  229. data/ext/nokogiri/xml_schema.h +0 -9
  230. data/ext/nokogiri/xml_syntax_error.h +0 -13
  231. data/ext/nokogiri/xml_text.h +0 -9
  232. data/ext/nokogiri/xml_xpath_context.h +0 -10
  233. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  234. data/lib/nokogiri/html/document_fragment.rb +0 -49
  235. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  236. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  237. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  238. data/patches/libxml2/0002-Fix-nullptr-deref-with-XPath-logic-ops.patch +0 -54
  239. data/patches/libxml2/0003-Fix-infinite-loop-in-LZMA-decompression.patch +0 -50
  240. data/patches/sort-patches-by-date +0 -25
  241. data/ports/archives/libxml2-2.9.8.tar.gz +0 -0
  242. data/ports/archives/libxslt-1.1.32.tar.gz +0 -0
  243. data/suppressions/README.txt +0 -1
  244. data/suppressions/nokogiri_ruby-2.supp +0 -10
  245. data/tasks/test.rb +0 -100
  246. data/test/css/test_nthiness.rb +0 -226
  247. data/test/css/test_parser.rb +0 -386
  248. data/test/css/test_tokenizer.rb +0 -215
  249. data/test/css/test_xpath_visitor.rb +0 -96
  250. data/test/decorators/test_slop.rb +0 -23
  251. data/test/files/2ch.html +0 -108
  252. data/test/files/GH_1042.html +0 -18
  253. data/test/files/address_book.rlx +0 -12
  254. data/test/files/address_book.xml +0 -10
  255. data/test/files/atom.xml +0 -344
  256. data/test/files/bar/bar.xsd +0 -4
  257. data/test/files/bogus.xml +0 -0
  258. data/test/files/dont_hurt_em_why.xml +0 -422
  259. data/test/files/encoding.html +0 -82
  260. data/test/files/encoding.xhtml +0 -84
  261. data/test/files/exslt.xml +0 -8
  262. data/test/files/exslt.xslt +0 -35
  263. data/test/files/foo/foo.xsd +0 -4
  264. data/test/files/metacharset.html +0 -10
  265. data/test/files/namespace_pressure_test.xml +0 -1684
  266. data/test/files/noencoding.html +0 -47
  267. data/test/files/po.xml +0 -32
  268. data/test/files/po.xsd +0 -66
  269. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  270. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  271. data/test/files/saml/xenc_schema.xsd +0 -146
  272. data/test/files/saml/xmldsig_schema.xsd +0 -318
  273. data/test/files/shift_jis.html +0 -10
  274. data/test/files/shift_jis.xml +0 -5
  275. data/test/files/shift_jis_no_charset.html +0 -9
  276. data/test/files/slow-xpath.xml +0 -25509
  277. data/test/files/snuggles.xml +0 -3
  278. data/test/files/staff.dtd +0 -10
  279. data/test/files/staff.xml +0 -59
  280. data/test/files/staff.xslt +0 -32
  281. data/test/files/test_document_url/bar.xml +0 -2
  282. data/test/files/test_document_url/document.dtd +0 -4
  283. data/test/files/test_document_url/document.xml +0 -6
  284. data/test/files/tlm.html +0 -851
  285. data/test/files/to_be_xincluded.xml +0 -2
  286. data/test/files/valid_bar.xml +0 -2
  287. data/test/files/xinclude.xml +0 -4
  288. data/test/helper.rb +0 -271
  289. data/test/html/sax/test_parser.rb +0 -168
  290. data/test/html/sax/test_parser_context.rb +0 -46
  291. data/test/html/sax/test_parser_text.rb +0 -163
  292. data/test/html/sax/test_push_parser.rb +0 -87
  293. data/test/html/test_attributes.rb +0 -85
  294. data/test/html/test_builder.rb +0 -164
  295. data/test/html/test_document.rb +0 -712
  296. data/test/html/test_document_encoding.rb +0 -143
  297. data/test/html/test_document_fragment.rb +0 -310
  298. data/test/html/test_element_description.rb +0 -105
  299. data/test/html/test_named_characters.rb +0 -14
  300. data/test/html/test_node.rb +0 -212
  301. data/test/html/test_node_encoding.rb +0 -91
  302. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  303. data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
  304. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  305. data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
  306. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  307. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
  308. data/test/namespaces/test_namespaces_preservation.rb +0 -31
  309. data/test/test_convert_xpath.rb +0 -135
  310. data/test/test_css_cache.rb +0 -47
  311. data/test/test_encoding_handler.rb +0 -48
  312. data/test/test_memory_leak.rb +0 -156
  313. data/test/test_nokogiri.rb +0 -138
  314. data/test/test_soap4r_sax.rb +0 -52
  315. data/test/test_xslt_transforms.rb +0 -314
  316. data/test/xml/node/test_save_options.rb +0 -28
  317. data/test/xml/node/test_subclass.rb +0 -44
  318. data/test/xml/sax/test_parser.rb +0 -402
  319. data/test/xml/sax/test_parser_context.rb +0 -115
  320. data/test/xml/sax/test_parser_text.rb +0 -202
  321. data/test/xml/sax/test_push_parser.rb +0 -265
  322. data/test/xml/test_attr.rb +0 -74
  323. data/test/xml/test_attribute_decl.rb +0 -86
  324. data/test/xml/test_builder.rb +0 -341
  325. data/test/xml/test_c14n.rb +0 -180
  326. data/test/xml/test_cdata.rb +0 -54
  327. data/test/xml/test_comment.rb +0 -40
  328. data/test/xml/test_document.rb +0 -982
  329. data/test/xml/test_document_encoding.rb +0 -31
  330. data/test/xml/test_document_fragment.rb +0 -298
  331. data/test/xml/test_dtd.rb +0 -187
  332. data/test/xml/test_dtd_encoding.rb +0 -31
  333. data/test/xml/test_element_content.rb +0 -56
  334. data/test/xml/test_element_decl.rb +0 -73
  335. data/test/xml/test_entity_decl.rb +0 -122
  336. data/test/xml/test_entity_reference.rb +0 -262
  337. data/test/xml/test_namespace.rb +0 -96
  338. data/test/xml/test_node.rb +0 -1325
  339. data/test/xml/test_node_attributes.rb +0 -115
  340. data/test/xml/test_node_encoding.rb +0 -75
  341. data/test/xml/test_node_inheritance.rb +0 -32
  342. data/test/xml/test_node_reparenting.rb +0 -592
  343. data/test/xml/test_node_set.rb +0 -809
  344. data/test/xml/test_parse_options.rb +0 -64
  345. data/test/xml/test_processing_instruction.rb +0 -30
  346. data/test/xml/test_reader.rb +0 -620
  347. data/test/xml/test_reader_encoding.rb +0 -134
  348. data/test/xml/test_relax_ng.rb +0 -60
  349. data/test/xml/test_schema.rb +0 -142
  350. data/test/xml/test_syntax_error.rb +0 -36
  351. data/test/xml/test_text.rb +0 -60
  352. data/test/xml/test_unparented_node.rb +0 -483
  353. data/test/xml/test_xinclude.rb +0 -83
  354. data/test/xml/test_xpath.rb +0 -470
  355. data/test/xslt/test_custom_functions.rb +0 -133
  356. data/test/xslt/test_exception_handling.rb +0 -37
@@ -1,135 +0,0 @@
1
- require "helper"
2
-
3
- class TestConvertXPath < Nokogiri::TestCase
4
-
5
- def setup
6
- super
7
- @N = Nokogiri(File.read(HTML_FILE))
8
- end
9
-
10
- def assert_syntactical_equivalence(hpath, xpath, match, &blk)
11
- blk ||= lambda {|j| j.first}
12
- assert_equal match, blk.call(@N.search(xpath)), "xpath result did not match"
13
- end
14
-
15
- def test_child_tag
16
- assert_syntactical_equivalence("h1[a]", ".//h1[child::a]", "Tender Lovemaking") do |j|
17
- j.inner_text
18
- end
19
- end
20
-
21
- def test_child_tag_equals
22
- assert_syntactical_equivalence("h1[a='Tender Lovemaking']", ".//h1[child::a = 'Tender Lovemaking']", "Tender Lovemaking") do |j|
23
- j.inner_text
24
- end
25
- end
26
-
27
- def test_filter_contains
28
- assert_syntactical_equivalence("title:contains('Tender')", ".//title[contains(., 'Tender')]",
29
- "Tender Lovemaking ") do |j|
30
- j.inner_text
31
- end
32
- end
33
-
34
- def test_filter_comment
35
- assert_syntactical_equivalence("div comment()[2]", ".//div//comment()[position() = 2]", "<!-- end of header -->") do |j|
36
- j.first.to_s
37
- end
38
- end
39
-
40
- def test_filter_text
41
- assert_syntactical_equivalence("a[text()]", ".//a[normalize-space(child::text())]", "<a href=\"http://tenderlovemaking.com\">Tender Lovemaking</a>") do |j|
42
- j.first.to_s
43
- end
44
- assert_syntactical_equivalence("a[text()='Tender Lovemaking']", ".//a[normalize-space(child::text()) = 'Tender Lovemaking']", "<a href=\"http://tenderlovemaking.com\">Tender Lovemaking</a>") do |j|
45
- j.first.to_s
46
- end
47
- assert_syntactical_equivalence("a/text()", ".//a/child::text()", "Tender Lovemaking") do |j|
48
- j.first.to_s
49
- end
50
- assert_syntactical_equivalence("h2//a[text()!='Back Home!']", ".//h2//a[normalize-space(child::text()) != 'Back Home!']", "Meow meow meow meow meow") do |j|
51
- j.first.inner_text
52
- end
53
- end
54
-
55
- def test_filter_by_attr
56
- assert_syntactical_equivalence("a[@href='http://blog.geminigeek.com/wordpress-theme']",
57
- ".//a[@href = 'http://blog.geminigeek.com/wordpress-theme']",
58
- "http://blog.geminigeek.com/wordpress-theme") do |j|
59
- j.first["href"]
60
- end
61
- end
62
-
63
- def test_css_id
64
- assert_syntactical_equivalence("#linkcat-7", ".//*[@id = 'linkcat-7']", "linkcat-7") do |j|
65
- j.first["id"]
66
- end
67
- assert_syntactical_equivalence("li#linkcat-7", ".//li[@id = 'linkcat-7']", "linkcat-7") do |j|
68
- j.first["id"]
69
- end
70
- end
71
-
72
- def test_css_class
73
- assert_syntactical_equivalence(".cat-item-15", ".//*[contains(concat(' ', @class, ' '), ' cat-item-15 ')]",
74
- "cat-item cat-item-15") do |j|
75
- j.first["class"]
76
- end
77
- assert_syntactical_equivalence("li.cat-item-15", ".//li[contains(concat(' ', @class, ' '), ' cat-item-15 ')]",
78
- "cat-item cat-item-15") do |j|
79
- j.first["class"]
80
- end
81
- end
82
-
83
- def test_css_tags
84
- assert_syntactical_equivalence("div li a", ".//div//li//a", "http://brobinius.org/") do |j|
85
- j.first.inner_text
86
- end
87
- assert_syntactical_equivalence("div li > a", ".//div//li/a", "http://brobinius.org/") do |j|
88
- j.first.inner_text
89
- end
90
- assert_syntactical_equivalence("h1 ~ small", ".//small[preceding-sibling::h1]", "The act of making love, tenderly.") do |j|
91
- j.first.inner_text
92
- end
93
- assert_syntactical_equivalence("h1 ~ small", ".//small[preceding-sibling::h1]", "The act of making love, tenderly.") do |j|
94
- j.first.inner_text
95
- end
96
- end
97
-
98
- def test_positional
99
- assert_syntactical_equivalence("div/div:first()", ".//div/div[position() = 1]", "\r\nTender Lovemaking\r\nThe act of making love, tenderly.\r\n".gsub(/[\r\n]/, '')) do |j|
100
- j.first.inner_text.gsub(/[\r\n]/, '')
101
- end
102
- assert_syntactical_equivalence("div/div:first", ".//div/div[position() = 1]", "\r\nTender Lovemaking\r\nThe act of making love, tenderly.\r\n".gsub(/[\r\n]/, '')) do |j|
103
- j.first.inner_text.gsub(/[\r\n]/, '')
104
- end
105
- assert_syntactical_equivalence("div//a:last()", ".//div//a[position() = last()]", "Wordpress") do |j|
106
- j.last.inner_text
107
- end
108
- assert_syntactical_equivalence("div//a:last", ".//div//a[position() = last()]", "Wordpress") do |j|
109
- j.last.inner_text
110
- end
111
- end
112
-
113
- def test_multiple_filters
114
- assert_syntactical_equivalence("a[@rel='bookmark'][1]", ".//a[@rel = 'bookmark' and position() = 1]", "Back Home!") do |j|
115
- j.first.inner_text
116
- end
117
- end
118
-
119
- # TODO:
120
- # doc/'title ~ link' -> links that are siblings of title
121
- # doc/'p[@class~="final"]' -> class includes string (whitespacy)
122
- # doc/'p[text()*="final"]' -> class includes string (index) (broken: always returns true?)
123
- # doc/'p[text()$="final"]' -> /final$/
124
- # doc/'p[text()|="final"]' -> /^final$/
125
- # doc/'p[text()^="final"]' -> string starts with 'final
126
- # nth_first
127
- # nth_last
128
- # even
129
- # odd
130
- # first-child, nth-child, last-child, nth-last-child, nth-last-of-type
131
- # only-of-type, only-child
132
- # parent
133
- # empty
134
- # root
135
- end
@@ -1,47 +0,0 @@
1
- require "helper"
2
-
3
- class TestCssCache < Nokogiri::TestCase
4
-
5
- def setup
6
- super
7
- @css = "a1 > b2 > c3"
8
- @parse_result = Nokogiri::CSS.parse(@css)
9
- @to_xpath_result = @parse_result.map(&:to_xpath)
10
- Nokogiri::CSS::Parser.class_eval do
11
- class << @cache
12
- alias :old_bracket :[]
13
- attr_reader :count
14
- def [](key)
15
- @count ||= 0
16
- @count += 1
17
- old_bracket(key)
18
- end
19
- end
20
- end
21
- assert Nokogiri::CSS::Parser.cache_on?
22
- end
23
-
24
- def teardown
25
- Nokogiri::CSS::Parser.clear_cache
26
- Nokogiri::CSS::Parser.set_cache true
27
- end
28
-
29
- [ false, true ].each do |cache_setting|
30
- define_method "test_css_cache_#{cache_setting ? "true" : "false"}" do
31
- Nokogiri::CSS::Parser.set_cache cache_setting
32
-
33
- Nokogiri::CSS.xpath_for(@css)
34
- Nokogiri::CSS.xpath_for(@css)
35
- Nokogiri::CSS::Parser.new.xpath_for(@css)
36
- Nokogiri::CSS::Parser.new.xpath_for(@css)
37
-
38
- if cache_setting
39
- assert_equal(4, Nokogiri::CSS::Parser.class_eval { @cache.count })
40
- else
41
- assert_nil(Nokogiri::CSS::Parser.class_eval { @cache.count })
42
- end
43
- end
44
- end
45
-
46
-
47
- end
@@ -1,48 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "helper"
4
-
5
- class TestEncodingHandler < Nokogiri::TestCase
6
- def teardown
7
- Nokogiri::EncodingHandler.clear_aliases!
8
- #Replace default aliases removed by clear_aliases!
9
- Nokogiri.install_default_aliases
10
- end
11
-
12
- def test_get
13
- assert_not_nil Nokogiri::EncodingHandler['UTF-8']
14
- assert_nil Nokogiri::EncodingHandler['alsdkjfhaldskjfh']
15
- end
16
-
17
- def test_name
18
- eh = Nokogiri::EncodingHandler['UTF-8']
19
- assert_equal "UTF-8", eh.name
20
- end
21
-
22
- def test_alias
23
- Nokogiri::EncodingHandler.alias('UTF-8', 'UTF-18')
24
- assert_equal 'UTF-8', Nokogiri::EncodingHandler['UTF-18'].name
25
- end
26
-
27
- def test_cleanup_aliases
28
- assert_nil Nokogiri::EncodingHandler['UTF-9']
29
- Nokogiri::EncodingHandler.alias('UTF-8', 'UTF-9')
30
- assert_not_nil Nokogiri::EncodingHandler['UTF-9']
31
-
32
- Nokogiri::EncodingHandler.clear_aliases!
33
- assert_nil Nokogiri::EncodingHandler['UTF-9']
34
- end
35
-
36
- def test_delete
37
- assert_nil Nokogiri::EncodingHandler['UTF-9']
38
- Nokogiri::EncodingHandler.alias('UTF-8', 'UTF-9')
39
- assert_not_nil Nokogiri::EncodingHandler['UTF-9']
40
-
41
- Nokogiri::EncodingHandler.delete 'UTF-9'
42
- assert_nil Nokogiri::EncodingHandler['UTF-9']
43
- end
44
-
45
- def test_delete_non_existent
46
- assert_nil Nokogiri::EncodingHandler.delete('UTF-9')
47
- end
48
- end
@@ -1,156 +0,0 @@
1
- require "helper"
2
-
3
- class TestMemoryLeak < Nokogiri::TestCase
4
- def setup
5
- super
6
- @str = <<EOF
7
- <!DOCTYPE HTML>
8
- <html>
9
- <body>
10
- <br />
11
- </body>
12
- </html>
13
- EOF
14
- end
15
-
16
- if ENV['NOKOGIRI_GC'] # turning these off by default for now
17
- def test_dont_hurt_em_why
18
- content = File.open("#{File.dirname(__FILE__)}/files/dont_hurt_em_why.xml").read
19
- ndoc = Nokogiri::XML(content)
20
- 2.times do
21
- ndoc.search('status text').first.inner_text
22
- ndoc.search('user name').first.inner_text
23
- GC.start
24
- end
25
- end
26
-
27
- class BadIO
28
- def read(*args)
29
- raise 'hell'
30
- end
31
-
32
- def write(*args)
33
- raise 'chickens'
34
- end
35
- end
36
-
37
- def test_for_mem_leak_on_io_callbacks
38
- io = File.open SNUGGLES_FILE
39
- Nokogiri::XML.parse(io)
40
-
41
- loop do
42
- Nokogiri::XML.parse(BadIO.new) rescue nil
43
- doc.write BadIO.new rescue nil
44
- end
45
- end
46
-
47
- def test_for_memory_leak
48
- begin
49
- # we don't use Dike in any tests, but requiring it has side effects
50
- # that can create memory leaks, and that's what we're testing for.
51
- require 'rubygems'
52
- require 'dike' # do not remove!
53
-
54
- count_start = count_object_space_documents
55
- xml_data = <<-EOS
56
- <test>
57
- <items>
58
- <item>abc</item>
59
- <item>1234</item>
60
- <item>Zzz</item>
61
- <items>
62
- </test>
63
- EOS
64
- 20.times do
65
- doc = Nokogiri::XML(xml_data)
66
- doc.xpath("//item")
67
- end
68
- 2.times { GC.start }
69
- count_end = count_object_space_documents
70
- assert((count_end - count_start) <= 2, "memory leak detected")
71
- rescue LoadError
72
- puts "\ndike is not installed, skipping memory leak test"
73
- end
74
- end
75
-
76
- def test_node_set_namespace_mem_leak
77
- xml = Nokogiri::XML "<foo></foo>"
78
- ctx = Nokogiri::XML::XPathContext.new(xml)
79
- loop do
80
- ctx.evaluate("//namespace::*")
81
- end
82
- end
83
-
84
- def test_leak_on_node_replace
85
- loop do
86
- doc = Nokogiri.XML("<root><foo /></root>")
87
- n = Nokogiri::XML::CDATA.new(doc, "bar")
88
- pivot = doc.root.children[0]
89
- pivot.replace(n)
90
- end
91
- end
92
-
93
- def test_sax_parser_context
94
- io = StringIO.new(@str)
95
-
96
- loop do
97
- Nokogiri::XML::SAX::ParserContext.new(@str)
98
- Nokogiri::XML::SAX::ParserContext.new(io)
99
- io.rewind
100
-
101
- Nokogiri::HTML::SAX::ParserContext.new(@str)
102
- Nokogiri::HTML::SAX::ParserContext.new(io)
103
- io.rewind
104
- end
105
- end
106
-
107
- class JumpingSaxHandler < Nokogiri::XML::SAX::Document
108
- def initialize(jumptag)
109
- @jumptag = jumptag
110
- super()
111
- end
112
-
113
- def start_element(name, attrs = [])
114
- throw @jumptag
115
- end
116
- end
117
-
118
- def test_jumping_sax_handler
119
- doc = JumpingSaxHandler.new(:foo)
120
-
121
- loop do
122
- catch(:foo) do
123
- Nokogiri::HTML::SAX::Parser.new(doc).parse(@str)
124
- end
125
- end
126
- end
127
-
128
- def test_in_context_parser_leak
129
- loop do
130
- doc = Nokogiri::XML::Document.new
131
- fragment1 = Nokogiri::XML::DocumentFragment.new(doc, '<foo/>')
132
- node = fragment1.children[0]
133
- node.parse('<bar></bar>')
134
- end
135
- end
136
-
137
- def test_in_context_parser_leak_ii
138
- loop { Nokogiri::XML('<a/>').root.parse('<b/>') }
139
- end
140
-
141
- def test_leak_on_xpath_string_function
142
- doc = Nokogiri::XML(@str)
143
- loop do
144
- doc.xpath('name(//node())')
145
- end
146
- end
147
- end # if NOKOGIRI_GC
148
-
149
- private
150
-
151
- def count_object_space_documents
152
- count = 0
153
- ObjectSpace.each_object {|j| count += 1 if j.is_a?(Nokogiri::XML::Document) }
154
- count
155
- end
156
- end
@@ -1,138 +0,0 @@
1
- require "helper"
2
-
3
- class TestNokogiri < Nokogiri::TestCase
4
- def test_versions
5
- version_match = /\d+\.\d+\.\d+/
6
- assert_match version_match, Nokogiri::VERSION
7
-
8
- assert_equal Nokogiri::VERSION_INFO['ruby']['version'], ::RUBY_VERSION
9
- assert_equal Nokogiri::VERSION_INFO['ruby']['platform'], ::RUBY_PLATFORM
10
-
11
- if Nokogiri.uses_libxml?
12
- assert_match version_match, Nokogiri::LIBXML_VERSION
13
- assert_equal 'extension', Nokogiri::VERSION_INFO['libxml']['binding']
14
-
15
- assert_match version_match, Nokogiri::VERSION_INFO['libxml']['compiled']
16
- assert_equal Nokogiri::LIBXML_VERSION, Nokogiri::VERSION_INFO['libxml']['compiled']
17
-
18
- assert_match version_match, Nokogiri::VERSION_INFO['libxml']['loaded']
19
- Nokogiri::LIBXML_PARSER_VERSION =~ /(\d)(\d{2})(\d{2})/
20
- major = $1.to_i
21
- minor = $2.to_i
22
- bug = $3.to_i
23
- assert_equal "#{major}.#{minor}.#{bug}", Nokogiri::VERSION_INFO['libxml']['loaded']
24
- end
25
- end
26
-
27
- def test_libxml_iconv
28
- assert Nokogiri.const_defined?(:LIBXML_ICONV_ENABLED) if Nokogiri.uses_libxml?
29
- end
30
-
31
- def test_parse_with_io
32
- doc = Nokogiri.parse(
33
- StringIO.new("<html><head><title></title><body></body></html>")
34
- )
35
- assert_instance_of Nokogiri::HTML::Document, doc
36
- end
37
-
38
- def test_xml?
39
- doc = Nokogiri.parse(File.read(XML_FILE))
40
- assert doc.xml?
41
- assert !doc.html?
42
- end
43
-
44
- def test_atom_is_xml?
45
- doc = Nokogiri.parse(File.read(XML_ATOM_FILE))
46
- assert doc.xml?
47
- assert !doc.html?
48
- end
49
-
50
- def test_html?
51
- doc = Nokogiri.parse(File.read(HTML_FILE))
52
- assert !doc.xml?
53
- assert doc.html?
54
- end
55
-
56
- def test_nokogiri_method_with_html
57
- doc1 = Nokogiri(File.read(HTML_FILE))
58
- doc2 = Nokogiri.parse(File.read(HTML_FILE))
59
- assert_equal doc1.serialize, doc2.serialize
60
- end
61
-
62
- def test_nokogiri_method_with_block
63
- doc = Nokogiri { b "bold tag" }
64
- assert_equal('<b>bold tag</b>', doc.to_html.chomp)
65
- end
66
-
67
- def test_make_with_html
68
- doc = Nokogiri.make("<b>bold tag</b>")
69
- assert_equal('<b>bold tag</b>', doc.to_html.chomp)
70
- end
71
-
72
- def test_make_with_block
73
- doc = Nokogiri.make { b "bold tag" }
74
- assert_equal('<b>bold tag</b>', doc.to_html.chomp)
75
- end
76
-
77
- SLOP_HTML = <<-END
78
- <html>
79
- <body>
80
- <ul>
81
- <li class='red'>one</li>
82
- <li class='blue'>two</li>
83
- </ul>
84
- <div>
85
- one
86
- <div>div two</div>
87
- </div>
88
- </body>
89
- </html>
90
- END
91
-
92
- def test_slop_css
93
- doc = Nokogiri::Slop(<<-eohtml)
94
- <html>
95
- <body>
96
- <div>
97
- one
98
- <div class='foo'>
99
- div two
100
- <div class='foo'>
101
- div three
102
- </div>
103
- </div>
104
- </div>
105
- </body>
106
- </html>
107
- eohtml
108
- assert_equal "div", doc.html.body.div.div('.foo').name
109
- end
110
-
111
- def test_slop
112
- doc = Nokogiri::Slop(SLOP_HTML)
113
-
114
- assert_equal "one", doc.html.body.ul.li.first.text
115
- assert_equal "two", doc.html.body.ul.li(".blue").text
116
- assert_equal "div two", doc.html.body.div.div.text
117
-
118
- assert_equal "two", doc.html.body.ul.li(:css => ".blue").text
119
-
120
- assert_equal "two", doc.html.body.ul.li(:xpath => "position()=2").text
121
- assert_equal "one", doc.html.body.ul.li(:xpath => ["contains(text(),'o')"]).first.text
122
- assert_equal "two", doc.html.body.ul.li(:xpath => ["contains(text(),'o')","contains(text(),'t')"]).text
123
-
124
- assert_raise(NoMethodError) { doc.nonexistent }
125
- end
126
-
127
- def test_slop_decorator
128
- doc = Nokogiri(SLOP_HTML)
129
- assert !doc.decorators(Nokogiri::XML::Node).include?(Nokogiri::Decorators::Slop)
130
-
131
- doc.slop!
132
- assert doc.decorators(Nokogiri::XML::Node).include?(Nokogiri::Decorators::Slop)
133
-
134
- doc.slop!
135
- assert_equal 1, doc.decorators(Nokogiri::XML::Node).select { |d| d == Nokogiri::Decorators::Slop }.size
136
- end
137
-
138
- 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