rubyjedi-nokogiri_java 1.4.0.20100513161003-java

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 (285) hide show
  1. data/.autotest +26 -0
  2. data/CHANGELOG.ja.rdoc +330 -0
  3. data/CHANGELOG.rdoc +341 -0
  4. data/Manifest.txt +277 -0
  5. data/README.ja.rdoc +105 -0
  6. data/README.rdoc +125 -0
  7. data/Rakefile +307 -0
  8. data/bin/nokogiri +49 -0
  9. data/deps.rip +5 -0
  10. data/ext/nokogiri/extconf.rb +149 -0
  11. data/ext/nokogiri/html_document.c +145 -0
  12. data/ext/nokogiri/html_document.h +10 -0
  13. data/ext/nokogiri/html_element_description.c +272 -0
  14. data/ext/nokogiri/html_element_description.h +10 -0
  15. data/ext/nokogiri/html_entity_lookup.c +32 -0
  16. data/ext/nokogiri/html_entity_lookup.h +8 -0
  17. data/ext/nokogiri/html_sax_parser_context.c +92 -0
  18. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  19. data/ext/nokogiri/nokogiri.c +96 -0
  20. data/ext/nokogiri/nokogiri.h +148 -0
  21. data/ext/nokogiri/xml_attr.c +92 -0
  22. data/ext/nokogiri/xml_attr.h +9 -0
  23. data/ext/nokogiri/xml_attribute_decl.c +67 -0
  24. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  25. data/ext/nokogiri/xml_cdata.c +54 -0
  26. data/ext/nokogiri/xml_cdata.h +9 -0
  27. data/ext/nokogiri/xml_comment.c +52 -0
  28. data/ext/nokogiri/xml_comment.h +9 -0
  29. data/ext/nokogiri/xml_document.c +386 -0
  30. data/ext/nokogiri/xml_document.h +24 -0
  31. data/ext/nokogiri/xml_document_fragment.c +46 -0
  32. data/ext/nokogiri/xml_document_fragment.h +10 -0
  33. data/ext/nokogiri/xml_dtd.c +192 -0
  34. data/ext/nokogiri/xml_dtd.h +10 -0
  35. data/ext/nokogiri/xml_element_content.c +123 -0
  36. data/ext/nokogiri/xml_element_content.h +10 -0
  37. data/ext/nokogiri/xml_element_decl.c +69 -0
  38. data/ext/nokogiri/xml_element_decl.h +9 -0
  39. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  40. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  41. data/ext/nokogiri/xml_entity_decl.c +97 -0
  42. data/ext/nokogiri/xml_entity_decl.h +10 -0
  43. data/ext/nokogiri/xml_entity_reference.c +50 -0
  44. data/ext/nokogiri/xml_entity_reference.h +9 -0
  45. data/ext/nokogiri/xml_io.c +31 -0
  46. data/ext/nokogiri/xml_io.h +11 -0
  47. data/ext/nokogiri/xml_namespace.c +82 -0
  48. data/ext/nokogiri/xml_namespace.h +13 -0
  49. data/ext/nokogiri/xml_node.c +1080 -0
  50. data/ext/nokogiri/xml_node.h +13 -0
  51. data/ext/nokogiri/xml_node_set.c +405 -0
  52. data/ext/nokogiri/xml_node_set.h +9 -0
  53. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  54. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  55. data/ext/nokogiri/xml_reader.c +593 -0
  56. data/ext/nokogiri/xml_reader.h +10 -0
  57. data/ext/nokogiri/xml_relax_ng.c +159 -0
  58. data/ext/nokogiri/xml_relax_ng.h +9 -0
  59. data/ext/nokogiri/xml_sax_parser.c +283 -0
  60. data/ext/nokogiri/xml_sax_parser.h +43 -0
  61. data/ext/nokogiri/xml_sax_parser_context.c +157 -0
  62. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  63. data/ext/nokogiri/xml_sax_push_parser.c +114 -0
  64. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  65. data/ext/nokogiri/xml_schema.c +156 -0
  66. data/ext/nokogiri/xml_schema.h +9 -0
  67. data/ext/nokogiri/xml_syntax_error.c +52 -0
  68. data/ext/nokogiri/xml_syntax_error.h +13 -0
  69. data/ext/nokogiri/xml_text.c +48 -0
  70. data/ext/nokogiri/xml_text.h +9 -0
  71. data/ext/nokogiri/xml_xpath.c +53 -0
  72. data/ext/nokogiri/xml_xpath.h +11 -0
  73. data/ext/nokogiri/xml_xpath_context.c +239 -0
  74. data/ext/nokogiri/xml_xpath_context.h +9 -0
  75. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  76. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  77. data/lib/isorelax.jar +0 -0
  78. data/lib/jing.jar +0 -0
  79. data/lib/nekodtd.jar +0 -0
  80. data/lib/nekohtml.jar +0 -0
  81. data/lib/nokogiri.rb +123 -0
  82. data/lib/nokogiri/css.rb +25 -0
  83. data/lib/nokogiri/css/generated_parser.rb +659 -0
  84. data/lib/nokogiri/css/generated_tokenizer.rb +145 -0
  85. data/lib/nokogiri/css/node.rb +99 -0
  86. data/lib/nokogiri/css/parser.rb +82 -0
  87. data/lib/nokogiri/css/parser.y +230 -0
  88. data/lib/nokogiri/css/syntax_error.rb +7 -0
  89. data/lib/nokogiri/css/tokenizer.rb +7 -0
  90. data/lib/nokogiri/css/tokenizer.rex +55 -0
  91. data/lib/nokogiri/css/xpath_visitor.rb +164 -0
  92. data/lib/nokogiri/decorators/slop.rb +33 -0
  93. data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
  94. data/lib/nokogiri/ffi/html/document.rb +28 -0
  95. data/lib/nokogiri/ffi/html/element_description.rb +81 -0
  96. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  97. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  98. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  99. data/lib/nokogiri/ffi/libxml.rb +372 -0
  100. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  101. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  102. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  103. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  104. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  105. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  106. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  107. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
  108. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  109. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  110. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  111. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  112. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  113. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  114. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  115. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  116. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  117. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  118. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +19 -0
  119. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  120. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  121. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
  122. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  123. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  124. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  125. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  126. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  127. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  128. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  129. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  130. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  131. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  132. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  133. data/lib/nokogiri/ffi/xml/document.rb +135 -0
  134. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  135. data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
  136. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  137. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  138. data/lib/nokogiri/ffi/xml/entity_decl.rb +27 -0
  139. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  140. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  141. data/lib/nokogiri/ffi/xml/node.rb +465 -0
  142. data/lib/nokogiri/ffi/xml/node_set.rb +146 -0
  143. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  144. data/lib/nokogiri/ffi/xml/reader.rb +227 -0
  145. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  146. data/lib/nokogiri/ffi/xml/sax/parser.rb +135 -0
  147. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +67 -0
  148. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +55 -0
  149. data/lib/nokogiri/ffi/xml/schema.rb +92 -0
  150. data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
  151. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  152. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  153. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  154. data/lib/nokogiri/ffi/xslt/stylesheet.rb +50 -0
  155. data/lib/nokogiri/html.rb +36 -0
  156. data/lib/nokogiri/html/builder.rb +35 -0
  157. data/lib/nokogiri/html/document.rb +88 -0
  158. data/lib/nokogiri/html/document_fragment.rb +15 -0
  159. data/lib/nokogiri/html/element_description.rb +23 -0
  160. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  161. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  162. data/lib/nokogiri/html/sax/parser.rb +48 -0
  163. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  164. data/lib/nokogiri/nokogiri.jar +0 -0
  165. data/lib/nokogiri/syntax_error.rb +4 -0
  166. data/lib/nokogiri/version.rb +33 -0
  167. data/lib/nokogiri/version_warning.rb +11 -0
  168. data/lib/nokogiri/xml.rb +67 -0
  169. data/lib/nokogiri/xml/attr.rb +14 -0
  170. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  171. data/lib/nokogiri/xml/builder.rb +405 -0
  172. data/lib/nokogiri/xml/cdata.rb +11 -0
  173. data/lib/nokogiri/xml/character_data.rb +7 -0
  174. data/lib/nokogiri/xml/document.rb +163 -0
  175. data/lib/nokogiri/xml/document_fragment.rb +73 -0
  176. data/lib/nokogiri/xml/dtd.rb +11 -0
  177. data/lib/nokogiri/xml/element_content.rb +36 -0
  178. data/lib/nokogiri/xml/element_decl.rb +13 -0
  179. data/lib/nokogiri/xml/entity_decl.rb +15 -0
  180. data/lib/nokogiri/xml/fragment_handler.rb +73 -0
  181. data/lib/nokogiri/xml/namespace.rb +13 -0
  182. data/lib/nokogiri/xml/node.rb +730 -0
  183. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  184. data/lib/nokogiri/xml/node_set.rb +318 -0
  185. data/lib/nokogiri/xml/notation.rb +6 -0
  186. data/lib/nokogiri/xml/parse_options.rb +85 -0
  187. data/lib/nokogiri/xml/pp.rb +2 -0
  188. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  189. data/lib/nokogiri/xml/pp/node.rb +56 -0
  190. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  191. data/lib/nokogiri/xml/reader.rb +74 -0
  192. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  193. data/lib/nokogiri/xml/sax.rb +4 -0
  194. data/lib/nokogiri/xml/sax/document.rb +160 -0
  195. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  196. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  197. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  198. data/lib/nokogiri/xml/schema.rb +61 -0
  199. data/lib/nokogiri/xml/syntax_error.rb +43 -0
  200. data/lib/nokogiri/xml/xpath.rb +10 -0
  201. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  202. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  203. data/lib/nokogiri/xslt.rb +48 -0
  204. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  205. data/lib/xercesImpl.jar +0 -0
  206. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  207. data/tasks/test.rb +100 -0
  208. data/test/css/test_nthiness.rb +159 -0
  209. data/test/css/test_parser.rb +282 -0
  210. data/test/css/test_tokenizer.rb +190 -0
  211. data/test/css/test_xpath_visitor.rb +76 -0
  212. data/test/ffi/test_document.rb +35 -0
  213. data/test/files/2ch.html +108 -0
  214. data/test/files/address_book.rlx +12 -0
  215. data/test/files/address_book.xml +10 -0
  216. data/test/files/bar/bar.xsd +4 -0
  217. data/test/files/dont_hurt_em_why.xml +422 -0
  218. data/test/files/exslt.xml +8 -0
  219. data/test/files/exslt.xslt +35 -0
  220. data/test/files/foo/foo.xsd +4 -0
  221. data/test/files/po.xml +32 -0
  222. data/test/files/po.xsd +66 -0
  223. data/test/files/shift_jis.html +10 -0
  224. data/test/files/shift_jis.xml +5 -0
  225. data/test/files/snuggles.xml +3 -0
  226. data/test/files/staff.dtd +10 -0
  227. data/test/files/staff.xml +59 -0
  228. data/test/files/staff.xslt +32 -0
  229. data/test/files/tlm.html +850 -0
  230. data/test/files/valid_bar.xml +2 -0
  231. data/test/helper.rb +137 -0
  232. data/test/html/sax/test_parser.rb +83 -0
  233. data/test/html/sax/test_parser_context.rb +48 -0
  234. data/test/html/test_builder.rb +164 -0
  235. data/test/html/test_document.rb +385 -0
  236. data/test/html/test_document_encoding.rb +77 -0
  237. data/test/html/test_document_fragment.rb +157 -0
  238. data/test/html/test_element_description.rb +98 -0
  239. data/test/html/test_named_characters.rb +14 -0
  240. data/test/html/test_node.rb +242 -0
  241. data/test/html/test_node_encoding.rb +27 -0
  242. data/test/test_convert_xpath.rb +135 -0
  243. data/test/test_css_cache.rb +45 -0
  244. data/test/test_encoding_handler.rb +46 -0
  245. data/test/test_jruby.rb +40 -0
  246. data/test/test_memory_leak.rb +87 -0
  247. data/test/test_nokogiri.rb +140 -0
  248. data/test/test_reader.rb +358 -0
  249. data/test/test_soap4r_sax.rb +52 -0
  250. data/test/test_xslt_transforms.rb +150 -0
  251. data/test/xml/node/test_save_options.rb +20 -0
  252. data/test/xml/node/test_subclass.rb +44 -0
  253. data/test/xml/sax/test_parser.rb +314 -0
  254. data/test/xml/sax/test_parser_context.rb +63 -0
  255. data/test/xml/sax/test_push_parser.rb +135 -0
  256. data/test/xml/test_attr.rb +38 -0
  257. data/test/xml/test_attribute_decl.rb +90 -0
  258. data/test/xml/test_builder.rb +167 -0
  259. data/test/xml/test_cdata.rb +38 -0
  260. data/test/xml/test_comment.rb +29 -0
  261. data/test/xml/test_document.rb +638 -0
  262. data/test/xml/test_document_encoding.rb +26 -0
  263. data/test/xml/test_document_fragment.rb +149 -0
  264. data/test/xml/test_dtd.rb +92 -0
  265. data/test/xml/test_dtd_encoding.rb +33 -0
  266. data/test/xml/test_element_content.rb +56 -0
  267. data/test/xml/test_element_decl.rb +73 -0
  268. data/test/xml/test_entity_decl.rb +83 -0
  269. data/test/xml/test_entity_reference.rb +21 -0
  270. data/test/xml/test_namespace.rb +70 -0
  271. data/test/xml/test_node.rb +740 -0
  272. data/test/xml/test_node_attributes.rb +34 -0
  273. data/test/xml/test_node_encoding.rb +107 -0
  274. data/test/xml/test_node_reparenting.rb +279 -0
  275. data/test/xml/test_node_set.rb +577 -0
  276. data/test/xml/test_parse_options.rb +52 -0
  277. data/test/xml/test_processing_instruction.rb +30 -0
  278. data/test/xml/test_reader_encoding.rb +126 -0
  279. data/test/xml/test_relax_ng.rb +60 -0
  280. data/test/xml/test_schema.rb +89 -0
  281. data/test/xml/test_syntax_error.rb +12 -0
  282. data/test/xml/test_text.rb +30 -0
  283. data/test/xml/test_unparented_node.rb +381 -0
  284. data/test/xml/test_xpath.rb +169 -0
  285. metadata +477 -0
@@ -0,0 +1,358 @@
1
+ # -*- coding: utf-8 -*-
2
+ require "helper"
3
+
4
+ class TestReader < Nokogiri::TestCase
5
+ def test_from_io_sets_io_as_source
6
+ io = File.open SNUGGLES_FILE
7
+ reader = Nokogiri::XML::Reader.from_io(io)
8
+ assert_equal io, reader.source
9
+ end
10
+
11
+ def test_reader_takes_block
12
+ options = nil
13
+ Nokogiri::XML::Reader(File.read(XML_FILE), XML_FILE) do |cfg|
14
+ options = cfg
15
+ options.nonet.nowarning.dtdattr
16
+ end
17
+ assert options.nonet?
18
+ assert options.nowarning?
19
+ assert options.dtdattr?
20
+ end
21
+
22
+ def test_nil_raises
23
+ assert_raises(ArgumentError) {
24
+ Nokogiri::XML::Reader.from_memory(nil)
25
+ }
26
+ assert_raises(ArgumentError) {
27
+ Nokogiri::XML::Reader.from_io(nil)
28
+ }
29
+ end
30
+
31
+ def test_from_io
32
+ io = File.open SNUGGLES_FILE
33
+ reader = Nokogiri::XML::Reader.from_io(io)
34
+ assert_equal false, reader.default?
35
+ assert_equal [false, false, false, false, false, false, false],
36
+ reader.map { |x| x.default? }
37
+ end
38
+
39
+ def test_io
40
+ io = File.open SNUGGLES_FILE
41
+ reader = Nokogiri::XML::Reader(io)
42
+ assert_equal false, reader.default?
43
+ assert_equal [false, false, false, false, false, false, false],
44
+ reader.map { |x| x.default? }
45
+ end
46
+
47
+ def test_string_io
48
+ io = StringIO.new(<<-eoxml)
49
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
50
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
51
+ </x>
52
+ eoxml
53
+ reader = Nokogiri::XML::Reader(io)
54
+ assert_equal false, reader.default?
55
+ assert_equal [false, false, false, false, false, false, false],
56
+ reader.map { |x| x.default? }
57
+ end
58
+
59
+ def test_in_memory
60
+ reader = Nokogiri::XML::Reader(<<-eoxml)
61
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
62
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
63
+ </x>
64
+ eoxml
65
+ end
66
+
67
+ def test_reader_holds_on_to_string
68
+ xml = <<-eoxml
69
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
70
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
71
+ </x>
72
+ eoxml
73
+ reader = Nokogiri::XML::Reader(xml)
74
+ if Nokogiri.ffi?
75
+ assert_not_nil reader.source
76
+ assert reader.source.is_a?(FFI::MemoryPointer)
77
+ else
78
+ assert_equal xml, reader.source
79
+ end
80
+ end
81
+
82
+ def test_default?
83
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
84
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
85
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
86
+ </x>
87
+ eoxml
88
+ assert_equal false, reader.default?
89
+ assert_equal [false, false, false, false, false, false, false],
90
+ reader.map { |x| x.default? }
91
+ end
92
+
93
+ def test_value?
94
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
95
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
96
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
97
+ </x>
98
+ eoxml
99
+ assert_equal false, reader.value?
100
+ assert_equal [false, true, false, true, false, true, false],
101
+ reader.map { |x| x.value? }
102
+ end
103
+
104
+ def test_read_error_document
105
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
106
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
107
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
108
+ <foo>
109
+ </x>
110
+ eoxml
111
+ error_happened = false
112
+ begin
113
+ reader.each { |node| }
114
+ rescue Nokogiri::XML::SyntaxError => ex
115
+ error_happened = true
116
+ end
117
+ assert error_happened
118
+ assert 1, reader.errors.length
119
+ end
120
+
121
+ def test_attributes?
122
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
123
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
124
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
125
+ </x>
126
+ eoxml
127
+ assert_equal false, reader.attributes?
128
+ assert_equal [true, false, true, false, true, false, true],
129
+ reader.map { |x| x.attributes? }
130
+ end
131
+
132
+ def test_attributes
133
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
134
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'
135
+ xmlns='http://mothership.connection.com/'
136
+ >
137
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
138
+ </x>
139
+ eoxml
140
+ assert_equal({}, reader.attributes)
141
+ assert_equal [{'xmlns:tenderlove'=>'http://tenderlovemaking.com/',
142
+ 'xmlns'=>'http://mothership.connection.com/'},
143
+ {}, {"awesome"=>"true"}, {}, {"awesome"=>"true"}, {},
144
+ {'xmlns:tenderlove'=>'http://tenderlovemaking.com/',
145
+ 'xmlns'=>'http://mothership.connection.com/'}],
146
+ reader.map { |x| x.attributes }
147
+ end
148
+
149
+ def test_attribute_roundtrip
150
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
151
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'
152
+ xmlns='http://mothership.connection.com/'
153
+ >
154
+ <tenderlove:foo awesome='true' size='giant'>snuggles!</tenderlove:foo>
155
+ </x>
156
+ eoxml
157
+ reader.each do |node|
158
+ node.attributes.each do |key, value|
159
+ assert_equal value, node.attribute(key)
160
+ end
161
+ end
162
+ end
163
+
164
+ def test_attribute_at
165
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
166
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
167
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
168
+ </x>
169
+ eoxml
170
+ assert_nil reader.attribute_at(nil)
171
+ assert_nil reader.attribute_at(0)
172
+ assert_equal ['http://tenderlovemaking.com/', nil, 'true', nil, 'true', nil, 'http://tenderlovemaking.com/'],
173
+ reader.map { |x| x.attribute_at(0) }
174
+ end
175
+
176
+ def test_attribute
177
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
178
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
179
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
180
+ </x>
181
+ eoxml
182
+ assert_nil reader.attribute(nil)
183
+ assert_nil reader.attribute('awesome')
184
+ assert_equal [nil, nil, 'true', nil, 'true', nil, nil],
185
+ reader.map { |x| x.attribute('awesome') }
186
+ end
187
+
188
+ def test_attribute_length
189
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
190
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
191
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
192
+ </x>
193
+ eoxml
194
+ assert_equal 0, reader.attribute_count
195
+ assert_equal [1, 0, 1, 0, 0, 0, 0], reader.map { |x| x.attribute_count }
196
+ end
197
+
198
+ def test_depth
199
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
200
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
201
+ <tenderlove:foo>snuggles!</tenderlove:foo>
202
+ </x>
203
+ eoxml
204
+ assert_equal 0, reader.depth
205
+ assert_equal [0, 1, 1, 2, 1, 1, 0], reader.map { |x| x.depth }
206
+ end
207
+
208
+ def test_encoding
209
+ string = <<-eoxml
210
+ <awesome>
211
+ <p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
212
+ <p xml:lang="ja">日本語が上手です</p>
213
+ </awesome>
214
+ eoxml
215
+ reader = Nokogiri::XML::Reader.from_memory(string, nil, 'UTF-8')
216
+ assert_equal ['UTF-8'], reader.map { |x| x.encoding }.uniq
217
+ end
218
+
219
+ def test_xml_version
220
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
221
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
222
+ <tenderlove:foo>snuggles!</tenderlove:foo>
223
+ </x>
224
+ eoxml
225
+ assert_nil reader.xml_version
226
+ assert_equal ['1.0'], reader.map { |x| x.xml_version }.uniq
227
+ end
228
+
229
+ def test_lang
230
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
231
+ <awesome>
232
+ <p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
233
+ <p xml:lang="ja">日本語が上手です</p>
234
+ </awesome>
235
+ eoxml
236
+ assert_nil reader.lang
237
+ assert_equal [nil, nil, "en", "en", "en", nil, "ja", "ja", "ja", nil, nil],
238
+ reader.map { |x| x.lang }
239
+ end
240
+
241
+ def test_value
242
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
243
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
244
+ <tenderlove:foo>snuggles!</tenderlove:foo>
245
+ </x>
246
+ eoxml
247
+ assert_nil reader.value
248
+ assert_equal [nil, "\n ", nil, "snuggles!", nil, "\n ", nil],
249
+ reader.map { |x| x.value }
250
+ end
251
+
252
+ def test_prefix
253
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
254
+ <x xmlns:edi='http://ecommerce.example.org/schema'>
255
+ <edi:foo>hello</edi:foo>
256
+ </x>
257
+ eoxml
258
+ assert_nil reader.prefix
259
+ assert_equal [nil, nil, "edi", nil, "edi", nil, nil],
260
+ reader.map { |n| n.prefix }
261
+ end
262
+
263
+ def test_node_type
264
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
265
+ <x>
266
+ <y>hello</y>
267
+ </x>
268
+ eoxml
269
+ assert_equal 0, reader.node_type
270
+ assert_equal [1, 14, 1, 3, 15, 14, 15], reader.map { |n| n.node_type }
271
+ end
272
+
273
+ def test_inner_xml
274
+ str = "<x><y>hello</y></x>"
275
+ reader = Nokogiri::XML::Reader.from_memory(str)
276
+
277
+ reader.read
278
+
279
+ assert_equal "<y>hello</y>", reader.inner_xml
280
+ end
281
+
282
+ def test_outer_xml
283
+ str = "<x><y>hello</y></x>"
284
+ reader = Nokogiri::XML::Reader.from_memory(str)
285
+
286
+ reader.read
287
+
288
+ assert_equal str, reader.outer_xml
289
+ end
290
+
291
+ def test_state
292
+ reader = Nokogiri::XML::Reader.from_memory('<foo>bar</bar>')
293
+ assert reader.state
294
+ end
295
+
296
+ def test_ns_uri
297
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
298
+ <x xmlns:edi='http://ecommerce.example.org/schema'>
299
+ <edi:foo>hello</edi:foo>
300
+ </x>
301
+ eoxml
302
+ assert_nil reader.namespace_uri
303
+ assert_equal([nil,
304
+ nil,
305
+ "http://ecommerce.example.org/schema",
306
+ nil,
307
+ "http://ecommerce.example.org/schema",
308
+ nil,
309
+ nil],
310
+ reader.map { |n| n.namespace_uri })
311
+ end
312
+
313
+ def test_local_name
314
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
315
+ <x xmlns:edi='http://ecommerce.example.org/schema'>
316
+ <edi:foo>hello</edi:foo>
317
+ </x>
318
+ eoxml
319
+ assert_nil reader.local_name
320
+ assert_equal(["x", "#text", "foo", "#text", "foo", "#text", "x"],
321
+ reader.map { |n| n.local_name })
322
+ end
323
+
324
+ def test_name
325
+ reader = Nokogiri::XML::Reader.from_memory(<<-eoxml)
326
+ <x xmlns:edi='http://ecommerce.example.org/schema'>
327
+ <edi:foo>hello</edi:foo>
328
+ </x>
329
+ eoxml
330
+ assert_nil reader.name
331
+ assert_equal(["x", "#text", "edi:foo", "#text", "edi:foo", "#text", "x"],
332
+ reader.map { |n| n.name })
333
+ end
334
+
335
+ def test_read_from_memory
336
+ called = false
337
+ reader = Nokogiri::XML::Reader.from_memory('<foo>bar</foo>')
338
+ reader.each do |node|
339
+ called = true
340
+ assert node
341
+ end
342
+ assert called
343
+ end
344
+
345
+ def test_large_document_smoke_test
346
+ # simply run on a large document to verify that there no GC issues
347
+ xml = []
348
+ xml << "<elements>"
349
+ 10000.times { |j| xml << "<element id=\"#{j}\"/>" }
350
+ xml << "</elements>"
351
+ xml = xml.join("\n")
352
+
353
+ Nokogiri::XML::Reader.from_memory(xml).each do |e|
354
+ e.attributes
355
+ end
356
+ end
357
+
358
+ end
@@ -0,0 +1,52 @@
1
+ require "helper"
2
+
3
+ module XSD
4
+ module XMLParser
5
+ class Parser
6
+ @factory_added = nil
7
+
8
+ class << self; attr_reader :factory_added; end
9
+
10
+ def self.add_factory o
11
+ @factory_added = o
12
+ end
13
+
14
+ def initialize *args
15
+ @charset = nil
16
+ end
17
+
18
+ def characters foo
19
+ end
20
+
21
+ def start_element *args
22
+ end
23
+
24
+ def end_element *args
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ require 'xsd/xmlparser/nokogiri'
31
+
32
+ class TestSoap4rSax < Nokogiri::TestCase
33
+ def test_factory_added
34
+ assert_equal XSD::XMLParser::Nokogiri, XSD::XMLParser::Nokogiri.factory_added
35
+ end
36
+
37
+ def test_parse
38
+ o = Class.new(::XSD::XMLParser::Nokogiri) do
39
+ attr_accessor :element_started
40
+ def initialize *args
41
+ super
42
+ @element_started = false
43
+ end
44
+
45
+ def start_element *args
46
+ @element_started = true
47
+ end
48
+ end.new 'foo'
49
+ o.do_parse '<?xml version="1.0" ?><root xmlns="http://example.com/"/>'
50
+ assert o.element_started, 'element started'
51
+ end
52
+ end
@@ -0,0 +1,150 @@
1
+ require "helper"
2
+
3
+ class TestXsltTransforms < Nokogiri::TestCase
4
+
5
+ unless Nokogiri.uses_libxml? && 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 result_doc.html?
48
+ assert_equal "", result_doc.at_css("h1").content
49
+
50
+ assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
51
+ assert result_doc = style.transform(doc, ['title', '"Booyah"'])
52
+ assert result_doc.html?
53
+ assert_equal "Booyah", result_doc.at_css("h1").content
54
+
55
+ assert result_string = style.apply_to(doc, ['title', '"Booyah"'])
56
+
57
+ assert_equal result_string, result_doc.to_s
58
+ end
59
+
60
+ def test_transform_with_quote_params
61
+ doc = Nokogiri::XML.parse(File.read(XML_FILE))
62
+
63
+ assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
64
+ assert result_doc = style.transform(doc, Nokogiri::XSLT.quote_params(['title', 'Booyah']))
65
+ assert result_doc.html?
66
+ assert_equal "Booyah", result_doc.at_css("h1").content
67
+
68
+ assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
69
+ assert result_doc = style.transform(doc, Nokogiri::XSLT.quote_params({'title' => 'Booyah'}))
70
+ assert result_doc.html?
71
+ assert_equal "Booyah", result_doc.at_css("h1").content
72
+ end
73
+
74
+ def test_quote_params
75
+ h = {
76
+ :sym => %{xxx},
77
+ 'str' => %{"xxx"},
78
+ :sym2 => %{'xxx'},
79
+ 'str2' => %{x'x'x},
80
+ :sym3 => %{x"x"x},
81
+ }
82
+ hh=h.dup
83
+ result_hash = Nokogiri::XSLT.quote_params(h)
84
+ assert_equal hh, h # non-destructive
85
+
86
+ a=h.to_a.flatten
87
+ result_array = Nokogiri::XSLT.quote_params(a)
88
+ assert_equal h.to_a.flatten, a #non-destructive
89
+
90
+ assert_equal result_array, result_hash
91
+ end
92
+
93
+ if Nokogiri.uses_libxml? # By now, cannot get it working on JRuby.
94
+ def test_exslt
95
+ assert doc = Nokogiri::XML.parse(File.read(EXML_FILE))
96
+ assert doc.xml?
97
+
98
+ assert style = Nokogiri::XSLT.parse(File.read(EXSLT_FILE))
99
+ params = {
100
+ :p1 => 'xxx',
101
+ :p2 => "x'x'x",
102
+ :p3 => 'x"x"x',
103
+ :p4 => '"xxx"'
104
+ }
105
+ result_doc = Nokogiri::XML.parse(style.apply_to(doc,
106
+ Nokogiri::XSLT.quote_params(params)))
107
+
108
+ assert_equal 'func-result', result_doc.at('/root/function').content
109
+ assert_equal 3, result_doc.at('/root/max').content.to_i
110
+ assert_match(
111
+ /\d{4}-\d\d-\d\d[-|+]\d\d:\d\d/,
112
+ result_doc.at('/root/date').content
113
+ )
114
+ result_doc.xpath('/root/params/*').each do |p|
115
+ assert_equal p.content, params[p.name.intern]
116
+ end
117
+ check_params result_doc, params
118
+ result_doc = Nokogiri::XML.parse(style.apply_to(doc,
119
+ Nokogiri::XSLT.quote_params(params.to_a.flatten)))
120
+ check_params result_doc, params
121
+ end
122
+ end
123
+
124
+ def test_xslt_parse_error
125
+ xslt_str = <<-EOX
126
+ <xsl:stylesheet version="1.0"
127
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
128
+ <!-- Not well-formed: -->
129
+ <xsl:template match="/"/>
130
+ <values>
131
+ <xsl:for-each select="//*">
132
+ <value>
133
+ <xsl:value-of select="@id"/>
134
+ </value>
135
+ </xsl:for-each>
136
+ </values>
137
+ </xsl:template>
138
+ </xsl:stylesheet>}
139
+ EOX
140
+ assert_raises(RuntimeError) { Nokogiri::XSLT.parse(xslt_str) }
141
+ end
142
+
143
+ def check_params result_doc, params
144
+ result_doc.xpath('/root/params/*').each do |p|
145
+ assert_equal p.content, params[p.name.intern]
146
+ end
147
+ end
148
+
149
+ end
150
+ end