nokogiri-fitzsimmons 1.5.5.3-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (297) hide show
  1. data/.autotest +26 -0
  2. data/.gemtest +0 -0
  3. data/CHANGELOG.ja.rdoc +666 -0
  4. data/CHANGELOG.rdoc +659 -0
  5. data/C_CODING_STYLE.rdoc +33 -0
  6. data/Manifest.txt +295 -0
  7. data/README.ja.rdoc +106 -0
  8. data/README.rdoc +178 -0
  9. data/ROADMAP.md +86 -0
  10. data/Rakefile +194 -0
  11. data/STANDARD_RESPONSES.md +47 -0
  12. data/Y_U_NO_GEMSPEC.md +155 -0
  13. data/bin/nokogiri +63 -0
  14. data/build_all +58 -0
  15. data/ext/java/nokogiri/EncodingHandler.java +124 -0
  16. data/ext/java/nokogiri/HtmlDocument.java +163 -0
  17. data/ext/java/nokogiri/HtmlElementDescription.java +145 -0
  18. data/ext/java/nokogiri/HtmlEntityLookup.java +79 -0
  19. data/ext/java/nokogiri/HtmlSaxParserContext.java +259 -0
  20. data/ext/java/nokogiri/NokogiriService.java +598 -0
  21. data/ext/java/nokogiri/XmlAttr.java +190 -0
  22. data/ext/java/nokogiri/XmlAttributeDecl.java +130 -0
  23. data/ext/java/nokogiri/XmlCdata.java +84 -0
  24. data/ext/java/nokogiri/XmlComment.java +95 -0
  25. data/ext/java/nokogiri/XmlDocument.java +580 -0
  26. data/ext/java/nokogiri/XmlDocumentFragment.java +234 -0
  27. data/ext/java/nokogiri/XmlDtd.java +469 -0
  28. data/ext/java/nokogiri/XmlElement.java +97 -0
  29. data/ext/java/nokogiri/XmlElementContent.java +382 -0
  30. data/ext/java/nokogiri/XmlElementDecl.java +152 -0
  31. data/ext/java/nokogiri/XmlEntityDecl.java +162 -0
  32. data/ext/java/nokogiri/XmlEntityReference.java +97 -0
  33. data/ext/java/nokogiri/XmlNamespace.java +215 -0
  34. data/ext/java/nokogiri/XmlNode.java +1534 -0
  35. data/ext/java/nokogiri/XmlNodeSet.java +270 -0
  36. data/ext/java/nokogiri/XmlProcessingInstruction.java +99 -0
  37. data/ext/java/nokogiri/XmlReader.java +456 -0
  38. data/ext/java/nokogiri/XmlRelaxng.java +144 -0
  39. data/ext/java/nokogiri/XmlSaxParserContext.java +356 -0
  40. data/ext/java/nokogiri/XmlSaxPushParser.java +215 -0
  41. data/ext/java/nokogiri/XmlSchema.java +324 -0
  42. data/ext/java/nokogiri/XmlSyntaxError.java +136 -0
  43. data/ext/java/nokogiri/XmlText.java +119 -0
  44. data/ext/java/nokogiri/XmlXpathContext.java +203 -0
  45. data/ext/java/nokogiri/XsltStylesheet.java +360 -0
  46. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +243 -0
  47. data/ext/java/nokogiri/internals/NokogiriDocumentCache.java +73 -0
  48. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +86 -0
  49. data/ext/java/nokogiri/internals/NokogiriHandler.java +333 -0
  50. data/ext/java/nokogiri/internals/NokogiriHelpers.java +800 -0
  51. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +163 -0
  52. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +130 -0
  53. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +74 -0
  54. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +121 -0
  55. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +79 -0
  56. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +141 -0
  57. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +73 -0
  58. data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +67 -0
  59. data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +87 -0
  60. data/ext/java/nokogiri/internals/ParserContext.java +288 -0
  61. data/ext/java/nokogiri/internals/ReaderNode.java +531 -0
  62. data/ext/java/nokogiri/internals/SaveContextVisitor.java +775 -0
  63. data/ext/java/nokogiri/internals/SchemaErrorHandler.java +76 -0
  64. data/ext/java/nokogiri/internals/XmlDeclHandler.java +42 -0
  65. data/ext/java/nokogiri/internals/XmlDomParser.java +105 -0
  66. data/ext/java/nokogiri/internals/XmlDomParserContext.java +266 -0
  67. data/ext/java/nokogiri/internals/XmlSaxParser.java +65 -0
  68. data/ext/java/nokogiri/internals/XsltExtensionFunction.java +72 -0
  69. data/ext/nokogiri/depend +358 -0
  70. data/ext/nokogiri/extconf.rb +142 -0
  71. data/ext/nokogiri/html_document.c +170 -0
  72. data/ext/nokogiri/html_document.h +10 -0
  73. data/ext/nokogiri/html_element_description.c +276 -0
  74. data/ext/nokogiri/html_element_description.h +10 -0
  75. data/ext/nokogiri/html_entity_lookup.c +32 -0
  76. data/ext/nokogiri/html_entity_lookup.h +8 -0
  77. data/ext/nokogiri/html_sax_parser_context.c +116 -0
  78. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  79. data/ext/nokogiri/html_sax_push_parser.c +87 -0
  80. data/ext/nokogiri/html_sax_push_parser.h +9 -0
  81. data/ext/nokogiri/nokogiri.c +133 -0
  82. data/ext/nokogiri/nokogiri.h +160 -0
  83. data/ext/nokogiri/xml_attr.c +94 -0
  84. data/ext/nokogiri/xml_attr.h +9 -0
  85. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  86. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  87. data/ext/nokogiri/xml_cdata.c +56 -0
  88. data/ext/nokogiri/xml_cdata.h +9 -0
  89. data/ext/nokogiri/xml_comment.c +54 -0
  90. data/ext/nokogiri/xml_comment.h +9 -0
  91. data/ext/nokogiri/xml_document.c +576 -0
  92. data/ext/nokogiri/xml_document.h +23 -0
  93. data/ext/nokogiri/xml_document_fragment.c +48 -0
  94. data/ext/nokogiri/xml_document_fragment.h +10 -0
  95. data/ext/nokogiri/xml_dtd.c +202 -0
  96. data/ext/nokogiri/xml_dtd.h +10 -0
  97. data/ext/nokogiri/xml_element_content.c +123 -0
  98. data/ext/nokogiri/xml_element_content.h +10 -0
  99. data/ext/nokogiri/xml_element_decl.c +69 -0
  100. data/ext/nokogiri/xml_element_decl.h +9 -0
  101. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  102. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  103. data/ext/nokogiri/xml_entity_decl.c +110 -0
  104. data/ext/nokogiri/xml_entity_decl.h +10 -0
  105. data/ext/nokogiri/xml_entity_reference.c +52 -0
  106. data/ext/nokogiri/xml_entity_reference.h +9 -0
  107. data/ext/nokogiri/xml_io.c +56 -0
  108. data/ext/nokogiri/xml_io.h +11 -0
  109. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  110. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  111. data/ext/nokogiri/xml_namespace.c +78 -0
  112. data/ext/nokogiri/xml_namespace.h +13 -0
  113. data/ext/nokogiri/xml_node.c +1480 -0
  114. data/ext/nokogiri/xml_node.h +13 -0
  115. data/ext/nokogiri/xml_node_set.c +467 -0
  116. data/ext/nokogiri/xml_node_set.h +14 -0
  117. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  118. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  119. data/ext/nokogiri/xml_reader.c +684 -0
  120. data/ext/nokogiri/xml_reader.h +10 -0
  121. data/ext/nokogiri/xml_relax_ng.c +161 -0
  122. data/ext/nokogiri/xml_relax_ng.h +9 -0
  123. data/ext/nokogiri/xml_sax_parser.c +293 -0
  124. data/ext/nokogiri/xml_sax_parser.h +39 -0
  125. data/ext/nokogiri/xml_sax_parser_context.c +222 -0
  126. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  127. data/ext/nokogiri/xml_sax_push_parser.c +115 -0
  128. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  129. data/ext/nokogiri/xml_schema.c +205 -0
  130. data/ext/nokogiri/xml_schema.h +9 -0
  131. data/ext/nokogiri/xml_syntax_error.c +58 -0
  132. data/ext/nokogiri/xml_syntax_error.h +13 -0
  133. data/ext/nokogiri/xml_text.c +52 -0
  134. data/ext/nokogiri/xml_text.h +9 -0
  135. data/ext/nokogiri/xml_xpath_context.c +319 -0
  136. data/ext/nokogiri/xml_xpath_context.h +10 -0
  137. data/ext/nokogiri/xslt_stylesheet.c +270 -0
  138. data/ext/nokogiri/xslt_stylesheet.h +14 -0
  139. data/lib/isorelax.jar +0 -0
  140. data/lib/jing.jar +0 -0
  141. data/lib/nekodtd.jar +0 -0
  142. data/lib/nekohtml.jar +0 -0
  143. data/lib/nokogiri.rb +127 -0
  144. data/lib/nokogiri/css.rb +27 -0
  145. data/lib/nokogiri/css/node.rb +102 -0
  146. data/lib/nokogiri/css/parser.rb +720 -0
  147. data/lib/nokogiri/css/parser.y +258 -0
  148. data/lib/nokogiri/css/parser_extras.rb +91 -0
  149. data/lib/nokogiri/css/syntax_error.rb +7 -0
  150. data/lib/nokogiri/css/tokenizer.rb +152 -0
  151. data/lib/nokogiri/css/tokenizer.rex +55 -0
  152. data/lib/nokogiri/css/xpath_visitor.rb +171 -0
  153. data/lib/nokogiri/decorators/slop.rb +35 -0
  154. data/lib/nokogiri/html.rb +37 -0
  155. data/lib/nokogiri/html/builder.rb +35 -0
  156. data/lib/nokogiri/html/document.rb +254 -0
  157. data/lib/nokogiri/html/document_fragment.rb +41 -0
  158. data/lib/nokogiri/html/element_description.rb +23 -0
  159. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  160. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  161. data/lib/nokogiri/html/sax/parser.rb +52 -0
  162. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  163. data/lib/nokogiri/html/sax/push_parser.rb +16 -0
  164. data/lib/nokogiri/nokogiri.jar +0 -0
  165. data/lib/nokogiri/syntax_error.rb +4 -0
  166. data/lib/nokogiri/version.rb +88 -0
  167. data/lib/nokogiri/xml.rb +73 -0
  168. data/lib/nokogiri/xml/attr.rb +14 -0
  169. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  170. data/lib/nokogiri/xml/builder.rb +431 -0
  171. data/lib/nokogiri/xml/cdata.rb +11 -0
  172. data/lib/nokogiri/xml/character_data.rb +7 -0
  173. data/lib/nokogiri/xml/document.rb +267 -0
  174. data/lib/nokogiri/xml/document_fragment.rb +103 -0
  175. data/lib/nokogiri/xml/dtd.rb +22 -0
  176. data/lib/nokogiri/xml/element_content.rb +36 -0
  177. data/lib/nokogiri/xml/element_decl.rb +13 -0
  178. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  179. data/lib/nokogiri/xml/namespace.rb +13 -0
  180. data/lib/nokogiri/xml/node.rb +946 -0
  181. data/lib/nokogiri/xml/node/save_options.rb +61 -0
  182. data/lib/nokogiri/xml/node_set.rb +357 -0
  183. data/lib/nokogiri/xml/notation.rb +6 -0
  184. data/lib/nokogiri/xml/parse_options.rb +98 -0
  185. data/lib/nokogiri/xml/pp.rb +2 -0
  186. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  187. data/lib/nokogiri/xml/pp/node.rb +56 -0
  188. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  189. data/lib/nokogiri/xml/reader.rb +112 -0
  190. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  191. data/lib/nokogiri/xml/sax.rb +4 -0
  192. data/lib/nokogiri/xml/sax/document.rb +164 -0
  193. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  194. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  195. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  196. data/lib/nokogiri/xml/schema.rb +63 -0
  197. data/lib/nokogiri/xml/syntax_error.rb +47 -0
  198. data/lib/nokogiri/xml/text.rb +9 -0
  199. data/lib/nokogiri/xml/xpath.rb +10 -0
  200. data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
  201. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  202. data/lib/nokogiri/xslt.rb +56 -0
  203. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  204. data/lib/xercesImpl.jar +0 -0
  205. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  206. data/tasks/cross_compile.rb +153 -0
  207. data/tasks/nokogiri.org.rb +24 -0
  208. data/tasks/test.rb +95 -0
  209. data/test/css/test_nthiness.rb +159 -0
  210. data/test/css/test_parser.rb +341 -0
  211. data/test/css/test_tokenizer.rb +198 -0
  212. data/test/css/test_xpath_visitor.rb +91 -0
  213. data/test/decorators/test_slop.rb +16 -0
  214. data/test/files/2ch.html +108 -0
  215. data/test/files/address_book.rlx +12 -0
  216. data/test/files/address_book.xml +10 -0
  217. data/test/files/bar/bar.xsd +4 -0
  218. data/test/files/dont_hurt_em_why.xml +422 -0
  219. data/test/files/encoding.html +82 -0
  220. data/test/files/encoding.xhtml +84 -0
  221. data/test/files/exslt.xml +8 -0
  222. data/test/files/exslt.xslt +35 -0
  223. data/test/files/foo/foo.xsd +4 -0
  224. data/test/files/metacharset.html +10 -0
  225. data/test/files/noencoding.html +47 -0
  226. data/test/files/po.xml +32 -0
  227. data/test/files/po.xsd +66 -0
  228. data/test/files/shift_jis.html +10 -0
  229. data/test/files/shift_jis.xml +5 -0
  230. data/test/files/snuggles.xml +3 -0
  231. data/test/files/staff.dtd +10 -0
  232. data/test/files/staff.xml +59 -0
  233. data/test/files/staff.xslt +32 -0
  234. data/test/files/tlm.html +850 -0
  235. data/test/files/to_be_xincluded.xml +2 -0
  236. data/test/files/valid_bar.xml +2 -0
  237. data/test/files/xinclude.xml +4 -0
  238. data/test/helper.rb +147 -0
  239. data/test/html/sax/test_parser.rb +138 -0
  240. data/test/html/sax/test_parser_context.rb +46 -0
  241. data/test/html/test_builder.rb +164 -0
  242. data/test/html/test_document.rb +529 -0
  243. data/test/html/test_document_encoding.rb +138 -0
  244. data/test/html/test_document_fragment.rb +254 -0
  245. data/test/html/test_element_description.rb +100 -0
  246. data/test/html/test_named_characters.rb +14 -0
  247. data/test/html/test_node.rb +188 -0
  248. data/test/html/test_node_encoding.rb +27 -0
  249. data/test/test_convert_xpath.rb +135 -0
  250. data/test/test_css_cache.rb +45 -0
  251. data/test/test_encoding_handler.rb +46 -0
  252. data/test/test_memory_leak.rb +152 -0
  253. data/test/test_nokogiri.rb +132 -0
  254. data/test/test_reader.rb +488 -0
  255. data/test/test_soap4r_sax.rb +52 -0
  256. data/test/test_xslt_transforms.rb +254 -0
  257. data/test/xml/node/test_save_options.rb +28 -0
  258. data/test/xml/node/test_subclass.rb +44 -0
  259. data/test/xml/sax/test_parser.rb +338 -0
  260. data/test/xml/sax/test_parser_context.rb +106 -0
  261. data/test/xml/sax/test_push_parser.rb +157 -0
  262. data/test/xml/test_attr.rb +64 -0
  263. data/test/xml/test_attribute_decl.rb +86 -0
  264. data/test/xml/test_builder.rb +248 -0
  265. data/test/xml/test_c14n.rb +151 -0
  266. data/test/xml/test_cdata.rb +48 -0
  267. data/test/xml/test_comment.rb +29 -0
  268. data/test/xml/test_document.rb +742 -0
  269. data/test/xml/test_document_encoding.rb +28 -0
  270. data/test/xml/test_document_fragment.rb +216 -0
  271. data/test/xml/test_dtd.rb +103 -0
  272. data/test/xml/test_dtd_encoding.rb +33 -0
  273. data/test/xml/test_element_content.rb +56 -0
  274. data/test/xml/test_element_decl.rb +73 -0
  275. data/test/xml/test_entity_decl.rb +122 -0
  276. data/test/xml/test_entity_reference.rb +235 -0
  277. data/test/xml/test_namespace.rb +75 -0
  278. data/test/xml/test_node.rb +1029 -0
  279. data/test/xml/test_node_attributes.rb +53 -0
  280. data/test/xml/test_node_encoding.rb +107 -0
  281. data/test/xml/test_node_inheritance.rb +32 -0
  282. data/test/xml/test_node_reparenting.rb +374 -0
  283. data/test/xml/test_node_set.rb +755 -0
  284. data/test/xml/test_parse_options.rb +64 -0
  285. data/test/xml/test_processing_instruction.rb +30 -0
  286. data/test/xml/test_reader_encoding.rb +142 -0
  287. data/test/xml/test_relax_ng.rb +60 -0
  288. data/test/xml/test_schema.rb +94 -0
  289. data/test/xml/test_syntax_error.rb +12 -0
  290. data/test/xml/test_text.rb +45 -0
  291. data/test/xml/test_unparented_node.rb +413 -0
  292. data/test/xml/test_xinclude.rb +83 -0
  293. data/test/xml/test_xpath.rb +295 -0
  294. data/test/xslt/test_custom_functions.rb +129 -0
  295. data/test/xslt/test_exception_handling.rb +37 -0
  296. data/test_all +84 -0
  297. metadata +571 -0
@@ -0,0 +1,529 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module HTML
5
+ class TestDocument < Nokogiri::TestCase
6
+ def setup
7
+ super
8
+ @html = Nokogiri::HTML.parse(File.read(HTML_FILE))
9
+ end
10
+
11
+ def test_nil_css
12
+ # Behavior is undefined but shouldn't break
13
+ assert @html.css(nil)
14
+ assert @html.xpath(nil)
15
+ end
16
+
17
+ def test_exceptions_remove_newlines
18
+ errors = @html.errors
19
+ assert errors.length > 0, 'has errors'
20
+ errors.each do |error|
21
+ assert_equal(error.to_s.chomp, error.to_s)
22
+ end
23
+ end
24
+
25
+ def test_fragment
26
+ fragment = @html.fragment
27
+ assert_equal 0, fragment.children.length
28
+ end
29
+
30
+ def test_document_takes_config_block
31
+ options = nil
32
+ Nokogiri::HTML(File.read(HTML_FILE), HTML_FILE) do |cfg|
33
+ options = cfg
34
+ options.nonet.nowarning.dtdattr
35
+ end
36
+ assert options.nonet?
37
+ assert options.nowarning?
38
+ assert options.dtdattr?
39
+ end
40
+
41
+ def test_parse_takes_config_block
42
+ options = nil
43
+ Nokogiri::HTML.parse(File.read(HTML_FILE), HTML_FILE) do |cfg|
44
+ options = cfg
45
+ options.nonet.nowarning.dtdattr
46
+ end
47
+ assert options.nonet?
48
+ assert options.nowarning?
49
+ assert options.dtdattr?
50
+ end
51
+
52
+ def test_subclass
53
+ klass = Class.new(Nokogiri::HTML::Document)
54
+ doc = klass.new
55
+ assert_instance_of klass, doc
56
+ end
57
+
58
+ def test_subclass_initialize
59
+ klass = Class.new(Nokogiri::HTML::Document) do
60
+ attr_accessor :initialized_with
61
+
62
+ def initialize(*args)
63
+ @initialized_with = args
64
+ end
65
+ end
66
+ doc = klass.new("uri", "external_id", 1)
67
+ assert_equal ["uri", "external_id", 1], doc.initialized_with
68
+ end
69
+
70
+ def test_subclass_dup
71
+ klass = Class.new(Nokogiri::HTML::Document)
72
+ doc = klass.new.dup
73
+ assert_instance_of klass, doc
74
+ end
75
+
76
+ def test_subclass_parse
77
+ klass = Class.new(Nokogiri::HTML::Document)
78
+ doc = klass.parse(File.read(HTML_FILE))
79
+ assert_equal @html.to_s, doc.to_s
80
+ assert_instance_of klass, doc
81
+ end
82
+
83
+ def test_document_parse_method
84
+ html = Nokogiri::HTML::Document.parse(File.read(HTML_FILE))
85
+ assert_equal @html.to_s, html.to_s
86
+ end
87
+
88
+ def test_document_parse_method_with_url
89
+ require 'open-uri'
90
+ begin
91
+ html = open('http://google.com').read
92
+ rescue
93
+ skip("This test needs the internet. Skips if no internet available.")
94
+ end
95
+ doc = Nokogiri::HTML html ,"http:/foobar.foobar/"
96
+ refute_empty doc.to_s, "Document should not be empty"
97
+ end
98
+
99
+ ###
100
+ # Nokogiri::HTML returns an empty Document when given a blank string GH#11
101
+ def test_empty_string_returns_empty_doc
102
+ doc = Nokogiri::HTML('')
103
+ assert_instance_of Nokogiri::HTML::Document, doc
104
+ assert_nil doc.root
105
+ end
106
+
107
+ unless Nokogiri.uses_libxml? && %w[2 6] === LIBXML_VERSION.split('.')[0..1]
108
+ # FIXME: this is a hack around broken libxml versions
109
+ def test_to_xhtml_with_indent
110
+ doc = Nokogiri::HTML('<html><body><a>foo</a></body></html>')
111
+ doc = Nokogiri::HTML(doc.to_xhtml(:indent => 2))
112
+ assert_indent 2, doc
113
+ end
114
+
115
+ def test_write_to_xhtml_with_indent
116
+ io = StringIO.new
117
+ doc = Nokogiri::HTML('<html><body><a>foo</a></body></html>')
118
+ doc.write_xhtml_to io, :indent => 5
119
+ io.rewind
120
+ doc = Nokogiri::HTML(io.read)
121
+ assert_indent 5, doc
122
+ end
123
+ end
124
+
125
+ def test_swap_should_not_exist
126
+ assert_raises(NoMethodError) {
127
+ @html.swap
128
+ }
129
+ end
130
+
131
+ def test_namespace_should_not_exist
132
+ assert_raises(NoMethodError) {
133
+ @html.namespace
134
+ }
135
+ end
136
+
137
+ def test_meta_encoding
138
+ assert_equal 'UTF-8', @html.meta_encoding
139
+ end
140
+
141
+ def test_meta_encoding_is_strict_about_http_equiv
142
+ doc = Nokogiri::HTML(<<-eohtml)
143
+ <html>
144
+ <head>
145
+ <meta http-equiv="X-Content-Type" content="text/html; charset=Shift_JIS">
146
+ </head>
147
+ <body>
148
+ foo
149
+ </body>
150
+ </html>
151
+ eohtml
152
+ assert_nil doc.meta_encoding
153
+ end
154
+
155
+ def test_meta_encoding_handles_malformed_content_charset
156
+ doc = Nokogiri::HTML(<<EOHTML)
157
+ <html>
158
+ <head>
159
+ <meta http-equiv="Content-type" content="text/html; utf-8" />
160
+ </head>
161
+ <body>
162
+ foo
163
+ </body>
164
+ </html>
165
+ EOHTML
166
+ assert_nil doc.meta_encoding
167
+ end
168
+
169
+ def test_meta_encoding=
170
+ @html.meta_encoding = 'EUC-JP'
171
+ assert_equal 'EUC-JP', @html.meta_encoding
172
+ end
173
+
174
+ def test_title
175
+ assert_equal 'Tender Lovemaking ', @html.title
176
+ doc = Nokogiri::HTML('<html><body>foo</body></html>')
177
+ assert_nil doc.title
178
+ end
179
+
180
+ def test_title=()
181
+ doc = Nokogiri::HTML(<<eohtml)
182
+ <html>
183
+ <head>
184
+ <title>old</title>
185
+ </head>
186
+ <body>
187
+ foo
188
+ </body>
189
+ </html>
190
+ eohtml
191
+ doc.title = 'new'
192
+ assert_equal 'new', doc.title
193
+
194
+ doc = Nokogiri::HTML(<<eohtml)
195
+ <html>
196
+ <head>
197
+ </head>
198
+ <body>
199
+ foo
200
+ </body>
201
+ </html>
202
+ eohtml
203
+ doc.title = 'new'
204
+ assert_equal 'new', doc.title
205
+
206
+ doc = Nokogiri::HTML(<<eohtml)
207
+ <html>
208
+ <body>
209
+ foo
210
+ </body>
211
+ </html>
212
+ eohtml
213
+ doc.title = 'new'
214
+ if Nokogiri.uses_libxml?
215
+ assert_nil doc.title
216
+ else
217
+ assert_equal 'new', doc.title
218
+ end
219
+ end
220
+
221
+ def test_meta_encoding_without_head
222
+ html = Nokogiri::HTML('<html><body>foo</body></html>')
223
+ assert_nil html.meta_encoding
224
+
225
+ html.meta_encoding = 'EUC-JP'
226
+ assert_nil html.meta_encoding
227
+ end
228
+
229
+ def test_meta_encoding_with_empty_content_type
230
+ html = Nokogiri::HTML(<<-eohtml)
231
+ <html>
232
+ <head>
233
+ <meta http-equiv="Content-Type" content="">
234
+ </head>
235
+ <body>
236
+ foo
237
+ </body>
238
+ </html>
239
+ eohtml
240
+ assert_nil html.meta_encoding
241
+
242
+ html = Nokogiri::HTML(<<-eohtml)
243
+ <html>
244
+ <head>
245
+ <meta http-equiv="Content-Type">
246
+ </head>
247
+ <body>
248
+ foo
249
+ </body>
250
+ </html>
251
+ eohtml
252
+ assert_nil html.meta_encoding
253
+ end
254
+
255
+ def test_root_node_parent_is_document
256
+ parent = @html.root.parent
257
+ assert_equal @html, parent
258
+ assert_instance_of Nokogiri::HTML::Document, parent
259
+ end
260
+
261
+ def test_parse_handles_nil_gracefully
262
+ @doc = Nokogiri::HTML::Document.parse(nil)
263
+ assert_instance_of Nokogiri::HTML::Document, @doc
264
+ end
265
+
266
+ def test_parse_empty_document
267
+ doc = Nokogiri::HTML("\n")
268
+ assert_equal 0, doc.css('a').length
269
+ assert_equal 0, doc.xpath('//a').length
270
+ assert_equal 0, doc.search('//a').length
271
+ end
272
+
273
+ def test_HTML_function
274
+ html = Nokogiri::HTML(File.read(HTML_FILE))
275
+ assert html.html?
276
+ end
277
+
278
+ def test_parse_io
279
+ assert File.open(HTML_FILE, 'rb') { |f|
280
+ Document.read_io(f, nil, 'UTF-8',
281
+ XML::ParseOptions::NOERROR | XML::ParseOptions::NOWARNING
282
+ )
283
+ }
284
+ end
285
+
286
+ def test_parse_temp_file
287
+ temp_html_file = Tempfile.new("TEMP_HTML_FILE")
288
+ File.open(HTML_FILE, 'rb') { |f| temp_html_file.write f.read }
289
+ temp_html_file.close
290
+ temp_html_file.open
291
+ assert_equal Nokogiri::HTML.parse(File.read(HTML_FILE)).xpath('//div/a').length,
292
+ Nokogiri::HTML.parse(temp_html_file).xpath('//div/a').length
293
+ end
294
+
295
+ def test_to_xhtml
296
+ assert_match 'XHTML', @html.to_xhtml
297
+ assert_match 'XHTML', @html.to_xhtml(:encoding => 'UTF-8')
298
+ assert_match 'UTF-8', @html.to_xhtml(:encoding => 'UTF-8')
299
+ end
300
+
301
+ def test_no_xml_header
302
+ html = Nokogiri::HTML(<<-eohtml)
303
+ <html>
304
+ </html>
305
+ eohtml
306
+ assert html.to_html.length > 0, 'html length is too short'
307
+ assert_no_match(/^<\?xml/, html.to_html)
308
+ end
309
+
310
+ def test_document_has_error
311
+ html = Nokogiri::HTML(<<-eohtml)
312
+ <html>
313
+ <body>
314
+ <div awesome="asdf>
315
+ <p>inside div tag</p>
316
+ </div>
317
+ <p>outside div tag</p>
318
+ </body>
319
+ </html>
320
+ eohtml
321
+ assert html.errors.length > 0
322
+ end
323
+
324
+ def test_relative_css
325
+ html = Nokogiri::HTML(<<-eohtml)
326
+ <html>
327
+ <body>
328
+ <div>
329
+ <p>inside div tag</p>
330
+ </div>
331
+ <p>outside div tag</p>
332
+ </body>
333
+ </html>
334
+ eohtml
335
+ set = html.search('div').search('p')
336
+ assert_equal(1, set.length)
337
+ assert_equal('inside div tag', set.first.inner_text)
338
+ end
339
+
340
+ def test_multi_css
341
+ html = Nokogiri::HTML(<<-eohtml)
342
+ <html>
343
+ <body>
344
+ <div>
345
+ <p>p tag</p>
346
+ <a>a tag</a>
347
+ </div>
348
+ </body>
349
+ </html>
350
+ eohtml
351
+ set = html.css('p, a')
352
+ assert_equal(2, set.length)
353
+ assert_equal ['a tag', 'p tag'].sort, set.map { |x| x.content }.sort
354
+ end
355
+
356
+ def test_inner_text
357
+ html = Nokogiri::HTML(<<-eohtml)
358
+ <html>
359
+ <body>
360
+ <div>
361
+ <p>
362
+ Hello world!
363
+ </p>
364
+ </div>
365
+ </body>
366
+ </html>
367
+ eohtml
368
+ node = html.xpath('//div').first
369
+ assert_equal('Hello world!', node.inner_text.strip)
370
+ end
371
+
372
+ def test_find_by_xpath
373
+ found = @html.xpath('//div/a')
374
+ assert_equal 3, found.length
375
+ end
376
+
377
+ def test_find_by_css
378
+ found = @html.css('div > a')
379
+ assert_equal 3, found.length
380
+ end
381
+
382
+ def test_find_by_css_with_square_brackets
383
+ found = @html.css("div[@id='header'] > h1")
384
+ found = @html.css("div[@id='header'] h1") # this blows up on commit 6fa0f6d329d9dbf1cc21c0ac72f7e627bb4c05fc
385
+ assert_equal 1, found.length
386
+ end
387
+
388
+ def test_find_with_function
389
+ assert @html.css("div:awesome() h1", Class.new {
390
+ def awesome divs
391
+ [divs.first]
392
+ end
393
+ }.new)
394
+ end
395
+
396
+ def test_dup_shallow
397
+ found = @html.search('//div/a').first
398
+ dup = found.dup(0)
399
+ assert dup
400
+ assert_equal '', dup.content
401
+ end
402
+
403
+ def test_search_can_handle_xpath_and_css
404
+ found = @html.search('//div/a', 'div > p')
405
+ length = @html.xpath('//div/a').length +
406
+ @html.css('div > p').length
407
+ assert_equal length, found.length
408
+ end
409
+
410
+ def test_dup_document
411
+ assert dup = @html.dup
412
+ assert_not_equal dup, @html
413
+ assert @html.html?
414
+ assert_instance_of Nokogiri::HTML::Document, dup
415
+ assert dup.html?, 'duplicate should be html'
416
+ assert_equal @html.to_s, dup.to_s
417
+ end
418
+
419
+ def test_dup_document_shallow
420
+ assert dup = @html.dup(0)
421
+ assert_not_equal dup, @html
422
+ end
423
+
424
+ def test_dup
425
+ found = @html.search('//div/a').first
426
+ dup = found.dup
427
+ assert dup
428
+ assert_equal found.content, dup.content
429
+ assert_equal found.document, dup.document
430
+ end
431
+
432
+ def test_inner_html
433
+ html = Nokogiri::HTML(<<-eohtml)
434
+ <html>
435
+ <body>
436
+ <div>
437
+ <p>
438
+ Hello world!
439
+ </p>
440
+ </div>
441
+ </body>
442
+ </html>
443
+ eohtml
444
+ node = html.xpath('//div').first
445
+ assert_equal('<p>Helloworld!</p>', node.inner_html.gsub(/\s/, ''))
446
+ end
447
+
448
+ def test_round_trip
449
+ doc = Nokogiri::HTML(@html.inner_html)
450
+ assert_equal @html.root.to_html, doc.root.to_html
451
+ end
452
+
453
+ def test_fragment_contains_text_node
454
+ fragment = Nokogiri::HTML.fragment('fooo')
455
+ assert_equal 1, fragment.children.length
456
+ assert_equal 'fooo', fragment.inner_text
457
+ end
458
+
459
+ def test_fragment_includes_two_tags
460
+ assert_equal 2, Nokogiri::HTML.fragment("<br/><hr/>").children.length
461
+ end
462
+
463
+ def test_relative_css_finder
464
+ doc = Nokogiri::HTML(<<-eohtml)
465
+ <html>
466
+ <body>
467
+ <div class="red">
468
+ <p>
469
+ inside red
470
+ </p>
471
+ </div>
472
+ <div class="green">
473
+ <p>
474
+ inside green
475
+ </p>
476
+ </div>
477
+ </body>
478
+ </html>
479
+ eohtml
480
+ red_divs = doc.css('div.red')
481
+ assert_equal 1, red_divs.length
482
+ p_tags = red_divs.first.css('p')
483
+ assert_equal 1, p_tags.length
484
+ assert_equal 'inside red', p_tags.first.text.strip
485
+ end
486
+
487
+ def test_find_classes
488
+ doc = Nokogiri::HTML(<<-eohtml)
489
+ <html>
490
+ <body>
491
+ <p class="red">RED</p>
492
+ <p class="awesome red">RED</p>
493
+ <p class="notred">GREEN</p>
494
+ <p class="green notred">GREEN</p>
495
+ </body>
496
+ </html>
497
+ eohtml
498
+ list = doc.css('.red')
499
+ assert_equal 2, list.length
500
+ assert_equal %w{ RED RED }, list.map { |x| x.text }
501
+ end
502
+
503
+ def test_parse_can_take_io
504
+ html = nil
505
+ File.open(HTML_FILE, 'rb') { |f|
506
+ html = Nokogiri::HTML(f)
507
+ }
508
+ assert html.html?
509
+ end
510
+
511
+ def test_html?
512
+ assert !@html.xml?
513
+ assert @html.html?
514
+ end
515
+
516
+ def test_serialize
517
+ assert @html.serialize
518
+ assert @html.to_html
519
+ end
520
+
521
+ def test_empty_document
522
+ # empty document should return "" #699
523
+ assert_equal "", Nokogiri::HTML.parse(nil).text
524
+ assert_equal "", Nokogiri::HTML.parse("").text
525
+ end
526
+ end
527
+ end
528
+ end
529
+