nokogiri 1.5.10 → 1.13.0

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

Potentially problematic release.


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

Files changed (334) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +5 -0
  3. data/LICENSE-DEPENDENCIES.md +1903 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +280 -0
  6. data/bin/nokogiri +84 -31
  7. data/dependencies.yml +73 -0
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +956 -100
  10. data/ext/nokogiri/gumbo.c +584 -0
  11. data/ext/nokogiri/html4_document.c +166 -0
  12. data/ext/nokogiri/html4_element_description.c +294 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser_context.c +120 -0
  15. data/ext/nokogiri/html4_sax_push_parser.c +95 -0
  16. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  17. data/ext/nokogiri/nokogiri.c +232 -87
  18. data/ext/nokogiri/nokogiri.h +188 -129
  19. data/ext/nokogiri/test_global_handlers.c +40 -0
  20. data/ext/nokogiri/xml_attr.c +49 -40
  21. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  22. data/ext/nokogiri/xml_cdata.c +24 -23
  23. data/ext/nokogiri/xml_comment.c +29 -21
  24. data/ext/nokogiri/xml_document.c +327 -223
  25. data/ext/nokogiri/xml_document_fragment.c +12 -16
  26. data/ext/nokogiri/xml_dtd.c +56 -50
  27. data/ext/nokogiri/xml_element_content.c +31 -26
  28. data/ext/nokogiri/xml_element_decl.c +22 -22
  29. data/ext/nokogiri/xml_encoding_handler.c +45 -20
  30. data/ext/nokogiri/xml_entity_decl.c +32 -30
  31. data/ext/nokogiri/xml_entity_reference.c +16 -18
  32. data/ext/nokogiri/xml_namespace.c +74 -32
  33. data/ext/nokogiri/xml_node.c +1290 -680
  34. data/ext/nokogiri/xml_node_set.c +239 -208
  35. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  36. data/ext/nokogiri/xml_reader.c +227 -189
  37. data/ext/nokogiri/xml_relax_ng.c +52 -28
  38. data/ext/nokogiri/xml_sax_parser.c +123 -125
  39. data/ext/nokogiri/xml_sax_parser_context.c +138 -79
  40. data/ext/nokogiri/xml_sax_push_parser.c +88 -35
  41. data/ext/nokogiri/xml_schema.c +112 -33
  42. data/ext/nokogiri/xml_syntax_error.c +50 -23
  43. data/ext/nokogiri/xml_text.c +14 -18
  44. data/ext/nokogiri/xml_xpath_context.c +227 -140
  45. data/ext/nokogiri/xslt_stylesheet.c +162 -168
  46. data/gumbo-parser/CHANGES.md +63 -0
  47. data/gumbo-parser/Makefile +101 -0
  48. data/gumbo-parser/THANKS +27 -0
  49. data/gumbo-parser/src/Makefile +34 -0
  50. data/gumbo-parser/src/README.md +41 -0
  51. data/gumbo-parser/src/ascii.c +75 -0
  52. data/gumbo-parser/src/ascii.h +115 -0
  53. data/gumbo-parser/src/attribute.c +42 -0
  54. data/gumbo-parser/src/attribute.h +17 -0
  55. data/gumbo-parser/src/char_ref.c +22225 -0
  56. data/gumbo-parser/src/char_ref.h +29 -0
  57. data/gumbo-parser/src/char_ref.rl +2154 -0
  58. data/gumbo-parser/src/error.c +626 -0
  59. data/gumbo-parser/src/error.h +148 -0
  60. data/gumbo-parser/src/foreign_attrs.c +104 -0
  61. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  62. data/gumbo-parser/src/gumbo.h +943 -0
  63. data/gumbo-parser/src/insertion_mode.h +33 -0
  64. data/gumbo-parser/src/macros.h +91 -0
  65. data/gumbo-parser/src/parser.c +4875 -0
  66. data/gumbo-parser/src/parser.h +41 -0
  67. data/gumbo-parser/src/replacement.h +33 -0
  68. data/gumbo-parser/src/string_buffer.c +103 -0
  69. data/gumbo-parser/src/string_buffer.h +68 -0
  70. data/gumbo-parser/src/string_piece.c +48 -0
  71. data/gumbo-parser/src/svg_attrs.c +174 -0
  72. data/gumbo-parser/src/svg_attrs.gperf +77 -0
  73. data/gumbo-parser/src/svg_tags.c +137 -0
  74. data/gumbo-parser/src/svg_tags.gperf +55 -0
  75. data/gumbo-parser/src/tag.c +222 -0
  76. data/gumbo-parser/src/tag_lookup.c +382 -0
  77. data/gumbo-parser/src/tag_lookup.gperf +169 -0
  78. data/gumbo-parser/src/tag_lookup.h +13 -0
  79. data/gumbo-parser/src/token_buffer.c +79 -0
  80. data/gumbo-parser/src/token_buffer.h +71 -0
  81. data/gumbo-parser/src/token_type.h +17 -0
  82. data/gumbo-parser/src/tokenizer.c +3463 -0
  83. data/gumbo-parser/src/tokenizer.h +112 -0
  84. data/gumbo-parser/src/tokenizer_states.h +339 -0
  85. data/gumbo-parser/src/utf8.c +245 -0
  86. data/gumbo-parser/src/utf8.h +164 -0
  87. data/gumbo-parser/src/util.c +68 -0
  88. data/gumbo-parser/src/util.h +30 -0
  89. data/gumbo-parser/src/vector.c +111 -0
  90. data/gumbo-parser/src/vector.h +45 -0
  91. data/lib/nokogiri/class_resolver.rb +67 -0
  92. data/lib/nokogiri/css/node.rb +10 -58
  93. data/lib/nokogiri/css/parser.rb +327 -288
  94. data/lib/nokogiri/css/parser.y +67 -45
  95. data/lib/nokogiri/css/parser_extras.rb +52 -49
  96. data/lib/nokogiri/css/syntax_error.rb +3 -1
  97. data/lib/nokogiri/css/tokenizer.rb +107 -104
  98. data/lib/nokogiri/css/tokenizer.rex +7 -6
  99. data/lib/nokogiri/css/xpath_visitor.rb +263 -75
  100. data/lib/nokogiri/css.rb +50 -17
  101. data/lib/nokogiri/decorators/slop.rb +17 -8
  102. data/lib/nokogiri/extension.rb +31 -0
  103. data/lib/nokogiri/gumbo.rb +15 -0
  104. data/lib/nokogiri/html.rb +38 -27
  105. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  106. data/lib/nokogiri/html4/document.rb +331 -0
  107. data/lib/nokogiri/html4/document_fragment.rb +54 -0
  108. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  109. data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
  110. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  111. data/lib/nokogiri/{html → html4}/sax/parser.rb +24 -15
  112. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  113. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  114. data/lib/nokogiri/html4.rb +46 -0
  115. data/lib/nokogiri/html5/document.rb +88 -0
  116. data/lib/nokogiri/html5/document_fragment.rb +83 -0
  117. data/lib/nokogiri/html5/node.rb +96 -0
  118. data/lib/nokogiri/html5.rb +477 -0
  119. data/lib/nokogiri/jruby/dependencies.rb +21 -0
  120. data/lib/nokogiri/syntax_error.rb +2 -0
  121. data/lib/nokogiri/version/constant.rb +6 -0
  122. data/lib/nokogiri/version/info.rb +221 -0
  123. data/lib/nokogiri/version.rb +3 -90
  124. data/lib/nokogiri/xml/attr.rb +6 -3
  125. data/lib/nokogiri/xml/attribute_decl.rb +3 -1
  126. data/lib/nokogiri/xml/builder.rb +96 -54
  127. data/lib/nokogiri/xml/cdata.rb +3 -1
  128. data/lib/nokogiri/xml/character_data.rb +2 -0
  129. data/lib/nokogiri/xml/document.rb +234 -95
  130. data/lib/nokogiri/xml/document_fragment.rb +86 -36
  131. data/lib/nokogiri/xml/dtd.rb +16 -4
  132. data/lib/nokogiri/xml/element_content.rb +2 -0
  133. data/lib/nokogiri/xml/element_decl.rb +3 -1
  134. data/lib/nokogiri/xml/entity_decl.rb +4 -2
  135. data/lib/nokogiri/xml/entity_reference.rb +20 -0
  136. data/lib/nokogiri/xml/namespace.rb +3 -0
  137. data/lib/nokogiri/xml/node/save_options.rb +8 -4
  138. data/lib/nokogiri/xml/node.rb +947 -502
  139. data/lib/nokogiri/xml/node_set.rb +168 -159
  140. data/lib/nokogiri/xml/notation.rb +13 -0
  141. data/lib/nokogiri/xml/parse_options.rb +40 -5
  142. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  143. data/lib/nokogiri/xml/pp/node.rb +25 -26
  144. data/lib/nokogiri/xml/pp.rb +4 -2
  145. data/lib/nokogiri/xml/processing_instruction.rb +3 -1
  146. data/lib/nokogiri/xml/reader.rb +23 -28
  147. data/lib/nokogiri/xml/relax_ng.rb +8 -2
  148. data/lib/nokogiri/xml/sax/document.rb +45 -49
  149. data/lib/nokogiri/xml/sax/parser.rb +43 -41
  150. data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
  151. data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
  152. data/lib/nokogiri/xml/sax.rb +6 -4
  153. data/lib/nokogiri/xml/schema.rb +19 -9
  154. data/lib/nokogiri/xml/searchable.rb +259 -0
  155. data/lib/nokogiri/xml/syntax_error.rb +25 -1
  156. data/lib/nokogiri/xml/text.rb +2 -0
  157. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  158. data/lib/nokogiri/xml/xpath.rb +15 -4
  159. data/lib/nokogiri/xml/xpath_context.rb +3 -3
  160. data/lib/nokogiri/xml.rb +38 -36
  161. data/lib/nokogiri/xslt/stylesheet.rb +3 -1
  162. data/lib/nokogiri/xslt.rb +18 -16
  163. data/lib/nokogiri.rb +69 -69
  164. data/lib/xsd/xmlparser/nokogiri.rb +26 -24
  165. data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
  166. data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  167. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  168. data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
  169. data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
  170. data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
  171. data/patches/libxml2/0007-Fix-XPath-recursion-limit.patch +31 -0
  172. data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
  173. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  174. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
  175. data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
  176. data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
  177. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  178. metadata +382 -460
  179. data/.autotest +0 -26
  180. data/.gemtest +0 -0
  181. data/CHANGELOG.ja.rdoc +0 -785
  182. data/CHANGELOG.rdoc +0 -783
  183. data/C_CODING_STYLE.rdoc +0 -33
  184. data/Manifest.txt +0 -303
  185. data/README.ja.rdoc +0 -106
  186. data/README.rdoc +0 -175
  187. data/ROADMAP.md +0 -90
  188. data/Rakefile +0 -228
  189. data/STANDARD_RESPONSES.md +0 -47
  190. data/Y_U_NO_GEMSPEC.md +0 -155
  191. data/build_all +0 -105
  192. data/ext/nokogiri/html_document.c +0 -170
  193. data/ext/nokogiri/html_document.h +0 -10
  194. data/ext/nokogiri/html_element_description.c +0 -279
  195. data/ext/nokogiri/html_element_description.h +0 -10
  196. data/ext/nokogiri/html_entity_lookup.c +0 -32
  197. data/ext/nokogiri/html_entity_lookup.h +0 -8
  198. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  199. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  200. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  201. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  202. data/ext/nokogiri/xml_attr.h +0 -9
  203. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  204. data/ext/nokogiri/xml_cdata.h +0 -9
  205. data/ext/nokogiri/xml_comment.h +0 -9
  206. data/ext/nokogiri/xml_document.h +0 -23
  207. data/ext/nokogiri/xml_document_fragment.h +0 -10
  208. data/ext/nokogiri/xml_dtd.h +0 -10
  209. data/ext/nokogiri/xml_element_content.h +0 -10
  210. data/ext/nokogiri/xml_element_decl.h +0 -9
  211. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  212. data/ext/nokogiri/xml_entity_decl.h +0 -10
  213. data/ext/nokogiri/xml_entity_reference.h +0 -9
  214. data/ext/nokogiri/xml_io.c +0 -56
  215. data/ext/nokogiri/xml_io.h +0 -11
  216. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  217. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  218. data/ext/nokogiri/xml_namespace.h +0 -13
  219. data/ext/nokogiri/xml_node.h +0 -13
  220. data/ext/nokogiri/xml_node_set.h +0 -14
  221. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  222. data/ext/nokogiri/xml_reader.h +0 -10
  223. data/ext/nokogiri/xml_relax_ng.h +0 -9
  224. data/ext/nokogiri/xml_sax_parser.h +0 -39
  225. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  226. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  227. data/ext/nokogiri/xml_schema.h +0 -9
  228. data/ext/nokogiri/xml_syntax_error.h +0 -13
  229. data/ext/nokogiri/xml_text.h +0 -9
  230. data/ext/nokogiri/xml_xpath_context.h +0 -10
  231. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  232. data/lib/nokogiri/html/document.rb +0 -254
  233. data/lib/nokogiri/html/document_fragment.rb +0 -41
  234. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  235. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  236. data/lib/nokogiri/html/sax/push_parser.rb +0 -16
  237. data/tasks/cross_compile.rb +0 -150
  238. data/tasks/nokogiri.org.rb +0 -24
  239. data/tasks/test.rb +0 -95
  240. data/test/css/test_nthiness.rb +0 -159
  241. data/test/css/test_parser.rb +0 -341
  242. data/test/css/test_tokenizer.rb +0 -198
  243. data/test/css/test_xpath_visitor.rb +0 -91
  244. data/test/decorators/test_slop.rb +0 -16
  245. data/test/files/2ch.html +0 -108
  246. data/test/files/address_book.rlx +0 -12
  247. data/test/files/address_book.xml +0 -10
  248. data/test/files/bar/bar.xsd +0 -4
  249. data/test/files/dont_hurt_em_why.xml +0 -422
  250. data/test/files/encoding.html +0 -82
  251. data/test/files/encoding.xhtml +0 -84
  252. data/test/files/exslt.xml +0 -8
  253. data/test/files/exslt.xslt +0 -35
  254. data/test/files/foo/foo.xsd +0 -4
  255. data/test/files/metacharset.html +0 -10
  256. data/test/files/noencoding.html +0 -47
  257. data/test/files/po.xml +0 -32
  258. data/test/files/po.xsd +0 -66
  259. data/test/files/shift_jis.html +0 -10
  260. data/test/files/shift_jis.xml +0 -5
  261. data/test/files/snuggles.xml +0 -3
  262. data/test/files/staff.dtd +0 -10
  263. data/test/files/staff.xml +0 -59
  264. data/test/files/staff.xslt +0 -32
  265. data/test/files/test_document_url/bar.xml +0 -2
  266. data/test/files/test_document_url/document.dtd +0 -4
  267. data/test/files/test_document_url/document.xml +0 -6
  268. data/test/files/tlm.html +0 -850
  269. data/test/files/to_be_xincluded.xml +0 -2
  270. data/test/files/valid_bar.xml +0 -2
  271. data/test/files/xinclude.xml +0 -4
  272. data/test/helper.rb +0 -154
  273. data/test/html/sax/test_parser.rb +0 -141
  274. data/test/html/sax/test_parser_context.rb +0 -46
  275. data/test/html/test_builder.rb +0 -164
  276. data/test/html/test_document.rb +0 -552
  277. data/test/html/test_document_encoding.rb +0 -138
  278. data/test/html/test_document_fragment.rb +0 -261
  279. data/test/html/test_element_description.rb +0 -105
  280. data/test/html/test_named_characters.rb +0 -14
  281. data/test/html/test_node.rb +0 -196
  282. data/test/html/test_node_encoding.rb +0 -27
  283. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  284. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  285. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  286. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
  287. data/test/test_convert_xpath.rb +0 -135
  288. data/test/test_css_cache.rb +0 -45
  289. data/test/test_encoding_handler.rb +0 -46
  290. data/test/test_memory_leak.rb +0 -156
  291. data/test/test_nokogiri.rb +0 -132
  292. data/test/test_reader.rb +0 -555
  293. data/test/test_soap4r_sax.rb +0 -52
  294. data/test/test_xslt_transforms.rb +0 -254
  295. data/test/xml/node/test_save_options.rb +0 -28
  296. data/test/xml/node/test_subclass.rb +0 -44
  297. data/test/xml/sax/test_parser.rb +0 -366
  298. data/test/xml/sax/test_parser_context.rb +0 -106
  299. data/test/xml/sax/test_push_parser.rb +0 -157
  300. data/test/xml/test_attr.rb +0 -64
  301. data/test/xml/test_attribute_decl.rb +0 -86
  302. data/test/xml/test_builder.rb +0 -306
  303. data/test/xml/test_c14n.rb +0 -151
  304. data/test/xml/test_cdata.rb +0 -48
  305. data/test/xml/test_comment.rb +0 -29
  306. data/test/xml/test_document.rb +0 -828
  307. data/test/xml/test_document_encoding.rb +0 -28
  308. data/test/xml/test_document_fragment.rb +0 -223
  309. data/test/xml/test_dtd.rb +0 -103
  310. data/test/xml/test_dtd_encoding.rb +0 -33
  311. data/test/xml/test_element_content.rb +0 -56
  312. data/test/xml/test_element_decl.rb +0 -73
  313. data/test/xml/test_entity_decl.rb +0 -122
  314. data/test/xml/test_entity_reference.rb +0 -245
  315. data/test/xml/test_namespace.rb +0 -95
  316. data/test/xml/test_node.rb +0 -1137
  317. data/test/xml/test_node_attributes.rb +0 -96
  318. data/test/xml/test_node_encoding.rb +0 -107
  319. data/test/xml/test_node_inheritance.rb +0 -32
  320. data/test/xml/test_node_reparenting.rb +0 -374
  321. data/test/xml/test_node_set.rb +0 -755
  322. data/test/xml/test_parse_options.rb +0 -64
  323. data/test/xml/test_processing_instruction.rb +0 -30
  324. data/test/xml/test_reader_encoding.rb +0 -142
  325. data/test/xml/test_relax_ng.rb +0 -60
  326. data/test/xml/test_schema.rb +0 -103
  327. data/test/xml/test_syntax_error.rb +0 -12
  328. data/test/xml/test_text.rb +0 -45
  329. data/test/xml/test_unparented_node.rb +0 -422
  330. data/test/xml/test_xinclude.rb +0 -83
  331. data/test/xml/test_xpath.rb +0 -295
  332. data/test/xslt/test_custom_functions.rb +0 -133
  333. data/test/xslt/test_exception_handling.rb +0 -37
  334. data/test_all +0 -81
@@ -1,261 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "helper"
3
-
4
- module Nokogiri
5
- module HTML
6
- class TestDocumentFragment < Nokogiri::TestCase
7
- def setup
8
- super
9
- @html = Nokogiri::HTML.parse(File.read(HTML_FILE), HTML_FILE)
10
- end
11
-
12
- if RUBY_VERSION >= '1.9'
13
- def test_inspect_encoding
14
- fragment = "<div>こんにちは!</div>".encode('EUC-JP')
15
- f = Nokogiri::HTML::DocumentFragment.parse fragment
16
- assert_equal "こんにちは!", f.content
17
- end
18
-
19
- def test_html_parse_encoding
20
- fragment = "<div>こんにちは!</div>".encode 'EUC-JP'
21
- f = Nokogiri::HTML.fragment fragment
22
- assert_equal 'EUC-JP', f.document.encoding
23
- assert_equal "こんにちは!", f.content
24
- end
25
- end
26
-
27
- def test_colons_are_not_removed
28
- doc = Nokogiri::HTML::DocumentFragment.parse("<span>3:30pm</span>")
29
- assert_match(/3:30/, doc.to_s)
30
- end
31
-
32
- def test_parse_encoding
33
- fragment = "<div>hello world</div>"
34
- f = Nokogiri::HTML::DocumentFragment.parse fragment, 'ISO-8859-1'
35
- assert_equal 'ISO-8859-1', f.document.encoding
36
- assert_equal "hello world", f.content
37
- end
38
-
39
- def test_html_parse_with_encoding
40
- fragment = "<div>hello world</div>"
41
- f = Nokogiri::HTML.fragment fragment, 'ISO-8859-1'
42
- assert_equal 'ISO-8859-1', f.document.encoding
43
- assert_equal "hello world", f.content
44
- end
45
-
46
- def test_parse_in_context
47
- assert_equal('<br>', @html.root.parse('<br />').to_s)
48
- end
49
-
50
- def test_inner_html=
51
- fragment = Nokogiri::HTML.fragment '<hr />'
52
-
53
- fragment.inner_html = "hello"
54
- assert_equal 'hello', fragment.inner_html
55
- end
56
-
57
- def test_ancestors_search
58
- html = %q{
59
- <div>
60
- <ul>
61
- <li>foo</li>
62
- </ul>
63
- </div>
64
- }
65
- fragment = Nokogiri::HTML.fragment html
66
- li = fragment.at('li')
67
- assert li.matches?('li')
68
- end
69
-
70
- def test_fun_encoding
71
- string = %Q(<body>こんにちは</body>)
72
- html = Nokogiri::HTML::DocumentFragment.parse(
73
- string
74
- ).to_html(:encoding => 'UTF-8')
75
- assert_equal string, html
76
- end
77
-
78
- def test_new
79
- assert Nokogiri::HTML::DocumentFragment.new(@html)
80
- end
81
-
82
- def test_body_fragment_should_contain_body
83
- fragment = Nokogiri::HTML::DocumentFragment.parse(" <body><div>foo</div></body>")
84
- assert_match(/^<body>/, fragment.to_s)
85
- end
86
-
87
- def test_nonbody_fragment_should_not_contain_body
88
- fragment = Nokogiri::HTML::DocumentFragment.parse("<div>foo</div>")
89
- assert_match(/^<div>/, fragment.to_s)
90
- end
91
-
92
- def test_fragment_should_have_document
93
- fragment = Nokogiri::HTML::DocumentFragment.new(@html)
94
- assert_equal @html, fragment.document
95
- end
96
-
97
- def test_empty_fragment_should_be_searchable_by_css
98
- fragment = Nokogiri::HTML.fragment("")
99
- assert_equal 0, fragment.css("a").size
100
- end
101
-
102
- def test_empty_fragment_should_be_searchable
103
- fragment = Nokogiri::HTML.fragment("")
104
- assert_equal 0, fragment.search("//a").size
105
- end
106
-
107
- def test_name
108
- fragment = Nokogiri::HTML::DocumentFragment.new(@html)
109
- assert_equal '#document-fragment', fragment.name
110
- end
111
-
112
- def test_static_method
113
- fragment = Nokogiri::HTML::DocumentFragment.parse("<div>a</div>")
114
- assert_instance_of Nokogiri::HTML::DocumentFragment, fragment
115
- end
116
-
117
- def test_many_fragments
118
- 100.times { Nokogiri::HTML::DocumentFragment.new(@html) }
119
- end
120
-
121
- def test_subclass
122
- klass = Class.new(Nokogiri::HTML::DocumentFragment)
123
- fragment = klass.new(@html, "<div>a</div>")
124
- assert_instance_of klass, fragment
125
- end
126
-
127
- def test_subclass_parse
128
- klass = Class.new(Nokogiri::HTML::DocumentFragment)
129
- doc = klass.parse("<div>a</div>")
130
- assert_instance_of klass, doc
131
- end
132
-
133
- def test_html_fragment
134
- fragment = Nokogiri::HTML.fragment("<div>a</div>")
135
- assert_equal "<div>a</div>", fragment.to_s
136
- end
137
-
138
- def test_html_fragment_has_outer_text
139
- doc = "a<div>b</div>c"
140
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
141
- if Nokogiri.uses_libxml? &&
142
- Nokogiri::VERSION_INFO['libxml']['loaded'] <= "2.6.16"
143
- assert_equal "a<div>b</div><p>c</p>", fragment.to_s
144
- else
145
- assert_equal "a<div>b</div>c", fragment.to_s
146
- end
147
- end
148
-
149
- def test_html_fragment_case_insensitivity
150
- doc = "<Div>b</Div>"
151
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
152
- assert_equal "<div>b</div>", fragment.to_s
153
- end
154
-
155
- def test_html_fragment_with_leading_whitespace
156
- doc = " <div>b</div> "
157
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
158
- assert_match %r% <div>b</div> *%, fragment.to_s
159
- end
160
-
161
- def test_html_fragment_with_leading_whitespace_and_newline
162
- doc = " \n<div>b</div> "
163
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
164
- assert_match %r% \n<div>b</div> *%, fragment.to_s
165
- end
166
-
167
- def test_html_fragment_with_leading_text_and_newline
168
- fragment = HTML::Document.new.fragment("First line\nSecond line<br>Broken line")
169
- assert_equal fragment.to_s, "First line\nSecond line<br>Broken line"
170
- end
171
-
172
- def test_html_fragment_with_leading_whitespace_and_text_and_newline
173
- fragment = HTML::Document.new.fragment(" First line\nSecond line<br>Broken line")
174
- assert_equal " First line\nSecond line<br>Broken line", fragment.to_s
175
- end
176
-
177
- def test_html_fragment_with_leading_entity
178
- failed = "&quot;test<br/>test&quot;"
179
- fragment = Nokogiri::HTML::DocumentFragment.parse(failed)
180
- assert_equal '"test<br>test"', fragment.to_html
181
- end
182
-
183
- def test_to_s
184
- doc = "<span>foo<br></span><span>bar</span>"
185
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
186
- assert_equal "<span>foo<br></span><span>bar</span>", fragment.to_s
187
- end
188
-
189
- def test_to_html
190
- doc = "<span>foo<br></span><span>bar</span>"
191
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
192
- assert_equal "<span>foo<br></span><span>bar</span>", fragment.to_html
193
- end
194
-
195
- def test_to_xhtml
196
- doc = "<span>foo<br></span><span>bar</span>"
197
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
198
- if Nokogiri.jruby? || Nokogiri::VERSION_INFO['libxml']['loaded'] >= "2.7.0"
199
- assert_equal "<span>foo<br /></span><span>bar</span>", fragment.to_xhtml
200
- else
201
- # FIXME: why are we doing this ? this violates the spec,
202
- # see http://www.w3.org/TR/xhtml1/#C_2
203
- assert_equal "<span>foo<br></span><span>bar</span>", fragment.to_xhtml
204
- end
205
- end
206
-
207
- def test_to_xml
208
- doc = "<span>foo<br></span><span>bar</span>"
209
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
210
- assert_equal "<span>foo<br/></span><span>bar</span>", fragment.to_xml
211
- end
212
-
213
- def test_fragment_script_tag_with_cdata
214
- doc = HTML::Document.new
215
- fragment = doc.fragment("<script>var foo = 'bar';</script>")
216
- assert_equal("<script>var foo = 'bar';</script>",
217
- fragment.to_s)
218
- end
219
-
220
- def test_fragment_with_comment
221
- doc = HTML::Document.new
222
- fragment = doc.fragment("<p>hello<!-- your ad here --></p>")
223
- assert_equal("<p>hello<!-- your ad here --></p>",
224
- fragment.to_s)
225
- end
226
-
227
- def test_malformed_fragment_is_corrected
228
- fragment = HTML::DocumentFragment.parse("<div </div>")
229
- assert_equal "<div></div>", fragment.to_s
230
- end
231
-
232
- def test_unclosed_script_tag
233
- # see GH#315
234
- fragment = HTML::DocumentFragment.parse("foo <script>bar")
235
- assert_equal "foo <script>bar</script>", fragment.to_html
236
- end
237
-
238
- def test_error_propagation_on_fragment_parse
239
- frag = Nokogiri::HTML::DocumentFragment.parse "<hello>oh, hello there.</hello>"
240
- assert frag.errors.any?{|err| err.to_s =~ /Tag hello invalid/}, "errors should be copied to the fragment"
241
- end
242
-
243
- def test_error_propagation_on_fragment_parse_in_node_context
244
- doc = Nokogiri::HTML::Document.parse "<html><body><div></div></body></html>"
245
- context_node = doc.at_css "div"
246
- frag = Nokogiri::HTML::DocumentFragment.new doc, "<hello>oh, hello there.</hello>", context_node
247
- assert frag.errors.any?{|err| err.to_s =~ /Tag hello invalid/}, "errors should be on the context node's document"
248
- end
249
-
250
- def test_error_propagation_on_fragment_parse_in_node_context_should_not_include_preexisting_errors
251
- doc = Nokogiri::HTML::Document.parse "<html><body><div></div><jimmy></jimmy></body></html>"
252
- assert doc.errors.any?{|err| err.to_s =~ /jimmy/}, "assert on setup"
253
-
254
- context_node = doc.at_css "div"
255
- frag = Nokogiri::HTML::DocumentFragment.new doc, "<hello>oh, hello there.</hello>", context_node
256
- assert frag.errors.any?{|err| err.to_s =~ /Tag hello invalid/}, "errors should be on the context node's document"
257
- assert frag.errors.none?{|err| err.to_s =~ /jimmy/}, "errors should not include pre-existing document errors"
258
- end
259
- end
260
- end
261
- end
@@ -1,105 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module HTML
5
- class TestElementDescription < Nokogiri::TestCase
6
- def test_fetch_nonexistent
7
- assert_nil ElementDescription['foo']
8
- end
9
-
10
- def test_fetch_element_description
11
- assert desc = ElementDescription['a']
12
- assert_instance_of ElementDescription, desc
13
- end
14
-
15
- def test_name
16
- assert_equal 'a', ElementDescription['a'].name
17
- end
18
-
19
- def test_implied_start_tag?
20
- assert !ElementDescription['a'].implied_start_tag?
21
- end
22
-
23
- def test_implied_end_tag?
24
- assert !ElementDescription['a'].implied_end_tag?
25
- assert ElementDescription['p'].implied_end_tag?
26
- end
27
-
28
- def test_save_end_tag?
29
- assert !ElementDescription['a'].save_end_tag?
30
- assert ElementDescription['br'].save_end_tag?
31
- end
32
-
33
- def test_empty?
34
- assert ElementDescription['br'].empty?
35
- assert !ElementDescription['a'].empty?
36
- end
37
-
38
- def test_deprecated?
39
- assert ElementDescription['applet'].deprecated?
40
- assert !ElementDescription['br'].deprecated?
41
- end
42
-
43
- def test_inline?
44
- assert ElementDescription['a'].inline?
45
- assert !ElementDescription['div'].inline?
46
- end
47
-
48
- def test_block?
49
- element = ElementDescription['a']
50
- assert_equal(!element.inline?, element.block?)
51
- end
52
-
53
- def test_description
54
- assert ElementDescription['a'].description
55
- end
56
-
57
- def test_subelements
58
- sub_elements = ElementDescription['body'].sub_elements
59
- if Nokogiri.uses_libxml? && Nokogiri::LIBXML_VERSION >= '2.7.7'
60
- assert_equal 65, sub_elements.length
61
- elsif Nokogiri.uses_libxml?
62
- assert_equal 61, sub_elements.length
63
- else
64
- assert sub_elements.length > 0
65
- end
66
- end
67
-
68
- def test_default_sub_element
69
- assert_equal 'div', ElementDescription['body'].default_sub_element
70
- end
71
-
72
- def test_null_default_sub_element
73
- doc = Nokogiri::HTML('foo')
74
- doc.root.description.default_sub_element
75
- end
76
-
77
- def test_optional_attributes
78
- attrs = ElementDescription['table'].optional_attributes
79
- assert attrs
80
- end
81
-
82
- def test_deprecated_attributes
83
- attrs = ElementDescription['table'].deprecated_attributes
84
- assert attrs
85
- assert_equal 2, attrs.length
86
- end
87
-
88
- def test_required_attributes
89
- attrs = ElementDescription['table'].required_attributes
90
- assert attrs
91
- assert_equal 0, attrs.length
92
- end
93
-
94
- def test_inspect
95
- desc = ElementDescription['input']
96
- assert_match desc.name, desc.inspect
97
- end
98
-
99
- def test_to_s
100
- desc = ElementDescription['input']
101
- assert_match desc.name, desc.to_s
102
- end
103
- end
104
- end
105
- end
@@ -1,14 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module HTML
5
- class TestNamedCharacters < Nokogiri::TestCase
6
- def test_named_character
7
- copy = NamedCharacters.get('copy')
8
- assert_equal 169, NamedCharacters['copy']
9
- assert_equal copy.value, NamedCharacters['copy']
10
- assert copy.description
11
- end
12
- end
13
- end
14
- end
@@ -1,196 +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
- end
196
- end
@@ -1,27 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "helper"
3
-
4
- module Nokogiri
5
- module HTML
6
- if RUBY_VERSION =~ /^1\.9/
7
- class TestNodeEncoding < Nokogiri::TestCase
8
- def test_inner_html
9
- doc = Nokogiri::HTML File.open(SHIFT_JIS_HTML, 'rb')
10
-
11
- hello = "こんにちは"
12
-
13
- contents = doc.at('h2').inner_html
14
- assert_equal doc.encoding, contents.encoding.name
15
- assert_match hello.encode('Shift_JIS'), contents
16
-
17
- contents = doc.at('h2').inner_html(:encoding => 'UTF-8')
18
- assert_match hello, contents
19
-
20
- doc.encoding = 'UTF-8'
21
- contents = doc.at('h2').inner_html
22
- assert_match hello, contents
23
- end
24
- end
25
- end
26
- end
27
- 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,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