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,212 +0,0 @@
1
- require "helper"
2
-
3
- require 'nkf'
4
-
5
- module Nokogiri
6
- module HTML
7
- class TestNode < Nokogiri::TestCase
8
- def setup
9
- super
10
- @html = Nokogiri::HTML(<<-eohtml)
11
- <html>
12
- <head></head>
13
- <body>
14
- <div class='baz'><a href="foo" class="bar">first</a></div>
15
- </body>
16
- </html>
17
- eohtml
18
- end
19
-
20
- def test_to_a
21
- assert_equal [['class', 'bar'], ['href', 'foo']],@html.at('a').to_a.sort
22
- end
23
-
24
- def test_attr
25
- node = @html.at('div.baz')
26
- assert_equal node['class'], node.attr('class')
27
- end
28
-
29
- def test_get_attribute
30
- element = @html.at('div')
31
- assert_equal 'baz', element.get_attribute('class')
32
- assert_equal 'baz', element['class']
33
- element['href'] = "javascript:alert(\"AGGA-KA-BOO!\")"
34
- assert_match(/%22AGGA-KA-BOO!%22/, element.to_html)
35
- end
36
-
37
- # The HTML parser ignores namespaces, so even properly declared namespaces
38
- # are treated as as undeclared and have to be accessed via prefix:tagname
39
- def test_ns_attribute
40
- html = '<i foo:bar="baz"></i>'
41
- doc = Nokogiri::HTML(html)
42
- assert_equal 'baz', (doc%'i')['foo:bar']
43
- end
44
-
45
- def test_css_path_round_trip
46
- doc = Nokogiri::HTML(File.read(HTML_FILE))
47
- %w{ #header small div[2] div.post body }.each do |css_sel|
48
- ele = doc.at css_sel
49
- assert_equal ele, doc.at(ele.css_path), ele.css_path
50
- end
51
- end
52
-
53
- def test_path_round_trip
54
- doc = Nokogiri::HTML(File.read(HTML_FILE))
55
- %w{ #header small div[2] div.post body }.each do |css_sel|
56
- ele = doc.at css_sel
57
- assert_equal ele, doc.at(ele.path), ele.path
58
- end
59
- end
60
-
61
- def test_append_with_document
62
- assert_raises(ArgumentError) do
63
- @html.root << Nokogiri::HTML::Document.new
64
- end
65
- end
66
-
67
- ###
68
- # Make sure a document that doesn't declare a meta encoding returns
69
- # nil.
70
- def test_meta_encoding
71
- assert_nil @html.meta_encoding
72
- end
73
-
74
- def test_description
75
- assert desc = @html.at('a.bar').description
76
- assert_equal 'a', desc.name
77
- end
78
-
79
- def test_ancestors_with_selector
80
- assert node = @html.at('a.bar').child
81
- assert list = node.ancestors('.baz')
82
- assert_equal 1, list.length
83
- assert_equal 'div', list.first.name
84
- end
85
-
86
- def test_matches_inside_fragment
87
- fragment = DocumentFragment.new @html
88
- fragment << XML::Node.new('a', @html)
89
-
90
- a = fragment.children.last
91
- assert a.matches?('a'), 'a should match'
92
- end
93
-
94
- def test_css_matches?
95
- assert node = @html.at('a.bar')
96
- assert node.matches?('a.bar')
97
- end
98
-
99
- def test_xpath_matches?
100
- assert node = @html.at('//a')
101
- assert node.matches?('//a')
102
- end
103
-
104
- def test_unlink_then_swap
105
- node = @html.at('a')
106
- node.unlink
107
-
108
- another_node = @html.at('div')
109
- assert another_node, 'should have a node'
110
-
111
- # This used to segv
112
- assert node.add_previous_sibling another_node
113
- end
114
-
115
- def test_swap
116
- @html.at('div').swap('<a href="foo">bar</a>')
117
- a_tag = @html.css('a').first
118
- assert_equal 'body', a_tag.parent.name
119
- assert_equal 0, @html.css('div').length
120
- end
121
-
122
- def test_swap_with_regex_characters
123
- @html.at('div').swap('<a href="foo">ba)r</a>')
124
- a_tag = @html.css('a').first
125
- assert_equal 'ba)r', a_tag.text
126
- end
127
-
128
- def test_attribute_decodes_entities
129
- node = @html.at('div')
130
- node['href'] = 'foo&bar'
131
- assert_equal 'foo&bar', node['href']
132
- node['href'] += '&baz'
133
- assert_equal 'foo&bar&baz', node['href']
134
- end
135
-
136
- def test_parse_config_option
137
- node = @html.at('div')
138
- options = nil
139
- node.parse("<div></div>") do |config|
140
- options = config
141
- end
142
- assert_equal Nokogiri::XML::ParseOptions::DEFAULT_HTML, options.to_i
143
- end
144
-
145
- def test_fragment_handler_does_not_regurge_on_invalid_attributes
146
- iframe = %Q{<iframe style="width: 0%; height: 0px" src="http://someurl" allowtransparency></iframe>}
147
- assert @html.at('div').fragment(iframe)
148
- end
149
-
150
- def test_fragment
151
- fragment = @html.fragment(<<-eohtml)
152
- hello
153
- <div class="foo">
154
- <p>bar</p>
155
- </div>
156
- world
157
- eohtml
158
- assert_match(/^hello/, fragment.inner_html.strip)
159
- assert_equal 3, fragment.children.length
160
- assert p_tag = fragment.css('p').first
161
- assert_equal 'div', p_tag.parent.name
162
- assert_equal 'foo', p_tag.parent['class']
163
- end
164
-
165
- def test_fragment_serialization
166
- fragment = Nokogiri::HTML.fragment("<div>foo</div>")
167
- assert_equal "<div>foo</div>", fragment.serialize.chomp
168
- assert_equal "<div>foo</div>", fragment.to_xml.chomp
169
- assert_equal "<div>foo</div>", fragment.inner_html
170
- assert_equal "<div>foo</div>", fragment.to_html
171
- assert_equal "<div>foo</div>", fragment.to_s
172
- end
173
-
174
- def test_to_html_does_not_contain_entities
175
- return unless defined?(NKF) # NKF is not implemented on Rubinius as of 2009-11-23
176
- html = NKF.nkf("-e --msdos", <<-EOH)
177
- <html><body>
178
- <p> test paragraph
179
- foo bar </p>
180
- </body></html>
181
- EOH
182
- nokogiri = Nokogiri::HTML.parse(html)
183
-
184
- if RUBY_PLATFORM =~ /java/
185
- # NKF linebreak modes are not supported as of jruby 1.2
186
- # see http://jira.codehaus.org/browse/JRUBY-3602 for status
187
- assert_equal "<p>testparagraph\nfoobar</p>",
188
- nokogiri.at("p").to_html.gsub(/ /, '')
189
- else
190
- assert_equal "<p>testparagraph\r\nfoobar</p>",
191
- nokogiri.at("p").to_html.gsub(/ /, '')
192
- end
193
- end
194
- end
195
-
196
- def test_GH_1042
197
- file = File.join(ASSETS_DIR, 'GH_1042.html');
198
- html = Nokogiri::HTML(File.read(file))
199
- table = html.xpath("//table")[1]
200
- trs = table.xpath("tr").drop(1)
201
-
202
- # the jruby inplementation of drop uses dup() on the IRubyObject (which
203
- # is NOT the same dup() method on the ruby Object) which produces a
204
- # shallow clone. a shallow of valid XMLNode triggers several
205
- # NullPointerException on inspect() since loads of invariants
206
- # are not set. the fix for GH1042 ensures a proper working clone.
207
- assert_nothing_raised do
208
- trs.inspect
209
- end
210
- end
211
- end
212
- end
@@ -1,91 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "helper"
3
-
4
- module Nokogiri
5
- module HTML
6
- class TestNodeEncoding < Nokogiri::TestCase
7
- def setup
8
- super
9
- @html = Nokogiri::HTML(File.open(NICH_FILE, "rb"))
10
- end
11
-
12
- def test_get_attribute
13
- node = @html.css('a').first
14
- assert_equal 'UTF-8', node['href'].encoding.name
15
- end
16
-
17
- def test_text_encoding_is_utf_8
18
- assert_equal 'UTF-8', @html.text.encoding.name
19
- end
20
-
21
- def test_serialize_encoding_html
22
- assert_equal @html.encoding.downcase,
23
- @html.serialize.encoding.name.downcase
24
-
25
- @doc = Nokogiri::HTML(@html.serialize)
26
- assert_equal @html.serialize, @doc.serialize
27
- end
28
-
29
- def test_default_encoding
30
- doc = Nokogiri::HTML(nil)
31
- assert_nil doc.encoding
32
- assert_equal 'UTF-8', doc.serialize.encoding.name
33
- end
34
-
35
- def test_encode_special_chars
36
- foo = @html.css('a').first.encode_special_chars('foo')
37
- assert_equal 'UTF-8', foo.encoding.name
38
- end
39
-
40
- def test_content
41
- node = @html.css('a').first
42
- assert_equal 'UTF-8', node.content.encoding.name
43
- end
44
-
45
- def test_name
46
- node = @html.css('a').first
47
- assert_equal 'UTF-8', node.name.encoding.name
48
- end
49
-
50
- def test_path
51
- node = @html.css('a').first
52
- assert_equal 'UTF-8', node.path.encoding.name
53
- end
54
-
55
- def test_inner_html
56
- doc = Nokogiri::HTML File.open(SHIFT_JIS_HTML, 'rb')
57
-
58
- hello = "こんにちは"
59
-
60
- contents = doc.at('h2').inner_html
61
- assert_equal doc.encoding, contents.encoding.name
62
- assert_match hello.encode('Shift_JIS'), contents
63
-
64
- contents = doc.at('h2').inner_html(:encoding => 'UTF-8')
65
- assert_match hello, contents
66
-
67
- doc.encoding = 'UTF-8'
68
- contents = doc.at('h2').inner_html
69
- assert_match hello, contents
70
- end
71
-
72
- def test_encoding_GH_1113
73
- doc = Nokogiri::HTML::Document.new
74
- hex = '<p>&#x1f340;</p>'
75
- decimal = '<p>&#127808;</p>'
76
- encoded = '<p>🍀</p>'
77
-
78
- doc.encoding = 'UTF-8'
79
- [hex, decimal, encoded].each do |document|
80
- assert_equal encoded, doc.fragment(document).to_s
81
- end
82
-
83
- doc.encoding = 'US-ASCII'
84
- expected = Nokogiri.jruby? ? hex : decimal
85
- [hex, decimal].each do |document|
86
- assert_equal expected, doc.fragment(document).to_s
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,14 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestAdditionalNamespacesInBuilderDoc < Nokogiri::TestCase
6
- def test_builder_namespaced_root_node_ns
7
- b = Nokogiri::XML::Builder.new do |x|
8
- x[:foo].RDF(:'xmlns:foo' => 'http://foo.io')
9
- end
10
- assert_equal 'http://foo.io', b.doc.root.namespace.href
11
- end
12
- end
13
- end
14
- end
@@ -1,24 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestAliasedDefaultNamespaces < Nokogiri::TestCase
6
- def setup
7
- super
8
- end
9
-
10
- def test_alised_default_namespace_on_parse
11
- doc = Nokogiri::XML('<apple xmlns="ns:fruit" xmlns:fruit="ns:fruit" />')
12
- ns = doc.root.namespaces
13
- assert_equal "ns:fruit", ns["xmlns:fruit"], "Should have parsed aliased default namespace"
14
- end
15
-
16
- def test_add_aliased_default_namespace
17
- doc = Nokogiri::XML('<apple xmlns="ns:fruit" />')
18
- doc.root.add_namespace_definition("fruit", "ns:fruit")
19
- ns = doc.root.namespaces
20
- assert_equal "ns:fruit", ns["xmlns:fruit"],"Should have added aliased default namespace"
21
- end
22
- end
23
- end
24
- end
@@ -1,75 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestNamespacesInBuilderDoc < Nokogiri::TestCase
6
- def setup
7
- super
8
- b = Nokogiri::XML::Builder.new do |x|
9
- x.fruit(:xmlns => 'ns:fruit', :'xmlns:veg' => 'ns:veg', :'xmlns:xlink' => 'http://www.w3.org/1999/xlink') do
10
- x.pear { x.bosc }
11
- x.orange
12
- x[:veg].carrot do
13
- x.cheese(:xmlns => 'ns:dairy', :'xlink:href' => 'http://example.com/cheese/')
14
- end
15
- x[:meat].bacon(:'xmlns:meat' => 'ns:meat') do
16
- x.apple :count => 2
17
- x[:veg].tomato
18
- end
19
- end
20
- end
21
-
22
- @doc = b.doc
23
- end
24
-
25
- def check_namespace e
26
- e.namespace.nil? ? nil : e.namespace.href
27
- end
28
-
29
- def test_builder_default_ns
30
- assert_equal 'ns:fruit', check_namespace(@doc.root)
31
- end
32
- def test_builder_parent_default_ns
33
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0])
34
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1])
35
- end
36
- def test_builder_grandparent_default_ns
37
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
38
- end
39
- def test_builder_parent_nondefault_ns
40
- assert_equal 'ns:veg', check_namespace(@doc.root.elements[2])
41
- end
42
- def test_builder_single_decl_ns_1
43
- assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
44
- end
45
- def test_builder_nondefault_attr_ns
46
- assert_equal 'http://www.w3.org/1999/xlink',
47
- check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
48
- end
49
- def test_builder_single_decl_ns_2
50
- assert_equal 'ns:meat', check_namespace(@doc.root.elements[3])
51
- end
52
- def test_builder_buried_default_ns
53
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0])
54
- end
55
- def test_builder_buried_decl_ns
56
- assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1])
57
- end
58
- def test_builder_namespace_count
59
- n = @doc.root.clone
60
- n.children.each(&:remove)
61
- ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
62
- assert_equal 3, ns_attrs.length
63
- end
64
-
65
- def test_builder_namespaced_attribute_on_unparented_node
66
- doc = Nokogiri::XML::Builder.new do |x|
67
- x.root('xmlns:foo' => 'http://foo.io') {
68
- x.obj('foo:attr' => 'baz')
69
- }
70
- end.doc
71
- assert_equal 'http://foo.io', doc.root.children.first.attribute_nodes.first.namespace.href
72
- end
73
- end
74
- end
75
- end
@@ -1,31 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestNamespacesInClonedDoc < Nokogiri::TestCase
6
- def setup
7
- super
8
- b = Nokogiri::XML::Builder.new do |xml|
9
- xml.mods("xmlns"=>"http://www.loc.gov/mods/v3") {
10
- xml.name(:type=>"personal") {
11
- xml.namePart()
12
- }
13
- }
14
- end
15
-
16
- @doc = b.doc
17
- @clone = Nokogiri::XML(@doc.to_s)
18
- end
19
-
20
- def check_namespace e
21
- e.namespace.nil? ? nil : e.namespace.href
22
- end
23
-
24
- def test_namespace_ns
25
- xpath = '//oxns:name[@type="personal"]'
26
- namespaces = {'oxns' => "http://www.loc.gov/mods/v3"}
27
- assert_equal @doc.xpath(xpath, namespaces).length, @clone.xpath(xpath, namespaces).length
28
- end
29
- end
30
- end
31
- end
@@ -1,75 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestNamespacesInCreatedDoc < Nokogiri::TestCase
6
- def setup
7
- super
8
- @doc = Nokogiri::XML('<fruit xmlns="ns:fruit" xmlns:veg="ns:veg" xmlns:xlink="http://www.w3.org/1999/xlink"/>')
9
- pear = @doc.create_element('pear')
10
- bosc = @doc.create_element('bosc')
11
- pear.add_child(bosc)
12
- @doc.root << pear
13
- @doc.root.add_child('<orange/>')
14
- carrot = @doc.create_element('veg:carrot')
15
- @doc.root << carrot
16
- cheese = @doc.create_element('cheese', :xmlns => 'ns:dairy', :'xlink:href' => 'http://example.com/cheese/')
17
- carrot << cheese
18
- bacon = @doc.create_element('meat:bacon', :'xmlns:meat' => 'ns:meat')
19
- apple = @doc.create_element('apple')
20
- apple['count'] = 2
21
- bacon << apple
22
- tomato = @doc.create_element('veg:tomato')
23
- bacon << tomato
24
- @doc.root << bacon
25
- end
26
-
27
- def check_namespace e
28
- e.namespace.nil? ? nil : e.namespace.href
29
- end
30
-
31
- def test_created_default_ns
32
- assert_equal 'ns:fruit', check_namespace(@doc.root)
33
- end
34
- def test_created_parent_default_ns
35
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0])
36
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1])
37
- end
38
- def test_created_grandparent_default_ns
39
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
40
- end
41
- def test_created_parent_nondefault_ns
42
- assert_equal 'ns:veg', check_namespace(@doc.root.elements[2])
43
- end
44
- def test_created_single_decl_ns_1
45
- assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
46
- end
47
- def test_created_nondefault_attr_ns
48
- assert_equal 'http://www.w3.org/1999/xlink',
49
- check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
50
- end
51
- def test_created_single_decl_ns_2
52
- assert_equal 'ns:meat', check_namespace(@doc.root.elements[3])
53
- end
54
- def test_created_buried_default_ns
55
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0])
56
- end
57
- def test_created_buried_decl_ns
58
- assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1])
59
- end
60
- def test_created_namespace_count
61
- n = @doc.root.clone
62
- n.children.each(&:remove)
63
- ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
64
- assert_equal 3, ns_attrs.length
65
- end
66
-
67
- def test_created_namespaced_attribute_on_unparented_node
68
- doc = Nokogiri::XML('<root xmlns:foo="http://foo.io"/>')
69
- node = @doc.create_element('obj', 'foo:attr' => 'baz')
70
- doc.root.add_child(node)
71
- assert_equal 'http://foo.io', doc.root.children.first.attribute_nodes.first.namespace.href
72
- end
73
- end
74
- end
75
- end
@@ -1,80 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestNamespacesInParsedDoc < Nokogiri::TestCase
6
- def setup
7
- super
8
- @doc = Nokogiri::XML <<-eoxml
9
- <fruit xmlns="ns:fruit" xmlns:veg="ns:veg" xmlns:xlink="http://www.w3.org/1999/xlink">
10
- <pear>
11
- <bosc/>
12
- </pear>
13
- <orange/>
14
- <veg:carrot>
15
- <cheese xmlns="ns:dairy" xlink:href="http://example.com/cheese/"/>
16
- </veg:carrot>
17
- <meat:bacon xmlns:meat="ns:meat">
18
- <apple count="2"/>
19
- <veg:tomato/>
20
- </meat:bacon>
21
- </fruit>
22
- eoxml
23
- end
24
-
25
- def check_namespace e
26
- e.namespace.nil? ? nil : e.namespace.href
27
- end
28
-
29
- def test_parsed_default_ns
30
- assert_equal 'ns:fruit', check_namespace(@doc.root)
31
- end
32
- def test_parsed_parent_default_ns
33
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0])
34
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1])
35
- end
36
- def test_parsed_grandparent_default_ns
37
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
38
- end
39
- def test_parsed_parent_nondefault_ns
40
- assert_equal 'ns:veg', check_namespace(@doc.root.elements[2])
41
- end
42
- def test_parsed_single_decl_ns_1
43
- assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
44
- end
45
- def test_parsed_nondefault_attr_ns
46
- assert_equal 'http://www.w3.org/1999/xlink',
47
- check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
48
- end
49
- def test_parsed_single_decl_ns_2
50
- assert_equal 'ns:meat', check_namespace(@doc.root.elements[3])
51
- end
52
- def test_parsed_buried_default_ns
53
- assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0])
54
- end
55
- def test_parsed_buried_decl_ns
56
- assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1])
57
- end
58
- def test_parsed_namespace_count
59
- n = @doc.root.clone
60
- n.children.each(&:remove)
61
- ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
62
- assert_equal 3, ns_attrs.length
63
- end
64
-
65
- def test_namespaces_under_memory_pressure_issue1155
66
- skip("JRuby doesn't do GC.") if Nokogiri.jruby?
67
-
68
- # this test is here to emit warnings when run under valgrind
69
- # see https://github.com/sparklemotion/nokogiri/issues/1155 for background
70
- filename = File.join ASSETS_DIR, 'namespace_pressure_test.xml'
71
- doc = Nokogiri::XML File.open(filename)
72
-
73
- # bizarrely, can't repro without the call to #to_a
74
- doc.xpath('//namespace::*').to_a.each do |ns|
75
- ns.inspect
76
- end
77
- end
78
- end
79
- end
80
- end
@@ -1,31 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestNamespacePreservation < Nokogiri::TestCase
6
-
7
- def setup
8
- @xml = Nokogiri.XML <<-eoxml
9
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
10
- <xs:element xmlns:quer="http://api.geotrust.com/webtrust/query"/>
11
- <xs:element xmlns:quer="http://api.geotrust.com/webtrust/query"/>
12
- </xs:schema>
13
- eoxml
14
- end
15
-
16
- def test_xpath
17
- first = @xml.at_xpath('//xs:element', 'xs' => 'http://www.w3.org/2001/XMLSchema')
18
- last = @xml.at_xpath('//xs:element[last()]', 'xs' => 'http://www.w3.org/2001/XMLSchema')
19
- assert_equal 'http://api.geotrust.com/webtrust/query' , first.namespaces['xmlns:quer'], "Should contain quer namespace"
20
- assert_equal 'http://api.geotrust.com/webtrust/query' , last.namespaces['xmlns:quer'], "Should contain quer namespace"
21
- end
22
-
23
- def test_traversing
24
- first = @xml.root.element_children.first
25
- last = @xml.root.element_children.last
26
- assert_equal 'http://api.geotrust.com/webtrust/query' , first.namespaces['xmlns:quer'], "Should contain quer namespace"
27
- assert_equal 'http://api.geotrust.com/webtrust/query' , last.namespaces['xmlns:quer'], "Should contain quer namespace"
28
- end
29
- end
30
- end
31
- end