nokogiri 1.5.10 → 1.12.5

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 (328) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE-DEPENDENCIES.md +1903 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +278 -0
  6. data/bin/nokogiri +50 -10
  7. data/dependencies.yml +74 -0
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +944 -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 +305 -201
  25. data/ext/nokogiri/xml_document_fragment.c +13 -15
  26. data/ext/nokogiri/xml_dtd.c +54 -48
  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 +30 -19
  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 +808 -503
  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 +198 -186
  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 +162 -98
  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 +4886 -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/css/node.rb +1 -50
  92. data/lib/nokogiri/css/parser.rb +317 -286
  93. data/lib/nokogiri/css/parser.y +57 -43
  94. data/lib/nokogiri/css/parser_extras.rb +39 -36
  95. data/lib/nokogiri/css/syntax_error.rb +2 -1
  96. data/lib/nokogiri/css/tokenizer.rb +105 -103
  97. data/lib/nokogiri/css/tokenizer.rex +5 -5
  98. data/lib/nokogiri/css/xpath_visitor.rb +137 -48
  99. data/lib/nokogiri/css.rb +15 -14
  100. data/lib/nokogiri/decorators/slop.rb +13 -5
  101. data/lib/nokogiri/extension.rb +31 -0
  102. data/lib/nokogiri/gumbo.rb +14 -0
  103. data/lib/nokogiri/html.rb +32 -27
  104. data/lib/nokogiri/{html → html4}/builder.rb +3 -2
  105. data/lib/nokogiri/{html → html4}/document.rb +118 -50
  106. data/lib/nokogiri/{html → html4}/document_fragment.rb +20 -11
  107. data/lib/nokogiri/{html → html4}/element_description.rb +2 -1
  108. data/lib/nokogiri/{html → html4}/element_description_defaults.rb +2 -1
  109. data/lib/nokogiri/{html → html4}/entity_lookup.rb +2 -1
  110. data/lib/nokogiri/{html → html4}/sax/parser.rb +22 -14
  111. data/lib/nokogiri/html4/sax/parser_context.rb +19 -0
  112. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  113. data/lib/nokogiri/html4.rb +40 -0
  114. data/lib/nokogiri/html5/document.rb +74 -0
  115. data/lib/nokogiri/html5/document_fragment.rb +80 -0
  116. data/lib/nokogiri/html5/node.rb +93 -0
  117. data/lib/nokogiri/html5.rb +473 -0
  118. data/lib/nokogiri/jruby/dependencies.rb +20 -0
  119. data/lib/nokogiri/syntax_error.rb +1 -0
  120. data/lib/nokogiri/version/constant.rb +5 -0
  121. data/lib/nokogiri/version/info.rb +215 -0
  122. data/lib/nokogiri/version.rb +3 -91
  123. data/lib/nokogiri/xml/attr.rb +1 -0
  124. data/lib/nokogiri/xml/attribute_decl.rb +1 -0
  125. data/lib/nokogiri/xml/builder.rb +75 -33
  126. data/lib/nokogiri/xml/cdata.rb +1 -0
  127. data/lib/nokogiri/xml/character_data.rb +1 -0
  128. data/lib/nokogiri/xml/document.rb +157 -54
  129. data/lib/nokogiri/xml/document_fragment.rb +55 -8
  130. data/lib/nokogiri/xml/dtd.rb +15 -4
  131. data/lib/nokogiri/xml/element_content.rb +1 -0
  132. data/lib/nokogiri/xml/element_decl.rb +1 -0
  133. data/lib/nokogiri/xml/entity_decl.rb +1 -0
  134. data/lib/nokogiri/xml/entity_reference.rb +19 -0
  135. data/lib/nokogiri/xml/namespace.rb +1 -0
  136. data/lib/nokogiri/xml/node/save_options.rb +2 -1
  137. data/lib/nokogiri/xml/node.rb +712 -431
  138. data/lib/nokogiri/xml/node_set.rb +140 -123
  139. data/lib/nokogiri/xml/notation.rb +1 -0
  140. data/lib/nokogiri/xml/parse_options.rb +31 -0
  141. data/lib/nokogiri/xml/pp/character_data.rb +1 -0
  142. data/lib/nokogiri/xml/pp/node.rb +1 -0
  143. data/lib/nokogiri/xml/pp.rb +3 -2
  144. data/lib/nokogiri/xml/processing_instruction.rb +1 -0
  145. data/lib/nokogiri/xml/reader.rb +9 -12
  146. data/lib/nokogiri/xml/relax_ng.rb +7 -2
  147. data/lib/nokogiri/xml/sax/document.rb +25 -30
  148. data/lib/nokogiri/xml/sax/parser.rb +8 -8
  149. data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
  150. data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
  151. data/lib/nokogiri/xml/sax.rb +5 -4
  152. data/lib/nokogiri/xml/schema.rb +13 -4
  153. data/lib/nokogiri/xml/searchable.rb +239 -0
  154. data/lib/nokogiri/xml/syntax_error.rb +25 -1
  155. data/lib/nokogiri/xml/text.rb +1 -0
  156. data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
  157. data/lib/nokogiri/xml/xpath.rb +4 -5
  158. data/lib/nokogiri/xml/xpath_context.rb +1 -0
  159. data/lib/nokogiri/xml.rb +37 -35
  160. data/lib/nokogiri/xslt/stylesheet.rb +2 -1
  161. data/lib/nokogiri/xslt.rb +17 -16
  162. data/lib/nokogiri.rb +55 -58
  163. data/lib/xsd/xmlparser/nokogiri.rb +1 -0
  164. data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
  165. data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  166. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  167. data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
  168. data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
  169. data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
  170. data/patches/libxml2/0007-Fix-XPath-recursion-limit.patch +31 -0
  171. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
  172. data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
  173. data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
  174. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  175. metadata +307 -459
  176. data/.autotest +0 -26
  177. data/.gemtest +0 -0
  178. data/CHANGELOG.ja.rdoc +0 -785
  179. data/CHANGELOG.rdoc +0 -783
  180. data/C_CODING_STYLE.rdoc +0 -33
  181. data/Manifest.txt +0 -303
  182. data/README.ja.rdoc +0 -106
  183. data/README.rdoc +0 -175
  184. data/ROADMAP.md +0 -90
  185. data/Rakefile +0 -228
  186. data/STANDARD_RESPONSES.md +0 -47
  187. data/Y_U_NO_GEMSPEC.md +0 -155
  188. data/build_all +0 -105
  189. data/ext/nokogiri/html_document.c +0 -170
  190. data/ext/nokogiri/html_document.h +0 -10
  191. data/ext/nokogiri/html_element_description.c +0 -279
  192. data/ext/nokogiri/html_element_description.h +0 -10
  193. data/ext/nokogiri/html_entity_lookup.c +0 -32
  194. data/ext/nokogiri/html_entity_lookup.h +0 -8
  195. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  196. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  197. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  198. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  199. data/ext/nokogiri/xml_attr.h +0 -9
  200. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  201. data/ext/nokogiri/xml_cdata.h +0 -9
  202. data/ext/nokogiri/xml_comment.h +0 -9
  203. data/ext/nokogiri/xml_document.h +0 -23
  204. data/ext/nokogiri/xml_document_fragment.h +0 -10
  205. data/ext/nokogiri/xml_dtd.h +0 -10
  206. data/ext/nokogiri/xml_element_content.h +0 -10
  207. data/ext/nokogiri/xml_element_decl.h +0 -9
  208. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  209. data/ext/nokogiri/xml_entity_decl.h +0 -10
  210. data/ext/nokogiri/xml_entity_reference.h +0 -9
  211. data/ext/nokogiri/xml_io.c +0 -56
  212. data/ext/nokogiri/xml_io.h +0 -11
  213. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  214. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  215. data/ext/nokogiri/xml_namespace.h +0 -13
  216. data/ext/nokogiri/xml_node.h +0 -13
  217. data/ext/nokogiri/xml_node_set.h +0 -14
  218. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  219. data/ext/nokogiri/xml_reader.h +0 -10
  220. data/ext/nokogiri/xml_relax_ng.h +0 -9
  221. data/ext/nokogiri/xml_sax_parser.h +0 -39
  222. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  223. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  224. data/ext/nokogiri/xml_schema.h +0 -9
  225. data/ext/nokogiri/xml_syntax_error.h +0 -13
  226. data/ext/nokogiri/xml_text.h +0 -9
  227. data/ext/nokogiri/xml_xpath_context.h +0 -10
  228. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  229. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  230. data/lib/nokogiri/html/sax/push_parser.rb +0 -16
  231. data/tasks/cross_compile.rb +0 -150
  232. data/tasks/nokogiri.org.rb +0 -24
  233. data/tasks/test.rb +0 -95
  234. data/test/css/test_nthiness.rb +0 -159
  235. data/test/css/test_parser.rb +0 -341
  236. data/test/css/test_tokenizer.rb +0 -198
  237. data/test/css/test_xpath_visitor.rb +0 -91
  238. data/test/decorators/test_slop.rb +0 -16
  239. data/test/files/2ch.html +0 -108
  240. data/test/files/address_book.rlx +0 -12
  241. data/test/files/address_book.xml +0 -10
  242. data/test/files/bar/bar.xsd +0 -4
  243. data/test/files/dont_hurt_em_why.xml +0 -422
  244. data/test/files/encoding.html +0 -82
  245. data/test/files/encoding.xhtml +0 -84
  246. data/test/files/exslt.xml +0 -8
  247. data/test/files/exslt.xslt +0 -35
  248. data/test/files/foo/foo.xsd +0 -4
  249. data/test/files/metacharset.html +0 -10
  250. data/test/files/noencoding.html +0 -47
  251. data/test/files/po.xml +0 -32
  252. data/test/files/po.xsd +0 -66
  253. data/test/files/shift_jis.html +0 -10
  254. data/test/files/shift_jis.xml +0 -5
  255. data/test/files/snuggles.xml +0 -3
  256. data/test/files/staff.dtd +0 -10
  257. data/test/files/staff.xml +0 -59
  258. data/test/files/staff.xslt +0 -32
  259. data/test/files/test_document_url/bar.xml +0 -2
  260. data/test/files/test_document_url/document.dtd +0 -4
  261. data/test/files/test_document_url/document.xml +0 -6
  262. data/test/files/tlm.html +0 -850
  263. data/test/files/to_be_xincluded.xml +0 -2
  264. data/test/files/valid_bar.xml +0 -2
  265. data/test/files/xinclude.xml +0 -4
  266. data/test/helper.rb +0 -154
  267. data/test/html/sax/test_parser.rb +0 -141
  268. data/test/html/sax/test_parser_context.rb +0 -46
  269. data/test/html/test_builder.rb +0 -164
  270. data/test/html/test_document.rb +0 -552
  271. data/test/html/test_document_encoding.rb +0 -138
  272. data/test/html/test_document_fragment.rb +0 -261
  273. data/test/html/test_element_description.rb +0 -105
  274. data/test/html/test_named_characters.rb +0 -14
  275. data/test/html/test_node.rb +0 -196
  276. data/test/html/test_node_encoding.rb +0 -27
  277. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  278. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  279. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  280. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
  281. data/test/test_convert_xpath.rb +0 -135
  282. data/test/test_css_cache.rb +0 -45
  283. data/test/test_encoding_handler.rb +0 -46
  284. data/test/test_memory_leak.rb +0 -156
  285. data/test/test_nokogiri.rb +0 -132
  286. data/test/test_reader.rb +0 -555
  287. data/test/test_soap4r_sax.rb +0 -52
  288. data/test/test_xslt_transforms.rb +0 -254
  289. data/test/xml/node/test_save_options.rb +0 -28
  290. data/test/xml/node/test_subclass.rb +0 -44
  291. data/test/xml/sax/test_parser.rb +0 -366
  292. data/test/xml/sax/test_parser_context.rb +0 -106
  293. data/test/xml/sax/test_push_parser.rb +0 -157
  294. data/test/xml/test_attr.rb +0 -64
  295. data/test/xml/test_attribute_decl.rb +0 -86
  296. data/test/xml/test_builder.rb +0 -306
  297. data/test/xml/test_c14n.rb +0 -151
  298. data/test/xml/test_cdata.rb +0 -48
  299. data/test/xml/test_comment.rb +0 -29
  300. data/test/xml/test_document.rb +0 -828
  301. data/test/xml/test_document_encoding.rb +0 -28
  302. data/test/xml/test_document_fragment.rb +0 -223
  303. data/test/xml/test_dtd.rb +0 -103
  304. data/test/xml/test_dtd_encoding.rb +0 -33
  305. data/test/xml/test_element_content.rb +0 -56
  306. data/test/xml/test_element_decl.rb +0 -73
  307. data/test/xml/test_entity_decl.rb +0 -122
  308. data/test/xml/test_entity_reference.rb +0 -245
  309. data/test/xml/test_namespace.rb +0 -95
  310. data/test/xml/test_node.rb +0 -1137
  311. data/test/xml/test_node_attributes.rb +0 -96
  312. data/test/xml/test_node_encoding.rb +0 -107
  313. data/test/xml/test_node_inheritance.rb +0 -32
  314. data/test/xml/test_node_reparenting.rb +0 -374
  315. data/test/xml/test_node_set.rb +0 -755
  316. data/test/xml/test_parse_options.rb +0 -64
  317. data/test/xml/test_processing_instruction.rb +0 -30
  318. data/test/xml/test_reader_encoding.rb +0 -142
  319. data/test/xml/test_relax_ng.rb +0 -60
  320. data/test/xml/test_schema.rb +0 -103
  321. data/test/xml/test_syntax_error.rb +0 -12
  322. data/test/xml/test_text.rb +0 -45
  323. data/test/xml/test_unparented_node.rb +0 -422
  324. data/test/xml/test_xinclude.rb +0 -83
  325. data/test/xml/test_xpath.rb +0 -295
  326. data/test/xslt/test_custom_functions.rb +0 -133
  327. data/test/xslt/test_exception_handling.rb +0 -37
  328. data/test_all +0 -81
@@ -1,254 +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>}, result
36
- end
37
-
38
- def test_transform_with_output_style
39
- xslt = ""
40
- if Nokogiri.jruby?
41
- xslt = Nokogiri::XSLT(<<-eoxslt)
42
- <?xml version="1.0" encoding="ISO-8859-1"?>
43
-
44
- <xsl:stylesheet version="1.0"
45
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
46
- <xsl:output method="text" version="1.0"
47
- encoding="iso-8859-1" indent="yes"/>
48
-
49
- <xsl:param name="title"/>
50
-
51
- <xsl:template match="/">
52
- <html>
53
- <body>
54
- <xsl:for-each select="staff/employee">
55
- <tr>
56
- <td><xsl:value-of select="employeeId"/></td>
57
- <td><xsl:value-of select="name"/></td>
58
- <td><xsl:value-of select="position"/></td>
59
- <td><xsl:value-of select="salary"/></td>
60
- </tr>
61
- </xsl:for-each>
62
- </body>
63
- </html>
64
- </xsl:template>
65
-
66
- </xsl:stylesheet>
67
- eoxslt
68
- else
69
- xslt = Nokogiri::XSLT(<<-eoxslt)
70
- <?xml version="1.0" encoding="ISO-8859-1"?>
71
-
72
- <xsl:stylesheet version="1.0"
73
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
74
- <xsl:output method="text" version="1.0"
75
- encoding="iso-8859-1" indent="yes"/>
76
-
77
- <xsl:param name="title"/>
78
-
79
- <xsl:template match="/">
80
- <html>
81
- <body>
82
- <xsl:for-each select="staff/employee">
83
- <tr>
84
- <td><xsl:value-of select="employeeId"/></td>
85
- <td><xsl:value-of select="name"/></td>
86
- <td><xsl:value-of select="position"/></td>
87
- <td><xsl:value-of select="salary"/></td>
88
- </tr>
89
- </xsl:for-each>
90
- </table>
91
- </body>
92
- </html>
93
- </xsl:template>
94
-
95
- </xsl:stylesheet>
96
- eoxslt
97
- end
98
- assert_no_match(/<td>/, xslt.apply_to(@doc, ['title', 'foo']))
99
- end
100
-
101
- def test_transform_arg_error
102
- assert style = Nokogiri::XSLT(File.read(XSLT_FILE))
103
- assert_raises(TypeError) do
104
- style.transform(@doc, :foo)
105
- end
106
- end
107
-
108
- def test_transform_with_hash
109
- assert style = Nokogiri::XSLT(File.read(XSLT_FILE))
110
- result = style.transform(@doc, {'title' => '"Booyah"'})
111
- assert result.html?
112
- assert_equal "Booyah", result.at_css("h1").content
113
- end
114
-
115
- def test_transform2
116
- assert style = Nokogiri::XSLT(File.open(XSLT_FILE))
117
- assert result_doc = style.transform(@doc)
118
- assert result_doc.html?
119
- assert_equal "", result_doc.at_css("h1").content
120
-
121
- assert style = Nokogiri::XSLT(File.read(XSLT_FILE))
122
- assert result_doc = style.transform(@doc, ['title', '"Booyah"'])
123
- assert result_doc.html?
124
- assert_equal "Booyah", result_doc.at_css("h1").content
125
-
126
- assert result_string = style.apply_to(@doc, ['title', '"Booyah"'])
127
- assert_equal result_string, style.serialize(result_doc)
128
- end
129
-
130
- def test_transform_with_quote_params
131
- assert style = Nokogiri::XSLT(File.open(XSLT_FILE))
132
- assert result_doc = style.transform(@doc, Nokogiri::XSLT.quote_params(['title', 'Booyah']))
133
- assert result_doc.html?
134
- assert_equal "Booyah", result_doc.at_css("h1").content
135
-
136
- assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
137
- assert result_doc = style.transform(@doc, Nokogiri::XSLT.quote_params({'title' => 'Booyah'}))
138
- assert result_doc.html?
139
- assert_equal "Booyah", result_doc.at_css("h1").content
140
- end
141
-
142
- def test_quote_params
143
- h = {
144
- :sym => %{xxx},
145
- 'str' => %{"xxx"},
146
- :sym2 => %{'xxx'},
147
- 'str2' => %{x'x'x},
148
- :sym3 => %{x"x"x},
149
- }
150
- hh=h.dup
151
- result_hash = Nokogiri::XSLT.quote_params(h)
152
- assert_equal hh, h # non-destructive
153
-
154
- a=h.to_a.flatten
155
- result_array = Nokogiri::XSLT.quote_params(a)
156
- assert_equal h.to_a.flatten, a #non-destructive
157
-
158
- assert_equal result_array, result_hash
159
- end
160
-
161
- if Nokogiri.uses_libxml?
162
- # By now, cannot get it working on JRuby, see:
163
- # http://yokolet.blogspot.com/2010/10/pure-java-nokogiri-xslt-extension.html
164
- def test_exslt
165
- assert doc = Nokogiri::XML.parse(File.read(EXML_FILE))
166
- assert doc.xml?
167
-
168
- assert style = Nokogiri::XSLT.parse(File.read(EXSLT_FILE))
169
- params = {
170
- :p1 => 'xxx',
171
- :p2 => "x'x'x",
172
- :p3 => 'x"x"x',
173
- :p4 => '"xxx"'
174
- }
175
- result_doc = Nokogiri::XML.parse(style.apply_to(doc,
176
- Nokogiri::XSLT.quote_params(params)))
177
-
178
- assert_equal 'func-result', result_doc.at('/root/function').content
179
- assert_equal 3, result_doc.at('/root/max').content.to_i
180
- assert_match(
181
- /\d{4}-\d\d-\d\d([-|+]\d\d:\d\d)?/,
182
- result_doc.at('/root/date').content
183
- )
184
- result_doc.xpath('/root/params/*').each do |p|
185
- assert_equal p.content, params[p.name.intern]
186
- end
187
- check_params result_doc, params
188
- result_doc = Nokogiri::XML.parse(style.apply_to(doc,
189
- Nokogiri::XSLT.quote_params(params.to_a.flatten)))
190
- check_params result_doc, params
191
- end
192
-
193
- def test_xslt_paramaters
194
- xslt_str = <<-EOX
195
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
196
- <xsl:template match="/">
197
- <xsl:value-of select="$foo" />
198
- </xsl:template>
199
- </xsl:stylesheet>
200
- EOX
201
-
202
- xslt = Nokogiri::XSLT(xslt_str)
203
- doc = Nokogiri::XML("<root />")
204
- assert_match %r{bar}, xslt.transform(doc, Nokogiri::XSLT.quote_params('foo' => 'bar')).to_s
205
- end
206
-
207
- def test_xslt_transform_error
208
- xslt_str = <<-EOX
209
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
210
- <xsl:template match="/">
211
- <xsl:value-of select="$foo" />
212
- </xsl:template>
213
- </xsl:stylesheet>
214
- EOX
215
-
216
- xslt = Nokogiri::XSLT(xslt_str)
217
- doc = Nokogiri::XML("<root />")
218
- assert_raises(RuntimeError) { xslt.transform(doc) }
219
- end
220
- end
221
-
222
-
223
- def test_xslt_parse_error
224
- xslt_str = <<-EOX
225
- <xsl:stylesheet version="1.0"
226
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
227
- <!-- Not well-formed: -->
228
- <xsl:template match="/"/>
229
- <values>
230
- <xsl:for-each select="//*">
231
- <value>
232
- <xsl:value-of select="@id"/>
233
- </value>
234
- </xsl:for-each>
235
- </values>
236
- </xsl:template>
237
- </xsl:stylesheet>}
238
- EOX
239
- assert_raises(RuntimeError) { Nokogiri::XSLT.parse(xslt_str) }
240
- end
241
-
242
-
243
- def test_passing_a_non_document_to_transform
244
- xsl = Nokogiri::XSLT('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:stylesheet>')
245
- assert_raises(ArgumentError) { xsl.transform("<div></div>") }
246
- assert_raises(ArgumentError) { xsl.transform(Nokogiri::HTML("").css("body")) }
247
- end
248
-
249
- def check_params result_doc, params
250
- result_doc.xpath('/root/params/*').each do |p|
251
- assert_equal p.content, params[p.name.intern]
252
- end
253
- end
254
- 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
@@ -1,366 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "helper"
4
-
5
- module Nokogiri
6
- module XML
7
- module SAX
8
- class TestParser < Nokogiri::SAX::TestCase
9
- def setup
10
- super
11
- @parser = XML::SAX::Parser.new(Doc.new)
12
- end
13
-
14
- def test_parser_context_yielded_io
15
- doc = Doc.new
16
- parser = XML::SAX::Parser.new doc
17
- xml = "<foo a='&amp;b'/>"
18
-
19
- block_called = false
20
- parser.parse(StringIO.new(xml)) { |ctx|
21
- block_called = true
22
- ctx.replace_entities = true
23
- }
24
-
25
- assert block_called
26
-
27
- assert_equal [['foo', [['a', '&b']]]], doc.start_elements
28
- end
29
-
30
- def test_parser_context_yielded_in_memory
31
- doc = Doc.new
32
- parser = XML::SAX::Parser.new doc
33
- xml = "<foo a='&amp;b'/>"
34
-
35
- block_called = false
36
- parser.parse(xml) { |ctx|
37
- block_called = true
38
- ctx.replace_entities = true
39
- }
40
-
41
- assert block_called
42
-
43
- assert_equal [['foo', [['a', '&b']]]], doc.start_elements
44
- end
45
-
46
- def test_xml_decl
47
- {
48
- '' => nil,
49
- '<?xml version="1.0" ?>' => ['1.0'],
50
- '<?xml version="1.0" encoding="UTF-8" ?>' => ['1.0', 'UTF-8'],
51
- '<?xml version="1.0" standalone="yes"?>' => ['1.0', 'yes'],
52
- '<?xml version="1.0" standalone="no"?>' => ['1.0', 'no'],
53
- }.each do |decl,value|
54
- parser = XML::SAX::Parser.new(Doc.new)
55
-
56
- xml = "#{decl}\n<root />"
57
- parser.parse xml
58
- assert parser.document.start_document_called, xml
59
- assert_equal value, parser.document.xmldecls, xml
60
- end
61
- end
62
-
63
- def test_parse_empty
64
- assert_raises RuntimeError do
65
- @parser.parse('')
66
- end
67
- end
68
-
69
- def test_namespace_declaration_order_is_saved
70
- @parser.parse <<-eoxml
71
- <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
72
- <a foo:bar='hello' />
73
- </root>
74
- eoxml
75
- assert_equal 2, @parser.document.start_elements_namespace.length
76
- el = @parser.document.start_elements_namespace.first
77
- namespaces = el.last
78
- assert_equal ['foo', 'http://foo.example.com/'], namespaces.first
79
- assert_equal [nil, 'http://example.com/'], namespaces.last
80
- end
81
-
82
- def test_bad_document_calls_error_handler
83
- @parser.parse('<foo><bar></foo>')
84
- assert @parser.document.errors
85
- assert @parser.document.errors.length > 0
86
- end
87
-
88
- def test_namespace_are_super_fun_to_parse
89
- @parser.parse <<-eoxml
90
- <root xmlns:foo='http://foo.example.com/'>
91
- <a foo:bar='hello' />
92
- <b xmlns:foo='http://bar.example.com/'>
93
- <a foo:bar='hello' />
94
- </b>
95
- <foo:bar>hello world</foo:bar>
96
- </root>
97
- eoxml
98
-
99
- assert @parser.document.start_elements_namespace.length > 0
100
- el = @parser.document.start_elements_namespace[1]
101
- assert_equal 'a', el.first
102
- assert_equal 1, el[1].length
103
-
104
- attribute = el[1].first
105
- assert_equal 'bar', attribute.localname
106
- assert_equal 'foo', attribute.prefix
107
- assert_equal 'hello', attribute.value
108
- assert_equal 'http://foo.example.com/', attribute.uri
109
- end
110
-
111
- def test_sax_v1_namespace_attribute_declarations
112
- @parser.parse <<-eoxml
113
- <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
114
- <a foo:bar='hello' />
115
- <b xmlns:foo='http://bar.example.com/'>
116
- <a foo:bar='hello' />
117
- </b>
118
- <foo:bar>hello world</foo:bar>
119
- </root>
120
- eoxml
121
- assert @parser.document.start_elements.length > 0
122
- elm = @parser.document.start_elements.first
123
- assert_equal 'root', elm.first
124
- assert elm[1].include?(['xmlns:foo', 'http://foo.example.com/'])
125
- assert elm[1].include?(['xmlns', 'http://example.com/'])
126
- end
127
-
128
- def test_sax_v1_namespace_nodes
129
- @parser.parse <<-eoxml
130
- <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
131
- <a foo:bar='hello' />
132
- <b xmlns:foo='http://bar.example.com/'>
133
- <a foo:bar='hello' />
134
- </b>
135
- <foo:bar>hello world</foo:bar>
136
- </root>
137
- eoxml
138
- assert_equal 5, @parser.document.start_elements.length
139
- assert @parser.document.start_elements.map { |se|
140
- se.first
141
- }.include?('foo:bar')
142
- assert @parser.document.end_elements.map { |se|
143
- se.first
144
- }.include?('foo:bar')
145
- end
146
-
147
- def test_start_is_called_without_namespace
148
- @parser.parse(<<-eoxml)
149
- <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
150
- <foo:f><bar></foo:f>
151
- </root>
152
- eoxml
153
- assert_equal ['root', 'foo:f', 'bar'],
154
- @parser.document.start_elements.map { |x| x.first }
155
- end
156
-
157
- def test_parser_sets_encoding
158
- parser = XML::SAX::Parser.new(Doc.new, 'UTF-8')
159
- assert_equal 'UTF-8', parser.encoding
160
- end
161
-
162
- def test_errors_set_after_parsing_bad_dom
163
- doc = Nokogiri::XML('<foo><bar></foo>')
164
- assert doc.errors
165
-
166
- @parser.parse('<foo><bar></foo>')
167
- assert @parser.document.errors
168
- assert @parser.document.errors.length > 0
169
-
170
- if RUBY_VERSION =~ /^1\.9/
171
- doc.errors.each do |error|
172
- assert_equal 'UTF-8', error.message.encoding.name
173
- end
174
- end
175
-
176
- # when using JRuby Nokogiri, more errors will be generated as the DOM
177
- # parser continue to parse an ill formed document, while the sax parser
178
- # will stop at the first error
179
- unless Nokogiri.jruby?
180
- assert_equal doc.errors.length, @parser.document.errors.length
181
- end
182
- end
183
-
184
- def test_parse_with_memory_argument
185
- @parser.parse(File.read(XML_FILE))
186
- assert(@parser.document.cdata_blocks.length > 0)
187
- end
188
-
189
- def test_parse_with_io_argument
190
- File.open(XML_FILE, 'rb') { |f|
191
- @parser.parse(f)
192
- }
193
- assert(@parser.document.cdata_blocks.length > 0)
194
- end
195
-
196
- def test_parse_io
197
- call_parse_io_with_encoding 'UTF-8'
198
- end
199
-
200
- # issue #828
201
- def test_parse_io_lower_case_encoding
202
- call_parse_io_with_encoding 'utf-8'
203
- end
204
-
205
- def call_parse_io_with_encoding encoding
206
- File.open(XML_FILE, 'rb') { |f|
207
- @parser.parse_io(f, encoding)
208
- }
209
- assert(@parser.document.cdata_blocks.length > 0)
210
- if RUBY_VERSION =~ /^1\.9/
211
- called = false
212
- @parser.document.start_elements.flatten.each do |thing|
213
- assert_equal 'UTF-8', thing.encoding.name
214
- called = true
215
- end
216
- assert called
217
-
218
- called = false
219
- @parser.document.end_elements.flatten.each do |thing|
220
- assert_equal 'UTF-8', thing.encoding.name
221
- called = true
222
- end
223
- assert called
224
-
225
- called = false
226
- @parser.document.data.each do |thing|
227
- assert_equal 'UTF-8', thing.encoding.name
228
- called = true
229
- end
230
- assert called
231
-
232
- called = false
233
- @parser.document.comments.flatten.each do |thing|
234
- assert_equal 'UTF-8', thing.encoding.name
235
- called = true
236
- end
237
- assert called
238
-
239
- called = false
240
- @parser.document.cdata_blocks.flatten.each do |thing|
241
- assert_equal 'UTF-8', thing.encoding.name
242
- called = true
243
- end
244
- assert called
245
- end
246
- end
247
-
248
- def test_parse_file
249
- @parser.parse_file(XML_FILE)
250
-
251
- assert_raises(ArgumentError) {
252
- @parser.parse_file(nil)
253
- }
254
-
255
- assert_raises(Errno::ENOENT) {
256
- @parser.parse_file('')
257
- }
258
- assert_raises(Errno::EISDIR) {
259
- @parser.parse_file(File.expand_path(File.dirname(__FILE__)))
260
- }
261
- end
262
-
263
- def test_render_parse_nil_param
264
- assert_raises(ArgumentError) { @parser.parse_memory(nil) }
265
- end
266
-
267
- def test_bad_encoding_args
268
- assert_raises(ArgumentError) { XML::SAX::Parser.new(Doc.new, 'not an encoding') }
269
- assert_raises(ArgumentError) { @parser.parse_io(StringIO.new('<root/>'), 'not an encoding')}
270
- end
271
-
272
- def test_ctag
273
- @parser.parse_memory(<<-eoxml)
274
- <p id="asdfasdf">
275
- <![CDATA[ This is a comment ]]>
276
- Paragraph 1
277
- </p>
278
- eoxml
279
- assert_equal [' This is a comment '], @parser.document.cdata_blocks
280
- end
281
-
282
- def test_comment
283
- @parser.parse_memory(<<-eoxml)
284
- <p id="asdfasdf">
285
- <!-- This is a comment -->
286
- Paragraph 1
287
- </p>
288
- eoxml
289
- assert_equal [' This is a comment '], @parser.document.comments
290
- end
291
-
292
- def test_characters
293
- @parser.parse_memory(<<-eoxml)
294
- <p id="asdfasdf">Paragraph 1</p>
295
- eoxml
296
- assert_equal ['Paragraph 1'], @parser.document.data
297
- end
298
-
299
- def test_end_document
300
- @parser.parse_memory(<<-eoxml)
301
- <p id="asdfasdf">Paragraph 1</p>
302
- eoxml
303
- assert @parser.document.end_document_called
304
- end
305
-
306
- def test_end_element
307
- @parser.parse_memory(<<-eoxml)
308
- <p id="asdfasdf">Paragraph 1</p>
309
- eoxml
310
- assert_equal [["p"]],
311
- @parser.document.end_elements
312
- end
313
-
314
- def test_start_element_attrs
315
- @parser.parse_memory(<<-eoxml)
316
- <p id="asdfasdf">Paragraph 1</p>
317
- eoxml
318
- assert_equal [["p", [["id", "asdfasdf"]]]],
319
- @parser.document.start_elements
320
- end
321
-
322
- def test_start_element_attrs_include_namespaces
323
- @parser.parse_memory(<<-eoxml)
324
- <p xmlns:foo='http://foo.example.com/'>Paragraph 1</p>
325
- eoxml
326
- assert_equal [["p", [['xmlns:foo', 'http://foo.example.com/']]]],
327
- @parser.document.start_elements
328
- end
329
-
330
- def test_processing_instruction
331
- @parser.parse_memory(<<-eoxml)
332
- <?xml-stylesheet href="a.xsl" type="text/xsl"?>
333
- <?xml version="1.0"?>
334
- eoxml
335
- assert_equal [['xml-stylesheet', 'href="a.xsl" type="text/xsl"']],
336
- @parser.document.processing_instructions
337
- end
338
-
339
- if Nokogiri.uses_libxml? # JRuby SAXParser only parses well-formed XML documents
340
- def test_parse_document
341
- @parser.parse_memory(<<-eoxml)
342
- <p>Paragraph 1</p>
343
- <p>Paragraph 2</p>
344
- eoxml
345
- end
346
- end
347
-
348
- def test_parser_attributes
349
- xml = <<-eoxml
350
- <?xml version="1.0" ?><root><foo a="&amp;b" c="&gt;d" /></root>
351
- eoxml
352
-
353
- block_called = false
354
- @parser.parse(xml) { |ctx|
355
- block_called = true
356
- ctx.replace_entities = true
357
- }
358
-
359
- assert block_called
360
-
361
- assert_equal [['root', []], ['foo', [['a', '&b'], ['c', '>d']]]], @parser.document.start_elements
362
- end
363
- end
364
- end
365
- end
366
- end