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,14 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module HTML
5
+ class TestNamedCharacters < Nokogiri::TestCase
6
+ def test_named_character
7
+ copy = NamedCharacters.get('copy')
8
+ assert_equal 169, NamedCharacters['copy']
9
+ assert_equal copy.value, NamedCharacters['copy']
10
+ assert copy.description
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,196 @@
1
+ require "helper"
2
+
3
+ require 'nkf'
4
+
5
+ module Nokogiri
6
+ module HTML
7
+ class TestNode < Nokogiri::TestCase
8
+ def setup
9
+ super
10
+ @html = Nokogiri::HTML(<<-eohtml)
11
+ <html>
12
+ <head></head>
13
+ <body>
14
+ <div class='baz'><a href="foo" class="bar">first</a></div>
15
+ </body>
16
+ </html>
17
+ eohtml
18
+ end
19
+
20
+ def test_to_a
21
+ assert_equal [['class', 'bar'], ['href', 'foo']],@html.at('a').to_a.sort
22
+ end
23
+
24
+ def test_attr
25
+ node = @html.at('div.baz')
26
+ assert_equal node['class'], node.attr('class')
27
+ end
28
+
29
+ def test_get_attribute
30
+ element = @html.at('div')
31
+ assert_equal 'baz', element.get_attribute('class')
32
+ assert_equal 'baz', element['class']
33
+ element['href'] = "javascript:alert(\"AGGA-KA-BOO!\")"
34
+ assert_match(/%22AGGA-KA-BOO!%22/, element.to_html)
35
+ end
36
+
37
+ # The HTML parser ignores namespaces, so even properly declared namespaces
38
+ # are treated as as undeclared and have to be accessed via prefix:tagname
39
+ def test_ns_attribute
40
+ html = '<i foo:bar="baz"></i>'
41
+ doc = Nokogiri::HTML(html)
42
+ assert_equal 'baz', (doc%'i')['foo:bar']
43
+ end
44
+
45
+ def test_css_path_round_trip
46
+ doc = Nokogiri::HTML(File.read(HTML_FILE))
47
+ %w{ #header small div[2] div.post body }.each do |css_sel|
48
+ ele = doc.at css_sel
49
+ assert_equal ele, doc.at(ele.css_path), ele.css_path
50
+ end
51
+ end
52
+
53
+ def test_path_round_trip
54
+ doc = Nokogiri::HTML(File.read(HTML_FILE))
55
+ %w{ #header small div[2] div.post body }.each do |css_sel|
56
+ ele = doc.at css_sel
57
+ assert_equal ele, doc.at(ele.path), ele.path
58
+ end
59
+ end
60
+
61
+ def test_append_with_document
62
+ assert_raises(ArgumentError) do
63
+ @html.root << Nokogiri::HTML::Document.new
64
+ end
65
+ end
66
+
67
+ ###
68
+ # Make sure a document that doesn't declare a meta encoding returns
69
+ # nil.
70
+ def test_meta_encoding
71
+ assert_nil @html.meta_encoding
72
+ end
73
+
74
+ def test_description
75
+ assert desc = @html.at('a.bar').description
76
+ assert_equal 'a', desc.name
77
+ end
78
+
79
+ def test_ancestors_with_selector
80
+ assert node = @html.at('a.bar').child
81
+ assert list = node.ancestors('.baz')
82
+ assert_equal 1, list.length
83
+ assert_equal 'div', list.first.name
84
+ end
85
+
86
+ def test_matches_inside_fragment
87
+ fragment = DocumentFragment.new @html
88
+ fragment << XML::Node.new('a', @html)
89
+
90
+ a = fragment.children.last
91
+ assert a.matches?('a'), 'a should match'
92
+ end
93
+
94
+ def test_css_matches?
95
+ assert node = @html.at('a.bar')
96
+ assert node.matches?('a.bar')
97
+ end
98
+
99
+ def test_xpath_matches?
100
+ assert node = @html.at('//a')
101
+ assert node.matches?('//a')
102
+ end
103
+
104
+ def test_unlink_then_swap
105
+ node = @html.at('a')
106
+ node.unlink
107
+
108
+ another_node = @html.at('div')
109
+ assert another_node, 'should have a node'
110
+
111
+ # This used to segv
112
+ assert node.add_previous_sibling another_node
113
+ end
114
+
115
+ def test_swap
116
+ @html.at('div').swap('<a href="foo">bar</a>')
117
+ a_tag = @html.css('a').first
118
+ assert_equal 'body', a_tag.parent.name
119
+ assert_equal 0, @html.css('div').length
120
+ end
121
+
122
+ def test_swap_with_regex_characters
123
+ @html.at('div').swap('<a href="foo">ba)r</a>')
124
+ a_tag = @html.css('a').first
125
+ assert_equal 'ba)r', a_tag.text
126
+ end
127
+
128
+ def test_attribute_decodes_entities
129
+ node = @html.at('div')
130
+ node['href'] = 'foo&bar'
131
+ assert_equal 'foo&bar', node['href']
132
+ node['href'] += '&baz'
133
+ assert_equal 'foo&bar&baz', node['href']
134
+ end
135
+
136
+ def test_parse_config_option
137
+ node = @html.at('div')
138
+ options = nil
139
+ node.parse("<div></div>") do |config|
140
+ options = config
141
+ end
142
+ assert_equal Nokogiri::XML::ParseOptions::DEFAULT_HTML, options.to_i
143
+ end
144
+
145
+ def test_fragment_handler_does_not_regurge_on_invalid_attributes
146
+ iframe = %Q{<iframe style="width: 0%; height: 0px" src="http://someurl" allowtransparency></iframe>}
147
+ assert @html.at('div').fragment(iframe)
148
+ end
149
+
150
+ def test_fragment
151
+ fragment = @html.fragment(<<-eohtml)
152
+ hello
153
+ <div class="foo">
154
+ <p>bar</p>
155
+ </div>
156
+ world
157
+ eohtml
158
+ assert_match(/^hello/, fragment.inner_html.strip)
159
+ assert_equal 3, fragment.children.length
160
+ assert p_tag = fragment.css('p').first
161
+ assert_equal 'div', p_tag.parent.name
162
+ assert_equal 'foo', p_tag.parent['class']
163
+ end
164
+
165
+ def test_fragment_serialization
166
+ fragment = Nokogiri::HTML.fragment("<div>foo</div>")
167
+ assert_equal "<div>foo</div>", fragment.serialize.chomp
168
+ assert_equal "<div>foo</div>", fragment.to_xml.chomp
169
+ assert_equal "<div>foo</div>", fragment.inner_html
170
+ assert_equal "<div>foo</div>", fragment.to_html
171
+ assert_equal "<div>foo</div>", fragment.to_s
172
+ end
173
+
174
+ def test_to_html_does_not_contain_entities
175
+ return unless defined?(NKF) # NKF is not implemented on Rubinius as of 2009-11-23
176
+ html = NKF.nkf("-e --msdos", <<-EOH)
177
+ <html><body>
178
+ <p> test paragraph
179
+ foo bar </p>
180
+ </body></html>
181
+ EOH
182
+ nokogiri = Nokogiri::HTML.parse(html)
183
+
184
+ if RUBY_PLATFORM =~ /java/
185
+ # NKF linebreak modes are not supported as of jruby 1.2
186
+ # see http://jira.codehaus.org/browse/JRUBY-3602 for status
187
+ assert_equal "<p>testparagraph\nfoobar</p>",
188
+ nokogiri.at("p").to_html.gsub(/ /, '')
189
+ else
190
+ assert_equal "<p>testparagraph\r\nfoobar</p>",
191
+ nokogiri.at("p").to_html.gsub(/ /, '')
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ require "helper"
3
+
4
+ module Nokogiri
5
+ module HTML
6
+ if RUBY_VERSION =~ /^1\.9/
7
+ class TestNodeEncoding < Nokogiri::TestCase
8
+ def test_inner_html
9
+ doc = Nokogiri::HTML File.open(SHIFT_JIS_HTML, 'rb')
10
+
11
+ hello = "こんにちは"
12
+
13
+ contents = doc.at('h2').inner_html
14
+ assert_equal doc.encoding, contents.encoding.name
15
+ assert_match hello.encode('Shift_JIS'), contents
16
+
17
+ contents = doc.at('h2').inner_html(:encoding => 'UTF-8')
18
+ assert_match hello, contents
19
+
20
+ doc.encoding = 'UTF-8'
21
+ contents = doc.at('h2').inner_html
22
+ assert_match hello, contents
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestAdditionalNamespacesInBuilderDoc < Nokogiri::TestCase
6
+ def test_builder_namespaced_root_node_ns
7
+ b = Nokogiri::XML::Builder.new do |x|
8
+ x[:foo].RDF(:'xmlns:foo' => 'http://foo.io')
9
+ end
10
+ assert_equal 'http://foo.io', b.doc.root.namespace.href
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,75 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestNamespacesInBuilderDoc < Nokogiri::TestCase
6
+ def setup
7
+ super
8
+ b = Nokogiri::XML::Builder.new do |x|
9
+ x.fruit(:xmlns => 'ns:fruit', :'xmlns:veg' => 'ns:veg', :'xmlns:xlink' => 'http://www.w3.org/1999/xlink') do
10
+ x.pear { x.bosc }
11
+ x.orange
12
+ x[:veg].carrot do
13
+ x.cheese(:xmlns => 'ns:dairy', :'xlink:href' => 'http://example.com/cheese/')
14
+ end
15
+ x[:meat].bacon(:'xmlns:meat' => 'ns:meat') do
16
+ x.apple :count => 2
17
+ x[:veg].tomato
18
+ end
19
+ end
20
+ end
21
+
22
+ @doc = b.doc
23
+ end
24
+
25
+ def check_namespace e
26
+ e.namespace.nil? ? nil : e.namespace.href
27
+ end
28
+
29
+ def test_builder_default_ns
30
+ assert_equal 'ns:fruit', check_namespace(@doc.root)
31
+ end
32
+ def test_builder_parent_default_ns
33
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0])
34
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1])
35
+ end
36
+ def test_builder_grandparent_default_ns
37
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
38
+ end
39
+ def test_builder_parent_nondefault_ns
40
+ assert_equal 'ns:veg', check_namespace(@doc.root.elements[2])
41
+ end
42
+ def test_builder_single_decl_ns_1
43
+ assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
44
+ end
45
+ def test_builder_nondefault_attr_ns
46
+ assert_equal 'http://www.w3.org/1999/xlink',
47
+ check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
48
+ end
49
+ def test_builder_single_decl_ns_2
50
+ assert_equal 'ns:meat', check_namespace(@doc.root.elements[3])
51
+ end
52
+ def test_builder_buried_default_ns
53
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0])
54
+ end
55
+ def test_builder_buried_decl_ns
56
+ assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1])
57
+ end
58
+ def test_builder_namespace_count
59
+ n = @doc.root.clone
60
+ n.children.each(&:remove)
61
+ ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
62
+ assert_equal 3, ns_attrs.length
63
+ end
64
+
65
+ def test_builder_namespaced_attribute_on_unparented_node
66
+ doc = Nokogiri::XML::Builder.new do |x|
67
+ x.root('xmlns:foo' => 'http://foo.io') {
68
+ x.obj('foo:attr' => 'baz')
69
+ }
70
+ end.doc
71
+ assert_equal 'http://foo.io', doc.root.children.first.attribute_nodes.first.namespace.href
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,31 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestNamespacesInClonedDoc < Nokogiri::TestCase
6
+ def setup
7
+ super
8
+ b = Nokogiri::XML::Builder.new do |xml|
9
+ xml.mods("xmlns"=>"http://www.loc.gov/mods/v3") {
10
+ xml.name(:type=>"personal") {
11
+ xml.namePart()
12
+ }
13
+ }
14
+ end
15
+
16
+ @doc = b.doc
17
+ @clone = Nokogiri::XML(@doc.to_s)
18
+ end
19
+
20
+ def check_namespace e
21
+ e.namespace.nil? ? nil : e.namespace.href
22
+ end
23
+
24
+ def test_namespace_ns
25
+ xpath = '//oxns:name[@type="personal"]'
26
+ namespaces = {'oxns' => "http://www.loc.gov/mods/v3"}
27
+ assert_equal @doc.xpath(xpath, namespaces).length, @clone.xpath(xpath, namespaces).length
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,75 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestNamespacesInCreatedDoc < Nokogiri::TestCase
6
+ def setup
7
+ super
8
+ @doc = Nokogiri::XML('<fruit xmlns="ns:fruit" xmlns:veg="ns:veg" xmlns:xlink="http://www.w3.org/1999/xlink"/>')
9
+ pear = @doc.create_element('pear')
10
+ bosc = @doc.create_element('bosc')
11
+ pear.add_child(bosc)
12
+ @doc.root << pear
13
+ @doc.root.add_child('<orange/>')
14
+ carrot = @doc.create_element('veg:carrot')
15
+ @doc.root << carrot
16
+ cheese = @doc.create_element('cheese', :xmlns => 'ns:dairy', :'xlink:href' => 'http://example.com/cheese/')
17
+ carrot << cheese
18
+ bacon = @doc.create_element('meat:bacon', :'xmlns:meat' => 'ns:meat')
19
+ apple = @doc.create_element('apple')
20
+ apple['count'] = 2
21
+ bacon << apple
22
+ tomato = @doc.create_element('veg:tomato')
23
+ bacon << tomato
24
+ @doc.root << bacon
25
+ end
26
+
27
+ def check_namespace e
28
+ e.namespace.nil? ? nil : e.namespace.href
29
+ end
30
+
31
+ def test_created_default_ns
32
+ assert_equal 'ns:fruit', check_namespace(@doc.root)
33
+ end
34
+ def test_created_parent_default_ns
35
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0])
36
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1])
37
+ end
38
+ def test_created_grandparent_default_ns
39
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
40
+ end
41
+ def test_created_parent_nondefault_ns
42
+ assert_equal 'ns:veg', check_namespace(@doc.root.elements[2])
43
+ end
44
+ def test_created_single_decl_ns_1
45
+ assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
46
+ end
47
+ def test_created_nondefault_attr_ns
48
+ assert_equal 'http://www.w3.org/1999/xlink',
49
+ check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
50
+ end
51
+ def test_created_single_decl_ns_2
52
+ assert_equal 'ns:meat', check_namespace(@doc.root.elements[3])
53
+ end
54
+ def test_created_buried_default_ns
55
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0])
56
+ end
57
+ def test_created_buried_decl_ns
58
+ assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1])
59
+ end
60
+ def test_created_namespace_count
61
+ n = @doc.root.clone
62
+ n.children.each(&:remove)
63
+ ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
64
+ assert_equal 3, ns_attrs.length
65
+ end
66
+
67
+ def test_created_namespaced_attribute_on_unparented_node
68
+ doc = Nokogiri::XML('<root xmlns:foo="http://foo.io"/>')
69
+ node = @doc.create_element('obj', 'foo:attr' => 'baz')
70
+ doc.root.add_child(node)
71
+ assert_equal 'http://foo.io', doc.root.children.first.attribute_nodes.first.namespace.href
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,66 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestNamespacesInParsedDoc < Nokogiri::TestCase
6
+ def setup
7
+ super
8
+ @doc = Nokogiri::XML <<-eoxml
9
+ <fruit xmlns="ns:fruit" xmlns:veg="ns:veg" xmlns:xlink="http://www.w3.org/1999/xlink">
10
+ <pear>
11
+ <bosc/>
12
+ </pear>
13
+ <orange/>
14
+ <veg:carrot>
15
+ <cheese xmlns="ns:dairy" xlink:href="http://example.com/cheese/"/>
16
+ </veg:carrot>
17
+ <meat:bacon xmlns:meat="ns:meat">
18
+ <apple count="2"/>
19
+ <veg:tomato/>
20
+ </meat:bacon>
21
+ </fruit>
22
+ eoxml
23
+ end
24
+
25
+ def check_namespace e
26
+ e.namespace.nil? ? nil : e.namespace.href
27
+ end
28
+
29
+ def test_parsed_default_ns
30
+ assert_equal 'ns:fruit', check_namespace(@doc.root)
31
+ end
32
+ def test_parsed_parent_default_ns
33
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0])
34
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1])
35
+ end
36
+ def test_parsed_grandparent_default_ns
37
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
38
+ end
39
+ def test_parsed_parent_nondefault_ns
40
+ assert_equal 'ns:veg', check_namespace(@doc.root.elements[2])
41
+ end
42
+ def test_parsed_single_decl_ns_1
43
+ assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
44
+ end
45
+ def test_parsed_nondefault_attr_ns
46
+ assert_equal 'http://www.w3.org/1999/xlink',
47
+ check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
48
+ end
49
+ def test_parsed_single_decl_ns_2
50
+ assert_equal 'ns:meat', check_namespace(@doc.root.elements[3])
51
+ end
52
+ def test_parsed_buried_default_ns
53
+ assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0])
54
+ end
55
+ def test_parsed_buried_decl_ns
56
+ assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1])
57
+ end
58
+ def test_parsed_namespace_count
59
+ n = @doc.root.clone
60
+ n.children.each(&:remove)
61
+ ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
62
+ assert_equal 3, ns_attrs.length
63
+ end
64
+ end
65
+ end
66
+ end