nokogiri 1.5.10 → 1.13.0

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

Potentially problematic release.


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

Files changed (334) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +5 -0
  3. data/LICENSE-DEPENDENCIES.md +1903 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +280 -0
  6. data/bin/nokogiri +84 -31
  7. data/dependencies.yml +73 -0
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +956 -100
  10. data/ext/nokogiri/gumbo.c +584 -0
  11. data/ext/nokogiri/html4_document.c +166 -0
  12. data/ext/nokogiri/html4_element_description.c +294 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser_context.c +120 -0
  15. data/ext/nokogiri/html4_sax_push_parser.c +95 -0
  16. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  17. data/ext/nokogiri/nokogiri.c +232 -87
  18. data/ext/nokogiri/nokogiri.h +188 -129
  19. data/ext/nokogiri/test_global_handlers.c +40 -0
  20. data/ext/nokogiri/xml_attr.c +49 -40
  21. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  22. data/ext/nokogiri/xml_cdata.c +24 -23
  23. data/ext/nokogiri/xml_comment.c +29 -21
  24. data/ext/nokogiri/xml_document.c +327 -223
  25. data/ext/nokogiri/xml_document_fragment.c +12 -16
  26. data/ext/nokogiri/xml_dtd.c +56 -50
  27. data/ext/nokogiri/xml_element_content.c +31 -26
  28. data/ext/nokogiri/xml_element_decl.c +22 -22
  29. data/ext/nokogiri/xml_encoding_handler.c +45 -20
  30. data/ext/nokogiri/xml_entity_decl.c +32 -30
  31. data/ext/nokogiri/xml_entity_reference.c +16 -18
  32. data/ext/nokogiri/xml_namespace.c +74 -32
  33. data/ext/nokogiri/xml_node.c +1290 -680
  34. data/ext/nokogiri/xml_node_set.c +239 -208
  35. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  36. data/ext/nokogiri/xml_reader.c +227 -189
  37. data/ext/nokogiri/xml_relax_ng.c +52 -28
  38. data/ext/nokogiri/xml_sax_parser.c +123 -125
  39. data/ext/nokogiri/xml_sax_parser_context.c +138 -79
  40. data/ext/nokogiri/xml_sax_push_parser.c +88 -35
  41. data/ext/nokogiri/xml_schema.c +112 -33
  42. data/ext/nokogiri/xml_syntax_error.c +50 -23
  43. data/ext/nokogiri/xml_text.c +14 -18
  44. data/ext/nokogiri/xml_xpath_context.c +227 -140
  45. data/ext/nokogiri/xslt_stylesheet.c +162 -168
  46. data/gumbo-parser/CHANGES.md +63 -0
  47. data/gumbo-parser/Makefile +101 -0
  48. data/gumbo-parser/THANKS +27 -0
  49. data/gumbo-parser/src/Makefile +34 -0
  50. data/gumbo-parser/src/README.md +41 -0
  51. data/gumbo-parser/src/ascii.c +75 -0
  52. data/gumbo-parser/src/ascii.h +115 -0
  53. data/gumbo-parser/src/attribute.c +42 -0
  54. data/gumbo-parser/src/attribute.h +17 -0
  55. data/gumbo-parser/src/char_ref.c +22225 -0
  56. data/gumbo-parser/src/char_ref.h +29 -0
  57. data/gumbo-parser/src/char_ref.rl +2154 -0
  58. data/gumbo-parser/src/error.c +626 -0
  59. data/gumbo-parser/src/error.h +148 -0
  60. data/gumbo-parser/src/foreign_attrs.c +104 -0
  61. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  62. data/gumbo-parser/src/gumbo.h +943 -0
  63. data/gumbo-parser/src/insertion_mode.h +33 -0
  64. data/gumbo-parser/src/macros.h +91 -0
  65. data/gumbo-parser/src/parser.c +4875 -0
  66. data/gumbo-parser/src/parser.h +41 -0
  67. data/gumbo-parser/src/replacement.h +33 -0
  68. data/gumbo-parser/src/string_buffer.c +103 -0
  69. data/gumbo-parser/src/string_buffer.h +68 -0
  70. data/gumbo-parser/src/string_piece.c +48 -0
  71. data/gumbo-parser/src/svg_attrs.c +174 -0
  72. data/gumbo-parser/src/svg_attrs.gperf +77 -0
  73. data/gumbo-parser/src/svg_tags.c +137 -0
  74. data/gumbo-parser/src/svg_tags.gperf +55 -0
  75. data/gumbo-parser/src/tag.c +222 -0
  76. data/gumbo-parser/src/tag_lookup.c +382 -0
  77. data/gumbo-parser/src/tag_lookup.gperf +169 -0
  78. data/gumbo-parser/src/tag_lookup.h +13 -0
  79. data/gumbo-parser/src/token_buffer.c +79 -0
  80. data/gumbo-parser/src/token_buffer.h +71 -0
  81. data/gumbo-parser/src/token_type.h +17 -0
  82. data/gumbo-parser/src/tokenizer.c +3463 -0
  83. data/gumbo-parser/src/tokenizer.h +112 -0
  84. data/gumbo-parser/src/tokenizer_states.h +339 -0
  85. data/gumbo-parser/src/utf8.c +245 -0
  86. data/gumbo-parser/src/utf8.h +164 -0
  87. data/gumbo-parser/src/util.c +68 -0
  88. data/gumbo-parser/src/util.h +30 -0
  89. data/gumbo-parser/src/vector.c +111 -0
  90. data/gumbo-parser/src/vector.h +45 -0
  91. data/lib/nokogiri/class_resolver.rb +67 -0
  92. data/lib/nokogiri/css/node.rb +10 -58
  93. data/lib/nokogiri/css/parser.rb +327 -288
  94. data/lib/nokogiri/css/parser.y +67 -45
  95. data/lib/nokogiri/css/parser_extras.rb +52 -49
  96. data/lib/nokogiri/css/syntax_error.rb +3 -1
  97. data/lib/nokogiri/css/tokenizer.rb +107 -104
  98. data/lib/nokogiri/css/tokenizer.rex +7 -6
  99. data/lib/nokogiri/css/xpath_visitor.rb +263 -75
  100. data/lib/nokogiri/css.rb +50 -17
  101. data/lib/nokogiri/decorators/slop.rb +17 -8
  102. data/lib/nokogiri/extension.rb +31 -0
  103. data/lib/nokogiri/gumbo.rb +15 -0
  104. data/lib/nokogiri/html.rb +38 -27
  105. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  106. data/lib/nokogiri/html4/document.rb +331 -0
  107. data/lib/nokogiri/html4/document_fragment.rb +54 -0
  108. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  109. data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
  110. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  111. data/lib/nokogiri/{html → html4}/sax/parser.rb +24 -15
  112. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  113. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  114. data/lib/nokogiri/html4.rb +46 -0
  115. data/lib/nokogiri/html5/document.rb +88 -0
  116. data/lib/nokogiri/html5/document_fragment.rb +83 -0
  117. data/lib/nokogiri/html5/node.rb +96 -0
  118. data/lib/nokogiri/html5.rb +477 -0
  119. data/lib/nokogiri/jruby/dependencies.rb +21 -0
  120. data/lib/nokogiri/syntax_error.rb +2 -0
  121. data/lib/nokogiri/version/constant.rb +6 -0
  122. data/lib/nokogiri/version/info.rb +221 -0
  123. data/lib/nokogiri/version.rb +3 -90
  124. data/lib/nokogiri/xml/attr.rb +6 -3
  125. data/lib/nokogiri/xml/attribute_decl.rb +3 -1
  126. data/lib/nokogiri/xml/builder.rb +96 -54
  127. data/lib/nokogiri/xml/cdata.rb +3 -1
  128. data/lib/nokogiri/xml/character_data.rb +2 -0
  129. data/lib/nokogiri/xml/document.rb +234 -95
  130. data/lib/nokogiri/xml/document_fragment.rb +86 -36
  131. data/lib/nokogiri/xml/dtd.rb +16 -4
  132. data/lib/nokogiri/xml/element_content.rb +2 -0
  133. data/lib/nokogiri/xml/element_decl.rb +3 -1
  134. data/lib/nokogiri/xml/entity_decl.rb +4 -2
  135. data/lib/nokogiri/xml/entity_reference.rb +20 -0
  136. data/lib/nokogiri/xml/namespace.rb +3 -0
  137. data/lib/nokogiri/xml/node/save_options.rb +8 -4
  138. data/lib/nokogiri/xml/node.rb +947 -502
  139. data/lib/nokogiri/xml/node_set.rb +168 -159
  140. data/lib/nokogiri/xml/notation.rb +13 -0
  141. data/lib/nokogiri/xml/parse_options.rb +40 -5
  142. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  143. data/lib/nokogiri/xml/pp/node.rb +25 -26
  144. data/lib/nokogiri/xml/pp.rb +4 -2
  145. data/lib/nokogiri/xml/processing_instruction.rb +3 -1
  146. data/lib/nokogiri/xml/reader.rb +23 -28
  147. data/lib/nokogiri/xml/relax_ng.rb +8 -2
  148. data/lib/nokogiri/xml/sax/document.rb +45 -49
  149. data/lib/nokogiri/xml/sax/parser.rb +43 -41
  150. data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
  151. data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
  152. data/lib/nokogiri/xml/sax.rb +6 -4
  153. data/lib/nokogiri/xml/schema.rb +19 -9
  154. data/lib/nokogiri/xml/searchable.rb +259 -0
  155. data/lib/nokogiri/xml/syntax_error.rb +25 -1
  156. data/lib/nokogiri/xml/text.rb +2 -0
  157. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  158. data/lib/nokogiri/xml/xpath.rb +15 -4
  159. data/lib/nokogiri/xml/xpath_context.rb +3 -3
  160. data/lib/nokogiri/xml.rb +38 -36
  161. data/lib/nokogiri/xslt/stylesheet.rb +3 -1
  162. data/lib/nokogiri/xslt.rb +18 -16
  163. data/lib/nokogiri.rb +69 -69
  164. data/lib/xsd/xmlparser/nokogiri.rb +26 -24
  165. data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
  166. data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  167. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  168. data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
  169. data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
  170. data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
  171. data/patches/libxml2/0007-Fix-XPath-recursion-limit.patch +31 -0
  172. data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
  173. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  174. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
  175. data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
  176. data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
  177. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  178. metadata +382 -460
  179. data/.autotest +0 -26
  180. data/.gemtest +0 -0
  181. data/CHANGELOG.ja.rdoc +0 -785
  182. data/CHANGELOG.rdoc +0 -783
  183. data/C_CODING_STYLE.rdoc +0 -33
  184. data/Manifest.txt +0 -303
  185. data/README.ja.rdoc +0 -106
  186. data/README.rdoc +0 -175
  187. data/ROADMAP.md +0 -90
  188. data/Rakefile +0 -228
  189. data/STANDARD_RESPONSES.md +0 -47
  190. data/Y_U_NO_GEMSPEC.md +0 -155
  191. data/build_all +0 -105
  192. data/ext/nokogiri/html_document.c +0 -170
  193. data/ext/nokogiri/html_document.h +0 -10
  194. data/ext/nokogiri/html_element_description.c +0 -279
  195. data/ext/nokogiri/html_element_description.h +0 -10
  196. data/ext/nokogiri/html_entity_lookup.c +0 -32
  197. data/ext/nokogiri/html_entity_lookup.h +0 -8
  198. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  199. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  200. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  201. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  202. data/ext/nokogiri/xml_attr.h +0 -9
  203. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  204. data/ext/nokogiri/xml_cdata.h +0 -9
  205. data/ext/nokogiri/xml_comment.h +0 -9
  206. data/ext/nokogiri/xml_document.h +0 -23
  207. data/ext/nokogiri/xml_document_fragment.h +0 -10
  208. data/ext/nokogiri/xml_dtd.h +0 -10
  209. data/ext/nokogiri/xml_element_content.h +0 -10
  210. data/ext/nokogiri/xml_element_decl.h +0 -9
  211. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  212. data/ext/nokogiri/xml_entity_decl.h +0 -10
  213. data/ext/nokogiri/xml_entity_reference.h +0 -9
  214. data/ext/nokogiri/xml_io.c +0 -56
  215. data/ext/nokogiri/xml_io.h +0 -11
  216. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  217. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  218. data/ext/nokogiri/xml_namespace.h +0 -13
  219. data/ext/nokogiri/xml_node.h +0 -13
  220. data/ext/nokogiri/xml_node_set.h +0 -14
  221. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  222. data/ext/nokogiri/xml_reader.h +0 -10
  223. data/ext/nokogiri/xml_relax_ng.h +0 -9
  224. data/ext/nokogiri/xml_sax_parser.h +0 -39
  225. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  226. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  227. data/ext/nokogiri/xml_schema.h +0 -9
  228. data/ext/nokogiri/xml_syntax_error.h +0 -13
  229. data/ext/nokogiri/xml_text.h +0 -9
  230. data/ext/nokogiri/xml_xpath_context.h +0 -10
  231. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  232. data/lib/nokogiri/html/document.rb +0 -254
  233. data/lib/nokogiri/html/document_fragment.rb +0 -41
  234. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  235. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  236. data/lib/nokogiri/html/sax/push_parser.rb +0 -16
  237. data/tasks/cross_compile.rb +0 -150
  238. data/tasks/nokogiri.org.rb +0 -24
  239. data/tasks/test.rb +0 -95
  240. data/test/css/test_nthiness.rb +0 -159
  241. data/test/css/test_parser.rb +0 -341
  242. data/test/css/test_tokenizer.rb +0 -198
  243. data/test/css/test_xpath_visitor.rb +0 -91
  244. data/test/decorators/test_slop.rb +0 -16
  245. data/test/files/2ch.html +0 -108
  246. data/test/files/address_book.rlx +0 -12
  247. data/test/files/address_book.xml +0 -10
  248. data/test/files/bar/bar.xsd +0 -4
  249. data/test/files/dont_hurt_em_why.xml +0 -422
  250. data/test/files/encoding.html +0 -82
  251. data/test/files/encoding.xhtml +0 -84
  252. data/test/files/exslt.xml +0 -8
  253. data/test/files/exslt.xslt +0 -35
  254. data/test/files/foo/foo.xsd +0 -4
  255. data/test/files/metacharset.html +0 -10
  256. data/test/files/noencoding.html +0 -47
  257. data/test/files/po.xml +0 -32
  258. data/test/files/po.xsd +0 -66
  259. data/test/files/shift_jis.html +0 -10
  260. data/test/files/shift_jis.xml +0 -5
  261. data/test/files/snuggles.xml +0 -3
  262. data/test/files/staff.dtd +0 -10
  263. data/test/files/staff.xml +0 -59
  264. data/test/files/staff.xslt +0 -32
  265. data/test/files/test_document_url/bar.xml +0 -2
  266. data/test/files/test_document_url/document.dtd +0 -4
  267. data/test/files/test_document_url/document.xml +0 -6
  268. data/test/files/tlm.html +0 -850
  269. data/test/files/to_be_xincluded.xml +0 -2
  270. data/test/files/valid_bar.xml +0 -2
  271. data/test/files/xinclude.xml +0 -4
  272. data/test/helper.rb +0 -154
  273. data/test/html/sax/test_parser.rb +0 -141
  274. data/test/html/sax/test_parser_context.rb +0 -46
  275. data/test/html/test_builder.rb +0 -164
  276. data/test/html/test_document.rb +0 -552
  277. data/test/html/test_document_encoding.rb +0 -138
  278. data/test/html/test_document_fragment.rb +0 -261
  279. data/test/html/test_element_description.rb +0 -105
  280. data/test/html/test_named_characters.rb +0 -14
  281. data/test/html/test_node.rb +0 -196
  282. data/test/html/test_node_encoding.rb +0 -27
  283. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  284. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  285. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  286. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
  287. data/test/test_convert_xpath.rb +0 -135
  288. data/test/test_css_cache.rb +0 -45
  289. data/test/test_encoding_handler.rb +0 -46
  290. data/test/test_memory_leak.rb +0 -156
  291. data/test/test_nokogiri.rb +0 -132
  292. data/test/test_reader.rb +0 -555
  293. data/test/test_soap4r_sax.rb +0 -52
  294. data/test/test_xslt_transforms.rb +0 -254
  295. data/test/xml/node/test_save_options.rb +0 -28
  296. data/test/xml/node/test_subclass.rb +0 -44
  297. data/test/xml/sax/test_parser.rb +0 -366
  298. data/test/xml/sax/test_parser_context.rb +0 -106
  299. data/test/xml/sax/test_push_parser.rb +0 -157
  300. data/test/xml/test_attr.rb +0 -64
  301. data/test/xml/test_attribute_decl.rb +0 -86
  302. data/test/xml/test_builder.rb +0 -306
  303. data/test/xml/test_c14n.rb +0 -151
  304. data/test/xml/test_cdata.rb +0 -48
  305. data/test/xml/test_comment.rb +0 -29
  306. data/test/xml/test_document.rb +0 -828
  307. data/test/xml/test_document_encoding.rb +0 -28
  308. data/test/xml/test_document_fragment.rb +0 -223
  309. data/test/xml/test_dtd.rb +0 -103
  310. data/test/xml/test_dtd_encoding.rb +0 -33
  311. data/test/xml/test_element_content.rb +0 -56
  312. data/test/xml/test_element_decl.rb +0 -73
  313. data/test/xml/test_entity_decl.rb +0 -122
  314. data/test/xml/test_entity_reference.rb +0 -245
  315. data/test/xml/test_namespace.rb +0 -95
  316. data/test/xml/test_node.rb +0 -1137
  317. data/test/xml/test_node_attributes.rb +0 -96
  318. data/test/xml/test_node_encoding.rb +0 -107
  319. data/test/xml/test_node_inheritance.rb +0 -32
  320. data/test/xml/test_node_reparenting.rb +0 -374
  321. data/test/xml/test_node_set.rb +0 -755
  322. data/test/xml/test_parse_options.rb +0 -64
  323. data/test/xml/test_processing_instruction.rb +0 -30
  324. data/test/xml/test_reader_encoding.rb +0 -142
  325. data/test/xml/test_relax_ng.rb +0 -60
  326. data/test/xml/test_schema.rb +0 -103
  327. data/test/xml/test_syntax_error.rb +0 -12
  328. data/test/xml/test_text.rb +0 -45
  329. data/test/xml/test_unparented_node.rb +0 -422
  330. data/test/xml/test_xinclude.rb +0 -83
  331. data/test/xml/test_xpath.rb +0 -295
  332. data/test/xslt/test_custom_functions.rb +0 -133
  333. data/test/xslt/test_exception_handling.rb +0 -37
  334. data/test_all +0 -81
@@ -1,295 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestXPath < Nokogiri::TestCase
6
-
7
- # ** WHY ALL THOSE _if Nokogiri.uses_libxml?_ **
8
- # Hi, my dear readers,
9
- #
10
- # After reading these tests you may be wondering why all those ugly
11
- # if Nokogiri.uses_libxml? sparsed over the whole document. Well, let
12
- # me explain it. While using XPath in Java, you need the extension
13
- # functions to be in a namespace. This is not required by XPath, afaik,
14
- # but it is an usual convention though.
15
- #
16
- # Furthermore, CSS does not support extension functions but it does in
17
- # Nokogiri. Result: you cannot use them in JRuby impl. At least, until
18
- # the CSS to XPath parser is patched, and let me say that there are more
19
- # important features to add before that happens. I hope you will forgive
20
- # me.
21
- #
22
- # Yours truly,
23
- #
24
- # The guy whose headaches belong to Nokogiri JRuby impl.
25
-
26
-
27
- def setup
28
- super
29
-
30
- @xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
31
-
32
- @ns = @xml.root.namespaces
33
-
34
- # TODO: Maybe I should move this to the original code.
35
- @ns["nokogiri"] = "http://www.nokogiri.org/default_ns/ruby/extensions_functions"
36
-
37
- @handler = Class.new {
38
- attr_reader :things
39
-
40
- def initialize
41
- @things = []
42
- end
43
-
44
- def thing thing
45
- @things << thing
46
- thing
47
- end
48
-
49
- def returns_array node_set
50
- @things << node_set.to_a
51
- node_set.to_a
52
- end
53
-
54
- def my_filter set, attribute, value
55
- set.find_all { |x| x[attribute] == value }
56
- end
57
-
58
- def saves_node_set node_set
59
- @things = node_set
60
- end
61
-
62
- def value
63
- 123.456
64
- end
65
- }.new
66
- end
67
-
68
- def test_variable_binding
69
- assert_equal 4, @xml.xpath('//address[@domestic=$value]', nil, :value => 'Yes').length
70
- end
71
-
72
- def test_unknown_attribute
73
- assert_equal 0, @xml.xpath('//employee[@id="asdfasdf"]/@fooo').length
74
- assert_nil @xml.xpath('//employee[@id="asdfasdf"]/@fooo')[0]
75
- end
76
-
77
- def test_boolean
78
- assert_equal false, @xml.xpath('1 = 2')
79
- end
80
-
81
- def test_number
82
- assert_equal 2, @xml.xpath('1 + 1')
83
- end
84
-
85
- def test_string
86
- assert_equal 'foo', @xml.xpath('concat("fo", "o")')
87
- end
88
-
89
- def test_css_search_uses_custom_selectors_with_arguments
90
- set = if Nokogiri.uses_libxml?
91
- @xml.css('employee > address:my_filter("domestic", "Yes")', @handler)
92
- else
93
- @xml.xpath("//employee/address[nokogiri:my_filter(., \"domestic\", \"Yes\")]", @ns, @handler)
94
- end
95
- assert set.length > 0
96
- set.each do |node|
97
- assert_equal 'Yes', node['domestic']
98
- end
99
- end
100
-
101
- def test_css_search_uses_custom_selectors
102
- set = @xml.xpath('//employee')
103
- if Nokogiri.uses_libxml?
104
- @xml.css('employee:thing()', @handler)
105
- else
106
- @xml.xpath("//employee[nokogiri:thing(.)]", @ns, @handler)
107
- end
108
- assert_equal(set.length, @handler.things.length)
109
- assert_equal(set.to_a, @handler.things.flatten)
110
- end
111
-
112
- def test_pass_self_to_function
113
- set = if Nokogiri.uses_libxml?
114
- @xml.xpath('//employee/address[my_filter(., "domestic", "Yes")]', @handler)
115
- else
116
- @xml.xpath('//employee/address[nokogiri:my_filter(., "domestic", "Yes")]', @ns, @handler)
117
- end
118
- assert set.length > 0
119
- set.each do |node|
120
- assert_equal 'Yes', node['domestic']
121
- end
122
- end
123
-
124
- def test_custom_xpath_function_gets_strings
125
- set = @xml.xpath('//employee')
126
- if Nokogiri.uses_libxml?
127
- @xml.xpath('//employee[thing("asdf")]', @handler)
128
- else
129
- @xml.xpath('//employee[nokogiri:thing("asdf")]', @ns, @handler)
130
- end
131
- assert_equal(set.length, @handler.things.length)
132
- assert_equal(['asdf'] * set.length, @handler.things)
133
- end
134
-
135
- def test_custom_xpath_function_returns_string
136
- if Nokogiri.uses_libxml?
137
- result = @xml.xpath('thing("asdf")', @handler)
138
- else
139
- result = @xml.xpath('nokogiri:thing("asdf")', @ns, @handler)
140
- end
141
- assert_equal 'asdf', result
142
- end
143
-
144
- def test_custom_xpath_gets_true_booleans
145
- set = @xml.xpath('//employee')
146
- if Nokogiri.uses_libxml?
147
- @xml.xpath('//employee[thing(true())]', @handler)
148
- else
149
- @xml.xpath("//employee[nokogiri:thing(true())]", @ns, @handler)
150
- end
151
- assert_equal(set.length, @handler.things.length)
152
- assert_equal([true] * set.length, @handler.things)
153
- end
154
-
155
- def test_custom_xpath_gets_false_booleans
156
- set = @xml.xpath('//employee')
157
- if Nokogiri.uses_libxml?
158
- @xml.xpath('//employee[thing(false())]', @handler)
159
- else
160
- @xml.xpath("//employee[nokogiri:thing(false())]", @ns, @handler)
161
- end
162
- assert_equal(set.length, @handler.things.length)
163
- assert_equal([false] * set.length, @handler.things)
164
- end
165
-
166
- def test_custom_xpath_gets_numbers
167
- set = @xml.xpath('//employee')
168
- if Nokogiri.uses_libxml?
169
- @xml.xpath('//employee[thing(10)]', @handler)
170
- else
171
- @xml.xpath('//employee[nokogiri:thing(10)]', @ns, @handler)
172
- end
173
- assert_equal(set.length, @handler.things.length)
174
- assert_equal([10] * set.length, @handler.things)
175
- end
176
-
177
- def test_custom_xpath_gets_node_sets
178
- set = @xml.xpath('//employee/name')
179
- if Nokogiri.uses_libxml?
180
- @xml.xpath('//employee[thing(name)]', @handler)
181
- else
182
- @xml.xpath('//employee[nokogiri:thing(name)]', @ns, @handler)
183
- end
184
- assert_equal(set.length, @handler.things.length)
185
- assert_equal(set.to_a, @handler.things.flatten)
186
- end
187
-
188
- def test_custom_xpath_gets_node_sets_and_returns_array
189
- set = @xml.xpath('//employee/name')
190
- if Nokogiri.uses_libxml?
191
- @xml.xpath('//employee[returns_array(name)]', @handler)
192
- else
193
- @xml.xpath('//employee[nokogiri:returns_array(name)]', @ns, @handler)
194
- end
195
- assert_equal(set.length, @handler.things.length)
196
- assert_equal(set.to_a, @handler.things.flatten)
197
- end
198
-
199
- def test_custom_xpath_handler_is_passed_a_decorated_node_set
200
- x = Module.new do
201
- def awesome! ; end
202
- end
203
- util_decorate(@xml, x)
204
-
205
- assert @xml.xpath('//employee/name')
206
-
207
- @xml.xpath('//employee[saves_node_set(name)]', @handler)
208
- assert_equal @xml, @handler.things.document
209
- assert @handler.things.respond_to?(:awesome!)
210
- end
211
-
212
- def test_code_that_invokes_OP_RESET_inside_libxml2
213
- doc = "<html><body id='foo'><foo>hi</foo></body></html>"
214
- xpath = 'id("foo")//foo'
215
- nokogiri = Nokogiri::HTML.parse(doc)
216
- assert nokogiri.xpath(xpath)
217
- end
218
-
219
- def test_custom_xpath_handler_with_args_under_gc_pressure
220
- # see http://github.com/sparklemotion/nokogiri/issues/#issue/345
221
- tool_inspector = Class.new do
222
- def name_equals(nodeset, name, *args)
223
- nodeset.all? do |node|
224
- args.each { |thing| thing.inspect }
225
- node["name"] == name
226
- end
227
- end
228
- end.new
229
-
230
- xml = <<-EOXML
231
- <toolbox>
232
- #{"<tool name='hammer'/><tool name='wrench'/>" * 10}
233
- </toolbox>
234
- EOXML
235
- doc = Nokogiri::XML xml
236
-
237
- # long list of long arguments, to apply GC pressure during
238
- # ruby_funcall argument marshalling
239
- xpath = ["//tool[name_equals(.,'hammer'"]
240
- 1000.times { xpath << "'unused argument #{'x' * 1000}'" }
241
- xpath << "'unused argument')]"
242
- xpath = xpath.join(',')
243
-
244
- assert_equal doc.xpath("//tool[@name='hammer']"), doc.xpath(xpath, tool_inspector)
245
- end
246
-
247
- def test_custom_xpath_without_arguments
248
- if Nokogiri.uses_libxml?
249
- value = @xml.xpath('value()', @handler)
250
- else
251
- value = @xml.xpath('nokogiri:value()', @ns, @handler)
252
- end
253
- assert_equal 123.456, value
254
- end
255
-
256
- def test_custom_xpath_with_bullshit_arguments
257
- xml = %q{<foo> </foo>}
258
- doc = Nokogiri::XML.parse(xml)
259
- foo = doc.xpath('//foo[bool_function(bar/baz)]', Class.new {
260
- def bool_function(value)
261
- true
262
- end
263
- }.new)
264
- assert_equal foo, doc.xpath("//foo")
265
- end
266
-
267
- def test_node_set_should_be_decorated
268
- # "called decorate on nill" exception in JRuby issue#514
269
- process_output= <<END
270
- <test>
271
- <track type="Image">
272
- <Format>LZ77</Format>
273
- </test>
274
- END
275
- doc = Nokogiri::XML.parse(process_output)
276
- node = doc.xpath(%{//track[@type='Video']})
277
- assert_equal "[]", node.xpath("Format").inspect
278
- end
279
-
280
- def test_very_specific_xml_xpath_making_problems_in_jruby
281
- # manually merges pull request #681
282
- xml_string = %q{<?xml version="1.0" encoding="UTF-8"?>
283
- <ONIXMessage xmlns:elibri="http://elibri.com.pl/ns/extensions" release="3.0" xmlns="http://www.editeur.org/onix/3.0/reference">
284
- <Product>
285
- <RecordReference>a</RecordReference>
286
- </Product>
287
- </ONIXMessage>}
288
-
289
- xml_doc = Nokogiri::XML(xml_string)
290
- onix = xml_doc.children.first
291
- assert_equal 'a', onix.at_xpath('xmlns:Product').at_xpath('xmlns:RecordReference').text
292
- end
293
- end
294
- end
295
- end
@@ -1,133 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require "helper"
4
-
5
- module Nokogiri
6
- module XSLT
7
- class TestCustomFunctions < Nokogiri::TestCase
8
- def setup
9
- super
10
- @xml = Nokogiri.XML(<<-EOXML)
11
- <?xml version="1.0" encoding="UTF-8"?>
12
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
13
- "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd">
14
- <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
15
- <head>
16
- <meta http-equiv="Content-type" content="application/xhtml+xml"/>
17
- <title>Foo</title>
18
- </head>
19
- <body>
20
- <h1>Foo</h1>
21
- <p>Lorem ipsum.</p>
22
- </body>
23
- </html>
24
- EOXML
25
- end
26
-
27
- def test_function
28
- skip("Pure Java version doesn't support this feature.") if !Nokogiri.uses_libxml?
29
- foo = Class.new do
30
- def capitalize nodes
31
- nodes.first.content.upcase
32
- end
33
- end
34
-
35
- XSLT.register "http://e.org/functions", foo
36
-
37
- xsl = Nokogiri.XSLT(<<-EOXSL)
38
- <?xml version="1.0"?>
39
- <xsl:stylesheet version="1.0"
40
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
41
- xmlns:f="http://e.org/functions"
42
- extension-element-prefixes="f">
43
-
44
- <xsl:template match="text()">
45
- <xsl:copy-of select="f:capitalize(.)"/>
46
- </xsl:template>
47
-
48
- <xsl:template match="@*|node()">
49
- <xsl:copy>
50
- <xsl:apply-templates select="@*|node()"/>
51
- <xsl:apply-imports/>
52
- </xsl:copy>
53
- </xsl:template>
54
-
55
- </xsl:stylesheet>
56
- EOXSL
57
- result = xsl.transform @xml
58
- assert_equal 'FOO', result.css('title').first.text
59
- end
60
-
61
-
62
- def test_function_arguments
63
- skip("Pure Java version doesn't support this feature.") if !Nokogiri.uses_libxml?
64
- foo = Class.new do
65
- include MiniTest::Assertions
66
- # Minitest 5 uses `self.assertions` in `assert()` which is not
67
- # defined in the Minitest::Assertions module :-(
68
- attr_writer :assertions
69
- def assertions; @assertions ||= 0; end
70
-
71
- def multiarg *args
72
- assert_equal ["abc", "xyz"], args
73
- args.first
74
- end
75
-
76
- def numericarg arg
77
- assert_equal 42, arg
78
- arg
79
- end
80
- end
81
-
82
- xsl = Nokogiri.XSLT(<<-EOXSL, "http://e.org/functions" => foo)
83
- <?xml version="1.0"?>
84
- <xsl:stylesheet version="1.0"
85
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
86
- xmlns:f="http://e.org/functions"
87
- extension-element-prefixes="f">
88
-
89
- <xsl:template match="text()">
90
- <xsl:copy-of select="f:multiarg('abc', 'xyz')"/>
91
- <xsl:copy-of select="f:numericarg(42)"/>
92
- </xsl:template>
93
- </xsl:stylesheet>
94
- EOXSL
95
-
96
- xsl.transform @xml
97
- end
98
-
99
-
100
- def test_function_XSLT
101
- skip("Pure Java version doesn't support this feature.") if !Nokogiri.uses_libxml?
102
- foo = Class.new do
103
- def america nodes
104
- nodes.first.content.upcase
105
- end
106
- end
107
-
108
- xsl = Nokogiri.XSLT(<<-EOXSL, "http://e.org/functions" => foo)
109
- <?xml version="1.0"?>
110
- <xsl:stylesheet version="1.0"
111
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
112
- xmlns:f="http://e.org/functions"
113
- extension-element-prefixes="f">
114
-
115
- <xsl:template match="text()">
116
- <xsl:copy-of select="f:america(.)"/>
117
- </xsl:template>
118
-
119
- <xsl:template match="@*|node()">
120
- <xsl:copy>
121
- <xsl:apply-templates select="@*|node()"/>
122
- <xsl:apply-imports/>
123
- </xsl:copy>
124
- </xsl:template>
125
-
126
- </xsl:stylesheet>
127
- EOXSL
128
- result = xsl.transform @xml
129
- assert_equal 'FOO', result.css('title').first.text
130
- end
131
- end
132
- end
133
- end
@@ -1,37 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XSLT
5
- class TestExceptionHandling < Nokogiri::TestCase
6
- def test_java_exception_handling
7
- skip('This test is for Java only') if Nokogiri.uses_libxml?
8
-
9
- xml = Nokogiri.XML(<<-EOXML)
10
- <foo>
11
- <bar/>
12
- </foo>
13
- EOXML
14
-
15
- xsl = Nokogiri.XSLT(<<-EOXSL)
16
- <?xml version="1.0"?>
17
- <xsl:stylesheet version="1.0"
18
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
19
-
20
- <xsl:template match="/">
21
- <a/>
22
- <b/>
23
- </xsl:template>
24
- </xsl:stylesheet>
25
- EOXSL
26
-
27
- begin
28
- xsl.transform xml
29
- fail('It should not get here')
30
- rescue RuntimeError => e
31
- assert_match(/HIERARCHY_REQUEST_ERR/, e.to_s, 'The exception message does not contain the expected information')
32
- end
33
- end
34
-
35
- end
36
- end
37
- end
data/test_all DELETED
@@ -1,81 +0,0 @@
1
- #! /usr/bin/env bash
2
- #
3
- # script to run tests on all relevant rubies, and valgrind on supported rubies.
4
- # outputs tests to `test.log` and valgrind output to `valgrind.log`.
5
- #
6
- # requires `rvm` to be installed. sorry about that, multiruby dudes.
7
- #
8
- # it's worth periodically using hoe-debugger's ability to generate
9
- # valgrind suppression files to remove spurious valgrind messages
10
- # (e.g., 1.9.3's glob_helper). ["rake test:valgrind:suppression"]
11
- #
12
-
13
- RUBIES="ruby-1.9.3-p327 jruby-1.7.3 jruby-1.6.5.1 jruby-1.6.7.2 ree-1.8.7-2011.12 ruby-1.9.2-p320 ruby-1.8.7-p370"
14
- TEST_LOG=test.log
15
- VALGRIND_LOG=valgrind.log
16
-
17
- # Load RVM into a shell session *as a function*
18
- if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
19
- source "$HOME/.rvm/scripts/rvm"
20
- elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
21
- source "/usr/local/rvm/scripts/rvm"
22
- else
23
- echo "ERROR: An RVM installation was not found.\n"
24
- fi
25
-
26
- > $TEST_LOG
27
- > $VALGRIND_LOG
28
- set -o errexit
29
-
30
- function rvm_use {
31
- current_ruby=$1
32
- rvm use "${1}@nokogiri" --create || rvm -v
33
- }
34
-
35
- function generate_parser_and_tokenizer {
36
- old_ruby=$current_ruby
37
- rvm_use ruby-1.8.7-p357
38
- bundle exec rake generate 2>&1 > /dev/null
39
- rvm_use $old_ruby
40
- }
41
-
42
- function clean {
43
- bundle exec rake clean clobber 2>&1 > /dev/null
44
- }
45
-
46
- function compile {
47
- echo "** compiling ..."
48
- # generate_parser_and_tokenizer
49
- bundle exec rake compile 2>&1 > /dev/null
50
- }
51
-
52
- for ruby in $RUBIES ; do
53
- rvm_use ${ruby}
54
- if ! which bundle ; then
55
- gem install bundler
56
- fi
57
- bundle install --quiet --local || bundle install
58
- clean
59
- done
60
-
61
- for ruby in $RUBIES ; do
62
- rvm_use ${ruby}
63
- echo -e "**\n** testing nokogiri on ${ruby}\n**" | tee -a $TEST_LOG
64
- clean
65
- compile
66
- echo "** running tests ..."
67
- bundle exec rake test 2>&1 | tee -a $TEST_LOG
68
- clean
69
- done
70
-
71
- for ruby in $RUBIES ; do
72
- if [[ ! $ruby =~ "jruby" ]] ; then
73
- rvm_use ${ruby}
74
- echo -e "**\n** nokogiri prerelease: ${ruby}\n**" | tee -a $VALGRIND_LOG
75
- clean
76
- compile
77
- echo "** running valgrind on tests ..."
78
- bundle exec rake test:valgrind 2>&1 | tee -a $VALGRIND_LOG
79
- clean
80
- fi
81
- done