nokogiri 1.6.2.rc1-x64-mingw32

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 (263) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +26 -0
  3. data/.editorconfig +17 -0
  4. data/.gemtest +0 -0
  5. data/.travis.yml +25 -0
  6. data/CHANGELOG.ja.rdoc +857 -0
  7. data/CHANGELOG.rdoc +880 -0
  8. data/C_CODING_STYLE.rdoc +33 -0
  9. data/Gemfile +21 -0
  10. data/Manifest.txt +371 -0
  11. data/README.ja.rdoc +112 -0
  12. data/README.rdoc +180 -0
  13. data/ROADMAP.md +89 -0
  14. data/Rakefile +351 -0
  15. data/STANDARD_RESPONSES.md +47 -0
  16. data/Y_U_NO_GEMSPEC.md +155 -0
  17. data/bin/nokogiri +78 -0
  18. data/build_all +130 -0
  19. data/dependencies.yml +4 -0
  20. data/ext/nokogiri/depend +358 -0
  21. data/ext/nokogiri/extconf.rb +453 -0
  22. data/ext/nokogiri/html_document.c +170 -0
  23. data/ext/nokogiri/html_document.h +10 -0
  24. data/ext/nokogiri/html_element_description.c +279 -0
  25. data/ext/nokogiri/html_element_description.h +10 -0
  26. data/ext/nokogiri/html_entity_lookup.c +32 -0
  27. data/ext/nokogiri/html_entity_lookup.h +8 -0
  28. data/ext/nokogiri/html_sax_parser_context.c +116 -0
  29. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  30. data/ext/nokogiri/html_sax_push_parser.c +87 -0
  31. data/ext/nokogiri/html_sax_push_parser.h +9 -0
  32. data/ext/nokogiri/nokogiri.c +148 -0
  33. data/ext/nokogiri/nokogiri.h +164 -0
  34. data/ext/nokogiri/xml_attr.c +94 -0
  35. data/ext/nokogiri/xml_attr.h +9 -0
  36. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  37. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  38. data/ext/nokogiri/xml_cdata.c +56 -0
  39. data/ext/nokogiri/xml_cdata.h +9 -0
  40. data/ext/nokogiri/xml_comment.c +54 -0
  41. data/ext/nokogiri/xml_comment.h +9 -0
  42. data/ext/nokogiri/xml_document.c +577 -0
  43. data/ext/nokogiri/xml_document.h +23 -0
  44. data/ext/nokogiri/xml_document_fragment.c +48 -0
  45. data/ext/nokogiri/xml_document_fragment.h +10 -0
  46. data/ext/nokogiri/xml_dtd.c +202 -0
  47. data/ext/nokogiri/xml_dtd.h +10 -0
  48. data/ext/nokogiri/xml_element_content.c +123 -0
  49. data/ext/nokogiri/xml_element_content.h +10 -0
  50. data/ext/nokogiri/xml_element_decl.c +69 -0
  51. data/ext/nokogiri/xml_element_decl.h +9 -0
  52. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  53. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  54. data/ext/nokogiri/xml_entity_decl.c +110 -0
  55. data/ext/nokogiri/xml_entity_decl.h +10 -0
  56. data/ext/nokogiri/xml_entity_reference.c +52 -0
  57. data/ext/nokogiri/xml_entity_reference.h +9 -0
  58. data/ext/nokogiri/xml_io.c +56 -0
  59. data/ext/nokogiri/xml_io.h +11 -0
  60. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  61. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  62. data/ext/nokogiri/xml_namespace.c +78 -0
  63. data/ext/nokogiri/xml_namespace.h +13 -0
  64. data/ext/nokogiri/xml_node.c +1541 -0
  65. data/ext/nokogiri/xml_node.h +13 -0
  66. data/ext/nokogiri/xml_node_set.c +467 -0
  67. data/ext/nokogiri/xml_node_set.h +14 -0
  68. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  69. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  70. data/ext/nokogiri/xml_reader.c +681 -0
  71. data/ext/nokogiri/xml_reader.h +10 -0
  72. data/ext/nokogiri/xml_relax_ng.c +161 -0
  73. data/ext/nokogiri/xml_relax_ng.h +9 -0
  74. data/ext/nokogiri/xml_sax_parser.c +312 -0
  75. data/ext/nokogiri/xml_sax_parser.h +39 -0
  76. data/ext/nokogiri/xml_sax_parser_context.c +262 -0
  77. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  78. data/ext/nokogiri/xml_sax_push_parser.c +115 -0
  79. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  80. data/ext/nokogiri/xml_schema.c +205 -0
  81. data/ext/nokogiri/xml_schema.h +9 -0
  82. data/ext/nokogiri/xml_syntax_error.c +63 -0
  83. data/ext/nokogiri/xml_syntax_error.h +13 -0
  84. data/ext/nokogiri/xml_text.c +52 -0
  85. data/ext/nokogiri/xml_text.h +9 -0
  86. data/ext/nokogiri/xml_xpath_context.c +307 -0
  87. data/ext/nokogiri/xml_xpath_context.h +10 -0
  88. data/ext/nokogiri/xslt_stylesheet.c +270 -0
  89. data/ext/nokogiri/xslt_stylesheet.h +14 -0
  90. data/lib/nokogiri.rb +137 -0
  91. data/lib/nokogiri/2.0/nokogiri.so +0 -0
  92. data/lib/nokogiri/2.1/nokogiri.so +0 -0
  93. data/lib/nokogiri/css.rb +27 -0
  94. data/lib/nokogiri/css/node.rb +52 -0
  95. data/lib/nokogiri/css/parser.rb +715 -0
  96. data/lib/nokogiri/css/parser.y +249 -0
  97. data/lib/nokogiri/css/parser_extras.rb +91 -0
  98. data/lib/nokogiri/css/syntax_error.rb +7 -0
  99. data/lib/nokogiri/css/tokenizer.rb +152 -0
  100. data/lib/nokogiri/css/tokenizer.rex +55 -0
  101. data/lib/nokogiri/css/xpath_visitor.rb +219 -0
  102. data/lib/nokogiri/decorators/slop.rb +35 -0
  103. data/lib/nokogiri/html.rb +37 -0
  104. data/lib/nokogiri/html/builder.rb +35 -0
  105. data/lib/nokogiri/html/document.rb +333 -0
  106. data/lib/nokogiri/html/document_fragment.rb +41 -0
  107. data/lib/nokogiri/html/element_description.rb +23 -0
  108. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  109. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  110. data/lib/nokogiri/html/sax/parser.rb +52 -0
  111. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  112. data/lib/nokogiri/html/sax/push_parser.rb +16 -0
  113. data/lib/nokogiri/syntax_error.rb +4 -0
  114. data/lib/nokogiri/version.rb +106 -0
  115. data/lib/nokogiri/xml.rb +73 -0
  116. data/lib/nokogiri/xml/attr.rb +14 -0
  117. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  118. data/lib/nokogiri/xml/builder.rb +443 -0
  119. data/lib/nokogiri/xml/cdata.rb +11 -0
  120. data/lib/nokogiri/xml/character_data.rb +7 -0
  121. data/lib/nokogiri/xml/document.rb +279 -0
  122. data/lib/nokogiri/xml/document_fragment.rb +112 -0
  123. data/lib/nokogiri/xml/dtd.rb +32 -0
  124. data/lib/nokogiri/xml/element_content.rb +36 -0
  125. data/lib/nokogiri/xml/element_decl.rb +13 -0
  126. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  127. data/lib/nokogiri/xml/namespace.rb +13 -0
  128. data/lib/nokogiri/xml/node.rb +982 -0
  129. data/lib/nokogiri/xml/node/save_options.rb +61 -0
  130. data/lib/nokogiri/xml/node_set.rb +355 -0
  131. data/lib/nokogiri/xml/notation.rb +6 -0
  132. data/lib/nokogiri/xml/parse_options.rb +98 -0
  133. data/lib/nokogiri/xml/pp.rb +2 -0
  134. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  135. data/lib/nokogiri/xml/pp/node.rb +56 -0
  136. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  137. data/lib/nokogiri/xml/reader.rb +112 -0
  138. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  139. data/lib/nokogiri/xml/sax.rb +4 -0
  140. data/lib/nokogiri/xml/sax/document.rb +171 -0
  141. data/lib/nokogiri/xml/sax/parser.rb +123 -0
  142. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  143. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  144. data/lib/nokogiri/xml/schema.rb +63 -0
  145. data/lib/nokogiri/xml/syntax_error.rb +47 -0
  146. data/lib/nokogiri/xml/text.rb +9 -0
  147. data/lib/nokogiri/xml/xpath.rb +10 -0
  148. data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
  149. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  150. data/lib/nokogiri/xslt.rb +56 -0
  151. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  152. data/lib/xsd/xmlparser/nokogiri.rb +102 -0
  153. data/suppressions/README.txt +1 -0
  154. data/suppressions/nokogiri_ree-1.8.7.358.supp +61 -0
  155. data/suppressions/nokogiri_ruby-1.8.7.370.supp +0 -0
  156. data/suppressions/nokogiri_ruby-1.9.2.320.supp +28 -0
  157. data/suppressions/nokogiri_ruby-1.9.3.327.supp +28 -0
  158. data/tasks/nokogiri.org.rb +24 -0
  159. data/tasks/test.rb +95 -0
  160. data/test/css/test_nthiness.rb +222 -0
  161. data/test/css/test_parser.rb +358 -0
  162. data/test/css/test_tokenizer.rb +198 -0
  163. data/test/css/test_xpath_visitor.rb +96 -0
  164. data/test/decorators/test_slop.rb +16 -0
  165. data/test/files/2ch.html +108 -0
  166. data/test/files/address_book.rlx +12 -0
  167. data/test/files/address_book.xml +10 -0
  168. data/test/files/atom.xml +344 -0
  169. data/test/files/bar/bar.xsd +4 -0
  170. data/test/files/bogus.xml +0 -0
  171. data/test/files/dont_hurt_em_why.xml +422 -0
  172. data/test/files/encoding.html +82 -0
  173. data/test/files/encoding.xhtml +84 -0
  174. data/test/files/exslt.xml +8 -0
  175. data/test/files/exslt.xslt +35 -0
  176. data/test/files/foo/foo.xsd +4 -0
  177. data/test/files/metacharset.html +10 -0
  178. data/test/files/noencoding.html +47 -0
  179. data/test/files/po.xml +32 -0
  180. data/test/files/po.xsd +66 -0
  181. data/test/files/saml/saml20assertion_schema.xsd +283 -0
  182. data/test/files/saml/saml20protocol_schema.xsd +302 -0
  183. data/test/files/saml/xenc_schema.xsd +146 -0
  184. data/test/files/saml/xmldsig_schema.xsd +318 -0
  185. data/test/files/shift_jis.html +10 -0
  186. data/test/files/shift_jis.xml +5 -0
  187. data/test/files/shift_jis_no_charset.html +9 -0
  188. data/test/files/snuggles.xml +3 -0
  189. data/test/files/staff.dtd +10 -0
  190. data/test/files/staff.xml +59 -0
  191. data/test/files/staff.xslt +32 -0
  192. data/test/files/test_document_url/bar.xml +2 -0
  193. data/test/files/test_document_url/document.dtd +4 -0
  194. data/test/files/test_document_url/document.xml +6 -0
  195. data/test/files/tlm.html +850 -0
  196. data/test/files/to_be_xincluded.xml +2 -0
  197. data/test/files/valid_bar.xml +2 -0
  198. data/test/files/xinclude.xml +4 -0
  199. data/test/helper.rb +164 -0
  200. data/test/html/sax/test_parser.rb +141 -0
  201. data/test/html/sax/test_parser_context.rb +46 -0
  202. data/test/html/test_builder.rb +164 -0
  203. data/test/html/test_document.rb +619 -0
  204. data/test/html/test_document_encoding.rb +148 -0
  205. data/test/html/test_document_fragment.rb +261 -0
  206. data/test/html/test_element_description.rb +105 -0
  207. data/test/html/test_named_characters.rb +14 -0
  208. data/test/html/test_node.rb +196 -0
  209. data/test/html/test_node_encoding.rb +27 -0
  210. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +14 -0
  211. data/test/namespaces/test_namespaces_in_builder_doc.rb +75 -0
  212. data/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
  213. data/test/namespaces/test_namespaces_in_created_doc.rb +75 -0
  214. data/test/namespaces/test_namespaces_in_parsed_doc.rb +66 -0
  215. data/test/test_convert_xpath.rb +135 -0
  216. data/test/test_css_cache.rb +45 -0
  217. data/test/test_encoding_handler.rb +46 -0
  218. data/test/test_memory_leak.rb +156 -0
  219. data/test/test_nokogiri.rb +138 -0
  220. data/test/test_reader.rb +558 -0
  221. data/test/test_soap4r_sax.rb +52 -0
  222. data/test/test_xslt_transforms.rb +279 -0
  223. data/test/xml/node/test_save_options.rb +28 -0
  224. data/test/xml/node/test_subclass.rb +44 -0
  225. data/test/xml/sax/test_parser.rb +382 -0
  226. data/test/xml/sax/test_parser_context.rb +115 -0
  227. data/test/xml/sax/test_push_parser.rb +157 -0
  228. data/test/xml/test_attr.rb +64 -0
  229. data/test/xml/test_attribute_decl.rb +86 -0
  230. data/test/xml/test_builder.rb +315 -0
  231. data/test/xml/test_c14n.rb +161 -0
  232. data/test/xml/test_cdata.rb +48 -0
  233. data/test/xml/test_comment.rb +29 -0
  234. data/test/xml/test_document.rb +934 -0
  235. data/test/xml/test_document_encoding.rb +28 -0
  236. data/test/xml/test_document_fragment.rb +228 -0
  237. data/test/xml/test_dtd.rb +187 -0
  238. data/test/xml/test_dtd_encoding.rb +33 -0
  239. data/test/xml/test_element_content.rb +56 -0
  240. data/test/xml/test_element_decl.rb +73 -0
  241. data/test/xml/test_entity_decl.rb +122 -0
  242. data/test/xml/test_entity_reference.rb +245 -0
  243. data/test/xml/test_namespace.rb +95 -0
  244. data/test/xml/test_node.rb +1155 -0
  245. data/test/xml/test_node_attributes.rb +113 -0
  246. data/test/xml/test_node_encoding.rb +107 -0
  247. data/test/xml/test_node_inheritance.rb +32 -0
  248. data/test/xml/test_node_reparenting.rb +374 -0
  249. data/test/xml/test_node_set.rb +755 -0
  250. data/test/xml/test_parse_options.rb +64 -0
  251. data/test/xml/test_processing_instruction.rb +30 -0
  252. data/test/xml/test_reader_encoding.rb +142 -0
  253. data/test/xml/test_relax_ng.rb +60 -0
  254. data/test/xml/test_schema.rb +129 -0
  255. data/test/xml/test_syntax_error.rb +12 -0
  256. data/test/xml/test_text.rb +45 -0
  257. data/test/xml/test_unparented_node.rb +422 -0
  258. data/test/xml/test_xinclude.rb +83 -0
  259. data/test/xml/test_xpath.rb +376 -0
  260. data/test/xslt/test_custom_functions.rb +133 -0
  261. data/test/xslt/test_exception_handling.rb +37 -0
  262. data/test_all +81 -0
  263. metadata +601 -0
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <included>this snippet is to be included from xinclude.xml</included>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bar />
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <test xmlns:xi="http://www.w3.org/2001/XInclude">
3
+ <xi:include href="to_be_xincluded.xml"/>
4
+ </test>
@@ -0,0 +1,164 @@
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 'minitest/pride'
5
+ require 'fileutils'
6
+ require 'tempfile'
7
+ require 'pp'
8
+
9
+ require 'nokogiri'
10
+
11
+ warn "#{__FILE__}:#{__LINE__}: version info: #{Nokogiri::VERSION_INFO.inspect}"
12
+
13
+ module Nokogiri
14
+ class TestCase < MiniTest::Spec
15
+ ASSETS_DIR = File.expand_path File.join(File.dirname(__FILE__), 'files')
16
+ ADDRESS_SCHEMA_FILE = File.join(ASSETS_DIR, 'address_book.rlx')
17
+ ADDRESS_XML_FILE = File.join(ASSETS_DIR, 'address_book.xml')
18
+ ENCODING_HTML_FILE = File.join(ASSETS_DIR, 'encoding.html')
19
+ ENCODING_XHTML_FILE = File.join(ASSETS_DIR, 'encoding.xhtml')
20
+ EXML_FILE = File.join(ASSETS_DIR, 'exslt.xml')
21
+ EXSLT_FILE = File.join(ASSETS_DIR, 'exslt.xslt')
22
+ HTML_FILE = File.join(ASSETS_DIR, 'tlm.html')
23
+ METACHARSET_FILE = File.join(ASSETS_DIR, 'metacharset.html')
24
+ NICH_FILE = File.join(ASSETS_DIR, '2ch.html')
25
+ NOENCODING_FILE = File.join(ASSETS_DIR, 'noencoding.html')
26
+ PO_SCHEMA_FILE = File.join(ASSETS_DIR, 'po.xsd')
27
+ PO_XML_FILE = File.join(ASSETS_DIR, 'po.xml')
28
+ SHIFT_JIS_HTML = File.join(ASSETS_DIR, 'shift_jis.html')
29
+ SHIFT_JIS_NO_CHARSET= File.join(ASSETS_DIR, 'shift_jis_no_charset.html')
30
+ SHIFT_JIS_XML = File.join(ASSETS_DIR, 'shift_jis.xml')
31
+ SNUGGLES_FILE = File.join(ASSETS_DIR, 'snuggles.xml')
32
+ XML_FILE = File.join(ASSETS_DIR, 'staff.xml')
33
+ XML_XINCLUDE_FILE = File.join(ASSETS_DIR, 'xinclude.xml')
34
+ XML_ATOM_FILE = File.join(ASSETS_DIR, 'atom.xml')
35
+ XSLT_FILE = File.join(ASSETS_DIR, 'staff.xslt')
36
+ XPATH_FILE = File.join(ASSETS_DIR, 'slow-xpath.xml')
37
+
38
+ def teardown
39
+ if ENV['NOKOGIRI_GC']
40
+ STDOUT.putc '!'
41
+ if RUBY_PLATFORM =~ /java/
42
+ require 'java'
43
+ java.lang.System.gc
44
+ else
45
+ GC.start
46
+ end
47
+ end
48
+ end
49
+
50
+ def assert_indent amount, doc, message = nil
51
+ nodes = []
52
+ doc.traverse do |node|
53
+ nodes << node if node.text? && node.blank?
54
+ end
55
+ assert nodes.length > 0
56
+ nodes.each do |node|
57
+ len = node.content.gsub(/[\r\n]/, '').length
58
+ assert_equal(0, len % amount, message)
59
+ end
60
+ end
61
+
62
+ def util_decorate(document, decorator_module)
63
+ document.decorators(XML::Node) << decorator_module
64
+ document.decorators(XML::NodeSet) << decorator_module
65
+ document.decorate!
66
+ end
67
+
68
+ #
69
+ # Test::Unit backwards compatibility section
70
+ #
71
+ alias :assert_no_match :refute_match
72
+ alias :assert_not_nil :refute_nil
73
+ alias :assert_raise :assert_raises
74
+ alias :assert_not_equal :refute_equal
75
+
76
+ def assert_not_send send_ary, m = nil
77
+ recv, msg, *args = send_ary
78
+ m = message(m) {
79
+ "Expected #{mu_pp(recv)}.#{msg}(*#{mu_pp(args)}) to return false" }
80
+ assert !recv.__send__(msg, *args), m
81
+ end unless method_defined?(:assert_not_send)
82
+ end
83
+
84
+ module SAX
85
+ class TestCase < Nokogiri::TestCase
86
+ class Doc < XML::SAX::Document
87
+ attr_reader :start_elements, :start_document_called
88
+ attr_reader :end_elements, :end_document_called
89
+ attr_reader :data, :comments, :cdata_blocks, :start_elements_namespace
90
+ attr_reader :errors, :warnings, :end_elements_namespace
91
+ attr_reader :xmldecls
92
+ attr_reader :processing_instructions
93
+
94
+ def xmldecl version, encoding, standalone
95
+ @xmldecls = [version, encoding, standalone].compact
96
+ super
97
+ end
98
+
99
+ def start_document
100
+ @start_document_called = true
101
+ super
102
+ end
103
+
104
+ def end_document
105
+ @end_document_called = true
106
+ super
107
+ end
108
+
109
+ def error error
110
+ (@errors ||= []) << error
111
+ super
112
+ end
113
+
114
+ def warning warning
115
+ (@warning ||= []) << warning
116
+ super
117
+ end
118
+
119
+ def start_element *args
120
+ (@start_elements ||= []) << args
121
+ super
122
+ end
123
+
124
+ def start_element_namespace *args
125
+ (@start_elements_namespace ||= []) << args
126
+ super
127
+ end
128
+
129
+ def end_element *args
130
+ (@end_elements ||= []) << args
131
+ super
132
+ end
133
+
134
+ def end_element_namespace *args
135
+ (@end_elements_namespace ||= []) << args
136
+ super
137
+ end
138
+
139
+ def characters string
140
+ @data ||= []
141
+ @data += [string]
142
+ super
143
+ end
144
+
145
+ def comment string
146
+ @comments ||= []
147
+ @comments += [string]
148
+ super
149
+ end
150
+
151
+ def cdata_block string
152
+ @cdata_blocks ||= []
153
+ @cdata_blocks += [string]
154
+ super
155
+ end
156
+
157
+ def processing_instruction name, content
158
+ @processing_instructions ||= []
159
+ @processing_instructions << [name, content]
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,141 @@
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_nil @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(ASSETS_DIR, 'bogus.xml')
21
+ # assert_nothing_raised do
22
+ @parser.parse_file empty_file_name
23
+ # end
24
+ end
25
+
26
+ def test_parse_file
27
+ @parser.parse_file(HTML_FILE)
28
+
29
+ # Take a look at the comment in test_parse_document to know
30
+ # a possible reason to this difference.
31
+ if Nokogiri.uses_libxml?
32
+ assert_equal 1110, @parser.document.end_elements.length
33
+ else
34
+ assert_equal 1119, @parser.document.end_elements.length
35
+ end
36
+ end
37
+
38
+ def test_parse_file_nil_argument
39
+ assert_raises(ArgumentError) {
40
+ @parser.parse_file(nil)
41
+ }
42
+ end
43
+
44
+ def test_parse_file_non_existant
45
+ assert_raise Errno::ENOENT do
46
+ @parser.parse_file('there_is_no_reasonable_way_this_file_exists')
47
+ end
48
+ end
49
+
50
+ def test_parse_file_with_dir
51
+ assert_raise Errno::EISDIR do
52
+ @parser.parse_file(File.dirname(__FILE__))
53
+ end
54
+ end
55
+
56
+ def test_parse_memory_nil
57
+ assert_raise ArgumentError do
58
+ @parser.parse_memory(nil)
59
+ end
60
+ end
61
+
62
+ def test_parse_force_encoding
63
+ @parser.parse_memory(<<-HTML, 'UTF-8')
64
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
65
+ Информация
66
+ HTML
67
+ assert_equal("Информация",
68
+ @parser.document.data.join.strip)
69
+ end
70
+
71
+ def test_parse_document
72
+ @parser.parse_memory(<<-eoxml)
73
+ <p>Paragraph 1</p>
74
+ <p>Paragraph 2</p>
75
+ eoxml
76
+
77
+ # JRuby version is different because of the internal implementation
78
+ # JRuby version uses NekoHTML which inserts empty "head" elements.
79
+ #
80
+ # Currently following features are set:
81
+ # "http://cyberneko.org/html/properties/names/elems" => "lower"
82
+ # "http://cyberneko.org/html/properties/names/attrs" => "lower"
83
+ if Nokogiri.uses_libxml?
84
+ assert_equal([["html", []], ["body", []], ["p", []], ["p", []]],
85
+ @parser.document.start_elements)
86
+ else
87
+ assert_equal([["html", []], ["head", []], ["body", []], ["p", []], ["p", []]],
88
+ @parser.document.start_elements)
89
+ end
90
+ end
91
+
92
+ def test_parser_attributes
93
+ html = <<-eohtml
94
+ <html>
95
+ <head>
96
+ <title>hello</title>
97
+ </head>
98
+ <body>
99
+ <img src="face.jpg" title="daddy &amp; me">
100
+ <hr noshade size="2">
101
+ </body>
102
+ </html>
103
+ eohtml
104
+
105
+ block_called = false
106
+ @parser.parse(html) { |ctx|
107
+ block_called = true
108
+ ctx.replace_entities = true
109
+ }
110
+
111
+ assert block_called
112
+
113
+ noshade_value = if Nokogiri.uses_libxml? && Nokogiri::VERSION_INFO['libxml']['loaded'] < '2.7.7'
114
+ ['noshade', 'noshade']
115
+ else
116
+ ['noshade', nil]
117
+ end
118
+
119
+ assert_equal [
120
+ ['html', []],
121
+ ['head', []],
122
+ ['title', []],
123
+ ['body', []],
124
+ ['img', [
125
+ ['src', 'face.jpg'],
126
+ ['title', 'daddy & me']
127
+ ]],
128
+ ['hr', [
129
+ noshade_value,
130
+ ['size', '2']
131
+ ]]
132
+ ], @parser.document.start_elements
133
+ end
134
+
135
+ def test_empty_processing_instruction
136
+ @parser.parse_memory("<strong>this will segfault<?strong>")
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,46 @@
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
+ ctx = ParserContext.new StringIO.new('fo'), 'UTF-8'
11
+ assert ctx
12
+ end
13
+
14
+ def test_from_string
15
+ ctx = ParserContext.new 'blah blah'
16
+ assert ctx
17
+ end
18
+
19
+ def test_parse_with
20
+ ctx = ParserContext.new 'blah'
21
+ assert_raises ArgumentError do
22
+ ctx.parse_with nil
23
+ end
24
+ end
25
+
26
+ def test_parse_with_sax_parser
27
+ # assert_nothing_raised do
28
+ xml = "<root />"
29
+ ctx = ParserContext.new xml
30
+ parser = Parser.new Doc.new
31
+ ctx.parse_with parser
32
+ # end
33
+ end
34
+
35
+ def test_from_file
36
+ # assert_nothing_raised do
37
+ ctx = ParserContext.file HTML_FILE, 'UTF-8'
38
+ parser = Parser.new Doc.new
39
+ ctx.parse_with parser
40
+ # end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
@@ -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