superfeedr-nokogiri 1.4.0.20091116183308

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. data/.autotest +27 -0
  2. data/CHANGELOG.ja.rdoc +330 -0
  3. data/CHANGELOG.rdoc +314 -0
  4. data/Manifest.txt +269 -0
  5. data/README.ja.rdoc +105 -0
  6. data/README.rdoc +118 -0
  7. data/Rakefile +244 -0
  8. data/bin/nokogiri +49 -0
  9. data/ext/nokogiri/extconf.rb +145 -0
  10. data/ext/nokogiri/html_document.c +145 -0
  11. data/ext/nokogiri/html_document.h +10 -0
  12. data/ext/nokogiri/html_element_description.c +272 -0
  13. data/ext/nokogiri/html_element_description.h +10 -0
  14. data/ext/nokogiri/html_entity_lookup.c +32 -0
  15. data/ext/nokogiri/html_entity_lookup.h +8 -0
  16. data/ext/nokogiri/html_sax_parser_context.c +92 -0
  17. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  18. data/ext/nokogiri/nokogiri.c +89 -0
  19. data/ext/nokogiri/nokogiri.h +145 -0
  20. data/ext/nokogiri/xml_attr.c +92 -0
  21. data/ext/nokogiri/xml_attr.h +9 -0
  22. data/ext/nokogiri/xml_attribute_decl.c +67 -0
  23. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  24. data/ext/nokogiri/xml_cdata.c +54 -0
  25. data/ext/nokogiri/xml_cdata.h +9 -0
  26. data/ext/nokogiri/xml_comment.c +52 -0
  27. data/ext/nokogiri/xml_comment.h +9 -0
  28. data/ext/nokogiri/xml_document.c +388 -0
  29. data/ext/nokogiri/xml_document.h +24 -0
  30. data/ext/nokogiri/xml_document_fragment.c +46 -0
  31. data/ext/nokogiri/xml_document_fragment.h +10 -0
  32. data/ext/nokogiri/xml_dtd.c +192 -0
  33. data/ext/nokogiri/xml_dtd.h +10 -0
  34. data/ext/nokogiri/xml_element_content.c +123 -0
  35. data/ext/nokogiri/xml_element_content.h +10 -0
  36. data/ext/nokogiri/xml_element_decl.c +69 -0
  37. data/ext/nokogiri/xml_element_decl.h +9 -0
  38. data/ext/nokogiri/xml_entity_decl.c +97 -0
  39. data/ext/nokogiri/xml_entity_decl.h +10 -0
  40. data/ext/nokogiri/xml_entity_reference.c +50 -0
  41. data/ext/nokogiri/xml_entity_reference.h +9 -0
  42. data/ext/nokogiri/xml_io.c +31 -0
  43. data/ext/nokogiri/xml_io.h +11 -0
  44. data/ext/nokogiri/xml_namespace.c +74 -0
  45. data/ext/nokogiri/xml_namespace.h +12 -0
  46. data/ext/nokogiri/xml_node.c +1060 -0
  47. data/ext/nokogiri/xml_node.h +13 -0
  48. data/ext/nokogiri/xml_node_set.c +397 -0
  49. data/ext/nokogiri/xml_node_set.h +9 -0
  50. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  51. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  52. data/ext/nokogiri/xml_reader.c +593 -0
  53. data/ext/nokogiri/xml_reader.h +10 -0
  54. data/ext/nokogiri/xml_relax_ng.c +159 -0
  55. data/ext/nokogiri/xml_relax_ng.h +9 -0
  56. data/ext/nokogiri/xml_sax_parser.c +286 -0
  57. data/ext/nokogiri/xml_sax_parser.h +43 -0
  58. data/ext/nokogiri/xml_sax_parser_context.c +155 -0
  59. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  60. data/ext/nokogiri/xml_sax_push_parser.c +114 -0
  61. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  62. data/ext/nokogiri/xml_schema.c +156 -0
  63. data/ext/nokogiri/xml_schema.h +9 -0
  64. data/ext/nokogiri/xml_syntax_error.c +261 -0
  65. data/ext/nokogiri/xml_syntax_error.h +13 -0
  66. data/ext/nokogiri/xml_text.c +48 -0
  67. data/ext/nokogiri/xml_text.h +9 -0
  68. data/ext/nokogiri/xml_xpath.c +53 -0
  69. data/ext/nokogiri/xml_xpath.h +11 -0
  70. data/ext/nokogiri/xml_xpath_context.c +239 -0
  71. data/ext/nokogiri/xml_xpath_context.h +9 -0
  72. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  73. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  74. data/lib/nokogiri.rb +116 -0
  75. data/lib/nokogiri/css.rb +25 -0
  76. data/lib/nokogiri/css/generated_parser.rb +646 -0
  77. data/lib/nokogiri/css/generated_tokenizer.rb +142 -0
  78. data/lib/nokogiri/css/node.rb +99 -0
  79. data/lib/nokogiri/css/parser.rb +82 -0
  80. data/lib/nokogiri/css/parser.y +227 -0
  81. data/lib/nokogiri/css/syntax_error.rb +7 -0
  82. data/lib/nokogiri/css/tokenizer.rb +7 -0
  83. data/lib/nokogiri/css/tokenizer.rex +54 -0
  84. data/lib/nokogiri/css/xpath_visitor.rb +162 -0
  85. data/lib/nokogiri/decorators/slop.rb +33 -0
  86. data/lib/nokogiri/ffi/html/document.rb +28 -0
  87. data/lib/nokogiri/ffi/html/element_description.rb +85 -0
  88. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  89. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  90. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  91. data/lib/nokogiri/ffi/libxml.rb +356 -0
  92. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  93. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  94. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  95. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  96. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  97. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  98. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  99. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  100. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  101. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  102. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  103. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  104. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  105. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  106. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  107. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  108. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  109. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +19 -0
  110. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  111. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  112. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +15 -0
  113. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  114. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  115. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  116. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  117. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  118. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  119. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  120. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  121. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  122. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  123. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  124. data/lib/nokogiri/ffi/xml/document.rb +135 -0
  125. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  126. data/lib/nokogiri/ffi/xml/dtd.rb +69 -0
  127. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  128. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  129. data/lib/nokogiri/ffi/xml/entity_decl.rb +27 -0
  130. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  131. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  132. data/lib/nokogiri/ffi/xml/node.rb +444 -0
  133. data/lib/nokogiri/ffi/xml/node_set.rb +133 -0
  134. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  135. data/lib/nokogiri/ffi/xml/reader.rb +227 -0
  136. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  137. data/lib/nokogiri/ffi/xml/sax/parser.rb +142 -0
  138. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +67 -0
  139. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +39 -0
  140. data/lib/nokogiri/ffi/xml/schema.rb +92 -0
  141. data/lib/nokogiri/ffi/xml/syntax_error.rb +91 -0
  142. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  143. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  144. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  145. data/lib/nokogiri/ffi/xslt/stylesheet.rb +47 -0
  146. data/lib/nokogiri/html.rb +35 -0
  147. data/lib/nokogiri/html/builder.rb +35 -0
  148. data/lib/nokogiri/html/document.rb +88 -0
  149. data/lib/nokogiri/html/document_fragment.rb +15 -0
  150. data/lib/nokogiri/html/element_description.rb +23 -0
  151. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  152. data/lib/nokogiri/html/sax/parser.rb +48 -0
  153. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  154. data/lib/nokogiri/syntax_error.rb +4 -0
  155. data/lib/nokogiri/version.rb +33 -0
  156. data/lib/nokogiri/version_warning.rb +11 -0
  157. data/lib/nokogiri/xml.rb +67 -0
  158. data/lib/nokogiri/xml/attr.rb +14 -0
  159. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  160. data/lib/nokogiri/xml/builder.rb +405 -0
  161. data/lib/nokogiri/xml/cdata.rb +11 -0
  162. data/lib/nokogiri/xml/character_data.rb +7 -0
  163. data/lib/nokogiri/xml/document.rb +131 -0
  164. data/lib/nokogiri/xml/document_fragment.rb +69 -0
  165. data/lib/nokogiri/xml/dtd.rb +11 -0
  166. data/lib/nokogiri/xml/element_content.rb +36 -0
  167. data/lib/nokogiri/xml/element_decl.rb +13 -0
  168. data/lib/nokogiri/xml/entity_decl.rb +15 -0
  169. data/lib/nokogiri/xml/fragment_handler.rb +71 -0
  170. data/lib/nokogiri/xml/namespace.rb +13 -0
  171. data/lib/nokogiri/xml/node.rb +665 -0
  172. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  173. data/lib/nokogiri/xml/node_set.rb +307 -0
  174. data/lib/nokogiri/xml/notation.rb +6 -0
  175. data/lib/nokogiri/xml/parse_options.rb +85 -0
  176. data/lib/nokogiri/xml/pp.rb +2 -0
  177. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  178. data/lib/nokogiri/xml/pp/node.rb +56 -0
  179. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  180. data/lib/nokogiri/xml/reader.rb +74 -0
  181. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  182. data/lib/nokogiri/xml/sax.rb +4 -0
  183. data/lib/nokogiri/xml/sax/document.rb +160 -0
  184. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  185. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  186. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  187. data/lib/nokogiri/xml/schema.rb +61 -0
  188. data/lib/nokogiri/xml/syntax_error.rb +38 -0
  189. data/lib/nokogiri/xml/xpath.rb +10 -0
  190. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  191. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  192. data/lib/nokogiri/xslt.rb +48 -0
  193. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  194. data/lib/xsd/xmlparser/nokogiri.rb +71 -0
  195. data/tasks/test.rb +100 -0
  196. data/test/css/test_nthiness.rb +159 -0
  197. data/test/css/test_parser.rb +277 -0
  198. data/test/css/test_tokenizer.rb +183 -0
  199. data/test/css/test_xpath_visitor.rb +76 -0
  200. data/test/ffi/test_document.rb +35 -0
  201. data/test/files/2ch.html +108 -0
  202. data/test/files/address_book.rlx +12 -0
  203. data/test/files/address_book.xml +10 -0
  204. data/test/files/bar/bar.xsd +4 -0
  205. data/test/files/dont_hurt_em_why.xml +422 -0
  206. data/test/files/exslt.xml +8 -0
  207. data/test/files/exslt.xslt +35 -0
  208. data/test/files/foo/foo.xsd +4 -0
  209. data/test/files/po.xml +32 -0
  210. data/test/files/po.xsd +66 -0
  211. data/test/files/shift_jis.html +10 -0
  212. data/test/files/shift_jis.xml +5 -0
  213. data/test/files/snuggles.xml +3 -0
  214. data/test/files/staff.dtd +10 -0
  215. data/test/files/staff.xml +59 -0
  216. data/test/files/staff.xslt +32 -0
  217. data/test/files/tlm.html +850 -0
  218. data/test/files/valid_bar.xml +2 -0
  219. data/test/helper.rb +136 -0
  220. data/test/html/sax/test_parser.rb +64 -0
  221. data/test/html/sax/test_parser_context.rb +48 -0
  222. data/test/html/test_builder.rb +164 -0
  223. data/test/html/test_document.rb +390 -0
  224. data/test/html/test_document_encoding.rb +77 -0
  225. data/test/html/test_document_fragment.rb +132 -0
  226. data/test/html/test_element_description.rb +94 -0
  227. data/test/html/test_named_characters.rb +14 -0
  228. data/test/html/test_node.rb +228 -0
  229. data/test/html/test_node_encoding.rb +27 -0
  230. data/test/test_convert_xpath.rb +135 -0
  231. data/test/test_css_cache.rb +45 -0
  232. data/test/test_gc.rb +15 -0
  233. data/test/test_memory_leak.rb +77 -0
  234. data/test/test_nokogiri.rb +134 -0
  235. data/test/test_reader.rb +358 -0
  236. data/test/test_xslt_transforms.rb +131 -0
  237. data/test/xml/node/test_save_options.rb +20 -0
  238. data/test/xml/node/test_subclass.rb +44 -0
  239. data/test/xml/sax/test_parser.rb +307 -0
  240. data/test/xml/sax/test_parser_context.rb +56 -0
  241. data/test/xml/sax/test_push_parser.rb +131 -0
  242. data/test/xml/test_attr.rb +38 -0
  243. data/test/xml/test_attribute_decl.rb +82 -0
  244. data/test/xml/test_builder.rb +167 -0
  245. data/test/xml/test_cdata.rb +38 -0
  246. data/test/xml/test_comment.rb +29 -0
  247. data/test/xml/test_document.rb +607 -0
  248. data/test/xml/test_document_encoding.rb +26 -0
  249. data/test/xml/test_document_fragment.rb +138 -0
  250. data/test/xml/test_dtd.rb +82 -0
  251. data/test/xml/test_dtd_encoding.rb +33 -0
  252. data/test/xml/test_element_content.rb +56 -0
  253. data/test/xml/test_element_decl.rb +73 -0
  254. data/test/xml/test_entity_decl.rb +83 -0
  255. data/test/xml/test_entity_reference.rb +21 -0
  256. data/test/xml/test_namespace.rb +68 -0
  257. data/test/xml/test_node.rb +889 -0
  258. data/test/xml/test_node_attributes.rb +34 -0
  259. data/test/xml/test_node_encoding.rb +107 -0
  260. data/test/xml/test_node_set.rb +531 -0
  261. data/test/xml/test_parse_options.rb +52 -0
  262. data/test/xml/test_processing_instruction.rb +30 -0
  263. data/test/xml/test_reader_encoding.rb +126 -0
  264. data/test/xml/test_relax_ng.rb +60 -0
  265. data/test/xml/test_schema.rb +89 -0
  266. data/test/xml/test_syntax_error.rb +27 -0
  267. data/test/xml/test_text.rb +30 -0
  268. data/test/xml/test_unparented_node.rb +381 -0
  269. data/test/xml/test_xpath.rb +106 -0
  270. metadata +430 -0
@@ -0,0 +1,131 @@
1
+ require "helper"
2
+
3
+ class TestXsltTransforms < Nokogiri::TestCase
4
+
5
+ if Nokogiri::VERSION_INFO['libxml']['loaded'] > '2.6.16'
6
+
7
+ def test_class_methods
8
+ doc = Nokogiri::XML(File.read(XML_FILE))
9
+ style = Nokogiri::XSLT(File.read(XSLT_FILE))
10
+
11
+ assert result = style.apply_to(doc, ['title', '"Grandma"'])
12
+ assert_match %r{<h1>Grandma</h1>}, result
13
+ end
14
+
15
+ def test_transform
16
+ assert doc = Nokogiri::XML.parse(File.read(XML_FILE))
17
+ assert doc.xml?
18
+
19
+ assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
20
+
21
+ assert result = style.apply_to(doc, ['title', '"Booyah"'])
22
+ assert_match %r{<h1>Booyah</h1>}, result
23
+ assert_match %r{<th.*Employee ID</th>}, result
24
+ assert_match %r{<th.*Name</th>}, result
25
+ assert_match %r{<th.*Position</th>}, result
26
+ assert_match %r{<th.*Salary</th>}, result
27
+ assert_match %r{<td>EMP0003</td>}, result
28
+ assert_match %r{<td>Margaret Martin</td>}, result
29
+ assert_match %r{<td>Computer Specialist</td>}, result
30
+ assert_match %r{<td>100,000</td>}, result
31
+ assert_no_match %r{Dallas|Texas}, result
32
+ assert_no_match %r{Female}, result
33
+
34
+ assert result = style.apply_to(doc, ['title', '"Grandma"'])
35
+ assert_match %r{<h1>Grandma</h1>}, result
36
+
37
+ assert result = style.apply_to(doc)
38
+ assert_match %r{<h1></h1>}, result
39
+ end
40
+
41
+ def test_transform2
42
+ assert doc = Nokogiri::XML.parse(File.read(XML_FILE))
43
+ assert doc.xml?
44
+
45
+ assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
46
+ assert result_doc = style.transform(doc)
47
+ assert doc.xml?
48
+
49
+ assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
50
+ assert result_doc = style.transform(doc, ['title', '"Booyah"'])
51
+ assert doc.xml?
52
+
53
+ assert result_string = style.apply_to(doc, ['title', '"Booyah"'])
54
+ assert_equal result_string, style.serialize(result_doc)
55
+ end
56
+
57
+ def test_quote_params
58
+ h = {
59
+ :sym => %{xxx},
60
+ 'str' => %{"xxx"},
61
+ :sym2 => %{'xxx'},
62
+ 'str2' => %{x'x'x},
63
+ :sym3 => %{x"x"x},
64
+ }
65
+ hh=h.dup
66
+ result_hash = Nokogiri::XSLT.quote_params(h)
67
+ assert_equal hh, h # non-destructive
68
+
69
+ a=h.to_a.flatten
70
+ result_array = Nokogiri::XSLT.quote_params(a)
71
+ assert_equal h.to_a.flatten, a #non-destructive
72
+
73
+ assert_equal result_array, result_hash
74
+ end
75
+
76
+ def test_exslt
77
+ assert doc = Nokogiri::XML.parse(File.read(EXML_FILE))
78
+ assert doc.xml?
79
+
80
+ assert style = Nokogiri::XSLT.parse(File.read(EXSLT_FILE))
81
+ params = {
82
+ :p1 => 'xxx',
83
+ :p2 => "x'x'x",
84
+ :p3 => 'x"x"x',
85
+ :p4 => '"xxx"'
86
+ }
87
+ result_doc = Nokogiri::XML.parse(style.apply_to(doc,
88
+ Nokogiri::XSLT.quote_params(params)))
89
+
90
+ assert_equal 'func-result', result_doc.at('/root/function').content
91
+ assert_equal 3, result_doc.at('/root/max').content.to_i
92
+ assert_match(
93
+ /\d{4}-\d\d-\d\d[-|+]\d\d:\d\d/,
94
+ result_doc.at('/root/date').content
95
+ )
96
+ result_doc.xpath('/root/params/*').each do |p|
97
+ assert_equal p.content, params[p.name.intern]
98
+ end
99
+ check_params result_doc, params
100
+ result_doc = Nokogiri::XML.parse(style.apply_to(doc,
101
+ Nokogiri::XSLT.quote_params(params.to_a.flatten)))
102
+ check_params result_doc, params
103
+ end
104
+
105
+ def test_xslt_parse_error
106
+ xslt_str = <<-EOX
107
+ <xsl:stylesheet version="1.0"
108
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
109
+ <!-- Not well-formed: -->
110
+ <xsl:template match="/"/>
111
+ <values>
112
+ <xsl:for-each select="//*">
113
+ <value>
114
+ <xsl:value-of select="@id"/>
115
+ </value>
116
+ </xsl:for-each>
117
+ </values>
118
+ </xsl:template>
119
+ </xsl:stylesheet>}
120
+ EOX
121
+ assert_raises(RuntimeError) { Nokogiri::XSLT.parse(xslt_str) }
122
+ end
123
+
124
+ def check_params result_doc, params
125
+ result_doc.xpath('/root/params/*').each do |p|
126
+ assert_equal p.content, params[p.name.intern]
127
+ end
128
+ end
129
+
130
+ end
131
+ end
@@ -0,0 +1,20 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class Node
6
+ class TestSaveOptions < Nokogiri::TestCase
7
+ SaveOptions.constants.each do |constant|
8
+ class_eval %{
9
+ def test_predicate_#{constant.downcase}
10
+ options = SaveOptions.new(SaveOptions::#{constant})
11
+ assert options.#{constant.downcase}?
12
+
13
+ assert SaveOptions.new.#{constant.downcase}.#{constant.downcase}?
14
+ end
15
+ }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,44 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class Node
6
+ class TestSubclass < Nokogiri::TestCase
7
+ {
8
+ Nokogiri::XML::CDATA => 'doc, "foo"',
9
+ Nokogiri::XML::Attr => 'doc, "foo"',
10
+ Nokogiri::XML::Comment => 'doc, "foo"',
11
+ Nokogiri::XML::EntityReference => 'doc, "foo"',
12
+ Nokogiri::XML::ProcessingInstruction => 'doc, "foo", "bar"',
13
+ Nokogiri::XML::DocumentFragment => 'doc',
14
+ Nokogiri::XML::Node => '"foo", doc',
15
+ Nokogiri::XML::Text => '"foo", doc',
16
+ }.each do |klass, constructor|
17
+ class_eval %{
18
+ def test_subclass_#{klass.name.gsub('::', '_')}
19
+ doc = Nokogiri::XML::Document.new
20
+ klass = Class.new(#{klass.name})
21
+ node = klass.new(#{constructor})
22
+ assert_instance_of klass, node
23
+ end
24
+ }
25
+
26
+ class_eval <<-eocode, __FILE__, __LINE__ + 1
27
+ def test_subclass_initialize_#{klass.name.gsub('::', '_')}
28
+ doc = Nokogiri::XML::Document.new
29
+ klass = Class.new(#{klass.name}) do
30
+ attr_accessor :initialized_with
31
+
32
+ def initialize *args
33
+ @initialized_with = args
34
+ end
35
+ end
36
+ node = klass.new(#{constructor}, 1)
37
+ assert_equal [#{constructor}, 1], node.initialized_with
38
+ end
39
+ eocode
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,307 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require "helper"
4
+
5
+ module Nokogiri
6
+ module XML
7
+ module SAX
8
+ class TestParser < Nokogiri::SAX::TestCase
9
+ def setup
10
+ super
11
+ @parser = XML::SAX::Parser.new(Doc.new)
12
+ end
13
+
14
+ def test_parser_context_yielded_io
15
+ doc = Doc.new
16
+ parser = XML::SAX::Parser.new doc
17
+ xml = "<foo a='&amp;b'/>"
18
+
19
+ block_called = false
20
+ parser.parse(StringIO.new(xml)) { |ctx|
21
+ block_called = true
22
+ ctx.replace_entities = true
23
+ }
24
+
25
+ assert block_called
26
+
27
+ assert_equal ['a', '&b'], doc.start_elements.first.last
28
+ end
29
+
30
+ def test_parser_context_yielded_in_memory
31
+ doc = Doc.new
32
+ parser = XML::SAX::Parser.new doc
33
+ xml = "<foo a='&amp;b'/>"
34
+
35
+ block_called = false
36
+ parser.parse(xml) { |ctx|
37
+ block_called = true
38
+ ctx.replace_entities = true
39
+ }
40
+
41
+ assert block_called
42
+
43
+ assert_equal ['a', '&b'], doc.start_elements.first.last
44
+ end
45
+
46
+ def test_xml_decl
47
+ {
48
+ '' => nil,
49
+ '<?xml version="1.0" ?>' => ['1.0'],
50
+ '<?xml version="1.0" encoding="UTF-8" ?>' => ['1.0', 'UTF-8'],
51
+ '<?xml version="1.0" standalone="yes"?>' => ['1.0', 'yes'],
52
+ '<?xml version="1.0" standalone="no"?>' => ['1.0', 'no'],
53
+ }.each do |decl,value|
54
+ parser = XML::SAX::Parser.new(Doc.new)
55
+
56
+ xml = "#{decl}\n<root />"
57
+ parser.parse xml
58
+ assert parser.document.start_document_called, xml
59
+ assert_equal value, parser.document.xmldecls, xml
60
+ end
61
+ end
62
+
63
+ def test_parse_empty
64
+ assert_raises RuntimeError do
65
+ @parser.parse('')
66
+ end
67
+ end
68
+
69
+ def test_namespace_declaration_order_is_saved
70
+ @parser.parse <<-eoxml
71
+ <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
72
+ <a foo:bar='hello' />
73
+ </root>
74
+ eoxml
75
+ assert_equal 2, @parser.document.start_elements_namespace.length
76
+ el = @parser.document.start_elements_namespace.first
77
+ namespaces = el.last
78
+ assert_equal ['foo', 'http://foo.example.com/'], namespaces.first
79
+ assert_equal [nil, 'http://example.com/'], namespaces.last
80
+ end
81
+
82
+ def test_bad_document_calls_error_handler
83
+ @parser.parse('<foo><bar></foo>')
84
+ assert @parser.document.errors
85
+ assert @parser.document.errors.length > 0
86
+ end
87
+
88
+ def test_namespace_are_super_fun_to_parse
89
+ @parser.parse <<-eoxml
90
+ <root xmlns:foo='http://foo.example.com/'>
91
+ <a foo:bar='hello' />
92
+ <b xmlns:foo='http://bar.example.com/'>
93
+ <a foo:bar='hello' />
94
+ </b>
95
+ <foo:bar>hello world</foo:bar>
96
+ </root>
97
+ eoxml
98
+ assert @parser.document.start_elements_namespace.length > 0
99
+ el = @parser.document.start_elements_namespace[1]
100
+ assert_equal 'a', el.first
101
+ assert_equal 1, el[1].length
102
+
103
+ attribute = el[1].first
104
+ assert_equal 'bar', attribute.localname
105
+ assert_equal 'foo', attribute.prefix
106
+ assert_equal 'hello', attribute.value
107
+ assert_equal 'http://foo.example.com/', attribute.uri
108
+ end
109
+
110
+ def test_sax_v1_namespace_attribute_declarations
111
+ @parser.parse <<-eoxml
112
+ <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
113
+ <a foo:bar='hello' />
114
+ <b xmlns:foo='http://bar.example.com/'>
115
+ <a foo:bar='hello' />
116
+ </b>
117
+ <foo:bar>hello world</foo:bar>
118
+ </root>
119
+ eoxml
120
+ assert @parser.document.start_elements.length > 0
121
+ elm = @parser.document.start_elements.first
122
+ assert_equal 'root', elm.first
123
+ assert elm[1].include?(['xmlns:foo', 'http://foo.example.com/'])
124
+ assert elm[1].include?(['xmlns', 'http://example.com/'])
125
+ end
126
+
127
+ def test_sax_v1_namespace_nodes
128
+ @parser.parse <<-eoxml
129
+ <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
130
+ <a foo:bar='hello' />
131
+ <b xmlns:foo='http://bar.example.com/'>
132
+ <a foo:bar='hello' />
133
+ </b>
134
+ <foo:bar>hello world</foo:bar>
135
+ </root>
136
+ eoxml
137
+ assert_equal 5, @parser.document.start_elements.length
138
+ assert @parser.document.start_elements.map { |se|
139
+ se.first
140
+ }.include?('foo:bar')
141
+ assert @parser.document.end_elements.map { |se|
142
+ se.first
143
+ }.include?('foo:bar')
144
+ end
145
+
146
+ def test_start_is_called_without_namespace
147
+ @parser.parse('<foo:f><bar></foo:f>')
148
+ assert_equal ['foo:f', 'bar'],
149
+ @parser.document.start_elements.map { |x| x.first }
150
+ end
151
+
152
+ def test_parser_sets_encoding
153
+ parser = XML::SAX::Parser.new(Doc.new, 'UTF-8')
154
+ assert_equal 'UTF-8', parser.encoding
155
+ end
156
+
157
+ def test_errors_set_after_parsing_bad_dom
158
+ doc = Nokogiri::XML('<foo><bar></foo>')
159
+ assert doc.errors
160
+
161
+ @parser.parse('<foo><bar></foo>')
162
+ assert @parser.document.errors
163
+ assert @parser.document.errors.length > 0
164
+
165
+ if RUBY_VERSION =~ /^1\.9/
166
+ doc.errors.each do |error|
167
+ assert_equal 'UTF-8', error.message.encoding.name
168
+ end
169
+ end
170
+
171
+ assert_equal doc.errors.length, @parser.document.errors.length
172
+ end
173
+
174
+ def test_parse_with_memory_argument
175
+ @parser.parse(File.read(XML_FILE))
176
+ assert(@parser.document.cdata_blocks.length > 0)
177
+ end
178
+
179
+ def test_parse_with_io_argument
180
+ File.open(XML_FILE, 'rb') { |f|
181
+ @parser.parse(f)
182
+ }
183
+ assert(@parser.document.cdata_blocks.length > 0)
184
+ end
185
+
186
+ def test_parse_io
187
+ File.open(XML_FILE, 'rb') { |f|
188
+ @parser.parse_io(f, 'UTF-8')
189
+ }
190
+ assert(@parser.document.cdata_blocks.length > 0)
191
+ if RUBY_VERSION =~ /^1\.9/
192
+ called = false
193
+ @parser.document.start_elements.flatten.each do |thing|
194
+ assert_equal 'UTF-8', thing.encoding.name
195
+ called = true
196
+ end
197
+ assert called
198
+
199
+ called = false
200
+ @parser.document.end_elements.flatten.each do |thing|
201
+ assert_equal 'UTF-8', thing.encoding.name
202
+ called = true
203
+ end
204
+ assert called
205
+
206
+ called = false
207
+ @parser.document.data.each do |thing|
208
+ assert_equal 'UTF-8', thing.encoding.name
209
+ called = true
210
+ end
211
+ assert called
212
+
213
+ called = false
214
+ @parser.document.comments.flatten.each do |thing|
215
+ assert_equal 'UTF-8', thing.encoding.name
216
+ called = true
217
+ end
218
+ assert called
219
+
220
+ called = false
221
+ @parser.document.cdata_blocks.flatten.each do |thing|
222
+ assert_equal 'UTF-8', thing.encoding.name
223
+ called = true
224
+ end
225
+ assert called
226
+ end
227
+ end
228
+
229
+ def test_parse_file
230
+ @parser.parse_file(XML_FILE)
231
+
232
+ assert_raises(ArgumentError) {
233
+ @parser.parse_file(nil)
234
+ }
235
+
236
+ assert_raises(Errno::ENOENT) {
237
+ @parser.parse_file('')
238
+ }
239
+ assert_raises(Errno::EISDIR) {
240
+ @parser.parse_file(File.expand_path(File.dirname(__FILE__)))
241
+ }
242
+ end
243
+
244
+ def test_render_parse_nil_param
245
+ assert_raises(ArgumentError) { @parser.parse_memory(nil) }
246
+ end
247
+
248
+ def test_ctag
249
+ @parser.parse_memory(<<-eoxml)
250
+ <p id="asdfasdf">
251
+ <![CDATA[ This is a comment ]]>
252
+ Paragraph 1
253
+ </p>
254
+ eoxml
255
+ assert_equal [' This is a comment '], @parser.document.cdata_blocks
256
+ end
257
+
258
+ def test_comment
259
+ @parser.parse_memory(<<-eoxml)
260
+ <p id="asdfasdf">
261
+ <!-- This is a comment -->
262
+ Paragraph 1
263
+ </p>
264
+ eoxml
265
+ assert_equal [' This is a comment '], @parser.document.comments
266
+ end
267
+
268
+ def test_characters
269
+ @parser.parse_memory(<<-eoxml)
270
+ <p id="asdfasdf">Paragraph 1</p>
271
+ eoxml
272
+ assert_equal ['Paragraph 1'], @parser.document.data
273
+ end
274
+
275
+ def test_end_document
276
+ @parser.parse_memory(<<-eoxml)
277
+ <p id="asdfasdf">Paragraph 1</p>
278
+ eoxml
279
+ assert @parser.document.end_document_called
280
+ end
281
+
282
+ def test_end_element
283
+ @parser.parse_memory(<<-eoxml)
284
+ <p id="asdfasdf">Paragraph 1</p>
285
+ eoxml
286
+ assert_equal [["p"]],
287
+ @parser.document.end_elements
288
+ end
289
+
290
+ def test_start_element_attrs
291
+ @parser.parse_memory(<<-eoxml)
292
+ <p id="asdfasdf">Paragraph 1</p>
293
+ eoxml
294
+ assert_equal [["p", ["id", "asdfasdf"]]],
295
+ @parser.document.start_elements
296
+ end
297
+
298
+ def test_parse_document
299
+ @parser.parse_memory(<<-eoxml)
300
+ <p>Paragraph 1</p>
301
+ <p>Paragraph 2</p>
302
+ eoxml
303
+ end
304
+ end
305
+ end
306
+ end
307
+ end