nokogiri 1.3.0-x86-mswin32

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 (256) hide show
  1. data/.autotest +27 -0
  2. data/CHANGELOG.ja.rdoc +233 -0
  3. data/CHANGELOG.rdoc +222 -0
  4. data/Manifest.txt +247 -0
  5. data/README.ja.rdoc +103 -0
  6. data/README.rdoc +117 -0
  7. data/Rakefile +205 -0
  8. data/bin/nokogiri +47 -0
  9. data/ext/nokogiri/extconf.rb +89 -0
  10. data/ext/nokogiri/html_document.c +183 -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 +30 -0
  15. data/ext/nokogiri/html_entity_lookup.h +8 -0
  16. data/ext/nokogiri/html_sax_parser.c +57 -0
  17. data/ext/nokogiri/html_sax_parser.h +11 -0
  18. data/ext/nokogiri/iconv.dll +0 -0
  19. data/ext/nokogiri/libexslt.dll +0 -0
  20. data/ext/nokogiri/libxml2.dll +0 -0
  21. data/ext/nokogiri/libxslt.dll +0 -0
  22. data/ext/nokogiri/nokogiri.c +81 -0
  23. data/ext/nokogiri/nokogiri.h +149 -0
  24. data/ext/nokogiri/xml_attr.c +92 -0
  25. data/ext/nokogiri/xml_attr.h +9 -0
  26. data/ext/nokogiri/xml_cdata.c +53 -0
  27. data/ext/nokogiri/xml_cdata.h +9 -0
  28. data/ext/nokogiri/xml_comment.c +51 -0
  29. data/ext/nokogiri/xml_comment.h +9 -0
  30. data/ext/nokogiri/xml_document.c +308 -0
  31. data/ext/nokogiri/xml_document.h +21 -0
  32. data/ext/nokogiri/xml_document_fragment.c +48 -0
  33. data/ext/nokogiri/xml_document_fragment.h +10 -0
  34. data/ext/nokogiri/xml_dtd.c +102 -0
  35. data/ext/nokogiri/xml_dtd.h +8 -0
  36. data/ext/nokogiri/xml_entity_reference.c +50 -0
  37. data/ext/nokogiri/xml_entity_reference.h +9 -0
  38. data/ext/nokogiri/xml_io.c +24 -0
  39. data/ext/nokogiri/xml_io.h +10 -0
  40. data/ext/nokogiri/xml_namespace.c +69 -0
  41. data/ext/nokogiri/xml_namespace.h +12 -0
  42. data/ext/nokogiri/xml_node.c +928 -0
  43. data/ext/nokogiri/xml_node.h +14 -0
  44. data/ext/nokogiri/xml_node_set.c +386 -0
  45. data/ext/nokogiri/xml_node_set.h +9 -0
  46. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  47. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  48. data/ext/nokogiri/xml_reader.c +572 -0
  49. data/ext/nokogiri/xml_reader.h +10 -0
  50. data/ext/nokogiri/xml_relax_ng.c +106 -0
  51. data/ext/nokogiri/xml_relax_ng.h +9 -0
  52. data/ext/nokogiri/xml_sax_parser.c +336 -0
  53. data/ext/nokogiri/xml_sax_parser.h +10 -0
  54. data/ext/nokogiri/xml_sax_push_parser.c +86 -0
  55. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  56. data/ext/nokogiri/xml_schema.c +107 -0
  57. data/ext/nokogiri/xml_schema.h +9 -0
  58. data/ext/nokogiri/xml_syntax_error.c +203 -0
  59. data/ext/nokogiri/xml_syntax_error.h +12 -0
  60. data/ext/nokogiri/xml_text.c +47 -0
  61. data/ext/nokogiri/xml_text.h +9 -0
  62. data/ext/nokogiri/xml_xpath.c +53 -0
  63. data/ext/nokogiri/xml_xpath.h +11 -0
  64. data/ext/nokogiri/xml_xpath_context.c +252 -0
  65. data/ext/nokogiri/xml_xpath_context.h +9 -0
  66. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  67. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  68. data/ext/nokogiri/zlib1.dll +0 -0
  69. data/lib/action-nokogiri.rb +36 -0
  70. data/lib/nokogiri.rb +110 -0
  71. data/lib/nokogiri/1.8/nokogiri.so +0 -0
  72. data/lib/nokogiri/1.9/nokogiri.so +0 -0
  73. data/lib/nokogiri/css.rb +25 -0
  74. data/lib/nokogiri/css/generated_parser.rb +748 -0
  75. data/lib/nokogiri/css/generated_tokenizer.rb +144 -0
  76. data/lib/nokogiri/css/node.rb +107 -0
  77. data/lib/nokogiri/css/parser.rb +82 -0
  78. data/lib/nokogiri/css/parser.y +227 -0
  79. data/lib/nokogiri/css/syntax_error.rb +7 -0
  80. data/lib/nokogiri/css/tokenizer.rb +11 -0
  81. data/lib/nokogiri/css/tokenizer.rex +54 -0
  82. data/lib/nokogiri/css/xpath_visitor.rb +172 -0
  83. data/lib/nokogiri/decorators.rb +2 -0
  84. data/lib/nokogiri/decorators/hpricot.rb +3 -0
  85. data/lib/nokogiri/decorators/hpricot/node.rb +56 -0
  86. data/lib/nokogiri/decorators/hpricot/node_set.rb +54 -0
  87. data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +30 -0
  88. data/lib/nokogiri/decorators/slop.rb +33 -0
  89. data/lib/nokogiri/ffi/html/document.rb +37 -0
  90. data/lib/nokogiri/ffi/html/element_description.rb +85 -0
  91. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  92. data/lib/nokogiri/ffi/html/sax/parser.rb +21 -0
  93. data/lib/nokogiri/ffi/io_callbacks.rb +32 -0
  94. data/lib/nokogiri/ffi/libxml.rb +314 -0
  95. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  96. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  97. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  98. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  99. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  100. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  101. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  102. data/lib/nokogiri/ffi/structs/xml_dtd.rb +26 -0
  103. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  104. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  105. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  106. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  107. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  108. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  109. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +14 -0
  110. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  111. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  112. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  113. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  114. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  115. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  116. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  117. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  118. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  119. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  120. data/lib/nokogiri/ffi/xml/document.rb +107 -0
  121. data/lib/nokogiri/ffi/xml/document_fragment.rb +26 -0
  122. data/lib/nokogiri/ffi/xml/dtd.rb +42 -0
  123. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  124. data/lib/nokogiri/ffi/xml/namespace.rb +38 -0
  125. data/lib/nokogiri/ffi/xml/node.rb +380 -0
  126. data/lib/nokogiri/ffi/xml/node_set.rb +130 -0
  127. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  128. data/lib/nokogiri/ffi/xml/reader.rb +217 -0
  129. data/lib/nokogiri/ffi/xml/relax_ng.rb +51 -0
  130. data/lib/nokogiri/ffi/xml/sax/parser.rb +148 -0
  131. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +38 -0
  132. data/lib/nokogiri/ffi/xml/schema.rb +55 -0
  133. data/lib/nokogiri/ffi/xml/syntax_error.rb +76 -0
  134. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  135. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  136. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  137. data/lib/nokogiri/ffi/xslt/stylesheet.rb +47 -0
  138. data/lib/nokogiri/hpricot.rb +62 -0
  139. data/lib/nokogiri/html.rb +34 -0
  140. data/lib/nokogiri/html/builder.rb +35 -0
  141. data/lib/nokogiri/html/document.rb +71 -0
  142. data/lib/nokogiri/html/document_fragment.rb +15 -0
  143. data/lib/nokogiri/html/element_description.rb +23 -0
  144. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  145. data/lib/nokogiri/html/sax/parser.rb +47 -0
  146. data/lib/nokogiri/nokogiri.rb +1 -0
  147. data/lib/nokogiri/syntax_error.rb +4 -0
  148. data/lib/nokogiri/version.rb +29 -0
  149. data/lib/nokogiri/version_warning.rb +11 -0
  150. data/lib/nokogiri/xml.rb +62 -0
  151. data/lib/nokogiri/xml/attr.rb +9 -0
  152. data/lib/nokogiri/xml/builder.rb +254 -0
  153. data/lib/nokogiri/xml/cdata.rb +11 -0
  154. data/lib/nokogiri/xml/document.rb +100 -0
  155. data/lib/nokogiri/xml/document_fragment.rb +49 -0
  156. data/lib/nokogiri/xml/dtd.rb +11 -0
  157. data/lib/nokogiri/xml/entity_declaration.rb +11 -0
  158. data/lib/nokogiri/xml/fragment_handler.rb +55 -0
  159. data/lib/nokogiri/xml/namespace.rb +7 -0
  160. data/lib/nokogiri/xml/node.rb +745 -0
  161. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  162. data/lib/nokogiri/xml/node_set.rb +238 -0
  163. data/lib/nokogiri/xml/notation.rb +6 -0
  164. data/lib/nokogiri/xml/parse_options.rb +80 -0
  165. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  166. data/lib/nokogiri/xml/reader.rb +66 -0
  167. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  168. data/lib/nokogiri/xml/sax.rb +3 -0
  169. data/lib/nokogiri/xml/sax/document.rb +143 -0
  170. data/lib/nokogiri/xml/sax/parser.rb +101 -0
  171. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  172. data/lib/nokogiri/xml/schema.rb +65 -0
  173. data/lib/nokogiri/xml/syntax_error.rb +34 -0
  174. data/lib/nokogiri/xml/xpath.rb +10 -0
  175. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  176. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  177. data/lib/nokogiri/xslt.rb +48 -0
  178. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  179. data/lib/xsd/xmlparser/nokogiri.rb +64 -0
  180. data/tasks/test.rb +161 -0
  181. data/test/css/test_nthiness.rb +160 -0
  182. data/test/css/test_parser.rb +277 -0
  183. data/test/css/test_tokenizer.rb +176 -0
  184. data/test/css/test_xpath_visitor.rb +76 -0
  185. data/test/ffi/test_document.rb +35 -0
  186. data/test/files/address_book.rlx +12 -0
  187. data/test/files/address_book.xml +10 -0
  188. data/test/files/dont_hurt_em_why.xml +422 -0
  189. data/test/files/exslt.xml +8 -0
  190. data/test/files/exslt.xslt +35 -0
  191. data/test/files/po.xml +32 -0
  192. data/test/files/po.xsd +66 -0
  193. data/test/files/staff.xml +59 -0
  194. data/test/files/staff.xslt +32 -0
  195. data/test/files/tlm.html +850 -0
  196. data/test/helper.rb +123 -0
  197. data/test/hpricot/files/basic.xhtml +17 -0
  198. data/test/hpricot/files/boingboing.html +2266 -0
  199. data/test/hpricot/files/cy0.html +3653 -0
  200. data/test/hpricot/files/immob.html +400 -0
  201. data/test/hpricot/files/pace_application.html +1320 -0
  202. data/test/hpricot/files/tenderlove.html +16 -0
  203. data/test/hpricot/files/uswebgen.html +220 -0
  204. data/test/hpricot/files/utf8.html +1054 -0
  205. data/test/hpricot/files/week9.html +1723 -0
  206. data/test/hpricot/files/why.xml +19 -0
  207. data/test/hpricot/load_files.rb +11 -0
  208. data/test/hpricot/test_alter.rb +68 -0
  209. data/test/hpricot/test_builder.rb +20 -0
  210. data/test/hpricot/test_parser.rb +426 -0
  211. data/test/hpricot/test_paths.rb +15 -0
  212. data/test/hpricot/test_preserved.rb +77 -0
  213. data/test/hpricot/test_xml.rb +30 -0
  214. data/test/html/sax/test_parser.rb +52 -0
  215. data/test/html/test_builder.rb +156 -0
  216. data/test/html/test_document.rb +361 -0
  217. data/test/html/test_document_encoding.rb +46 -0
  218. data/test/html/test_document_fragment.rb +97 -0
  219. data/test/html/test_element_description.rb +95 -0
  220. data/test/html/test_named_characters.rb +14 -0
  221. data/test/html/test_node.rb +165 -0
  222. data/test/test_convert_xpath.rb +186 -0
  223. data/test/test_css_cache.rb +56 -0
  224. data/test/test_gc.rb +15 -0
  225. data/test/test_memory_leak.rb +77 -0
  226. data/test/test_nokogiri.rb +127 -0
  227. data/test/test_reader.rb +316 -0
  228. data/test/test_xslt_transforms.rb +131 -0
  229. data/test/xml/node/test_save_options.rb +20 -0
  230. data/test/xml/node/test_subclass.rb +44 -0
  231. data/test/xml/sax/test_parser.rb +169 -0
  232. data/test/xml/sax/test_push_parser.rb +92 -0
  233. data/test/xml/test_attr.rb +38 -0
  234. data/test/xml/test_builder.rb +73 -0
  235. data/test/xml/test_cdata.rb +38 -0
  236. data/test/xml/test_comment.rb +23 -0
  237. data/test/xml/test_document.rb +397 -0
  238. data/test/xml/test_document_encoding.rb +26 -0
  239. data/test/xml/test_document_fragment.rb +76 -0
  240. data/test/xml/test_dtd.rb +42 -0
  241. data/test/xml/test_dtd_encoding.rb +31 -0
  242. data/test/xml/test_entity_reference.rb +21 -0
  243. data/test/xml/test_namespace.rb +43 -0
  244. data/test/xml/test_node.rb +808 -0
  245. data/test/xml/test_node_attributes.rb +34 -0
  246. data/test/xml/test_node_encoding.rb +84 -0
  247. data/test/xml/test_node_set.rb +368 -0
  248. data/test/xml/test_parse_options.rb +52 -0
  249. data/test/xml/test_processing_instruction.rb +30 -0
  250. data/test/xml/test_reader_encoding.rb +126 -0
  251. data/test/xml/test_relax_ng.rb +60 -0
  252. data/test/xml/test_schema.rb +65 -0
  253. data/test/xml/test_text.rb +18 -0
  254. data/test/xml/test_unparented_node.rb +381 -0
  255. data/test/xml/test_xpath.rb +106 -0
  256. metadata +409 -0
@@ -0,0 +1,131 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "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 File.expand_path(File.join(File.dirname(__FILE__), '..', '..',"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 File.expand_path(File.join(File.dirname(__FILE__), '..', '..',"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,169 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', "helper"))
2
+
3
+ module Nokogiri
4
+ module XML
5
+ module SAX
6
+ class TestParser < Nokogiri::SAX::TestCase
7
+ def setup
8
+ super
9
+ @parser = XML::SAX::Parser.new(Doc.new)
10
+ end
11
+
12
+ def test_bad_document_calls_error_handler
13
+ @parser.parse('<foo><bar></foo>')
14
+ assert @parser.document.errors
15
+ assert @parser.document.errors.length > 0
16
+ end
17
+
18
+ def test_parser_sets_encoding
19
+ parser = XML::SAX::Parser.new(Doc.new, 'UTF-8')
20
+ assert_equal 'UTF-8', parser.encoding
21
+ end
22
+
23
+ def test_errors_set_after_parsing_bad_dom
24
+ doc = Nokogiri::XML('<foo><bar></foo>')
25
+ assert doc.errors
26
+
27
+ @parser.parse('<foo><bar></foo>')
28
+ assert @parser.document.errors
29
+ assert @parser.document.errors.length > 0
30
+
31
+ if RUBY_VERSION =~ /^1\.9/
32
+ doc.errors.each do |error|
33
+ assert_equal 'UTF-8', error.message.encoding.name
34
+ end
35
+ end
36
+
37
+ assert_equal doc.errors.length, @parser.document.errors.length
38
+ end
39
+
40
+ def test_parse
41
+ File.open(XML_FILE, 'rb') { |f|
42
+ @parser.parse(f)
43
+ }
44
+ @parser.parse(File.read(XML_FILE))
45
+ assert(@parser.document.cdata_blocks.length > 0)
46
+ end
47
+
48
+ def test_parse_io
49
+ File.open(XML_FILE, 'rb') { |f|
50
+ @parser.parse_io(f, 'UTF-8')
51
+ }
52
+ assert(@parser.document.cdata_blocks.length > 0)
53
+ if RUBY_VERSION =~ /^1\.9/
54
+ called = false
55
+ @parser.document.start_elements.flatten.each do |thing|
56
+ assert_equal 'UTF-8', thing.encoding.name
57
+ called = true
58
+ end
59
+ assert called
60
+
61
+ called = false
62
+ @parser.document.end_elements.flatten.each do |thing|
63
+ assert_equal 'UTF-8', thing.encoding.name
64
+ called = true
65
+ end
66
+ assert called
67
+
68
+ called = false
69
+ @parser.document.data.each do |thing|
70
+ assert_equal 'UTF-8', thing.encoding.name
71
+ called = true
72
+ end
73
+ assert called
74
+
75
+ called = false
76
+ @parser.document.comments.flatten.each do |thing|
77
+ assert_equal 'UTF-8', thing.encoding.name
78
+ called = true
79
+ end
80
+ assert called
81
+
82
+ called = false
83
+ @parser.document.cdata_blocks.flatten.each do |thing|
84
+ assert_equal 'UTF-8', thing.encoding.name
85
+ called = true
86
+ end
87
+ assert called
88
+ end
89
+ end
90
+
91
+ def test_parse_file
92
+ @parser.parse_file(XML_FILE)
93
+
94
+ assert_raises(ArgumentError) {
95
+ @parser.parse_file(nil)
96
+ }
97
+
98
+ assert_raises(Errno::ENOENT) {
99
+ @parser.parse_file('')
100
+ }
101
+ assert_raises(Errno::EISDIR) {
102
+ @parser.parse_file(File.expand_path(File.dirname(__FILE__)))
103
+ }
104
+ end
105
+
106
+ def test_render_parse_nil_param
107
+ assert_raises(ArgumentError) { @parser.parse_memory(nil) }
108
+ end
109
+
110
+ def test_ctag
111
+ @parser.parse_memory(<<-eoxml)
112
+ <p id="asdfasdf">
113
+ <![CDATA[ This is a comment ]]>
114
+ Paragraph 1
115
+ </p>
116
+ eoxml
117
+ assert_equal [' This is a comment '], @parser.document.cdata_blocks
118
+ end
119
+
120
+ def test_comment
121
+ @parser.parse_memory(<<-eoxml)
122
+ <p id="asdfasdf">
123
+ <!-- This is a comment -->
124
+ Paragraph 1
125
+ </p>
126
+ eoxml
127
+ assert_equal [' This is a comment '], @parser.document.comments
128
+ end
129
+
130
+ def test_characters
131
+ @parser.parse_memory(<<-eoxml)
132
+ <p id="asdfasdf">Paragraph 1</p>
133
+ eoxml
134
+ assert_equal ['Paragraph 1'], @parser.document.data
135
+ end
136
+
137
+ def test_end_document
138
+ @parser.parse_memory(<<-eoxml)
139
+ <p id="asdfasdf">Paragraph 1</p>
140
+ eoxml
141
+ assert @parser.document.end_document_called
142
+ end
143
+
144
+ def test_end_element
145
+ @parser.parse_memory(<<-eoxml)
146
+ <p id="asdfasdf">Paragraph 1</p>
147
+ eoxml
148
+ assert_equal [["p"]],
149
+ @parser.document.end_elements
150
+ end
151
+
152
+ def test_start_element_attrs
153
+ @parser.parse_memory(<<-eoxml)
154
+ <p id="asdfasdf">Paragraph 1</p>
155
+ eoxml
156
+ assert_equal [["p", ["id", "asdfasdf"]]],
157
+ @parser.document.start_elements
158
+ end
159
+
160
+ def test_parse_document
161
+ @parser.parse_memory(<<-eoxml)
162
+ <p>Paragraph 1</p>
163
+ <p>Paragraph 2</p>
164
+ eoxml
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,92 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', "helper"))
2
+
3
+ module Nokogiri
4
+ module XML
5
+ module SAX
6
+ class TestPushParser < Nokogiri::SAX::TestCase
7
+ def setup
8
+ super
9
+ @parser = XML::SAX::PushParser.new(Doc.new)
10
+ end
11
+
12
+ def test_end_document_called
13
+ @parser.<<(<<-eoxml)
14
+ <p id="asdfasdf">
15
+ <!-- This is a comment -->
16
+ Paragraph 1
17
+ </p>
18
+ eoxml
19
+ assert ! @parser.document.end_document_called
20
+ @parser.finish
21
+ assert @parser.document.end_document_called
22
+ end
23
+
24
+ def test_start_element
25
+ @parser.<<(<<-eoxml)
26
+ <p id="asdfasdf">
27
+ eoxml
28
+
29
+ assert_equal [["p", ["id", "asdfasdf"]]],
30
+ @parser.document.start_elements
31
+
32
+ @parser.<<(<<-eoxml)
33
+ <!-- This is a comment -->
34
+ Paragraph 1
35
+ </p>
36
+ eoxml
37
+ assert_equal [' This is a comment '], @parser.document.comments
38
+ @parser.finish
39
+ end
40
+
41
+ def test_start_element_ns
42
+ @parser.<<(<<-eoxml)
43
+ <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' size='large'></stream:stream>
44
+ eoxml
45
+
46
+ assert_equal [[ 'stream',
47
+ {'version' => '1.0', 'size' => 'large'},
48
+ 'stream',
49
+ 'http://etherx.jabber.org/streams',
50
+ {nil => 'jabber:client', 'stream' => 'http://etherx.jabber.org/streams'}]],
51
+ @parser.document.start_elements_ns
52
+ @parser.finish
53
+ end
54
+
55
+ def test_end_element_ns
56
+ @parser.<<(<<-eoxml)
57
+ <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'></stream:stream>
58
+ eoxml
59
+
60
+ assert_equal [['stream', 'stream', 'http://etherx.jabber.org/streams']],
61
+ @parser.document.end_elements_ns
62
+ @parser.finish
63
+ end
64
+
65
+ def test_chevron_partial_xml
66
+ @parser.<<(<<-eoxml)
67
+ <p id="asdfasdf">
68
+ eoxml
69
+
70
+ @parser.<<(<<-eoxml)
71
+ <!-- This is a comment -->
72
+ Paragraph 1
73
+ </p>
74
+ eoxml
75
+ assert_equal [' This is a comment '], @parser.document.comments
76
+ @parser.finish
77
+ end
78
+
79
+ def test_chevron
80
+ @parser.<<(<<-eoxml)
81
+ <p id="asdfasdf">
82
+ <!-- This is a comment -->
83
+ Paragraph 1
84
+ </p>
85
+ eoxml
86
+ @parser.finish
87
+ assert_equal [' This is a comment '], @parser.document.comments
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end