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,56 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require "helper"
4
+
5
+ module Nokogiri
6
+ module XML
7
+ module SAX
8
+ class TestParserContext < Nokogiri::SAX::TestCase
9
+ def test_replace_entities
10
+ pc = ParserContext.new StringIO.new('<root />'), 'UTF-8'
11
+ pc.replace_entities = false
12
+ assert_equal false, pc.replace_entities
13
+
14
+ pc.replace_entities = true
15
+ assert_equal true, pc.replace_entities
16
+ end
17
+
18
+ def test_from_io
19
+ assert_nothing_raised do
20
+ ParserContext.new StringIO.new('fo'), 'UTF-8'
21
+ end
22
+ end
23
+
24
+ def test_from_string
25
+ assert_nothing_raised do
26
+ ParserContext.new 'blah blah'
27
+ end
28
+ end
29
+
30
+ def test_parse_with
31
+ ctx = ParserContext.new 'blah'
32
+ assert_raises ArgumentError do
33
+ ctx.parse_with nil
34
+ end
35
+ end
36
+
37
+ def test_parse_with_sax_parser
38
+ assert_nothing_raised do
39
+ xml = "<root />"
40
+ ctx = ParserContext.new xml
41
+ parser = Parser.new Doc.new
42
+ ctx.parse_with parser
43
+ end
44
+ end
45
+
46
+ def test_from_file
47
+ assert_nothing_raised do
48
+ ctx = ParserContext.file XML_FILE
49
+ parser = Parser.new Doc.new
50
+ ctx.parse_with parser
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,131 @@
1
+ require "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_exception
13
+ assert_raises(SyntaxError) do
14
+ @parser << "<foo /><foo />"
15
+ end
16
+
17
+ assert_raises(SyntaxError) do
18
+ @parser << nil
19
+ end
20
+ end
21
+
22
+ def test_end_document_called
23
+ @parser.<<(<<-eoxml)
24
+ <p id="asdfasdf">
25
+ <!-- This is a comment -->
26
+ Paragraph 1
27
+ </p>
28
+ eoxml
29
+ assert ! @parser.document.end_document_called
30
+ @parser.finish
31
+ assert @parser.document.end_document_called
32
+ end
33
+
34
+ def test_start_element
35
+ @parser.<<(<<-eoxml)
36
+ <p id="asdfasdf">
37
+ eoxml
38
+
39
+ assert_equal [["p", ["id", "asdfasdf"]]],
40
+ @parser.document.start_elements
41
+
42
+ @parser.<<(<<-eoxml)
43
+ <!-- This is a comment -->
44
+ Paragraph 1
45
+ </p>
46
+ eoxml
47
+ assert_equal [' This is a comment '], @parser.document.comments
48
+ @parser.finish
49
+ end
50
+
51
+ def test_start_element_ns
52
+ @parser.<<(<<-eoxml)
53
+ <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' size='large'></stream:stream>
54
+ eoxml
55
+
56
+ assert_equal 1, @parser.document.start_elements_namespace.length
57
+ el = @parser.document.start_elements_namespace.first
58
+
59
+ assert_equal 'stream', el.first
60
+ assert_equal 2, el[1].length
61
+ assert_equal [['version', '1.0'], ['size', 'large']],
62
+ el[1].map { |x| [x.localname, x.value] }
63
+
64
+ assert_equal 'stream', el[2]
65
+ assert_equal 'http://etherx.jabber.org/streams', el[3]
66
+ @parser.finish
67
+ end
68
+
69
+ def test_end_element_ns
70
+ @parser.<<(<<-eoxml)
71
+ <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'></stream:stream>
72
+ eoxml
73
+
74
+ assert_equal [['stream', 'stream', 'http://etherx.jabber.org/streams']],
75
+ @parser.document.end_elements_namespace
76
+ @parser.finish
77
+ end
78
+
79
+ def test_chevron_partial_xml
80
+ @parser.<<(<<-eoxml)
81
+ <p id="asdfasdf">
82
+ eoxml
83
+
84
+ @parser.<<(<<-eoxml)
85
+ <!-- This is a comment -->
86
+ Paragraph 1
87
+ </p>
88
+ eoxml
89
+ assert_equal [' This is a comment '], @parser.document.comments
90
+ @parser.finish
91
+ end
92
+
93
+ def test_chevron
94
+ @parser.<<(<<-eoxml)
95
+ <p id="asdfasdf">
96
+ <!-- This is a comment -->
97
+ Paragraph 1
98
+ </p>
99
+ eoxml
100
+ @parser.finish
101
+ assert_equal [' This is a comment '], @parser.document.comments
102
+ end
103
+
104
+ def test_recover
105
+ @parser.options |= XML::ParseOptions::RECOVER
106
+ @parser.<<(<<-eoxml)
107
+ <p>
108
+ Foo
109
+ <bar>
110
+ Bar
111
+ </p>
112
+ eoxml
113
+ @parser.finish
114
+ assert(@parser.document.errors.size >= 1)
115
+ assert_equal [["p", []], ["bar", []]], @parser.document.start_elements
116
+ assert_equal "FooBar", @parser.document.data.to_s.gsub(/\s/, '')
117
+ end
118
+
119
+ def test_broken_encoding
120
+ @parser.options |= XML::ParseOptions::RECOVER
121
+ # This is ISO_8859-1:
122
+ @parser.<< "<?xml version='1.0' encoding='UTF-8'?><r>Gau\337</r>"
123
+ @parser.finish
124
+ assert(@parser.document.errors.size >= 1)
125
+ assert_equal "Gau\337", @parser.document.data.to_s
126
+ assert_equal [["r"]], @parser.document.end_elements
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,38 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestAttr < Nokogiri::TestCase
6
+ def test_new
7
+ 100.times {
8
+ doc = Nokogiri::XML::Document.new
9
+ attribute = Nokogiri::XML::Attr.new(doc, 'foo')
10
+ }
11
+ end
12
+
13
+ def test_content=
14
+ xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
15
+ address = xml.xpath('//address')[3]
16
+ street = address.attributes['street']
17
+ street.content = "Y&ent1;"
18
+ assert_equal "Y&ent1;", street.value
19
+ end
20
+
21
+ def test_value=
22
+ xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
23
+ address = xml.xpath('//address')[3]
24
+ street = address.attributes['street']
25
+ street.value = "Y&ent1;"
26
+ assert_equal "Y&ent1;", street.value
27
+ end
28
+
29
+ def test_unlink
30
+ xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
31
+ address = xml.xpath('/staff/employee/address').first
32
+ assert_equal 'Yes', address['domestic']
33
+ address.attribute_nodes.first.unlink
34
+ assert_nil address['domestic']
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,82 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestAttributeDecl < 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
+ <!ATTLIST br width CDATA "0">
12
+ <!ATTLIST a width CDATA >
13
+ <!ATTLIST payment type (check|cash) "cash">
14
+ ]>
15
+ <root />
16
+ eoxml
17
+ @attrs = @xml.internal_subset.children
18
+ @attr_decl = @attrs.first
19
+ end
20
+
21
+ def test_inspect
22
+ assert_equal(
23
+ "#<#{@attr_decl.class.name}:#{sprintf("0x%x", @attr_decl.object_id)} #{@attr_decl.to_s.inspect}>",
24
+ @attr_decl.inspect
25
+ )
26
+ end
27
+
28
+ def test_type
29
+ assert_equal 16, @attr_decl.type
30
+ end
31
+
32
+ def test_class
33
+ assert_instance_of Nokogiri::XML::AttributeDecl, @attr_decl
34
+ end
35
+
36
+ def test_content
37
+ assert_raise NoMethodError do
38
+ @attr_decl.content
39
+ end
40
+ end
41
+
42
+ def test_attributes
43
+ assert_raise NoMethodError do
44
+ @attr_decl.attributes
45
+ end
46
+ end
47
+
48
+ def test_namespace
49
+ assert_raise NoMethodError do
50
+ @attr_decl.namespace
51
+ end
52
+ end
53
+
54
+ def test_namespace_definitions
55
+ assert_raise NoMethodError do
56
+ @attr_decl.namespace_definitions
57
+ end
58
+ end
59
+
60
+ def test_line
61
+ assert_raise NoMethodError do
62
+ @attr_decl.line
63
+ end
64
+ end
65
+
66
+ def test_attribute_type
67
+ assert_equal 1, @attr_decl.attribute_type
68
+ end
69
+
70
+ def test_default
71
+ assert_equal '0', @attr_decl.default
72
+ assert_nil @attrs[1].default
73
+ end
74
+
75
+ def test_enumeration
76
+ assert_equal [], @attr_decl.enumeration
77
+ assert_equal ['check', 'cash'], @attrs[2].enumeration
78
+ end
79
+ end
80
+ end
81
+ end
82
+
@@ -0,0 +1,167 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestBuilder < Nokogiri::TestCase
6
+ def test_with_root
7
+ doc = Nokogiri::XML(File.read(XML_FILE))
8
+ Nokogiri::XML::Builder.with(doc.at('employee')) do |xml|
9
+ xml.foo
10
+ end
11
+ assert_equal 1, doc.xpath('//employee/foo').length
12
+ end
13
+
14
+ def test_root_namespace_default_decl
15
+ b = Nokogiri::XML::Builder.new { |xml| xml.root(:xmlns => 'one:two') }
16
+ doc = b.doc
17
+ assert_equal 'one:two', doc.root.namespace.href
18
+ assert_equal({ 'xmlns' => 'one:two' }, doc.root.namespaces)
19
+ end
20
+
21
+ def test_root_namespace_multi_decl
22
+ b = Nokogiri::XML::Builder.new { |xml|
23
+ xml.root(:xmlns => 'one:two', 'xmlns:foo' => 'bar') do
24
+ xml.hello
25
+ end
26
+ }
27
+ doc = b.doc
28
+ assert_equal 'one:two', doc.root.namespace.href
29
+ assert_equal({ 'xmlns' => 'one:two', 'xmlns:foo' => 'bar' }, doc.root.namespaces)
30
+
31
+ assert_equal 'one:two', doc.at('hello').namespace.href
32
+ end
33
+
34
+ def test_non_root_namespace
35
+ b = Nokogiri::XML::Builder.new { |xml|
36
+ xml.root { xml.hello(:xmlns => 'one') }
37
+ }
38
+ assert_equal 'one', b.doc.at('hello', 'xmlns' => 'one').namespace.href
39
+ end
40
+
41
+ def test_specify_namespace
42
+ b = Nokogiri::XML::Builder.new { |xml|
43
+ xml.root('xmlns:foo' => 'bar') do
44
+ xml[:foo].bar
45
+ xml['foo'].baz
46
+ end
47
+ }
48
+ doc = b.doc
49
+ assert_equal 'bar', b.doc.at('foo|bar', 'foo' => 'bar').namespace.href
50
+ assert_equal 'bar', b.doc.at('foo|baz', 'foo' => 'bar').namespace.href
51
+ end
52
+
53
+ def test_specify_namespace_nested
54
+ b = Nokogiri::XML::Builder.new { |xml|
55
+ xml.root('xmlns:foo' => 'bar') do
56
+ xml.yay do
57
+ xml[:foo].bar
58
+
59
+ xml.yikes do
60
+ xml['foo'].baz
61
+ end
62
+ end
63
+ end
64
+ }
65
+ doc = b.doc
66
+ assert_equal 'bar', b.doc.at('foo|bar', 'foo' => 'bar').namespace.href
67
+ assert_equal 'bar', b.doc.at('foo|baz', 'foo' => 'bar').namespace.href
68
+ end
69
+
70
+ def test_specified_namespace_undeclared
71
+ b = Nokogiri::XML::Builder.new { |xml|
72
+ xml.root do
73
+ assert_raises(ArgumentError) do
74
+ xml[:foo]
75
+ end
76
+ end
77
+ }
78
+ end
79
+
80
+ def test_set_encoding
81
+ builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
82
+ xml.root do
83
+ xml.bar 'blah'
84
+ end
85
+ end
86
+ assert_match 'UTF-8', builder.to_xml
87
+ end
88
+
89
+ def test_bang_and_underscore_is_escaped
90
+ builder = Nokogiri::XML::Builder.new do |xml|
91
+ xml.root do
92
+ xml.p_('adsfadsf')
93
+ xml.p!('adsfadsf')
94
+ end
95
+ end
96
+ assert_equal 2, builder.doc.xpath('//p').length
97
+ end
98
+
99
+ def test_square_brackets_set_attributes
100
+ builder = Nokogiri::XML::Builder.new do |xml|
101
+ xml.root do
102
+ foo = xml.foo
103
+ foo['id'] = 'hello'
104
+ assert_equal 'hello', foo['id']
105
+ end
106
+ end
107
+ assert_equal 1, builder.doc.xpath('//foo[@id = "hello"]').length
108
+ end
109
+
110
+ def test_nested_local_variable
111
+ @ivar = 'hello'
112
+ local_var = 'hello world'
113
+ builder = Nokogiri::XML::Builder.new do |xml|
114
+ xml.root do
115
+ xml.foo local_var
116
+ xml.bar @ivar
117
+ xml.baz {
118
+ xml.text @ivar
119
+ }
120
+ end
121
+ end
122
+
123
+ assert_equal 'hello world', builder.doc.at('//root/foo').content
124
+ assert_equal 'hello', builder.doc.at('//root/bar').content
125
+ assert_equal 'hello', builder.doc.at('baz').content
126
+ end
127
+
128
+ def test_raw_append
129
+ builder = Nokogiri::XML::Builder.new do |xml|
130
+ xml.root do
131
+ xml << 'hello'
132
+ end
133
+ end
134
+
135
+ assert_equal 'hello', builder.doc.at('/root').content
136
+ end
137
+
138
+ def test_raw_append_with_instance_eval
139
+ builder = Nokogiri::XML::Builder.new do
140
+ root do
141
+ self << 'hello'
142
+ end
143
+ end
144
+
145
+ assert_equal 'hello', builder.doc.at('/root').content
146
+ end
147
+
148
+ def test_cdata
149
+ builder = Nokogiri::XML::Builder.new do
150
+ root {
151
+ cdata "hello world"
152
+ }
153
+ end
154
+ assert_equal("<?xml version=\"1.0\"?><root><![CDATA[hello world]]></root>", builder.to_xml.gsub(/\n/, ''))
155
+ end
156
+
157
+ def test_builder_no_block
158
+ string = "hello world"
159
+ builder = Nokogiri::XML::Builder.new
160
+ builder.root {
161
+ cdata string
162
+ }
163
+ assert_equal("<?xml version=\"1.0\"?><root><![CDATA[hello world]]></root>", builder.to_xml.gsub(/\n/, ''))
164
+ end
165
+ end
166
+ end
167
+ end