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,314 +0,0 @@
1
- require "helper"
2
-
3
- class TestXsltTransforms < Nokogiri::TestCase
4
- def setup
5
- @doc = Nokogiri::XML(File.open(XML_FILE))
6
- end
7
-
8
- def test_class_methods
9
- style = Nokogiri::XSLT(File.read(XSLT_FILE))
10
-
11
- assert result = style.apply_to(@doc, ['title', '"Grandma"'])
12
- assert_match %r{<h1>Grandma</h1>}, result
13
- end
14
-
15
- def test_transform
16
- assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
17
-
18
- assert result = style.apply_to(@doc, ['title', '"Booyah"'])
19
- assert_match %r{<h1>Booyah</h1>}, result
20
- assert_match %r{<th.*Employee ID</th>}, result
21
- assert_match %r{<th.*Name</th>}, result
22
- assert_match %r{<th.*Position</th>}, result
23
- assert_match %r{<th.*Salary</th>}, result
24
- assert_match %r{<td>EMP0003</td>}, result
25
- assert_match %r{<td>Margaret Martin</td>}, result
26
- assert_match %r{<td>Computer Specialist</td>}, result
27
- assert_match %r{<td>100,000</td>}, result
28
- assert_no_match %r{Dallas|Texas}, result
29
- assert_no_match %r{Female}, result
30
-
31
- assert result = style.apply_to(@doc, ['title', '"Grandma"'])
32
- assert_match %r{<h1>Grandma</h1>}, result
33
-
34
- assert result = style.apply_to(@doc)
35
- assert_match %r{<h1></h1>|<h1/>}, result
36
- end
37
-
38
- def test_xml_declaration
39
- input_xml = <<-EOS
40
- <?xml version="1.0" encoding="utf-8"?>
41
- <report>
42
- <title>My Report</title>
43
- </report>
44
- EOS
45
-
46
- input_xsl = <<-EOS
47
- <?xml version="1.0" encoding="utf-8"?>
48
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
49
- <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
50
- <xsl:template match="/">
51
- <html>
52
- <head>
53
- <title><xsl:value-of select="report/title"/></title>
54
- </head>
55
- <body>
56
- <h1><xsl:value-of select="report/title"/></h1>
57
- </body>
58
- </html>
59
- </xsl:template>
60
- </xsl:stylesheet>
61
- EOS
62
-
63
- require 'nokogiri'
64
-
65
- xml = ::Nokogiri::XML(input_xml)
66
- xsl = ::Nokogiri::XSLT(input_xsl)
67
-
68
- assert_includes xsl.apply_to(xml), '<?xml version="1.0" encoding="utf-8"?>'
69
- end
70
-
71
- def test_transform_with_output_style
72
- xslt = ""
73
- if Nokogiri.jruby?
74
- xslt = Nokogiri::XSLT(<<-eoxslt)
75
- <?xml version="1.0" encoding="ISO-8859-1"?>
76
-
77
- <xsl:stylesheet version="1.0"
78
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
79
- <xsl:output method="text" version="1.0"
80
- encoding="iso-8859-1" indent="yes"/>
81
-
82
- <xsl:param name="title"/>
83
-
84
- <xsl:template match="/">
85
- <html>
86
- <body>
87
- <xsl:for-each select="staff/employee">
88
- <tr>
89
- <td><xsl:value-of select="employeeId"/></td>
90
- <td><xsl:value-of select="name"/></td>
91
- <td><xsl:value-of select="position"/></td>
92
- <td><xsl:value-of select="salary"/></td>
93
- </tr>
94
- </xsl:for-each>
95
- </body>
96
- </html>
97
- </xsl:template>
98
-
99
- </xsl:stylesheet>
100
- eoxslt
101
- else
102
- xslt = Nokogiri::XSLT(<<-eoxslt)
103
- <?xml version="1.0" encoding="ISO-8859-1"?>
104
-
105
- <xsl:stylesheet version="1.0"
106
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
107
- <xsl:output method="text" version="1.0"
108
- encoding="iso-8859-1" indent="yes"/>
109
-
110
- <xsl:param name="title"/>
111
-
112
- <xsl:template match="/">
113
- <html>
114
- <body>
115
- <xsl:for-each select="staff/employee">
116
- <tr>
117
- <td><xsl:value-of select="employeeId"/></td>
118
- <td><xsl:value-of select="name"/></td>
119
- <td><xsl:value-of select="position"/></td>
120
- <td><xsl:value-of select="salary"/></td>
121
- </tr>
122
- </xsl:for-each>
123
- </table>
124
- </body>
125
- </html>
126
- </xsl:template>
127
-
128
- </xsl:stylesheet>
129
- eoxslt
130
- end
131
- result = xslt.apply_to(@doc, ['title', 'foo'])
132
- assert_no_match(/<td>/, result)
133
- assert_match(/This is an adjacent/, result)
134
- end
135
-
136
- def test_transform_arg_error
137
- assert style = Nokogiri::XSLT(File.read(XSLT_FILE))
138
- assert_raises(TypeError) do
139
- style.transform(@doc, :foo)
140
- end
141
- end
142
-
143
- def test_transform_with_hash
144
- assert style = Nokogiri::XSLT(File.read(XSLT_FILE))
145
- result = style.transform(@doc, {'title' => '"Booyah"'})
146
- assert result.html?
147
- assert_equal "Booyah", result.at_css("h1").content
148
- end
149
-
150
- def test_transform2
151
- assert style = Nokogiri::XSLT(File.open(XSLT_FILE))
152
- assert result_doc = style.transform(@doc)
153
- assert result_doc.html?
154
- assert_equal "", result_doc.at_css("h1").content
155
-
156
- assert style = Nokogiri::XSLT(File.read(XSLT_FILE))
157
- assert result_doc = style.transform(@doc, ['title', '"Booyah"'])
158
- assert result_doc.html?
159
- assert_equal "Booyah", result_doc.at_css("h1").content
160
-
161
- assert result_string = style.apply_to(@doc, ['title', '"Booyah"'])
162
- assert_equal result_string, style.serialize(result_doc)
163
- end
164
-
165
- def test_transform_with_quote_params
166
- assert style = Nokogiri::XSLT(File.open(XSLT_FILE))
167
- assert result_doc = style.transform(@doc, Nokogiri::XSLT.quote_params(['title', 'Booyah']))
168
- assert result_doc.html?
169
- assert_equal "Booyah", result_doc.at_css("h1").content
170
-
171
- assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
172
- assert result_doc = style.transform(@doc, Nokogiri::XSLT.quote_params({'title' => 'Booyah'}))
173
- assert result_doc.html?
174
- assert_equal "Booyah", result_doc.at_css("h1").content
175
- end
176
-
177
- def test_quote_params
178
- h = {
179
- :sym => %{xxx},
180
- 'str' => %{"xxx"},
181
- :sym2 => %{'xxx'},
182
- 'str2' => %{x'x'x},
183
- :sym3 => %{x"x"x},
184
- }
185
- hh=h.dup
186
- result_hash = Nokogiri::XSLT.quote_params(h)
187
- assert_equal hh, h # non-destructive
188
-
189
- a=h.to_a.flatten
190
- result_array = Nokogiri::XSLT.quote_params(a)
191
- assert_equal h.to_a.flatten, a #non-destructive
192
-
193
- assert_equal result_array, result_hash
194
- end
195
-
196
- if Nokogiri.uses_libxml?
197
- # By now, cannot get it working on JRuby, see:
198
- # http://yokolet.blogspot.com/2010/10/pure-java-nokogiri-xslt-extension.html
199
- def test_exslt
200
- assert doc = Nokogiri::XML.parse(File.read(EXML_FILE))
201
- assert doc.xml?
202
-
203
- assert style = Nokogiri::XSLT.parse(File.read(EXSLT_FILE))
204
- params = {
205
- :p1 => 'xxx',
206
- :p2 => "x'x'x",
207
- :p3 => 'x"x"x',
208
- :p4 => '"xxx"'
209
- }
210
- result_doc = Nokogiri::XML.parse(style.apply_to(doc,
211
- Nokogiri::XSLT.quote_params(params)))
212
-
213
- assert_equal 'func-result', result_doc.at('/root/function').content
214
- assert_equal 3, result_doc.at('/root/max').content.to_i
215
- assert_match(
216
- /\d{4}-\d\d-\d\d([-|+]\d\d:\d\d)?/,
217
- result_doc.at('/root/date').content
218
- )
219
- result_doc.xpath('/root/params/*').each do |p|
220
- assert_equal p.content, params[p.name.intern]
221
- end
222
- check_params result_doc, params
223
- result_doc = Nokogiri::XML.parse(style.apply_to(doc,
224
- Nokogiri::XSLT.quote_params(params.to_a.flatten)))
225
- check_params result_doc, params
226
- end
227
-
228
- def test_xslt_paramaters
229
- xslt_str = <<-EOX
230
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
231
- <xsl:template match="/">
232
- <xsl:value-of select="$foo" />
233
- </xsl:template>
234
- </xsl:stylesheet>
235
- EOX
236
-
237
- xslt = Nokogiri::XSLT(xslt_str)
238
- doc = Nokogiri::XML("<root />")
239
- assert_match %r{bar}, xslt.transform(doc, Nokogiri::XSLT.quote_params('foo' => 'bar')).to_s
240
- end
241
-
242
- def test_xslt_transform_error
243
- xslt_str = <<-EOX
244
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
245
- <xsl:template match="/">
246
- <xsl:value-of select="$foo" />
247
- </xsl:template>
248
- </xsl:stylesheet>
249
- EOX
250
-
251
- xslt = Nokogiri::XSLT(xslt_str)
252
- doc = Nokogiri::XML("<root />")
253
- assert_raises(RuntimeError) { xslt.transform(doc) }
254
- end
255
- end
256
-
257
-
258
- def test_xslt_parse_error
259
- xslt_str = <<-EOX
260
- <xsl:stylesheet version="1.0"
261
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
262
- <!-- Not well-formed: -->
263
- <xsl:template match="/"/>
264
- <values>
265
- <xsl:for-each select="//*">
266
- <value>
267
- <xsl:value-of select="@id"/>
268
- </value>
269
- </xsl:for-each>
270
- </values>
271
- </xsl:template>
272
- </xsl:stylesheet>}
273
- EOX
274
- assert_raises(RuntimeError) { Nokogiri::XSLT.parse(xslt_str) }
275
- end
276
-
277
-
278
- def test_passing_a_non_document_to_transform
279
- xsl = Nokogiri::XSLT('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:stylesheet>')
280
- assert_raises(ArgumentError) { xsl.transform("<div></div>") }
281
- assert_raises(ArgumentError) { xsl.transform(Nokogiri::HTML("").css("body")) }
282
- end
283
-
284
- def check_params result_doc, params
285
- result_doc.xpath('/root/params/*').each do |p|
286
- assert_equal p.content, params[p.name.intern]
287
- end
288
- end
289
-
290
- def test_non_html_xslt_transform
291
- xml = Nokogiri.XML(<<-EOXML)
292
- <a>
293
- <b>
294
- <c>123</c>
295
- </b>
296
- </a>
297
- EOXML
298
-
299
- xsl = Nokogiri.XSLT(<<-EOXSL)
300
- <xsl:stylesheet version="1.0"
301
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
302
-
303
- <xsl:output encoding="UTF-8" indent="yes" method="xml" />
304
-
305
- <xsl:template match="/">
306
- <a><xsl:value-of select="/a" /></a>
307
- </xsl:template>
308
- </xsl:stylesheet>
309
- EOXSL
310
-
311
- result = xsl.transform xml
312
- assert !result.html?
313
- end
314
- end
@@ -1,28 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class Node
6
- class TestSaveOptions < Nokogiri::TestCase
7
- SaveOptions.constants.each do |constant|
8
- class_eval <<-EOEVAL
9
- def test_predicate_#{constant.downcase}
10
- options = SaveOptions.new(SaveOptions::#{constant})
11
- assert options.#{constant.downcase}?
12
-
13
- assert SaveOptions.new.#{constant.downcase}.#{constant.downcase}?
14
- end
15
- EOEVAL
16
- end
17
-
18
- def test_default_xml_save_options
19
- if Nokogiri.jruby?
20
- assert_equal 0, (SaveOptions::DEFAULT_XML & SaveOptions::FORMAT)
21
- else
22
- assert_equal SaveOptions::FORMAT, (SaveOptions::DEFAULT_XML & SaveOptions::FORMAT)
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,44 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class Node
6
- class TestSubclass < Nokogiri::TestCase
7
- {
8
- Nokogiri::XML::CDATA => 'doc, "foo"',
9
- Nokogiri::XML::Attr => 'doc, "foo"',
10
- Nokogiri::XML::Comment => 'doc, "foo"',
11
- Nokogiri::XML::EntityReference => 'doc, "foo"',
12
- Nokogiri::XML::ProcessingInstruction => 'doc, "foo", "bar"',
13
- Nokogiri::XML::DocumentFragment => 'doc',
14
- Nokogiri::XML::Node => '"foo", doc',
15
- Nokogiri::XML::Text => '"foo", doc',
16
- }.each do |klass, constructor|
17
- class_eval %{
18
- def test_subclass_#{klass.name.gsub('::', '_')}
19
- doc = Nokogiri::XML::Document.new
20
- klass = Class.new(#{klass.name})
21
- node = klass.new(#{constructor})
22
- assert_instance_of klass, node
23
- end
24
- }
25
-
26
- class_eval <<-eocode, __FILE__, __LINE__ + 1
27
- def test_subclass_initialize_#{klass.name.gsub('::', '_')}
28
- doc = Nokogiri::XML::Document.new
29
- klass = Class.new(#{klass.name}) do
30
- attr_accessor :initialized_with
31
-
32
- def initialize *args
33
- @initialized_with = args
34
- end
35
- end
36
- node = klass.new(#{constructor}, 1)
37
- assert_equal [#{constructor}, 1], node.initialized_with
38
- end
39
- eocode
40
- end
41
- end
42
- end
43
- end
44
- end