nokogiri-maglev- 1.5.0.1

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 (225) hide show
  1. data/.autotest +26 -0
  2. data/.gemtest +0 -0
  3. data/CHANGELOG.ja.rdoc +544 -0
  4. data/CHANGELOG.rdoc +532 -0
  5. data/Manifest.txt +283 -0
  6. data/README.ja.rdoc +106 -0
  7. data/README.rdoc +174 -0
  8. data/Rakefile +171 -0
  9. data/bin/nokogiri +53 -0
  10. data/ext/nokogiri/depend +358 -0
  11. data/ext/nokogiri/extconf.rb +124 -0
  12. data/ext/nokogiri/html_document.c +154 -0
  13. data/ext/nokogiri/html_document.h +10 -0
  14. data/ext/nokogiri/html_element_description.c +276 -0
  15. data/ext/nokogiri/html_element_description.h +10 -0
  16. data/ext/nokogiri/html_entity_lookup.c +32 -0
  17. data/ext/nokogiri/html_entity_lookup.h +8 -0
  18. data/ext/nokogiri/html_sax_parser_context.c +94 -0
  19. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  20. data/ext/nokogiri/nokogiri.c +115 -0
  21. data/ext/nokogiri/nokogiri.h +160 -0
  22. data/ext/nokogiri/st.c +576 -0
  23. data/ext/nokogiri/xml_attr.c +94 -0
  24. data/ext/nokogiri/xml_attr.h +9 -0
  25. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  26. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  27. data/ext/nokogiri/xml_cdata.c +56 -0
  28. data/ext/nokogiri/xml_cdata.h +9 -0
  29. data/ext/nokogiri/xml_comment.c +54 -0
  30. data/ext/nokogiri/xml_comment.h +9 -0
  31. data/ext/nokogiri/xml_document.c +478 -0
  32. data/ext/nokogiri/xml_document.h +23 -0
  33. data/ext/nokogiri/xml_document_fragment.c +48 -0
  34. data/ext/nokogiri/xml_document_fragment.h +10 -0
  35. data/ext/nokogiri/xml_dtd.c +202 -0
  36. data/ext/nokogiri/xml_dtd.h +10 -0
  37. data/ext/nokogiri/xml_element_content.c +123 -0
  38. data/ext/nokogiri/xml_element_content.h +10 -0
  39. data/ext/nokogiri/xml_element_decl.c +69 -0
  40. data/ext/nokogiri/xml_element_decl.h +9 -0
  41. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  42. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  43. data/ext/nokogiri/xml_entity_decl.c +110 -0
  44. data/ext/nokogiri/xml_entity_decl.h +10 -0
  45. data/ext/nokogiri/xml_entity_reference.c +52 -0
  46. data/ext/nokogiri/xml_entity_reference.h +9 -0
  47. data/ext/nokogiri/xml_io.c +56 -0
  48. data/ext/nokogiri/xml_io.h +11 -0
  49. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  50. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  51. data/ext/nokogiri/xml_namespace.c +84 -0
  52. data/ext/nokogiri/xml_namespace.h +13 -0
  53. data/ext/nokogiri/xml_node.c +1397 -0
  54. data/ext/nokogiri/xml_node.h +13 -0
  55. data/ext/nokogiri/xml_node_set.c +418 -0
  56. data/ext/nokogiri/xml_node_set.h +9 -0
  57. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  58. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  59. data/ext/nokogiri/xml_reader.c +684 -0
  60. data/ext/nokogiri/xml_reader.h +10 -0
  61. data/ext/nokogiri/xml_relax_ng.c +162 -0
  62. data/ext/nokogiri/xml_relax_ng.h +9 -0
  63. data/ext/nokogiri/xml_sax_parser.c +293 -0
  64. data/ext/nokogiri/xml_sax_parser.h +39 -0
  65. data/ext/nokogiri/xml_sax_parser_context.c +199 -0
  66. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  67. data/ext/nokogiri/xml_sax_push_parser.c +115 -0
  68. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  69. data/ext/nokogiri/xml_schema.c +205 -0
  70. data/ext/nokogiri/xml_schema.h +9 -0
  71. data/ext/nokogiri/xml_syntax_error.c +58 -0
  72. data/ext/nokogiri/xml_syntax_error.h +13 -0
  73. data/ext/nokogiri/xml_text.c +50 -0
  74. data/ext/nokogiri/xml_text.h +9 -0
  75. data/ext/nokogiri/xml_xpath_context.c +315 -0
  76. data/ext/nokogiri/xml_xpath_context.h +9 -0
  77. data/ext/nokogiri/xslt_stylesheet.c +265 -0
  78. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  79. data/lib/nokogiri.rb +127 -0
  80. data/lib/nokogiri/css.rb +27 -0
  81. data/lib/nokogiri/css/node.rb +99 -0
  82. data/lib/nokogiri/css/parser.rb +677 -0
  83. data/lib/nokogiri/css/parser.y +237 -0
  84. data/lib/nokogiri/css/parser_extras.rb +91 -0
  85. data/lib/nokogiri/css/syntax_error.rb +7 -0
  86. data/lib/nokogiri/css/tokenizer.rb +152 -0
  87. data/lib/nokogiri/css/tokenizer.rex +55 -0
  88. data/lib/nokogiri/css/xpath_visitor.rb +171 -0
  89. data/lib/nokogiri/decorators/slop.rb +35 -0
  90. data/lib/nokogiri/html.rb +36 -0
  91. data/lib/nokogiri/html/builder.rb +35 -0
  92. data/lib/nokogiri/html/document.rb +213 -0
  93. data/lib/nokogiri/html/document_fragment.rb +41 -0
  94. data/lib/nokogiri/html/element_description.rb +23 -0
  95. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  96. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  97. data/lib/nokogiri/html/sax/parser.rb +52 -0
  98. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  99. data/lib/nokogiri/syntax_error.rb +4 -0
  100. data/lib/nokogiri/version.rb +88 -0
  101. data/lib/nokogiri/xml.rb +67 -0
  102. data/lib/nokogiri/xml/attr.rb +14 -0
  103. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  104. data/lib/nokogiri/xml/builder.rb +426 -0
  105. data/lib/nokogiri/xml/cdata.rb +11 -0
  106. data/lib/nokogiri/xml/character_data.rb +7 -0
  107. data/lib/nokogiri/xml/document.rb +234 -0
  108. data/lib/nokogiri/xml/document_fragment.rb +98 -0
  109. data/lib/nokogiri/xml/dtd.rb +22 -0
  110. data/lib/nokogiri/xml/element_content.rb +36 -0
  111. data/lib/nokogiri/xml/element_decl.rb +13 -0
  112. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  113. data/lib/nokogiri/xml/namespace.rb +13 -0
  114. data/lib/nokogiri/xml/node.rb +915 -0
  115. data/lib/nokogiri/xml/node/save_options.rb +61 -0
  116. data/lib/nokogiri/xml/node_set.rb +357 -0
  117. data/lib/nokogiri/xml/notation.rb +6 -0
  118. data/lib/nokogiri/xml/parse_options.rb +93 -0
  119. data/lib/nokogiri/xml/pp.rb +2 -0
  120. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  121. data/lib/nokogiri/xml/pp/node.rb +56 -0
  122. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  123. data/lib/nokogiri/xml/reader.rb +112 -0
  124. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  125. data/lib/nokogiri/xml/sax.rb +4 -0
  126. data/lib/nokogiri/xml/sax/document.rb +164 -0
  127. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  128. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  129. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  130. data/lib/nokogiri/xml/schema.rb +63 -0
  131. data/lib/nokogiri/xml/syntax_error.rb +47 -0
  132. data/lib/nokogiri/xml/text.rb +9 -0
  133. data/lib/nokogiri/xml/xpath.rb +10 -0
  134. data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
  135. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  136. data/lib/nokogiri/xslt.rb +52 -0
  137. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  138. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  139. data/nokogiri_help_responses.md +40 -0
  140. data/tasks/cross_compile.rb +152 -0
  141. data/tasks/nokogiri.org.rb +18 -0
  142. data/tasks/test.rb +94 -0
  143. data/test/css/test_nthiness.rb +159 -0
  144. data/test/css/test_parser.rb +303 -0
  145. data/test/css/test_tokenizer.rb +198 -0
  146. data/test/css/test_xpath_visitor.rb +85 -0
  147. data/test/decorators/test_slop.rb +16 -0
  148. data/test/files/2ch.html +108 -0
  149. data/test/files/address_book.rlx +12 -0
  150. data/test/files/address_book.xml +10 -0
  151. data/test/files/bar/bar.xsd +4 -0
  152. data/test/files/dont_hurt_em_why.xml +422 -0
  153. data/test/files/encoding.html +82 -0
  154. data/test/files/encoding.xhtml +84 -0
  155. data/test/files/exslt.xml +8 -0
  156. data/test/files/exslt.xslt +35 -0
  157. data/test/files/foo/foo.xsd +4 -0
  158. data/test/files/metacharset.html +10 -0
  159. data/test/files/noencoding.html +47 -0
  160. data/test/files/po.xml +32 -0
  161. data/test/files/po.xsd +66 -0
  162. data/test/files/shift_jis.html +10 -0
  163. data/test/files/shift_jis.xml +5 -0
  164. data/test/files/snuggles.xml +3 -0
  165. data/test/files/staff.dtd +10 -0
  166. data/test/files/staff.xml +59 -0
  167. data/test/files/staff.xslt +32 -0
  168. data/test/files/tlm.html +850 -0
  169. data/test/files/valid_bar.xml +2 -0
  170. data/test/helper.rb +173 -0
  171. data/test/html/sax/test_parser.rb +139 -0
  172. data/test/html/sax/test_parser_context.rb +48 -0
  173. data/test/html/test_builder.rb +165 -0
  174. data/test/html/test_document.rb +472 -0
  175. data/test/html/test_document_encoding.rb +138 -0
  176. data/test/html/test_document_fragment.rb +255 -0
  177. data/test/html/test_element_description.rb +101 -0
  178. data/test/html/test_named_characters.rb +14 -0
  179. data/test/html/test_node.rb +193 -0
  180. data/test/html/test_node_encoding.rb +27 -0
  181. data/test/test_convert_xpath.rb +135 -0
  182. data/test/test_css_cache.rb +45 -0
  183. data/test/test_encoding_handler.rb +46 -0
  184. data/test/test_memory_leak.rb +72 -0
  185. data/test/test_nokogiri.rb +133 -0
  186. data/test/test_reader.rb +425 -0
  187. data/test/test_soap4r_sax.rb +52 -0
  188. data/test/test_xslt_transforms.rb +193 -0
  189. data/test/xml/node/test_save_options.rb +28 -0
  190. data/test/xml/node/test_subclass.rb +44 -0
  191. data/test/xml/sax/test_parser.rb +338 -0
  192. data/test/xml/sax/test_parser_context.rb +113 -0
  193. data/test/xml/sax/test_push_parser.rb +156 -0
  194. data/test/xml/test_attr.rb +65 -0
  195. data/test/xml/test_attribute_decl.rb +86 -0
  196. data/test/xml/test_builder.rb +227 -0
  197. data/test/xml/test_cdata.rb +50 -0
  198. data/test/xml/test_comment.rb +29 -0
  199. data/test/xml/test_document.rb +697 -0
  200. data/test/xml/test_document_encoding.rb +26 -0
  201. data/test/xml/test_document_fragment.rb +192 -0
  202. data/test/xml/test_dtd.rb +107 -0
  203. data/test/xml/test_dtd_encoding.rb +33 -0
  204. data/test/xml/test_element_content.rb +56 -0
  205. data/test/xml/test_element_decl.rb +73 -0
  206. data/test/xml/test_entity_decl.rb +122 -0
  207. data/test/xml/test_entity_reference.rb +21 -0
  208. data/test/xml/test_namespace.rb +70 -0
  209. data/test/xml/test_node.rb +917 -0
  210. data/test/xml/test_node_attributes.rb +34 -0
  211. data/test/xml/test_node_encoding.rb +107 -0
  212. data/test/xml/test_node_reparenting.rb +334 -0
  213. data/test/xml/test_node_set.rb +742 -0
  214. data/test/xml/test_parse_options.rb +52 -0
  215. data/test/xml/test_processing_instruction.rb +30 -0
  216. data/test/xml/test_reader_encoding.rb +126 -0
  217. data/test/xml/test_relax_ng.rb +60 -0
  218. data/test/xml/test_schema.rb +94 -0
  219. data/test/xml/test_syntax_error.rb +12 -0
  220. data/test/xml/test_text.rb +47 -0
  221. data/test/xml/test_unparented_node.rb +381 -0
  222. data/test/xml/test_xpath.rb +237 -0
  223. data/test/xslt/test_custom_functions.rb +94 -0
  224. data/test/xslt/test_exception_handling.rb +37 -0
  225. metadata +548 -0
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bar />
data/test/helper.rb ADDED
@@ -0,0 +1,173 @@
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
+ NOENCODING_FILE = File.join(ASSETS_DIR, 'noencoding.html')
26
+ METACHARSET_FILE = File.join(ASSETS_DIR, 'metacharset.html')
27
+ PO_XML_FILE = File.join(ASSETS_DIR, 'po.xml')
28
+ PO_SCHEMA_FILE = File.join(ASSETS_DIR, 'po.xsd')
29
+ ADDRESS_SCHEMA_FILE = File.join(ASSETS_DIR, 'address_book.rlx')
30
+ ADDRESS_XML_FILE = File.join(ASSETS_DIR, 'address_book.xml')
31
+ SNUGGLES_FILE = File.join(ASSETS_DIR, 'snuggles.xml')
32
+
33
+ def teardown
34
+ if ENV['NOKOGIRI_GC']
35
+ STDOUT.putc '!'
36
+ if RUBY_PLATFORM =~ /java/
37
+ require 'java'
38
+ java.lang.System.gc
39
+ else
40
+ GC.start
41
+ end
42
+ end
43
+ end
44
+
45
+ def assert_indent amount, doc, message = nil
46
+ nodes = []
47
+ doc.traverse do |node|
48
+ nodes << node if node.text? && node.blank?
49
+ end
50
+ assert nodes.length > 0
51
+ nodes.each do |node|
52
+ len = node.content.gsub(/[\r\n]/, '').length
53
+ assert_equal(0, len % amount, message)
54
+ end
55
+ end
56
+
57
+ def util_decorate(document, decorator_module)
58
+ document.decorators(XML::Node) << decorator_module
59
+ document.decorators(XML::NodeSet) << decorator_module
60
+ document.decorate!
61
+ end
62
+
63
+ #
64
+ # Test::Unit backwards compatibility section
65
+ #
66
+ alias :assert_no_match :refute_match
67
+ alias :assert_not_nil :refute_nil
68
+ alias :assert_raise :assert_raises
69
+ alias :assert_not_equal :refute_equal
70
+
71
+ def assert_nothing_raised(*args)
72
+ self._assertions += 1
73
+ if Module === args.last
74
+ msg = nil
75
+ else
76
+ msg = args.pop
77
+ end
78
+ begin
79
+ line = __LINE__; yield
80
+ rescue Exception => e
81
+ bt = e.backtrace
82
+ as = e.instance_of?(MiniTest::Assertion)
83
+ if as
84
+ ans = /\A#{Regexp.quote(__FILE__)}:#{line}:in /o
85
+ bt.reject! {|ln| ans =~ ln}
86
+ end
87
+ if ((args.empty? && !as) ||
88
+ args.any? {|a| a.instance_of?(Module) ? e.is_a?(a) : e.class == a })
89
+ msg = message(msg) { "Exception raised:\n<#{mu_pp(e)}>" }
90
+ raise MiniTest::Assertion, msg.call, bt
91
+ else
92
+ raise
93
+ end
94
+ end
95
+ nil
96
+ end
97
+ end
98
+
99
+ module SAX
100
+ class TestCase < Nokogiri::TestCase
101
+ class Doc < XML::SAX::Document
102
+ attr_reader :start_elements, :start_document_called
103
+ attr_reader :end_elements, :end_document_called
104
+ attr_reader :data, :comments, :cdata_blocks, :start_elements_namespace
105
+ attr_reader :errors, :warnings, :end_elements_namespace
106
+ attr_reader :xmldecls
107
+
108
+ def xmldecl version, encoding, standalone
109
+ @xmldecls = [version, encoding, standalone].compact
110
+ super
111
+ end
112
+
113
+ def start_document
114
+ @start_document_called = true
115
+ super
116
+ end
117
+
118
+ def end_document
119
+ @end_document_called = true
120
+ super
121
+ end
122
+
123
+ def error error
124
+ (@errors ||= []) << error
125
+ super
126
+ end
127
+
128
+ def warning warning
129
+ (@warning ||= []) << warning
130
+ super
131
+ end
132
+
133
+ def start_element *args
134
+ (@start_elements ||= []) << args
135
+ super
136
+ end
137
+
138
+ def start_element_namespace *args
139
+ (@start_elements_namespace ||= []) << args
140
+ super
141
+ end
142
+
143
+ def end_element *args
144
+ (@end_elements ||= []) << args
145
+ super
146
+ end
147
+
148
+ def end_element_namespace *args
149
+ (@end_elements_namespace ||= []) << args
150
+ super
151
+ end
152
+
153
+ def characters string
154
+ @data ||= []
155
+ @data += [string]
156
+ super
157
+ end
158
+
159
+ def comment string
160
+ @comments ||= []
161
+ @comments += [string]
162
+ super
163
+ end
164
+
165
+ def cdata_block string
166
+ @cdata_blocks ||= []
167
+ @cdata_blocks += [string]
168
+ super
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,139 @@
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_z_parse_force_encoding # encoding deviations
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
+ #vx = Nokogiri::VERSION_INFO['libxml']['loaded']
113
+ # maglev gets version loaded == 2.6.23 on x86 solaris
114
+ noshade_value = if Nokogiri.uses_libxml? && Nokogiri::VERSION_INFO['libxml']['loaded'] < '2.7.7'
115
+ ['noshade', 'noshade']
116
+ else
117
+ ['noshade', nil]
118
+ end
119
+ noshade_value = ['noshade', nil] # yet maglev gives this value
120
+
121
+ assert_equal [
122
+ ['html', []],
123
+ ['head', []],
124
+ ['title', []],
125
+ ['body', []],
126
+ ['img', [
127
+ ['src', 'face.jpg'],
128
+ ['title', 'daddy & me']
129
+ ]],
130
+ ['hr', [
131
+ noshade_value,
132
+ ['size', '2']
133
+ ]]
134
+ ], @parser.document.start_elements
135
+ end
136
+ end
137
+ end
138
+ end
139
+ 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,165 @@
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 { # failing with MNU div& and then too few args in Integer#div
47
+ pre {
48
+ a('King Khan & The Shrines', :href => uri)
49
+ }
50
+ }
51
+ assert_equal 'http://tenderlovemaking.com/',
52
+ built.doc.at('a')[:href]
53
+ end
54
+
55
+ def test_tag_nesting
56
+ builder = Nokogiri::HTML::Builder.new do
57
+ body {
58
+ span.left ''
59
+ span.middle {
60
+ div.icon ''
61
+ }
62
+ span.right ''
63
+ }
64
+ end
65
+ assert node = builder.doc.css('span.right').first
66
+ assert_equal 'middle', node.previous_sibling['class']
67
+ end
68
+
69
+ def test_has_ampersand
70
+ builder = Nokogiri::HTML::Builder.new do
71
+ div.rad.thing! {
72
+ text "<awe&some>"
73
+ b "hello & world"
74
+ }
75
+ end
76
+ assert_equal(
77
+ '<div class="rad" id="thing">&lt;awe&amp;some&gt;<b>hello &amp; world</b></div>',
78
+ builder.doc.root.to_html.gsub(/\n/, ''))
79
+ end
80
+
81
+ def test_multi_tags
82
+ builder = Nokogiri::HTML::Builder.new do
83
+ div.rad.thing! {
84
+ text "<awesome>"
85
+ b "hello"
86
+ }
87
+ end
88
+ assert_equal(
89
+ '<div class="rad" id="thing">&lt;awesome&gt;<b>hello</b></div>',
90
+ builder.doc.root.to_html.gsub(/\n/, ''))
91
+ end
92
+
93
+ def test_attributes_plus_block
94
+ builder = Nokogiri::HTML::Builder.new do
95
+ div.rad.thing! {
96
+ text "<awesome>"
97
+ }
98
+ end
99
+ assert_equal('<div class="rad" id="thing">&lt;awesome&gt;</div>',
100
+ builder.doc.root.to_html.chomp)
101
+ end
102
+
103
+ def test_builder_adds_attributes
104
+ builder = Nokogiri::HTML::Builder.new do
105
+ div.rad.thing! "tender div"
106
+ end
107
+ assert_equal('<div class="rad" id="thing">tender div</div>',
108
+ builder.doc.root.to_html.chomp)
109
+ end
110
+
111
+ def test_bold_tag
112
+ builder = Nokogiri::HTML::Builder.new do
113
+ b "bold tag"
114
+ end
115
+ assert_equal('<b>bold tag</b>', builder.doc.root.to_html.chomp)
116
+ end
117
+
118
+ def test_html_then_body_tag
119
+ builder = Nokogiri::HTML::Builder.new do
120
+ html {
121
+ body {
122
+ b "bold tag"
123
+ }
124
+ }
125
+ end
126
+ assert_equal('<html><body><b>bold tag</b></body></html>',
127
+ builder.doc.root.to_html.chomp.gsub(/>\s*</, '><'))
128
+ end
129
+
130
+ def test_z_instance_eval_with_delegation_to_block_context # fails with 'document already has a root'
131
+ class << self
132
+ def foo
133
+ "foo!"
134
+ end
135
+ end
136
+
137
+ builder = Nokogiri::HTML::Builder.new { text foo }
138
+ assert builder.to_html.include?("foo!")
139
+ end
140
+
141
+ def test_builder_with_param
142
+ doc = Nokogiri::HTML::Builder.new { |html|
143
+ html.body {
144
+ html.p "hello world"
145
+ }
146
+ }.doc
147
+
148
+ assert node = doc.xpath('//body/p').first
149
+ assert_equal 'hello world', node.content
150
+ end
151
+
152
+ def test_builder_with_id
153
+ text = "hello world"
154
+ doc = Nokogiri::HTML::Builder.new { |html|
155
+ html.body {
156
+ html.id_ text
157
+ }
158
+ }.doc
159
+
160
+ assert node = doc.xpath('//body/id').first
161
+ assert_equal text, node.content
162
+ end
163
+ end
164
+ end
165
+ end