nokogiri-backupify 1.5.0.beta.4

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 (275) hide show
  1. data/.autotest +26 -0
  2. data/CHANGELOG.ja.rdoc +509 -0
  3. data/CHANGELOG.rdoc +490 -0
  4. data/Manifest.txt +274 -0
  5. data/README.ja.rdoc +106 -0
  6. data/README.rdoc +150 -0
  7. data/Rakefile +217 -0
  8. data/bin/nokogiri +54 -0
  9. data/deps.rip +5 -0
  10. data/ext/java/nokogiri/EncodingHandler.java +124 -0
  11. data/ext/java/nokogiri/HtmlDocument.java +146 -0
  12. data/ext/java/nokogiri/HtmlElementDescription.java +145 -0
  13. data/ext/java/nokogiri/HtmlEntityLookup.java +79 -0
  14. data/ext/java/nokogiri/HtmlSaxParserContext.java +256 -0
  15. data/ext/java/nokogiri/NokogiriService.java +466 -0
  16. data/ext/java/nokogiri/XmlAttr.java +183 -0
  17. data/ext/java/nokogiri/XmlAttributeDecl.java +130 -0
  18. data/ext/java/nokogiri/XmlCdata.java +89 -0
  19. data/ext/java/nokogiri/XmlComment.java +84 -0
  20. data/ext/java/nokogiri/XmlDocument.java +514 -0
  21. data/ext/java/nokogiri/XmlDocumentFragment.java +216 -0
  22. data/ext/java/nokogiri/XmlDtd.java +464 -0
  23. data/ext/java/nokogiri/XmlElement.java +221 -0
  24. data/ext/java/nokogiri/XmlElementContent.java +382 -0
  25. data/ext/java/nokogiri/XmlElementDecl.java +147 -0
  26. data/ext/java/nokogiri/XmlEntityDecl.java +161 -0
  27. data/ext/java/nokogiri/XmlEntityReference.java +75 -0
  28. data/ext/java/nokogiri/XmlNamespace.java +127 -0
  29. data/ext/java/nokogiri/XmlNode.java +1392 -0
  30. data/ext/java/nokogiri/XmlNodeSet.java +284 -0
  31. data/ext/java/nokogiri/XmlProcessingInstruction.java +103 -0
  32. data/ext/java/nokogiri/XmlReader.java +409 -0
  33. data/ext/java/nokogiri/XmlRelaxng.java +199 -0
  34. data/ext/java/nokogiri/XmlSaxParserContext.java +353 -0
  35. data/ext/java/nokogiri/XmlSaxPushParser.java +182 -0
  36. data/ext/java/nokogiri/XmlSchema.java +175 -0
  37. data/ext/java/nokogiri/XmlSyntaxError.java +114 -0
  38. data/ext/java/nokogiri/XmlText.java +135 -0
  39. data/ext/java/nokogiri/XmlXpathContext.java +175 -0
  40. data/ext/java/nokogiri/XsltStylesheet.java +181 -0
  41. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +205 -0
  42. data/ext/java/nokogiri/internals/NokogiriDocumentCache.java +73 -0
  43. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +80 -0
  44. data/ext/java/nokogiri/internals/NokogiriHandler.java +326 -0
  45. data/ext/java/nokogiri/internals/NokogiriHelpers.java +583 -0
  46. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +170 -0
  47. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +118 -0
  48. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +73 -0
  49. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +121 -0
  50. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +78 -0
  51. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +120 -0
  52. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +56 -0
  53. data/ext/java/nokogiri/internals/ParserContext.java +278 -0
  54. data/ext/java/nokogiri/internals/PushInputStream.java +411 -0
  55. data/ext/java/nokogiri/internals/ReaderNode.java +473 -0
  56. data/ext/java/nokogiri/internals/SaveContext.java +282 -0
  57. data/ext/java/nokogiri/internals/SchemaErrorHandler.java +68 -0
  58. data/ext/java/nokogiri/internals/XmlDeclHandler.java +42 -0
  59. data/ext/java/nokogiri/internals/XmlDomParser.java +77 -0
  60. data/ext/java/nokogiri/internals/XmlDomParserContext.java +233 -0
  61. data/ext/java/nokogiri/internals/XmlSaxParser.java +65 -0
  62. data/ext/java/nokogiri/internals/XsltExtensionFunction.java +72 -0
  63. data/ext/nokogiri/depend +358 -0
  64. data/ext/nokogiri/extconf.rb +124 -0
  65. data/ext/nokogiri/html_document.c +154 -0
  66. data/ext/nokogiri/html_document.h +10 -0
  67. data/ext/nokogiri/html_element_description.c +276 -0
  68. data/ext/nokogiri/html_element_description.h +10 -0
  69. data/ext/nokogiri/html_entity_lookup.c +32 -0
  70. data/ext/nokogiri/html_entity_lookup.h +8 -0
  71. data/ext/nokogiri/html_sax_parser_context.c +94 -0
  72. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  73. data/ext/nokogiri/nokogiri.c +92 -0
  74. data/ext/nokogiri/nokogiri.h +160 -0
  75. data/ext/nokogiri/xml_attr.c +94 -0
  76. data/ext/nokogiri/xml_attr.h +9 -0
  77. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  78. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  79. data/ext/nokogiri/xml_cdata.c +56 -0
  80. data/ext/nokogiri/xml_cdata.h +9 -0
  81. data/ext/nokogiri/xml_comment.c +54 -0
  82. data/ext/nokogiri/xml_comment.h +9 -0
  83. data/ext/nokogiri/xml_document.c +478 -0
  84. data/ext/nokogiri/xml_document.h +23 -0
  85. data/ext/nokogiri/xml_document_fragment.c +48 -0
  86. data/ext/nokogiri/xml_document_fragment.h +10 -0
  87. data/ext/nokogiri/xml_dtd.c +202 -0
  88. data/ext/nokogiri/xml_dtd.h +10 -0
  89. data/ext/nokogiri/xml_element_content.c +123 -0
  90. data/ext/nokogiri/xml_element_content.h +10 -0
  91. data/ext/nokogiri/xml_element_decl.c +69 -0
  92. data/ext/nokogiri/xml_element_decl.h +9 -0
  93. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  94. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  95. data/ext/nokogiri/xml_entity_decl.c +110 -0
  96. data/ext/nokogiri/xml_entity_decl.h +10 -0
  97. data/ext/nokogiri/xml_entity_reference.c +52 -0
  98. data/ext/nokogiri/xml_entity_reference.h +9 -0
  99. data/ext/nokogiri/xml_io.c +31 -0
  100. data/ext/nokogiri/xml_io.h +11 -0
  101. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  102. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  103. data/ext/nokogiri/xml_namespace.c +84 -0
  104. data/ext/nokogiri/xml_namespace.h +13 -0
  105. data/ext/nokogiri/xml_node.c +1384 -0
  106. data/ext/nokogiri/xml_node.h +13 -0
  107. data/ext/nokogiri/xml_node_set.c +418 -0
  108. data/ext/nokogiri/xml_node_set.h +9 -0
  109. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  110. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  111. data/ext/nokogiri/xml_reader.c +684 -0
  112. data/ext/nokogiri/xml_reader.h +10 -0
  113. data/ext/nokogiri/xml_relax_ng.c +161 -0
  114. data/ext/nokogiri/xml_relax_ng.h +9 -0
  115. data/ext/nokogiri/xml_sax_parser.c +288 -0
  116. data/ext/nokogiri/xml_sax_parser.h +39 -0
  117. data/ext/nokogiri/xml_sax_parser_context.c +199 -0
  118. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  119. data/ext/nokogiri/xml_sax_push_parser.c +115 -0
  120. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  121. data/ext/nokogiri/xml_schema.c +205 -0
  122. data/ext/nokogiri/xml_schema.h +9 -0
  123. data/ext/nokogiri/xml_syntax_error.c +58 -0
  124. data/ext/nokogiri/xml_syntax_error.h +13 -0
  125. data/ext/nokogiri/xml_text.c +50 -0
  126. data/ext/nokogiri/xml_text.h +9 -0
  127. data/ext/nokogiri/xml_xpath_context.c +309 -0
  128. data/ext/nokogiri/xml_xpath_context.h +9 -0
  129. data/ext/nokogiri/xslt_stylesheet.c +258 -0
  130. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  131. data/lib/isorelax.jar +0 -0
  132. data/lib/jing.jar +0 -0
  133. data/lib/nekodtd.jar +0 -0
  134. data/lib/nekohtml.jar +0 -0
  135. data/lib/nokogiri.rb +143 -0
  136. data/lib/nokogiri/css.rb +23 -0
  137. data/lib/nokogiri/css/node.rb +99 -0
  138. data/lib/nokogiri/css/parser.rb +677 -0
  139. data/lib/nokogiri/css/parser.y +237 -0
  140. data/lib/nokogiri/css/parser_extras.rb +91 -0
  141. data/lib/nokogiri/css/syntax_error.rb +7 -0
  142. data/lib/nokogiri/css/tokenizer.rb +152 -0
  143. data/lib/nokogiri/css/tokenizer.rex +55 -0
  144. data/lib/nokogiri/css/xpath_visitor.rb +171 -0
  145. data/lib/nokogiri/decorators/slop.rb +35 -0
  146. data/lib/nokogiri/html.rb +36 -0
  147. data/lib/nokogiri/html/builder.rb +35 -0
  148. data/lib/nokogiri/html/document.rb +221 -0
  149. data/lib/nokogiri/html/document_fragment.rb +41 -0
  150. data/lib/nokogiri/html/element_description.rb +23 -0
  151. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  152. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  153. data/lib/nokogiri/html/sax/parser.rb +52 -0
  154. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  155. data/lib/nokogiri/syntax_error.rb +4 -0
  156. data/lib/nokogiri/version.rb +35 -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 +418 -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 +218 -0
  164. data/lib/nokogiri/xml/document_fragment.rb +84 -0
  165. data/lib/nokogiri/xml/dtd.rb +22 -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 +19 -0
  169. data/lib/nokogiri/xml/namespace.rb +13 -0
  170. data/lib/nokogiri/xml/node.rb +907 -0
  171. data/lib/nokogiri/xml/node/save_options.rb +45 -0
  172. data/lib/nokogiri/xml/node_set.rb +350 -0
  173. data/lib/nokogiri/xml/notation.rb +6 -0
  174. data/lib/nokogiri/xml/parse_options.rb +85 -0
  175. data/lib/nokogiri/xml/pp.rb +2 -0
  176. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  177. data/lib/nokogiri/xml/pp/node.rb +56 -0
  178. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  179. data/lib/nokogiri/xml/reader.rb +112 -0
  180. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  181. data/lib/nokogiri/xml/sax.rb +4 -0
  182. data/lib/nokogiri/xml/sax/document.rb +164 -0
  183. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  184. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  185. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  186. data/lib/nokogiri/xml/schema.rb +57 -0
  187. data/lib/nokogiri/xml/syntax_error.rb +47 -0
  188. data/lib/nokogiri/xml/text.rb +9 -0
  189. data/lib/nokogiri/xml/xpath.rb +10 -0
  190. data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
  191. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  192. data/lib/nokogiri/xslt.rb +52 -0
  193. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  194. data/lib/xercesImpl.jar +0 -0
  195. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  196. data/tasks/cross_compile.rb +177 -0
  197. data/tasks/test.rb +94 -0
  198. data/test/css/test_nthiness.rb +159 -0
  199. data/test/css/test_parser.rb +303 -0
  200. data/test/css/test_tokenizer.rb +198 -0
  201. data/test/css/test_xpath_visitor.rb +85 -0
  202. data/test/decorators/test_slop.rb +16 -0
  203. data/test/files/2ch.html +108 -0
  204. data/test/files/address_book.rlx +12 -0
  205. data/test/files/address_book.xml +10 -0
  206. data/test/files/bar/bar.xsd +4 -0
  207. data/test/files/dont_hurt_em_why.xml +422 -0
  208. data/test/files/exslt.xml +8 -0
  209. data/test/files/exslt.xslt +35 -0
  210. data/test/files/foo/foo.xsd +4 -0
  211. data/test/files/po.xml +32 -0
  212. data/test/files/po.xsd +66 -0
  213. data/test/files/shift_jis.html +10 -0
  214. data/test/files/shift_jis.xml +5 -0
  215. data/test/files/snuggles.xml +3 -0
  216. data/test/files/staff.dtd +10 -0
  217. data/test/files/staff.xml +59 -0
  218. data/test/files/staff.xslt +32 -0
  219. data/test/files/tlm.html +850 -0
  220. data/test/files/valid_bar.xml +2 -0
  221. data/test/helper.rb +171 -0
  222. data/test/html/sax/test_parser.rb +136 -0
  223. data/test/html/sax/test_parser_context.rb +48 -0
  224. data/test/html/test_builder.rb +164 -0
  225. data/test/html/test_document.rb +457 -0
  226. data/test/html/test_document_encoding.rb +123 -0
  227. data/test/html/test_document_fragment.rb +255 -0
  228. data/test/html/test_element_description.rb +100 -0
  229. data/test/html/test_named_characters.rb +14 -0
  230. data/test/html/test_node.rb +190 -0
  231. data/test/html/test_node_encoding.rb +27 -0
  232. data/test/test_convert_xpath.rb +135 -0
  233. data/test/test_css_cache.rb +45 -0
  234. data/test/test_encoding_handler.rb +46 -0
  235. data/test/test_memory_leak.rb +52 -0
  236. data/test/test_nokogiri.rb +132 -0
  237. data/test/test_reader.rb +403 -0
  238. data/test/test_soap4r_sax.rb +52 -0
  239. data/test/test_xslt_transforms.rb +189 -0
  240. data/test/xml/node/test_save_options.rb +20 -0
  241. data/test/xml/node/test_subclass.rb +44 -0
  242. data/test/xml/sax/test_parser.rb +338 -0
  243. data/test/xml/sax/test_parser_context.rb +113 -0
  244. data/test/xml/sax/test_push_parser.rb +156 -0
  245. data/test/xml/test_attr.rb +65 -0
  246. data/test/xml/test_attribute_decl.rb +86 -0
  247. data/test/xml/test_builder.rb +210 -0
  248. data/test/xml/test_cdata.rb +50 -0
  249. data/test/xml/test_comment.rb +29 -0
  250. data/test/xml/test_document.rb +675 -0
  251. data/test/xml/test_document_encoding.rb +26 -0
  252. data/test/xml/test_document_fragment.rb +192 -0
  253. data/test/xml/test_dtd.rb +107 -0
  254. data/test/xml/test_dtd_encoding.rb +33 -0
  255. data/test/xml/test_element_content.rb +56 -0
  256. data/test/xml/test_element_decl.rb +73 -0
  257. data/test/xml/test_entity_decl.rb +122 -0
  258. data/test/xml/test_entity_reference.rb +21 -0
  259. data/test/xml/test_namespace.rb +70 -0
  260. data/test/xml/test_node.rb +899 -0
  261. data/test/xml/test_node_attributes.rb +34 -0
  262. data/test/xml/test_node_encoding.rb +107 -0
  263. data/test/xml/test_node_reparenting.rb +321 -0
  264. data/test/xml/test_node_set.rb +708 -0
  265. data/test/xml/test_parse_options.rb +52 -0
  266. data/test/xml/test_processing_instruction.rb +30 -0
  267. data/test/xml/test_reader_encoding.rb +126 -0
  268. data/test/xml/test_relax_ng.rb +60 -0
  269. data/test/xml/test_schema.rb +89 -0
  270. data/test/xml/test_syntax_error.rb +12 -0
  271. data/test/xml/test_text.rb +47 -0
  272. data/test/xml/test_unparented_node.rb +381 -0
  273. data/test/xml/test_xpath.rb +237 -0
  274. data/test/xslt/test_custom_functions.rb +94 -0
  275. metadata +525 -0
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bar />
@@ -0,0 +1,171 @@
1
+ #Process.setrlimit(Process::RLIMIT_CORE, Process::RLIM_INFINITY) unless RUBY_PLATFORM =~ /(java|mswin|mingw)/i
2
+ $VERBOSE = true
3
+ require 'minitest/autorun'
4
+ require 'fileutils'
5
+ require 'tempfile'
6
+ require 'pp'
7
+
8
+ require 'nokogiri'
9
+
10
+ warn "#{__FILE__}:#{__LINE__}: version info: #{Nokogiri::VERSION_INFO.inspect}"
11
+
12
+ module Nokogiri
13
+ class TestCase < MiniTest::Spec
14
+ ASSETS_DIR = File.expand_path File.join(File.dirname(__FILE__), 'files')
15
+ XML_FILE = File.join(ASSETS_DIR, 'staff.xml')
16
+ XSLT_FILE = File.join(ASSETS_DIR, 'staff.xslt')
17
+ EXSLT_FILE = File.join(ASSETS_DIR, 'exslt.xslt')
18
+ EXML_FILE = File.join(ASSETS_DIR, 'exslt.xml')
19
+ HTML_FILE = File.join(ASSETS_DIR, 'tlm.html')
20
+ NICH_FILE = File.join(ASSETS_DIR, '2ch.html')
21
+ SHIFT_JIS_XML = File.join(ASSETS_DIR, 'shift_jis.xml')
22
+ SHIFT_JIS_HTML = File.join(ASSETS_DIR, 'shift_jis.html')
23
+ ENCODING_XHTML_FILE = File.join(ASSETS_DIR, 'encoding.xhtml')
24
+ ENCODING_HTML_FILE = File.join(ASSETS_DIR, 'encoding.html')
25
+ PO_XML_FILE = File.join(ASSETS_DIR, 'po.xml')
26
+ PO_SCHEMA_FILE = File.join(ASSETS_DIR, 'po.xsd')
27
+ ADDRESS_SCHEMA_FILE = File.join(ASSETS_DIR, 'address_book.rlx')
28
+ ADDRESS_XML_FILE = File.join(ASSETS_DIR, 'address_book.xml')
29
+ SNUGGLES_FILE = File.join(ASSETS_DIR, 'snuggles.xml')
30
+
31
+ def teardown
32
+ if ENV['NOKOGIRI_GC']
33
+ STDOUT.putc '!'
34
+ if RUBY_PLATFORM =~ /java/
35
+ require 'java'
36
+ java.lang.System.gc
37
+ else
38
+ GC.start
39
+ end
40
+ end
41
+ end
42
+
43
+ def assert_indent amount, doc, message = nil
44
+ nodes = []
45
+ doc.traverse do |node|
46
+ nodes << node if node.text? && node.blank?
47
+ end
48
+ assert nodes.length > 0
49
+ nodes.each do |node|
50
+ len = node.content.gsub(/[\r\n]/, '').length
51
+ assert_equal(0, len % amount, message)
52
+ end
53
+ end
54
+
55
+ def util_decorate(document, decorator_module)
56
+ document.decorators(XML::Node) << decorator_module
57
+ document.decorators(XML::NodeSet) << decorator_module
58
+ document.decorate!
59
+ end
60
+
61
+ #
62
+ # Test::Unit backwards compatibility section
63
+ #
64
+ alias :assert_no_match :refute_match
65
+ alias :assert_not_nil :refute_nil
66
+ alias :assert_raise :assert_raises
67
+ alias :assert_not_equal :refute_equal
68
+
69
+ def assert_nothing_raised(*args)
70
+ self._assertions += 1
71
+ if Module === args.last
72
+ msg = nil
73
+ else
74
+ msg = args.pop
75
+ end
76
+ begin
77
+ line = __LINE__; yield
78
+ rescue Exception => e
79
+ bt = e.backtrace
80
+ as = e.instance_of?(MiniTest::Assertion)
81
+ if as
82
+ ans = /\A#{Regexp.quote(__FILE__)}:#{line}:in /o
83
+ bt.reject! {|ln| ans =~ ln}
84
+ end
85
+ if ((args.empty? && !as) ||
86
+ args.any? {|a| a.instance_of?(Module) ? e.is_a?(a) : e.class == a })
87
+ msg = message(msg) { "Exception raised:\n<#{mu_pp(e)}>" }
88
+ raise MiniTest::Assertion, msg.call, bt
89
+ else
90
+ raise
91
+ end
92
+ end
93
+ nil
94
+ end
95
+ end
96
+
97
+ module SAX
98
+ class TestCase < Nokogiri::TestCase
99
+ class Doc < XML::SAX::Document
100
+ attr_reader :start_elements, :start_document_called
101
+ attr_reader :end_elements, :end_document_called
102
+ attr_reader :data, :comments, :cdata_blocks, :start_elements_namespace
103
+ attr_reader :errors, :warnings, :end_elements_namespace
104
+ attr_reader :xmldecls
105
+
106
+ def xmldecl version, encoding, standalone
107
+ @xmldecls = [version, encoding, standalone].compact
108
+ super
109
+ end
110
+
111
+ def start_document
112
+ @start_document_called = true
113
+ super
114
+ end
115
+
116
+ def end_document
117
+ @end_document_called = true
118
+ super
119
+ end
120
+
121
+ def error error
122
+ (@errors ||= []) << error
123
+ super
124
+ end
125
+
126
+ def warning warning
127
+ (@warning ||= []) << warning
128
+ super
129
+ end
130
+
131
+ def start_element *args
132
+ (@start_elements ||= []) << args
133
+ super
134
+ end
135
+
136
+ def start_element_namespace *args
137
+ (@start_elements_namespace ||= []) << args
138
+ super
139
+ end
140
+
141
+ def end_element *args
142
+ (@end_elements ||= []) << args
143
+ super
144
+ end
145
+
146
+ def end_element_namespace *args
147
+ (@end_elements_namespace ||= []) << args
148
+ super
149
+ end
150
+
151
+ def characters string
152
+ @data ||= []
153
+ @data += [string]
154
+ super
155
+ end
156
+
157
+ def comment string
158
+ @comments ||= []
159
+ @comments += [string]
160
+ super
161
+ end
162
+
163
+ def cdata_block string
164
+ @cdata_blocks ||= []
165
+ @cdata_blocks += [string]
166
+ super
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,136 @@
1
+ # -*- coding: utf-8 -*-
2
+ require "helper"
3
+
4
+ module Nokogiri
5
+ module HTML
6
+ module SAX
7
+ class TestParser < Nokogiri::SAX::TestCase
8
+ def setup
9
+ super
10
+ @parser = HTML::SAX::Parser.new(Doc.new)
11
+ end
12
+
13
+ def test_parse_empty_document
14
+ # This caused a segfault in libxml 2.6.x
15
+ assert_nothing_raised { @parser.parse '' }
16
+ end
17
+
18
+ def test_parse_empty_file
19
+ # Make sure empty files don't break stuff
20
+ empty_file_name = File.join(Dir.tmpdir, 'bogus.xml')
21
+ FileUtils.touch empty_file_name
22
+ assert_nothing_raised { @parser.parse_file empty_file_name }
23
+ end
24
+
25
+ def test_parse_file
26
+ @parser.parse_file(HTML_FILE)
27
+
28
+ # Take a look at the comment in test_parse_document to know
29
+ # a possible reason to this difference.
30
+ if Nokogiri.uses_libxml?
31
+ assert_equal 1110, @parser.document.end_elements.length
32
+ else
33
+ assert_equal 1119, @parser.document.end_elements.length
34
+ end
35
+ end
36
+
37
+ def test_parse_file_nil_argument
38
+ assert_raises(ArgumentError) {
39
+ @parser.parse_file(nil)
40
+ }
41
+ end
42
+
43
+ def test_parse_file_non_existant
44
+ assert_raise Errno::ENOENT do
45
+ @parser.parse_file('there_is_no_reasonable_way_this_file_exists')
46
+ end
47
+ end
48
+
49
+ def test_parse_file_with_dir
50
+ assert_raise Errno::EISDIR do
51
+ @parser.parse_file(File.dirname(__FILE__))
52
+ end
53
+ end
54
+
55
+ def test_parse_memory_nil
56
+ assert_raise ArgumentError do
57
+ @parser.parse_memory(nil)
58
+ end
59
+ end
60
+
61
+ def test_parse_force_encoding
62
+ @parser.parse_memory(<<-HTML, 'UTF-8')
63
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
64
+ Информация
65
+ HTML
66
+ assert_equal("Информация",
67
+ @parser.document.data.join.strip)
68
+ end
69
+
70
+ def test_parse_document
71
+ @parser.parse_memory(<<-eoxml)
72
+ <p>Paragraph 1</p>
73
+ <p>Paragraph 2</p>
74
+ eoxml
75
+
76
+ # JRuby version is different because of the internal implementation
77
+ # JRuby version uses NekoHTML which inserts empty "head" elements.
78
+ #
79
+ # Currently following features are set:
80
+ # "http://cyberneko.org/html/properties/names/elems" => "lower"
81
+ # "http://cyberneko.org/html/properties/names/attrs" => "lower"
82
+ if Nokogiri.uses_libxml?
83
+ assert_equal([["html", []], ["body", []], ["p", []], ["p", []]],
84
+ @parser.document.start_elements)
85
+ else
86
+ assert_equal([["html", []], ["head", []], ["body", []], ["p", []], ["p", []]],
87
+ @parser.document.start_elements)
88
+ end
89
+ end
90
+
91
+ def test_parser_attributes
92
+ html = <<-eohtml
93
+ <html>
94
+ <head>
95
+ <title>hello</title>
96
+ </head>
97
+ <body>
98
+ <img src="face.jpg" title="daddy &amp; me">
99
+ <hr noshade size="2">
100
+ </body>
101
+ </html>
102
+ eohtml
103
+
104
+ block_called = false
105
+ @parser.parse(html) { |ctx|
106
+ block_called = true
107
+ ctx.replace_entities = true
108
+ }
109
+
110
+ assert block_called
111
+
112
+ noshade_value = if Nokogiri.uses_libxml? && Nokogiri::VERSION_INFO['libxml']['loaded'] < '2.7.7'
113
+ ['noshade', 'noshade']
114
+ else
115
+ ['noshade', nil]
116
+ end
117
+
118
+ assert_equal [
119
+ ['html', []],
120
+ ['head', []],
121
+ ['title', []],
122
+ ['body', []],
123
+ ['img', [
124
+ ['src', 'face.jpg'],
125
+ ['title', 'daddy & me']
126
+ ]],
127
+ ['hr', [
128
+ noshade_value,
129
+ ['size', '2']
130
+ ]]
131
+ ], @parser.document.start_elements
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,48 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require "helper"
4
+
5
+ module Nokogiri
6
+ module HTML
7
+ module SAX
8
+ class TestParserContext < Nokogiri::SAX::TestCase
9
+ def test_from_io
10
+ assert_nothing_raised do
11
+ ParserContext.new StringIO.new('fo'), 'UTF-8'
12
+ end
13
+ end
14
+
15
+ def test_from_string
16
+ assert_nothing_raised do
17
+ ParserContext.new 'blah blah'
18
+ end
19
+ end
20
+
21
+ def test_parse_with
22
+ ctx = ParserContext.new 'blah'
23
+ assert_raises ArgumentError do
24
+ ctx.parse_with nil
25
+ end
26
+ end
27
+
28
+ def test_parse_with_sax_parser
29
+ assert_nothing_raised do
30
+ xml = "<root />"
31
+ ctx = ParserContext.new xml
32
+ parser = Parser.new Doc.new
33
+ ctx.parse_with parser
34
+ end
35
+ end
36
+
37
+ def test_from_file
38
+ assert_nothing_raised do
39
+ ctx = ParserContext.file HTML_FILE, 'UTF-8'
40
+ parser = Parser.new Doc.new
41
+ ctx.parse_with parser
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
@@ -0,0 +1,164 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module HTML
5
+ class TestBuilder < Nokogiri::TestCase
6
+ def test_top_level_function_builds
7
+ foo = nil
8
+ Nokogiri() { |xml| foo = xml }
9
+ assert_instance_of Nokogiri::HTML::Builder, foo
10
+ end
11
+
12
+ def test_builder_with_explicit_tags
13
+ html_doc = Nokogiri::HTML::Builder.new {
14
+ div.slide(:class => 'another_class') {
15
+ node = Nokogiri::XML::Node.new("id", doc)
16
+ node.content = "hello"
17
+ insert(node)
18
+ }
19
+ }.doc
20
+ assert_equal 1, html_doc.css('div.slide > id').length
21
+ assert_equal 'hello', html_doc.at('div.slide > id').content
22
+ end
23
+
24
+ def test_hash_as_attributes_for_attribute_method
25
+ html = Nokogiri::HTML::Builder.new { ||
26
+ div.slide(:class => 'another_class') {
27
+ span 'Slide 1'
28
+ }
29
+ }.to_html
30
+ assert_match 'class="slide another_class"', html
31
+ end
32
+
33
+ def test_hash_as_attributes
34
+ builder = Nokogiri::HTML::Builder.new do
35
+ div(:id => 'awesome') {
36
+ h1 "america"
37
+ }
38
+ end
39
+ assert_equal('<div id="awesome"><h1>america</h1></div>',
40
+ builder.doc.root.to_html.gsub(/\n/, '').gsub(/>\s*</, '><'))
41
+ end
42
+
43
+ def test_href_with_attributes
44
+ uri = 'http://tenderlovemaking.com/'
45
+ built = Nokogiri::XML::Builder.new {
46
+ div {
47
+ a('King Khan & The Shrines', :href => uri)
48
+ }
49
+ }
50
+ assert_equal 'http://tenderlovemaking.com/',
51
+ built.doc.at('a')[:href]
52
+ end
53
+
54
+ def test_tag_nesting
55
+ builder = Nokogiri::HTML::Builder.new do
56
+ body {
57
+ span.left ''
58
+ span.middle {
59
+ div.icon ''
60
+ }
61
+ span.right ''
62
+ }
63
+ end
64
+ assert node = builder.doc.css('span.right').first
65
+ assert_equal 'middle', node.previous_sibling['class']
66
+ end
67
+
68
+ def test_has_ampersand
69
+ builder = Nokogiri::HTML::Builder.new do
70
+ div.rad.thing! {
71
+ text "<awe&some>"
72
+ b "hello & world"
73
+ }
74
+ end
75
+ assert_equal(
76
+ '<div class="rad" id="thing">&lt;awe&amp;some&gt;<b>hello &amp; world</b></div>',
77
+ builder.doc.root.to_html.gsub(/\n/, ''))
78
+ end
79
+
80
+ def test_multi_tags
81
+ builder = Nokogiri::HTML::Builder.new do
82
+ div.rad.thing! {
83
+ text "<awesome>"
84
+ b "hello"
85
+ }
86
+ end
87
+ assert_equal(
88
+ '<div class="rad" id="thing">&lt;awesome&gt;<b>hello</b></div>',
89
+ builder.doc.root.to_html.gsub(/\n/, ''))
90
+ end
91
+
92
+ def test_attributes_plus_block
93
+ builder = Nokogiri::HTML::Builder.new do
94
+ div.rad.thing! {
95
+ text "<awesome>"
96
+ }
97
+ end
98
+ assert_equal('<div class="rad" id="thing">&lt;awesome&gt;</div>',
99
+ builder.doc.root.to_html.chomp)
100
+ end
101
+
102
+ def test_builder_adds_attributes
103
+ builder = Nokogiri::HTML::Builder.new do
104
+ div.rad.thing! "tender div"
105
+ end
106
+ assert_equal('<div class="rad" id="thing">tender div</div>',
107
+ builder.doc.root.to_html.chomp)
108
+ end
109
+
110
+ def test_bold_tag
111
+ builder = Nokogiri::HTML::Builder.new do
112
+ b "bold tag"
113
+ end
114
+ assert_equal('<b>bold tag</b>', builder.doc.root.to_html.chomp)
115
+ end
116
+
117
+ def test_html_then_body_tag
118
+ builder = Nokogiri::HTML::Builder.new do
119
+ html {
120
+ body {
121
+ b "bold tag"
122
+ }
123
+ }
124
+ end
125
+ assert_equal('<html><body><b>bold tag</b></body></html>',
126
+ builder.doc.root.to_html.chomp.gsub(/>\s*</, '><'))
127
+ end
128
+
129
+ def test_instance_eval_with_delegation_to_block_context
130
+ class << self
131
+ def foo
132
+ "foo!"
133
+ end
134
+ end
135
+
136
+ builder = Nokogiri::HTML::Builder.new { text foo }
137
+ assert builder.to_html.include?("foo!")
138
+ end
139
+
140
+ def test_builder_with_param
141
+ doc = Nokogiri::HTML::Builder.new { |html|
142
+ html.body {
143
+ html.p "hello world"
144
+ }
145
+ }.doc
146
+
147
+ assert node = doc.xpath('//body/p').first
148
+ assert_equal 'hello world', node.content
149
+ end
150
+
151
+ def test_builder_with_id
152
+ text = "hello world"
153
+ doc = Nokogiri::HTML::Builder.new { |html|
154
+ html.body {
155
+ html.id_ text
156
+ }
157
+ }.doc
158
+
159
+ assert node = doc.xpath('//body/id').first
160
+ assert_equal text, node.content
161
+ end
162
+ end
163
+ end
164
+ end