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,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