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,341 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "helper"
4
-
5
- module Nokogiri
6
- module XML
7
- class TestBuilder < Nokogiri::TestCase
8
- def test_attribute_sensitivity
9
- xml = Nokogiri::XML::Builder.new { |x|
10
- x.tag "hello", "abcDef" => "world"
11
- }.to_xml
12
- doc = Nokogiri.XML xml
13
- assert_equal 'world', doc.root['abcDef']
14
- end
15
-
16
- def test_builder_multiple_nodes
17
- Nokogiri::XML::Builder.new do |xml|
18
- 0.upto(10) do
19
- xml.text "test"
20
- end
21
- end
22
- end
23
-
24
-
25
- def test_builder_with_utf8_text
26
- text = "test ﺵ "
27
- doc = Nokogiri::XML::Builder.new(:encoding => "UTF-8") { |xml| xml.test text }.doc
28
- assert_equal text, doc.content
29
- end
30
-
31
- def test_builder_escape
32
- xml = Nokogiri::XML::Builder.new { |x|
33
- x.condition "value < 1", :attr => "value < 1"
34
- }.to_xml
35
- doc = Nokogiri.XML xml
36
- assert_equal 'value < 1', doc.root['attr']
37
- assert_equal 'value < 1', doc.root.content
38
- end
39
-
40
- def test_builder_namespace
41
- doc = Nokogiri::XML::Builder.new { |xml|
42
- xml.a("xmlns:a" => "x") do
43
- xml.b("xmlns:a" => "x", "xmlns:b" => "y")
44
- end
45
- }.doc
46
-
47
- b = doc.at('b')
48
- assert b
49
- assert_equal({"xmlns:a"=>"x", "xmlns:b"=>"y"}, b.namespaces)
50
- assert_equal({"xmlns:b"=>"y"}, namespaces_defined_on(b))
51
- end
52
-
53
- def test_builder_namespace_part_deux
54
- doc = Nokogiri::XML::Builder.new { |xml|
55
- xml.a("xmlns:b" => "y") do
56
- xml.b("xmlns:a" => "x", "xmlns:b" => "y", "xmlns:c" => "z")
57
- end
58
- }.doc
59
-
60
- b = doc.at('b')
61
- assert b
62
- assert_equal({"xmlns:a"=>"x", "xmlns:b"=>"y", "xmlns:c"=>"z"}, b.namespaces)
63
- assert_equal({"xmlns:a"=>"x", "xmlns:c"=>"z"}, namespaces_defined_on(b))
64
- end
65
-
66
- def test_builder_with_unlink
67
- b = Nokogiri::XML::Builder.new do |xml|
68
- xml.foo do
69
- xml.bar { xml.parent.unlink }
70
- xml.bar2
71
- end
72
- end
73
- assert b
74
- end
75
-
76
- def test_with_root
77
- doc = Nokogiri::XML(File.read(XML_FILE))
78
- Nokogiri::XML::Builder.with(doc.at('employee')) do |xml|
79
- xml.foo
80
- end
81
- assert_equal 1, doc.xpath('//employee/foo').length
82
- end
83
-
84
- def test_root_namespace_default_decl
85
- b = Nokogiri::XML::Builder.new { |xml| xml.root(:xmlns => 'one:two') }
86
- doc = b.doc
87
- assert_equal 'one:two', doc.root.namespace.href
88
- assert_equal({ 'xmlns' => 'one:two' }, doc.root.namespaces)
89
- end
90
-
91
- def test_root_namespace_multi_decl
92
- b = Nokogiri::XML::Builder.new { |xml|
93
- xml.root(:xmlns => 'one:two', 'xmlns:foo' => 'bar') do
94
- xml.hello
95
- end
96
- }
97
- doc = b.doc
98
- assert_equal 'one:two', doc.root.namespace.href
99
- assert_equal({ 'xmlns' => 'one:two', 'xmlns:foo' => 'bar' }, doc.root.namespaces)
100
-
101
- assert_equal 'one:two', doc.at('hello').namespace.href
102
- end
103
-
104
- def test_non_root_namespace
105
- b = Nokogiri::XML::Builder.new { |xml|
106
- xml.root { xml.hello(:xmlns => 'one') }
107
- }
108
- assert_equal 'one', b.doc.at('hello', 'xmlns' => 'one').namespace.href
109
- end
110
-
111
- def test_specify_namespace
112
- b = Nokogiri::XML::Builder.new { |xml|
113
- xml.root('xmlns:foo' => 'bar') do
114
- xml[:foo].bar
115
- xml['foo'].baz
116
- end
117
- }
118
- doc = b.doc
119
- assert_equal 'bar', doc.at('foo|bar', 'foo' => 'bar').namespace.href
120
- assert_equal 'bar', doc.at('foo|baz', 'foo' => 'bar').namespace.href
121
- end
122
-
123
- def test_dtd_in_builder_output
124
- builder = Nokogiri::XML::Builder.new do |xml|
125
- xml.doc.create_internal_subset(
126
- 'html',
127
- "-//W3C//DTD HTML 4.01 Transitional//EN",
128
- "http://www.w3.org/TR/html4/loose.dtd"
129
- )
130
- xml.root do
131
- xml.foo
132
- end
133
- end
134
- assert_match(/<!DOCTYPE html PUBLIC "-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN" "http:\/\/www.w3.org\/TR\/html4\/loose.dtd">/,
135
- builder.to_xml)
136
- end
137
-
138
- def test_specify_namespace_nested
139
- b = Nokogiri::XML::Builder.new { |xml|
140
- xml.root('xmlns:foo' => 'bar') do
141
- xml.yay do
142
- xml[:foo].bar
143
-
144
- xml.yikes do
145
- xml['foo'].baz
146
- end
147
- end
148
- end
149
- }
150
- doc = b.doc
151
- assert_equal 'bar', doc.at('foo|bar', 'foo' => 'bar').namespace.href
152
- assert_equal 'bar', doc.at('foo|baz', 'foo' => 'bar').namespace.href
153
- end
154
-
155
- def test_specified_namespace_postdeclared
156
- doc = Nokogiri::XML::Builder.new { |xml|
157
- xml.a do
158
- xml[:foo].b("xmlns:foo" => "bar")
159
- end
160
- }.doc
161
- a = doc.at('a')
162
- assert_equal({}, a.namespaces)
163
-
164
- b = doc.at_xpath('//foo:b', {:foo=>'bar'})
165
- assert b
166
- assert_equal({"xmlns:foo"=>"bar"}, b.namespaces)
167
- assert_equal("b", b.name)
168
- assert_equal("bar", b.namespace.href)
169
- end
170
-
171
- def test_specified_namespace_undeclared
172
- Nokogiri::XML::Builder.new { |xml|
173
- xml.root do
174
- assert_raises(ArgumentError) do
175
- xml[:foo].bar
176
- end
177
- end
178
- }
179
- end
180
-
181
- def test_set_encoding
182
- builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
183
- xml.root do
184
- xml.bar 'blah'
185
- end
186
- end
187
- assert_match 'UTF-8', builder.to_xml
188
- end
189
-
190
- def test_bang_and_underscore_is_escaped
191
- builder = Nokogiri::XML::Builder.new do |xml|
192
- xml.root do
193
- xml.p_('adsfadsf')
194
- xml.p!('adsfadsf')
195
- end
196
- end
197
- assert_equal 2, builder.doc.xpath('//p').length
198
- end
199
-
200
- def test_square_brackets_set_attributes
201
- builder = Nokogiri::XML::Builder.new do |xml|
202
- xml.root do
203
- foo = xml.foo
204
- foo['id'] = 'hello'
205
- assert_equal 'hello', foo['id']
206
- end
207
- end
208
- assert_equal 1, builder.doc.xpath('//foo[@id = "hello"]').length
209
- end
210
-
211
- def test_nested_local_variable
212
- @ivar = 'hello'
213
- local_var = 'hello world'
214
- builder = Nokogiri::XML::Builder.new do |xml|
215
- xml.root do
216
- xml.foo local_var
217
- xml.bar @ivar
218
- xml.baz {
219
- xml.text @ivar
220
- }
221
- end
222
- end
223
-
224
- assert_equal 'hello world', builder.doc.at('//root/foo').content
225
- assert_equal 'hello', builder.doc.at('//root/bar').content
226
- assert_equal 'hello', builder.doc.at('baz').content
227
- end
228
-
229
- def test_raw_append
230
- builder = Nokogiri::XML::Builder.new do |xml|
231
- xml.root do
232
- xml << 'hello'
233
- end
234
- end
235
-
236
- assert_equal 'hello', builder.doc.at('/root').content
237
- end
238
-
239
- def test_raw_append_with_instance_eval
240
- builder = Nokogiri::XML::Builder.new do
241
- root do
242
- self << 'hello'
243
- end
244
- end
245
-
246
- assert_equal 'hello', builder.doc.at('/root').content
247
- end
248
-
249
- def test_raw_xml_append
250
- builder = Nokogiri::XML::Builder.new do |xml|
251
- xml.root do
252
- xml << '<aaa><bbb/><ccc/></aaa>'
253
- end
254
- end
255
-
256
- assert_equal ["aaa"], builder.doc.at_css("root").children.collect(&:name)
257
- assert_equal ["bbb","ccc"], builder.doc.at_css("aaa").children.collect(&:name)
258
- end
259
-
260
- def test_raw_xml_append_with_namespaces
261
- doc = Nokogiri::XML::Builder.new do |xml|
262
- xml.root("xmlns:foo" => "x", "xmlns" => "y") do
263
- xml << '<Element foo:bar="bazz"/>'
264
- end
265
- end.doc
266
-
267
- el = doc.at 'Element'
268
- assert_not_nil el
269
-
270
- assert_equal 'y', el.namespace.href
271
- assert_nil el.namespace.prefix
272
-
273
- attr = el.attributes["bar"]
274
- assert_not_nil attr
275
- assert_not_nil attr.namespace
276
- assert_equal "foo", attr.namespace.prefix
277
- end
278
-
279
- def test_cdata
280
- builder = Nokogiri::XML::Builder.new do
281
- root {
282
- cdata "hello world"
283
- }
284
- end
285
- assert_equal("<?xml version=\"1.0\"?><root><![CDATA[hello world]]></root>",
286
- builder.to_xml.gsub(/\n/, ""))
287
- end
288
-
289
- def test_comment
290
- builder = Nokogiri::XML::Builder.new do
291
- root {
292
- comment "this is a comment"
293
- }
294
- end
295
- assert builder.doc.root.children.first.comment?
296
- end
297
-
298
- def test_builder_no_block
299
- string = "hello world"
300
- builder = Nokogiri::XML::Builder.new
301
- builder.root {
302
- cdata string
303
- }
304
- assert_equal("<?xml version=\"1.0\"?><root><![CDATA[hello world]]></root>",
305
- builder.to_xml.gsub(/\n/, ''))
306
- end
307
-
308
- def test_builder_can_inherit_parent_namespace
309
- builder = Nokogiri::XML::Builder.new
310
- builder.products {
311
- builder.parent.default_namespace = "foo"
312
- builder.product {
313
- builder.parent.default_namespace = nil
314
- }
315
- }
316
- doc = builder.doc
317
- ['product', 'products'].each do |n|
318
- assert_equal doc.at_xpath("//*[local-name() = '#{n}']").namespace.href, 'foo'
319
- end
320
- end
321
-
322
- def test_builder_can_handle_namespace_override
323
- builder = Nokogiri::XML::Builder.new
324
- builder.products('xmlns:foo' => 'bar') {
325
- builder.product('xmlns:foo' => 'baz')
326
- }
327
-
328
- doc = builder.doc
329
- assert_equal doc.at_xpath("//*[local-name() = 'product']").namespaces['xmlns:foo'], 'baz'
330
- assert_equal doc.at_xpath("//*[local-name() = 'products']").namespaces['xmlns:foo'], 'bar'
331
- assert_nil doc.at_xpath("//*[local-name() = 'products']").namespace
332
- end
333
-
334
- private
335
-
336
- def namespaces_defined_on(node)
337
- Hash[*node.namespace_definitions.collect{|n| ["xmlns:" + n.prefix, n.href]}.flatten]
338
- end
339
- end
340
- end
341
- end
@@ -1,180 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestC14N < Nokogiri::TestCase
6
- # http://www.w3.org/TR/xml-c14n#Example-OutsideDoc
7
- def test_3_1
8
- doc = Nokogiri.XML <<-eoxml
9
- <?xml version="1.0"?>
10
-
11
- <?xml-stylesheet href="doc.xsl"
12
- type="text/xsl" ?>
13
-
14
- <!DOCTYPE doc SYSTEM "doc.dtd">
15
-
16
- <doc>Hello, world!<!-- Comment 1 --></doc>
17
-
18
- <?pi-without-data ?>
19
-
20
- <!-- Comment 2 -->
21
-
22
- <!-- Comment 3 -->
23
- eoxml
24
-
25
- c14n = doc.canonicalize
26
- assert_no_match(/version=/, c14n)
27
- assert_match(/Hello, world/, c14n)
28
- assert_no_match(/Comment/, c14n)
29
- c14n = doc.canonicalize(nil, nil, true)
30
- assert_match(/Comment/, c14n)
31
- c14n = doc.canonicalize(nil, nil, false)
32
- assert_no_match(/Comment/, c14n)
33
- end
34
-
35
- def test_exclude_block_params
36
- xml = '<a><b></b></a>'
37
- doc = Nokogiri.XML xml
38
-
39
- list = []
40
- doc.canonicalize do |node, parent|
41
- list << [node, parent]
42
- true
43
- end
44
- if Nokogiri.jruby?
45
- assert_equal(
46
- ['a', 'document', 'document', nil, 'b', 'a'],
47
- list.flatten.map { |x| x ? x.name : x }
48
- )
49
- else
50
- assert_equal(
51
- ['a', 'document', 'document', nil, 'b', 'a', 'a', 'document'],
52
- list.flatten.map { |x| x ? x.name : x }
53
- )
54
- end
55
- end
56
-
57
- def test_exclude_block_true
58
- xml = '<a><b></b></a>'
59
- doc = Nokogiri.XML xml
60
-
61
- c14n = doc.canonicalize do |node, parent|
62
- true
63
- end
64
- assert_equal xml, c14n
65
- end
66
-
67
- def test_exclude_block_false
68
- xml = '<a><b></b></a>'
69
- doc = Nokogiri.XML xml
70
-
71
- c14n = doc.canonicalize do |node, parent|
72
- false
73
- end
74
- assert_equal '', c14n
75
- end
76
-
77
- def test_exclude_block_nil
78
- xml = '<a><b></b></a>'
79
- doc = Nokogiri.XML xml
80
-
81
- c14n = doc.canonicalize do |node, parent|
82
- nil
83
- end
84
- assert_equal '', c14n
85
- end
86
-
87
- def test_exclude_block_object
88
- xml = '<a><b></b></a>'
89
- doc = Nokogiri.XML xml
90
-
91
- c14n = doc.canonicalize do |node, parent|
92
- Object.new
93
- end
94
- assert_equal xml, c14n
95
- end
96
-
97
- def test_c14n_node
98
- xml = '<a><b><c></c></b></a>'
99
- doc = Nokogiri.XML xml
100
- c14n = doc.at_xpath('//b').canonicalize
101
- assert_equal '<b><c></c></b>', c14n
102
- end
103
-
104
- def test_c14n_modes
105
- # http://www.w3.org/TR/xml-exc-c14n/#sec-Enveloping
106
-
107
- doc1 = Nokogiri.XML <<-EOXML
108
- <n0:local xmlns:n0="http://foobar.org" xmlns:n3="ftp://example.org">
109
- <n1:elem2 xmlns:n1="http://example.net" xml:lang="en">
110
- <n3:stuff xmlns:n3="ftp://example.org"/>
111
- </n1:elem2>
112
- </n0:local>
113
- EOXML
114
-
115
- doc2 = Nokogiri.XML <<-EOXML
116
- <n2:pdu xmlns:n1="http://example.com"
117
- xmlns:n2="http://foo.example"
118
- xmlns:n4="http://foo.example"
119
- xml:lang="fr"
120
- xml:space="retain">
121
- <n1:elem2 xmlns:n1="http://example.net" xml:lang="en">
122
- <n3:stuff xmlns:n3="ftp://example.org"/>
123
- <n4:stuff />
124
- </n1:elem2>
125
- </n2:pdu>
126
- EOXML
127
-
128
- c14n = doc1.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize
129
- assert_equal '<n1:elem2 xmlns:n0="http://foobar.org" xmlns:n1="http://example.net" xmlns:n3="ftp://example.org" xml:lang="en">
130
- <n3:stuff></n3:stuff>
131
- </n1:elem2>', c14n
132
-
133
- expected = '<n1:elem2 xmlns:n1="http://example.net" xmlns:n2="http://foo.example" xmlns:n4="http://foo.example" xml:lang="en" xml:space="retain">
134
- <n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
135
- <n4:stuff></n4:stuff>
136
- </n1:elem2>'
137
- c14n = doc2.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize
138
- assert_equal expected, c14n
139
-
140
- expected = '<n1:elem2 xmlns:n1="http://example.net" xml:lang="en">
141
- <n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
142
- </n1:elem2>'
143
- c14n = doc1.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize(XML::XML_C14N_EXCLUSIVE_1_0)
144
- assert_equal expected, c14n
145
-
146
- expected = '<n1:elem2 xmlns:n1="http://example.net" xml:lang="en">
147
- <n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
148
- <n4:stuff xmlns:n4="http://foo.example"></n4:stuff>
149
- </n1:elem2>'
150
- c14n = doc2.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize(XML::XML_C14N_EXCLUSIVE_1_0)
151
- assert_equal expected, c14n
152
-
153
- expected = '<n1:elem2 xmlns:n1="http://example.net" xmlns:n2="http://foo.example" xml:lang="en">
154
- <n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
155
- <n4:stuff xmlns:n4="http://foo.example"></n4:stuff>
156
- </n1:elem2>'
157
- c14n = doc2.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize(XML::XML_C14N_EXCLUSIVE_1_0, ['n2'])
158
- assert_equal expected, c14n
159
-
160
- expected = '<n1:elem2 xmlns:n1="http://example.net" xmlns:n2="http://foo.example" xmlns:n4="http://foo.example" xml:lang="en">
161
- <n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
162
- <n4:stuff></n4:stuff>
163
- </n1:elem2>'
164
- c14n = doc2.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize(XML::XML_C14N_EXCLUSIVE_1_0, ['n2', 'n4'])
165
- assert_equal expected, c14n
166
- end
167
-
168
- def test_wrong_params
169
- xml = '<a><b></b></a>'
170
- doc = Nokogiri.XML xml
171
-
172
- assert_raise(TypeError){ doc.canonicalize :wrong_type }
173
- assert_raise(TypeError){ doc.canonicalize nil, :wrong_type }
174
- doc.canonicalize nil, nil, :wrong_type
175
- end
176
-
177
-
178
- end
179
- end
180
- end
@@ -1,54 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestCDATA < Nokogiri::TestCase
6
- def setup
7
- super
8
- @xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
9
- end
10
-
11
- def test_cdata_node
12
- name = @xml.xpath('//employee[2]/name').first
13
- assert cdata = name.children[1]
14
- assert cdata.cdata?
15
- assert_equal '#cdata-section', cdata.name
16
- end
17
-
18
- def test_new
19
- node = CDATA.new(@xml, "foo")
20
- assert_equal "foo", node.content
21
-
22
- node = CDATA.new(@xml.root, "foo")
23
- assert_equal "foo", node.content
24
- end
25
-
26
- def test_new_with_nil
27
- node = CDATA.new(@xml, nil)
28
- assert_nil node.content
29
- end
30
-
31
- def test_new_with_non_string
32
- assert_raises(TypeError) do
33
- CDATA.new(@xml, 1.234)
34
- end
35
- end
36
-
37
- def test_lots_of_new_cdata
38
- assert 100.times { CDATA.new(@xml, "asdfasdf") }
39
- end
40
-
41
- def test_content=
42
- node = CDATA.new(@xml, 'foo')
43
- assert_equal('foo', node.content)
44
-
45
- node.content = '& <foo> &amp;'
46
- assert_equal('& <foo> &amp;', node.content)
47
- assert_equal('<![CDATA[& <foo> &amp;]]>', node.to_xml)
48
-
49
- node.content = 'foo ]]> bar'
50
- assert_equal('foo ]]> bar', node.content)
51
- end
52
- end
53
- end
54
- end
@@ -1,40 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestComment < Nokogiri::TestCase
6
- def setup
7
- super
8
- @xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
9
- end
10
-
11
- def test_new
12
- comment = Nokogiri::XML::Comment.new(@xml, 'hello world')
13
- assert_equal('<!--hello world-->', comment.to_s)
14
- end
15
-
16
- def test_comment?
17
- comment = Nokogiri::XML::Comment.new(@xml, 'hello world')
18
- assert(comment.comment?)
19
- assert(!@xml.root.comment?)
20
- end
21
-
22
- def test_passing_a_node_uses_the_node_document
23
- comment = Nokogiri::XML::Comment.new(@xml.at_css("employee"), 'hello world')
24
- assert_equal @xml, comment.document
25
- end
26
-
27
- def test_passing_anything_else
28
- assert_raises ArgumentError do
29
- Nokogiri::XML::Comment.new("NOT A NOKOGIRI CLASS", 'hello world')
30
- end
31
- end
32
-
33
- def test_many_comments
34
- 100.times {
35
- Nokogiri::XML::Comment.new(@xml, 'hello world')
36
- }
37
- end
38
- end
39
- end
40
- end