nokogiri 1.2.3-x86-mswin32-60 → 1.4.5-x86-mswin32-60

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 (319) hide show
  1. data/.autotest +18 -7
  2. data/.gemtest +0 -0
  3. data/CHANGELOG.ja.rdoc +297 -3
  4. data/CHANGELOG.rdoc +289 -0
  5. data/Manifest.txt +148 -37
  6. data/README.ja.rdoc +20 -20
  7. data/README.rdoc +53 -22
  8. data/Rakefile +127 -211
  9. data/bin/nokogiri +54 -0
  10. data/ext/nokogiri/depend +358 -0
  11. data/ext/nokogiri/extconf.rb +89 -54
  12. data/ext/nokogiri/html_document.c +34 -27
  13. data/ext/nokogiri/html_document.h +1 -1
  14. data/ext/nokogiri/html_element_description.c +276 -0
  15. data/ext/nokogiri/html_element_description.h +10 -0
  16. data/ext/nokogiri/html_entity_lookup.c +7 -5
  17. data/ext/nokogiri/html_entity_lookup.h +1 -1
  18. data/ext/nokogiri/html_sax_parser_context.c +94 -0
  19. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  20. data/ext/nokogiri/{native.c → nokogiri.c} +31 -7
  21. data/ext/nokogiri/{native.h → nokogiri.h} +68 -41
  22. data/ext/nokogiri/xml_attr.c +20 -9
  23. data/ext/nokogiri/xml_attr.h +1 -1
  24. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  25. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  26. data/ext/nokogiri/xml_cdata.c +21 -9
  27. data/ext/nokogiri/xml_cdata.h +1 -1
  28. data/ext/nokogiri/xml_comment.c +18 -6
  29. data/ext/nokogiri/xml_comment.h +1 -1
  30. data/ext/nokogiri/xml_document.c +247 -68
  31. data/ext/nokogiri/xml_document.h +5 -3
  32. data/ext/nokogiri/xml_document_fragment.c +15 -7
  33. data/ext/nokogiri/xml_document_fragment.h +1 -1
  34. data/ext/nokogiri/xml_dtd.c +110 -10
  35. data/ext/nokogiri/xml_dtd.h +3 -1
  36. data/ext/nokogiri/xml_element_content.c +123 -0
  37. data/ext/nokogiri/xml_element_content.h +10 -0
  38. data/ext/nokogiri/xml_element_decl.c +69 -0
  39. data/ext/nokogiri/xml_element_decl.h +9 -0
  40. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  41. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  42. data/ext/nokogiri/xml_entity_decl.c +110 -0
  43. data/ext/nokogiri/xml_entity_decl.h +10 -0
  44. data/ext/nokogiri/xml_entity_reference.c +16 -5
  45. data/ext/nokogiri/xml_entity_reference.h +1 -1
  46. data/ext/nokogiri/xml_io.c +40 -8
  47. data/ext/nokogiri/xml_io.h +2 -1
  48. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  49. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  50. data/ext/nokogiri/xml_namespace.c +84 -0
  51. data/ext/nokogiri/xml_namespace.h +13 -0
  52. data/ext/nokogiri/xml_node.c +782 -225
  53. data/ext/nokogiri/xml_node.h +2 -4
  54. data/ext/nokogiri/xml_node_set.c +253 -34
  55. data/ext/nokogiri/xml_node_set.h +2 -2
  56. data/ext/nokogiri/xml_processing_instruction.c +17 -5
  57. data/ext/nokogiri/xml_processing_instruction.h +1 -1
  58. data/ext/nokogiri/xml_reader.c +277 -85
  59. data/ext/nokogiri/xml_reader.h +1 -1
  60. data/ext/nokogiri/xml_relax_ng.c +168 -0
  61. data/ext/nokogiri/xml_relax_ng.h +9 -0
  62. data/ext/nokogiri/xml_sax_parser.c +183 -111
  63. data/ext/nokogiri/xml_sax_parser.h +30 -1
  64. data/ext/nokogiri/xml_sax_parser_context.c +199 -0
  65. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  66. data/ext/nokogiri/xml_sax_push_parser.c +42 -12
  67. data/ext/nokogiri/xml_sax_push_parser.h +1 -1
  68. data/ext/nokogiri/xml_schema.c +205 -0
  69. data/ext/nokogiri/xml_schema.h +9 -0
  70. data/ext/nokogiri/xml_syntax_error.c +28 -173
  71. data/ext/nokogiri/xml_syntax_error.h +2 -1
  72. data/ext/nokogiri/xml_text.c +16 -6
  73. data/ext/nokogiri/xml_text.h +1 -1
  74. data/ext/nokogiri/xml_xpath_context.c +104 -47
  75. data/ext/nokogiri/xml_xpath_context.h +1 -1
  76. data/ext/nokogiri/xslt_stylesheet.c +161 -19
  77. data/ext/nokogiri/xslt_stylesheet.h +1 -1
  78. data/lib/nokogiri.rb +47 -8
  79. data/lib/nokogiri/1.8/nokogiri.so +0 -0
  80. data/lib/nokogiri/1.9/nokogiri.so +0 -0
  81. data/lib/nokogiri/css.rb +6 -3
  82. data/lib/nokogiri/css/node.rb +14 -12
  83. data/lib/nokogiri/css/parser.rb +665 -62
  84. data/lib/nokogiri/css/parser.y +20 -10
  85. data/lib/nokogiri/css/parser_extras.rb +91 -0
  86. data/lib/nokogiri/css/tokenizer.rb +148 -5
  87. data/lib/nokogiri/css/tokenizer.rex +10 -9
  88. data/lib/nokogiri/css/xpath_visitor.rb +47 -44
  89. data/lib/nokogiri/decorators/slop.rb +8 -4
  90. data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
  91. data/lib/nokogiri/ffi/html/document.rb +28 -0
  92. data/lib/nokogiri/ffi/html/element_description.rb +81 -0
  93. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  94. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  95. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  96. data/lib/nokogiri/ffi/libxml.rb +420 -0
  97. data/lib/nokogiri/ffi/structs/common_node.rb +38 -0
  98. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  99. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  100. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  101. data/lib/nokogiri/ffi/structs/xml_attr.rb +20 -0
  102. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  103. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  104. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
  105. data/lib/nokogiri/ffi/structs/xml_document.rb +117 -0
  106. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  107. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  108. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  109. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  110. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  111. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  112. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  113. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  114. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  115. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +20 -0
  116. data/lib/nokogiri/ffi/structs/xml_parser_input.rb +19 -0
  117. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  118. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  119. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
  120. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  121. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  122. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  123. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +38 -0
  124. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  125. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  126. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  127. data/lib/nokogiri/ffi/weak_bucket.rb +40 -0
  128. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  129. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  130. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  131. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  132. data/lib/nokogiri/ffi/xml/document.rb +174 -0
  133. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  134. data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
  135. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  136. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  137. data/lib/nokogiri/ffi/xml/entity_decl.rb +36 -0
  138. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  139. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  140. data/lib/nokogiri/ffi/xml/node.rb +559 -0
  141. data/lib/nokogiri/ffi/xml/node_set.rb +150 -0
  142. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  143. data/lib/nokogiri/ffi/xml/reader.rb +236 -0
  144. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  145. data/lib/nokogiri/ffi/xml/sax/parser.rb +143 -0
  146. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +79 -0
  147. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +51 -0
  148. data/lib/nokogiri/ffi/xml/schema.rb +109 -0
  149. data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
  150. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  151. data/lib/nokogiri/ffi/xml/xpath.rb +9 -0
  152. data/lib/nokogiri/ffi/xml/xpath_context.rb +153 -0
  153. data/lib/nokogiri/ffi/xslt/stylesheet.rb +77 -0
  154. data/lib/nokogiri/html.rb +13 -47
  155. data/lib/nokogiri/html/builder.rb +27 -1
  156. data/lib/nokogiri/html/document.rb +201 -7
  157. data/lib/nokogiri/html/document_fragment.rb +41 -0
  158. data/lib/nokogiri/html/element_description.rb +23 -0
  159. data/lib/nokogiri/html/entity_lookup.rb +2 -0
  160. data/lib/nokogiri/html/sax/parser.rb +34 -3
  161. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  162. data/lib/nokogiri/nokogiri.rb +1 -0
  163. data/lib/nokogiri/version.rb +40 -1
  164. data/lib/nokogiri/version_warning.rb +14 -0
  165. data/lib/nokogiri/xml.rb +32 -53
  166. data/lib/nokogiri/xml/attr.rb +5 -0
  167. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  168. data/lib/nokogiri/xml/builder.rb +349 -29
  169. data/lib/nokogiri/xml/cdata.rb +3 -1
  170. data/lib/nokogiri/xml/character_data.rb +7 -0
  171. data/lib/nokogiri/xml/document.rb +166 -14
  172. data/lib/nokogiri/xml/document_fragment.rb +76 -1
  173. data/lib/nokogiri/xml/dtd.rb +16 -3
  174. data/lib/nokogiri/xml/element_content.rb +36 -0
  175. data/lib/nokogiri/xml/element_decl.rb +13 -0
  176. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  177. data/lib/nokogiri/xml/namespace.rb +13 -0
  178. data/lib/nokogiri/xml/node.rb +561 -166
  179. data/lib/nokogiri/xml/node/save_options.rb +22 -2
  180. data/lib/nokogiri/xml/node_set.rb +202 -40
  181. data/lib/nokogiri/xml/parse_options.rb +93 -0
  182. data/lib/nokogiri/xml/pp.rb +2 -0
  183. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  184. data/lib/nokogiri/xml/pp/node.rb +56 -0
  185. data/lib/nokogiri/xml/processing_instruction.rb +2 -0
  186. data/lib/nokogiri/xml/reader.rb +93 -8
  187. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  188. data/lib/nokogiri/xml/sax.rb +1 -7
  189. data/lib/nokogiri/xml/sax/document.rb +107 -2
  190. data/lib/nokogiri/xml/sax/parser.rb +57 -7
  191. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  192. data/lib/nokogiri/xml/sax/push_parser.rb +13 -1
  193. data/lib/nokogiri/xml/schema.rb +63 -0
  194. data/lib/nokogiri/xml/syntax_error.rb +25 -1
  195. data/lib/nokogiri/xml/text.rb +4 -1
  196. data/lib/nokogiri/xml/xpath.rb +1 -1
  197. data/lib/nokogiri/xml/xpath/syntax_error.rb +3 -0
  198. data/lib/nokogiri/xml/xpath_context.rb +2 -0
  199. data/lib/nokogiri/xslt.rb +26 -2
  200. data/lib/nokogiri/xslt/stylesheet.rb +19 -0
  201. data/lib/xsd/xmlparser/nokogiri.rb +45 -9
  202. data/tasks/cross_compile.rb +173 -0
  203. data/tasks/test.rb +25 -69
  204. data/test/css/test_nthiness.rb +3 -4
  205. data/test/css/test_parser.rb +75 -20
  206. data/test/css/test_tokenizer.rb +23 -1
  207. data/test/css/test_xpath_visitor.rb +10 -1
  208. data/test/decorators/test_slop.rb +16 -0
  209. data/test/ffi/test_document.rb +35 -0
  210. data/test/files/2ch.html +108 -0
  211. data/test/files/address_book.rlx +12 -0
  212. data/test/files/address_book.xml +10 -0
  213. data/test/files/bar/bar.xsd +4 -0
  214. data/test/files/encoding.html +82 -0
  215. data/test/files/encoding.xhtml +84 -0
  216. data/test/files/foo/foo.xsd +4 -0
  217. data/test/files/po.xml +32 -0
  218. data/test/files/po.xsd +66 -0
  219. data/test/files/shift_jis.html +10 -0
  220. data/test/files/shift_jis.xml +5 -0
  221. data/test/files/snuggles.xml +3 -0
  222. data/test/files/staff.dtd +10 -0
  223. data/test/files/valid_bar.xml +2 -0
  224. data/test/helper.rb +101 -23
  225. data/test/html/sax/test_parser.rb +81 -2
  226. data/test/html/sax/test_parser_context.rb +48 -0
  227. data/test/html/test_builder.rb +39 -8
  228. data/test/html/test_document.rb +186 -23
  229. data/test/html/test_document_encoding.rb +78 -1
  230. data/test/html/test_document_fragment.rb +253 -0
  231. data/test/html/test_element_description.rb +98 -0
  232. data/test/html/test_named_characters.rb +1 -1
  233. data/test/html/test_node.rb +124 -36
  234. data/test/html/test_node_encoding.rb +27 -0
  235. data/test/test_convert_xpath.rb +1 -52
  236. data/test/test_css_cache.rb +2 -13
  237. data/test/test_encoding_handler.rb +46 -0
  238. data/test/test_memory_leak.rb +88 -19
  239. data/test/test_nokogiri.rb +38 -5
  240. data/test/test_reader.rb +188 -6
  241. data/test/test_soap4r_sax.rb +52 -0
  242. data/test/test_xslt_transforms.rb +183 -83
  243. data/test/xml/node/test_save_options.rb +1 -1
  244. data/test/xml/node/test_subclass.rb +44 -0
  245. data/test/xml/sax/test_parser.rb +175 -4
  246. data/test/xml/sax/test_parser_context.rb +113 -0
  247. data/test/xml/sax/test_push_parser.rb +90 -2
  248. data/test/xml/test_attr.rb +35 -1
  249. data/test/xml/test_attribute_decl.rb +82 -0
  250. data/test/xml/test_builder.rb +186 -1
  251. data/test/xml/test_cdata.rb +32 -1
  252. data/test/xml/test_comment.rb +13 -1
  253. data/test/xml/test_document.rb +415 -43
  254. data/test/xml/test_document_encoding.rb +1 -1
  255. data/test/xml/test_document_fragment.rb +173 -5
  256. data/test/xml/test_dtd.rb +61 -6
  257. data/test/xml/test_dtd_encoding.rb +3 -1
  258. data/test/xml/test_element_content.rb +56 -0
  259. data/test/xml/test_element_decl.rb +73 -0
  260. data/test/xml/test_entity_decl.rb +120 -0
  261. data/test/xml/test_entity_reference.rb +5 -1
  262. data/test/xml/test_namespace.rb +68 -0
  263. data/test/xml/test_node.rb +546 -201
  264. data/test/xml/test_node_attributes.rb +34 -0
  265. data/test/xml/test_node_encoding.rb +33 -3
  266. data/test/xml/test_node_reparenting.rb +321 -0
  267. data/test/xml/test_node_set.rb +538 -2
  268. data/test/xml/test_parse_options.rb +52 -0
  269. data/test/xml/test_processing_instruction.rb +6 -1
  270. data/test/xml/test_reader_encoding.rb +1 -1
  271. data/test/xml/test_relax_ng.rb +60 -0
  272. data/test/xml/test_schema.rb +94 -0
  273. data/test/xml/test_syntax_error.rb +12 -0
  274. data/test/xml/test_text.rb +35 -1
  275. data/test/xml/test_unparented_node.rb +5 -5
  276. data/test/xml/test_xpath.rb +142 -11
  277. data/test/xslt/test_custom_functions.rb +94 -0
  278. metadata +328 -92
  279. data/ext/nokogiri/html_sax_parser.c +0 -57
  280. data/ext/nokogiri/html_sax_parser.h +0 -11
  281. data/ext/nokogiri/iconv.dll +0 -0
  282. data/ext/nokogiri/libexslt.dll +0 -0
  283. data/ext/nokogiri/libxml2.dll +0 -0
  284. data/ext/nokogiri/libxslt.dll +0 -0
  285. data/ext/nokogiri/native.so +0 -0
  286. data/ext/nokogiri/xml_xpath.c +0 -53
  287. data/ext/nokogiri/xml_xpath.h +0 -11
  288. data/ext/nokogiri/zlib1.dll +0 -0
  289. data/lib/action-nokogiri.rb +0 -30
  290. data/lib/nokogiri/css/generated_parser.rb +0 -713
  291. data/lib/nokogiri/css/generated_tokenizer.rb +0 -144
  292. data/lib/nokogiri/decorators.rb +0 -2
  293. data/lib/nokogiri/decorators/hpricot.rb +0 -3
  294. data/lib/nokogiri/decorators/hpricot/node.rb +0 -56
  295. data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -54
  296. data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -28
  297. data/lib/nokogiri/hpricot.rb +0 -51
  298. data/lib/nokogiri/xml/comment.rb +0 -6
  299. data/lib/nokogiri/xml/element.rb +0 -6
  300. data/lib/nokogiri/xml/entity_declaration.rb +0 -9
  301. data/lib/nokogiri/xml/fragment_handler.rb +0 -34
  302. data/test/hpricot/files/basic.xhtml +0 -17
  303. data/test/hpricot/files/boingboing.html +0 -2266
  304. data/test/hpricot/files/cy0.html +0 -3653
  305. data/test/hpricot/files/immob.html +0 -400
  306. data/test/hpricot/files/pace_application.html +0 -1320
  307. data/test/hpricot/files/tenderlove.html +0 -16
  308. data/test/hpricot/files/uswebgen.html +0 -220
  309. data/test/hpricot/files/utf8.html +0 -1054
  310. data/test/hpricot/files/week9.html +0 -1723
  311. data/test/hpricot/files/why.xml +0 -19
  312. data/test/hpricot/load_files.rb +0 -11
  313. data/test/hpricot/test_alter.rb +0 -68
  314. data/test/hpricot/test_builder.rb +0 -20
  315. data/test/hpricot/test_parser.rb +0 -426
  316. data/test/hpricot/test_paths.rb +0 -15
  317. data/test/hpricot/test_preserved.rb +0 -77
  318. data/test/hpricot/test_xml.rb +0 -30
  319. data/test/test_gc.rb +0 -15
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
1
+ require "helper"
2
2
 
3
3
  module Nokogiri
4
4
  module XML
@@ -1,24 +1,192 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
1
+ require "helper"
2
2
 
3
3
  module Nokogiri
4
4
  module XML
5
5
  class TestDocumentFragment < Nokogiri::TestCase
6
- def test_new
6
+ def setup
7
+ super
7
8
  @xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
8
- fragment = Nokogiri::XML::DocumentFragment.new(@xml)
9
+ end
10
+
11
+ def test_fragment_is_relative
12
+ doc = Nokogiri::XML('<root><a xmlns="blah" /></root>')
13
+ ctx = doc.root.child
14
+ fragment = Nokogiri::XML::DocumentFragment.new(doc, '<hello />', ctx)
15
+ hello = fragment.child
16
+
17
+ assert_equal 'hello', hello.name
18
+ assert_equal doc.root.child.namespace, hello.namespace
19
+ end
20
+
21
+ def test_node_fragment_is_relative
22
+ doc = Nokogiri::XML('<root><a xmlns="blah" /></root>')
23
+ assert doc.root.child
24
+ fragment = doc.root.child.fragment('<hello />')
25
+ hello = fragment.child
26
+
27
+ assert_equal 'hello', hello.name
28
+ assert_equal doc.root.child.namespace, hello.namespace
29
+ end
30
+
31
+ def test_new
32
+ assert Nokogiri::XML::DocumentFragment.new(@xml)
9
33
  end
10
34
 
11
35
  def test_fragment_should_have_document
12
- @xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
13
36
  fragment = Nokogiri::XML::DocumentFragment.new(@xml)
14
37
  assert_equal @xml, fragment.document
15
38
  end
16
39
 
17
40
  def test_name
18
- @xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
19
41
  fragment = Nokogiri::XML::DocumentFragment.new(@xml)
20
42
  assert_equal '#document-fragment', fragment.name
21
43
  end
44
+
45
+ def test_static_method
46
+ fragment = Nokogiri::XML::DocumentFragment.parse("<div>a</div>")
47
+ assert_instance_of Nokogiri::XML::DocumentFragment, fragment
48
+ end
49
+
50
+ def test_static_method_with_namespaces
51
+ # follows different path in FragmentHandler#start_element which blew up after 597195ff
52
+ fragment = Nokogiri::XML::DocumentFragment.parse("<o:div>a</o:div>")
53
+ assert_instance_of Nokogiri::XML::DocumentFragment, fragment
54
+ end
55
+
56
+ def test_many_fragments
57
+ 100.times { Nokogiri::XML::DocumentFragment.new(@xml) }
58
+ end
59
+
60
+ def test_subclass
61
+ klass = Class.new(Nokogiri::XML::DocumentFragment)
62
+ fragment = klass.new(@xml, "<div>a</div>")
63
+ assert_instance_of klass, fragment
64
+ end
65
+
66
+ def test_subclass_parse
67
+ klass = Class.new(Nokogiri::XML::DocumentFragment)
68
+ doc = klass.parse("<div>a</div>")
69
+ assert_instance_of klass, doc
70
+ end
71
+
72
+ def test_xml_fragment
73
+ fragment = Nokogiri::XML.fragment("<div>a</div>")
74
+ assert_equal "<div>a</div>", fragment.to_s
75
+ end
76
+
77
+ def test_xml_fragment_has_multiple_toplevel_children
78
+ doc = "<div>b</div><div>e</div>"
79
+ fragment = Nokogiri::XML::Document.new.fragment(doc)
80
+ assert_equal "<div>b</div><div>e</div>", fragment.to_s
81
+ end
82
+
83
+ def test_xml_fragment_has_outer_text
84
+ # this test is descriptive, not prescriptive.
85
+ doc = "a<div>b</div>"
86
+ fragment = Nokogiri::XML::Document.new.fragment(doc)
87
+ assert_equal "a<div>b</div>", fragment.to_s
88
+
89
+ doc = "<div>b</div>c"
90
+ fragment = Nokogiri::XML::Document.new.fragment(doc)
91
+ assert_equal "<div>b</div>c", fragment.to_s
92
+ end
93
+
94
+ def test_xml_fragment_case_sensitivity
95
+ doc = "<crazyDiv>b</crazyDiv>"
96
+ fragment = Nokogiri::XML::Document.new.fragment(doc)
97
+ assert_equal "<crazyDiv>b</crazyDiv>", fragment.to_s
98
+ end
99
+
100
+ def test_xml_fragment_with_leading_whitespace
101
+ doc = " <div>b</div> "
102
+ fragment = Nokogiri::XML::Document.new.fragment(doc)
103
+ assert_equal " <div>b</div> ", fragment.to_s
104
+ end
105
+
106
+ def test_xml_fragment_with_leading_whitespace_and_newline
107
+ doc = " \n<div>b</div> "
108
+ fragment = Nokogiri::XML::Document.new.fragment(doc)
109
+ assert_equal " \n<div>b</div> ", fragment.to_s
110
+ end
111
+
112
+ def test_fragment_children_search
113
+ fragment = Nokogiri::XML::Document.new.fragment(
114
+ '<div><p id="content">hi</p></div>'
115
+ )
116
+ css = fragment.children.css('p')
117
+ xpath = fragment.children.xpath('.//p')
118
+ assert_equal css, xpath
119
+ end
120
+
121
+ def test_fragment_search
122
+ frag = Nokogiri::XML::Document.new.fragment '<p id="content">hi</p>'
123
+
124
+ p_tag = frag.css('#content').first
125
+ assert_equal 'p', p_tag.name
126
+
127
+ assert_equal p_tag, frag.xpath('./*[@id = \'content\']').first
128
+ end
129
+
130
+ def test_fragment_without_a_namespace_does_not_get_a_namespace
131
+ doc = Nokogiri::XML <<-EOX
132
+ <root xmlns="http://tenderlovemaking.com/" xmlns:foo="http://flavorjon.es/" xmlns:bar="http://google.com/">
133
+ <foo:existing></foo:existing>
134
+ </root>
135
+ EOX
136
+ frag = doc.fragment "<newnode></newnode>"
137
+ assert_nil frag.namespace
138
+ end
139
+
140
+ def test_fragment_namespace_resolves_against_document_root
141
+ doc = Nokogiri::XML <<-EOX
142
+ <root xmlns:foo="http://flavorjon.es/" xmlns:bar="http://google.com/">
143
+ <foo:existing></foo:existing>
144
+ </root>
145
+ EOX
146
+ ns = doc.root.namespace_definitions.detect { |x| x.prefix == "bar" }
147
+
148
+ frag = doc.fragment "<bar:newnode></bar:newnode>"
149
+ assert frag.children.first.namespace
150
+ assert_equal ns, frag.children.first.namespace
151
+ end
152
+
153
+ def test_fragment_invalid_namespace_is_silently_ignored
154
+ doc = Nokogiri::XML <<-EOX
155
+ <root xmlns:foo="http://flavorjon.es/" xmlns:bar="http://google.com/">
156
+ <foo:existing></foo:existing>
157
+ </root>
158
+ EOX
159
+ frag = doc.fragment "<baz:newnode></baz:newnode>"
160
+ assert_nil frag.children.first.namespace
161
+ end
162
+
163
+ def test_decorator_is_applied
164
+ x = Module.new do
165
+ def awesome!
166
+ end
167
+ end
168
+ util_decorate(@xml, x)
169
+ fragment = Nokogiri::XML::DocumentFragment.new(@xml, "<div>a</div><div>b</div>")
170
+
171
+ assert node_set = fragment.css('div')
172
+ assert node_set.respond_to?(:awesome!)
173
+ node_set.each do |node|
174
+ assert node.respond_to?(:awesome!), node.class
175
+ end
176
+ assert fragment.children.respond_to?(:awesome!), fragment.children.class
177
+ end
178
+
179
+ def test_for_libxml_in_context_fragment_parsing_bug_workaround
180
+ 10.times do
181
+ begin
182
+ fragment = Nokogiri::XML.fragment("<div></div>")
183
+ parent = fragment.children.first
184
+ child = parent.parse("<h1></h1>").first
185
+ parent.add_child child
186
+ end
187
+ GC.start
188
+ end
189
+ end
22
190
  end
23
191
  end
24
192
  end
data/test/xml/test_dtd.rb CHANGED
@@ -1,7 +1,7 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
1
+ require "helper"
2
2
 
3
3
  module Nokogiri
4
- module HTML
4
+ module XML
5
5
  class TestDTD < Nokogiri::TestCase
6
6
  def setup
7
7
  super
@@ -9,6 +9,65 @@ module Nokogiri
9
9
  assert @dtd = @xml.internal_subset
10
10
  end
11
11
 
12
+ def test_system_id
13
+ assert_equal 'staff.dtd', @dtd.system_id
14
+ end
15
+
16
+ def test_external_id
17
+ xml = Nokogiri::XML('<!DOCTYPE foo PUBLIC "bar" ><foo />')
18
+ assert dtd = xml.internal_subset
19
+ assert_equal 'bar', dtd.external_id
20
+ end
21
+
22
+ def test_content
23
+ assert_raise NoMethodError do
24
+ @dtd.content
25
+ end
26
+ end
27
+
28
+ def test_empty_attributes
29
+ dtd = Nokogiri::HTML("<html></html>").internal_subset
30
+ assert_equal Hash.new, dtd.attributes
31
+ end
32
+
33
+ def test_attributes
34
+ assert_equal ['width'], @dtd.attributes.keys
35
+ assert_equal '0', @dtd.attributes['width'].default
36
+ end
37
+
38
+ def test_keys
39
+ assert_equal ['width'], @dtd.keys
40
+ end
41
+
42
+ def test_each
43
+ hash = {}
44
+ @dtd.each { |key, value| hash[key] = value }
45
+ assert_equal @dtd.attributes, hash
46
+ end
47
+
48
+ def test_namespace
49
+ assert_raise NoMethodError do
50
+ @dtd.namespace
51
+ end
52
+ end
53
+
54
+ def test_namespace_definitions
55
+ assert_raise NoMethodError do
56
+ @dtd.namespace_definitions
57
+ end
58
+ end
59
+
60
+ def test_line
61
+ assert_raise NoMethodError do
62
+ @dtd.line
63
+ end
64
+ end
65
+
66
+ def test_validate
67
+ list = @xml.internal_subset.validate @xml
68
+ assert_equal 44, list.length
69
+ end
70
+
12
71
  def test_external_subsets
13
72
  assert subset = @xml.internal_subset
14
73
  assert_equal 'staff', subset.name
@@ -19,10 +78,6 @@ module Nokogiri
19
78
  assert_equal %w[ ent1 ent2 ent3 ent4 ent5 ].sort, entities.keys.sort
20
79
  end
21
80
 
22
- def test_attributes
23
- assert_nil @dtd.attributes
24
- end
25
-
26
81
  def test_elements
27
82
  assert elements = @dtd.elements
28
83
  assert_equal %w[ br ], elements.keys
@@ -1,4 +1,6 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require "helper"
2
4
 
3
5
  module Nokogiri
4
6
  module XML
@@ -0,0 +1,56 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestElementContent < Nokogiri::TestCase
6
+ def setup
7
+ super
8
+ @xml = Nokogiri::XML(<<-eoxml)
9
+ <?xml version="1.0"?><?TEST-STYLE PIDATA?>
10
+ <!DOCTYPE staff SYSTEM "staff.dtd" [
11
+ <!ELEMENT br EMPTY>
12
+ <!ELEMENT div1 (head, (p | list | note)*, div2*)>
13
+ <!ELEMENT div2 (tender:love)>
14
+ ]>
15
+ </root>
16
+ eoxml
17
+ @elements = @xml.internal_subset.children.find_all { |x|
18
+ x.type == 15
19
+ }
20
+ @tree = @elements[1].content
21
+ end
22
+
23
+ def test_allowed_content_not_defined
24
+ assert_nil @elements.first.content
25
+ end
26
+
27
+ def test_document
28
+ assert @tree
29
+ assert_equal @xml, @tree.document
30
+ end
31
+
32
+ def test_type
33
+ assert_equal ElementContent::SEQ, @tree.type
34
+ end
35
+
36
+ def test_children
37
+ assert_equal 2, @tree.children.length
38
+ end
39
+
40
+ def test_name
41
+ assert_nil @tree.name
42
+ assert_equal 'head', @tree.children.first.name
43
+ assert_equal 'p', @tree.children[1].children.first.children.first.name
44
+ end
45
+
46
+ def test_occur
47
+ assert_equal ElementContent::ONCE, @tree.occur
48
+ end
49
+
50
+ def test_prefix
51
+ assert_nil @tree.prefix
52
+ assert_equal 'tender', @elements[2].content.prefix
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,73 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestElementDecl < Nokogiri::TestCase
6
+ def setup
7
+ super
8
+ @xml = Nokogiri::XML(<<-eoxml)
9
+ <?xml version="1.0"?><?TEST-STYLE PIDATA?>
10
+ <!DOCTYPE staff SYSTEM "staff.dtd" [
11
+ <!ELEMENT br EMPTY>
12
+ <!ELEMENT div1 (head, (p | list | note)*, div2*)>
13
+ <!ELEMENT my:way EMPTY>
14
+ <!ATTLIST br width CDATA "0">
15
+ <!ATTLIST br height CDATA "0">
16
+ ]>
17
+ </root>
18
+ eoxml
19
+ @elements = @xml.internal_subset.children.find_all { |x|
20
+ x.type == 15
21
+ }
22
+ end
23
+
24
+ def test_inspect
25
+ e = @elements.first
26
+ assert_equal(
27
+ "#<#{e.class.name}:#{sprintf("0x%x", e.object_id)} #{e.to_s.inspect}>",
28
+ e.inspect
29
+ )
30
+ end
31
+
32
+ def test_prefix
33
+ assert_nil @elements[1].prefix
34
+ assert_equal 'my', @elements[2].prefix
35
+ end
36
+
37
+ def test_line
38
+ assert_raise NoMethodError do
39
+ @elements.first.line
40
+ end
41
+ end
42
+
43
+ def test_namespace
44
+ assert_raise NoMethodError do
45
+ @elements.first.namespace
46
+ end
47
+ end
48
+
49
+ def test_namespace_definitions
50
+ assert_raise NoMethodError do
51
+ @elements.first.namespace_definitions
52
+ end
53
+ end
54
+
55
+ def test_element_type
56
+ assert_equal 1, @elements.first.element_type
57
+ end
58
+
59
+ def test_type
60
+ assert_equal 15, @elements.first.type
61
+ end
62
+
63
+ def test_class
64
+ assert_instance_of Nokogiri::XML::ElementDecl, @elements.first
65
+ end
66
+
67
+ def test_attributes
68
+ assert_equal 2, @elements.first.attribute_nodes.length
69
+ assert_equal 'width', @elements.first.attribute_nodes.first.name
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,120 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestEntityDecl < Nokogiri::TestCase
6
+ def setup
7
+ super
8
+ @xml = Nokogiri::XML(<<-eoxml)
9
+ <?xml version="1.0"?><?TEST-STYLE PIDATA?>
10
+ <!DOCTYPE staff SYSTEM "staff.dtd" [
11
+ <!ENTITY ent1 "es">
12
+ <!ENTITY nocontent >
13
+ ]>
14
+ <root />
15
+ eoxml
16
+
17
+ @entities = @xml.internal_subset.children
18
+ @entity_decl = @entities.first
19
+ end
20
+
21
+ def test_constants # for libffi implementation. *sigh* sorry Mike. :-(
22
+ assert_equal 1, EntityDecl::INTERNAL_GENERAL
23
+ assert_equal 2, EntityDecl::EXTERNAL_GENERAL_PARSED
24
+ assert_equal 3, EntityDecl::EXTERNAL_GENERAL_UNPARSED
25
+ assert_equal 4, EntityDecl::INTERNAL_PARAMETER
26
+ assert_equal 5, EntityDecl::EXTERNAL_PARAMETER
27
+ assert_equal 6, EntityDecl::INTERNAL_PREDEFINED
28
+
29
+ # While I'm here, another problem with libffi comes to mind. If someone
30
+ # upgrades their version of any particular C library, and the constants
31
+ # change values, the client using Ruby code is fucked. That sucks.
32
+ # Basically anything to do with the preprocessor fucks someone using
33
+ # libffi. :-(
34
+ end
35
+
36
+ def test_create_typed_entity
37
+ entity = @xml.create_entity(
38
+ 'foo', EntityDecl::INTERNAL_GENERAL, nil, nil, nil
39
+ )
40
+ assert_equal EntityDecl::INTERNAL_GENERAL, entity.entity_type
41
+ assert_equal 'foo', entity.name
42
+ end
43
+
44
+ def test_new
45
+ entity = Nokogiri::XML::EntityDecl.new(
46
+ 'foo', @xml, EntityDecl::INTERNAL_GENERAL, nil, nil, nil
47
+ )
48
+ assert_equal EntityDecl::INTERNAL_GENERAL, entity.entity_type
49
+ assert_equal 'foo', entity.name
50
+ end
51
+
52
+ def test_create_default_args
53
+ entity = @xml.create_entity('foo')
54
+ assert_equal EntityDecl::INTERNAL_GENERAL, entity.entity_type
55
+ assert_equal 'foo', entity.name
56
+ end
57
+
58
+ def test_external_id
59
+ assert_nil @entity_decl.external_id
60
+ end
61
+
62
+ def test_system_id
63
+ assert_nil @entity_decl.system_id
64
+ end
65
+
66
+ def test_entity_type
67
+ assert_equal 1, @entity_decl.entity_type
68
+ end
69
+
70
+ def test_original_content
71
+ assert_equal "es", @entity_decl.original_content
72
+ assert_nil @entities[1].original_content
73
+ end
74
+
75
+ def test_content
76
+ assert_equal "es", @entity_decl.content
77
+ assert_nil @entities[1].content
78
+ end
79
+
80
+ def test_type
81
+ assert_equal 17, @entities.first.type
82
+ end
83
+
84
+ def test_class
85
+ assert_instance_of Nokogiri::XML::EntityDecl, @entities.first
86
+ end
87
+
88
+ def test_attributes
89
+ assert_raise NoMethodError do
90
+ @entity_decl.attributes
91
+ end
92
+ end
93
+
94
+ def test_namespace
95
+ assert_raise NoMethodError do
96
+ @entity_decl.namespace
97
+ end
98
+ end
99
+
100
+ def test_namespace_definitions
101
+ assert_raise NoMethodError do
102
+ @entity_decl.namespace_definitions
103
+ end
104
+ end
105
+
106
+ def test_line
107
+ assert_raise NoMethodError do
108
+ @entity_decl.line
109
+ end
110
+ end
111
+
112
+ def test_inspect
113
+ assert_equal(
114
+ "#<#{@entity_decl.class.name}:#{sprintf("0x%x", @entity_decl.object_id)} #{@entity_decl.to_s.inspect}>",
115
+ @entity_decl.inspect
116
+ )
117
+ end
118
+ end
119
+ end
120
+ end