nokogiri 1.6.0 → 1.13.2

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 (340) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -19
  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 +23 -4
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +952 -132
  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 +231 -96
  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 +269 -177
  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 +407 -357
  94. data/lib/nokogiri/css/parser.y +265 -246
  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 +8 -7
  99. data/lib/nokogiri/css/xpath_visitor.rb +266 -80
  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 -105
  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 +270 -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 +29 -20
  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 +3040 -0
  171. data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
  172. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  173. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +3037 -0
  174. data/ports/archives/libxml2-2.9.13.tar.xz +0 -0
  175. data/ports/archives/libxslt-1.1.35.tar.xz +0 -0
  176. metadata +278 -362
  177. data/.autotest +0 -26
  178. data/.gemtest +0 -0
  179. data/.travis.yml +0 -27
  180. data/CHANGELOG.ja.rdoc +0 -819
  181. data/CHANGELOG.rdoc +0 -819
  182. data/C_CODING_STYLE.rdoc +0 -33
  183. data/Manifest.txt +0 -315
  184. data/README.ja.rdoc +0 -106
  185. data/README.rdoc +0 -175
  186. data/ROADMAP.md +0 -90
  187. data/Rakefile +0 -246
  188. data/STANDARD_RESPONSES.md +0 -47
  189. data/Y_U_NO_GEMSPEC.md +0 -155
  190. data/build_all +0 -105
  191. data/ext/nokogiri/html_document.c +0 -170
  192. data/ext/nokogiri/html_document.h +0 -10
  193. data/ext/nokogiri/html_element_description.c +0 -279
  194. data/ext/nokogiri/html_element_description.h +0 -10
  195. data/ext/nokogiri/html_entity_lookup.c +0 -32
  196. data/ext/nokogiri/html_entity_lookup.h +0 -8
  197. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  198. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  199. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  200. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  201. data/ext/nokogiri/xml_attr.h +0 -9
  202. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  203. data/ext/nokogiri/xml_cdata.h +0 -9
  204. data/ext/nokogiri/xml_comment.h +0 -9
  205. data/ext/nokogiri/xml_document.h +0 -23
  206. data/ext/nokogiri/xml_document_fragment.h +0 -10
  207. data/ext/nokogiri/xml_dtd.h +0 -10
  208. data/ext/nokogiri/xml_element_content.h +0 -10
  209. data/ext/nokogiri/xml_element_decl.h +0 -9
  210. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  211. data/ext/nokogiri/xml_entity_decl.h +0 -10
  212. data/ext/nokogiri/xml_entity_reference.h +0 -9
  213. data/ext/nokogiri/xml_io.c +0 -56
  214. data/ext/nokogiri/xml_io.h +0 -11
  215. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  216. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  217. data/ext/nokogiri/xml_namespace.h +0 -13
  218. data/ext/nokogiri/xml_node.h +0 -13
  219. data/ext/nokogiri/xml_node_set.h +0 -14
  220. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  221. data/ext/nokogiri/xml_reader.h +0 -10
  222. data/ext/nokogiri/xml_relax_ng.h +0 -9
  223. data/ext/nokogiri/xml_sax_parser.h +0 -39
  224. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  225. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  226. data/ext/nokogiri/xml_schema.h +0 -9
  227. data/ext/nokogiri/xml_syntax_error.h +0 -13
  228. data/ext/nokogiri/xml_text.h +0 -9
  229. data/ext/nokogiri/xml_xpath_context.h +0 -10
  230. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  231. data/lib/nokogiri/html/document.rb +0 -254
  232. data/lib/nokogiri/html/document_fragment.rb +0 -41
  233. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  234. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  235. data/lib/nokogiri/html/sax/push_parser.rb +0 -16
  236. data/ports/archives/libxml2-2.8.0.tar.gz +0 -0
  237. data/ports/archives/libxslt-1.1.26.tar.gz +0 -0
  238. data/tasks/cross_compile.rb +0 -132
  239. data/tasks/nokogiri.org.rb +0 -24
  240. data/tasks/test.rb +0 -95
  241. data/test/css/test_nthiness.rb +0 -159
  242. data/test/css/test_parser.rb +0 -341
  243. data/test/css/test_tokenizer.rb +0 -198
  244. data/test/css/test_xpath_visitor.rb +0 -91
  245. data/test/decorators/test_slop.rb +0 -16
  246. data/test/files/2ch.html +0 -108
  247. data/test/files/address_book.rlx +0 -12
  248. data/test/files/address_book.xml +0 -10
  249. data/test/files/bar/bar.xsd +0 -4
  250. data/test/files/bogus.xml +0 -0
  251. data/test/files/dont_hurt_em_why.xml +0 -422
  252. data/test/files/encoding.html +0 -82
  253. data/test/files/encoding.xhtml +0 -84
  254. data/test/files/exslt.xml +0 -8
  255. data/test/files/exslt.xslt +0 -35
  256. data/test/files/foo/foo.xsd +0 -4
  257. data/test/files/metacharset.html +0 -10
  258. data/test/files/noencoding.html +0 -47
  259. data/test/files/po.xml +0 -32
  260. data/test/files/po.xsd +0 -66
  261. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  262. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  263. data/test/files/saml/xenc_schema.xsd +0 -146
  264. data/test/files/saml/xmldsig_schema.xsd +0 -318
  265. data/test/files/shift_jis.html +0 -10
  266. data/test/files/shift_jis.xml +0 -5
  267. data/test/files/snuggles.xml +0 -3
  268. data/test/files/staff.dtd +0 -10
  269. data/test/files/staff.xml +0 -59
  270. data/test/files/staff.xslt +0 -32
  271. data/test/files/test_document_url/bar.xml +0 -2
  272. data/test/files/test_document_url/document.dtd +0 -4
  273. data/test/files/test_document_url/document.xml +0 -6
  274. data/test/files/tlm.html +0 -850
  275. data/test/files/to_be_xincluded.xml +0 -2
  276. data/test/files/valid_bar.xml +0 -2
  277. data/test/files/xinclude.xml +0 -4
  278. data/test/helper.rb +0 -154
  279. data/test/html/sax/test_parser.rb +0 -141
  280. data/test/html/sax/test_parser_context.rb +0 -46
  281. data/test/html/test_builder.rb +0 -164
  282. data/test/html/test_document.rb +0 -552
  283. data/test/html/test_document_encoding.rb +0 -138
  284. data/test/html/test_document_fragment.rb +0 -261
  285. data/test/html/test_element_description.rb +0 -105
  286. data/test/html/test_named_characters.rb +0 -14
  287. data/test/html/test_node.rb +0 -196
  288. data/test/html/test_node_encoding.rb +0 -27
  289. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  290. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  291. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  292. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
  293. data/test/test_convert_xpath.rb +0 -135
  294. data/test/test_css_cache.rb +0 -45
  295. data/test/test_encoding_handler.rb +0 -46
  296. data/test/test_memory_leak.rb +0 -156
  297. data/test/test_nokogiri.rb +0 -132
  298. data/test/test_reader.rb +0 -555
  299. data/test/test_soap4r_sax.rb +0 -52
  300. data/test/test_xslt_transforms.rb +0 -254
  301. data/test/xml/node/test_save_options.rb +0 -28
  302. data/test/xml/node/test_subclass.rb +0 -44
  303. data/test/xml/sax/test_parser.rb +0 -366
  304. data/test/xml/sax/test_parser_context.rb +0 -106
  305. data/test/xml/sax/test_push_parser.rb +0 -157
  306. data/test/xml/test_attr.rb +0 -64
  307. data/test/xml/test_attribute_decl.rb +0 -86
  308. data/test/xml/test_builder.rb +0 -306
  309. data/test/xml/test_c14n.rb +0 -151
  310. data/test/xml/test_cdata.rb +0 -48
  311. data/test/xml/test_comment.rb +0 -29
  312. data/test/xml/test_document.rb +0 -828
  313. data/test/xml/test_document_encoding.rb +0 -28
  314. data/test/xml/test_document_fragment.rb +0 -223
  315. data/test/xml/test_dtd.rb +0 -103
  316. data/test/xml/test_dtd_encoding.rb +0 -33
  317. data/test/xml/test_element_content.rb +0 -56
  318. data/test/xml/test_element_decl.rb +0 -73
  319. data/test/xml/test_entity_decl.rb +0 -122
  320. data/test/xml/test_entity_reference.rb +0 -245
  321. data/test/xml/test_namespace.rb +0 -95
  322. data/test/xml/test_node.rb +0 -1137
  323. data/test/xml/test_node_attributes.rb +0 -96
  324. data/test/xml/test_node_encoding.rb +0 -107
  325. data/test/xml/test_node_inheritance.rb +0 -32
  326. data/test/xml/test_node_reparenting.rb +0 -374
  327. data/test/xml/test_node_set.rb +0 -755
  328. data/test/xml/test_parse_options.rb +0 -64
  329. data/test/xml/test_processing_instruction.rb +0 -30
  330. data/test/xml/test_reader_encoding.rb +0 -142
  331. data/test/xml/test_relax_ng.rb +0 -60
  332. data/test/xml/test_schema.rb +0 -103
  333. data/test/xml/test_syntax_error.rb +0 -12
  334. data/test/xml/test_text.rb +0 -45
  335. data/test/xml/test_unparented_node.rb +0 -422
  336. data/test/xml/test_xinclude.rb +0 -83
  337. data/test/xml/test_xpath.rb +0 -295
  338. data/test/xslt/test_custom_functions.rb +0 -133
  339. data/test/xslt/test_exception_handling.rb +0 -37
  340. 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