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