nokogiri 1.9.0.rc1 → 1.9.0

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 (137) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nokogiri/css/parser.rb +61 -61
  3. data/lib/nokogiri/version.rb +1 -1
  4. metadata +4 -146
  5. data/.autotest +0 -22
  6. data/.cross_rubies +0 -8
  7. data/.editorconfig +0 -17
  8. data/.gemtest +0 -0
  9. data/.travis.yml +0 -63
  10. data/CHANGELOG.md +0 -1402
  11. data/CONTRIBUTING.md +0 -42
  12. data/C_CODING_STYLE.rdoc +0 -33
  13. data/Gemfile +0 -23
  14. data/Gemfile-libxml-ruby +0 -3
  15. data/Manifest.txt +0 -371
  16. data/ROADMAP.md +0 -111
  17. data/Rakefile +0 -358
  18. data/SECURITY.md +0 -19
  19. data/STANDARD_RESPONSES.md +0 -47
  20. data/Y_U_NO_GEMSPEC.md +0 -155
  21. data/appveyor.yml +0 -29
  22. data/build_all +0 -48
  23. data/patches/sort-patches-by-date +0 -25
  24. data/suppressions/README.txt +0 -1
  25. data/suppressions/nokogiri_ruby-2.supp +0 -10
  26. data/tasks/test.rb +0 -100
  27. data/test/css/test_nthiness.rb +0 -226
  28. data/test/css/test_parser.rb +0 -386
  29. data/test/css/test_tokenizer.rb +0 -215
  30. data/test/css/test_xpath_visitor.rb +0 -96
  31. data/test/decorators/test_slop.rb +0 -23
  32. data/test/files/2ch.html +0 -108
  33. data/test/files/GH_1042.html +0 -18
  34. data/test/files/address_book.rlx +0 -12
  35. data/test/files/address_book.xml +0 -10
  36. data/test/files/atom.xml +0 -344
  37. data/test/files/bar/bar.xsd +0 -4
  38. data/test/files/bogus.xml +0 -0
  39. data/test/files/dont_hurt_em_why.xml +0 -422
  40. data/test/files/encoding.html +0 -82
  41. data/test/files/encoding.xhtml +0 -84
  42. data/test/files/exslt.xml +0 -8
  43. data/test/files/exslt.xslt +0 -35
  44. data/test/files/foo/foo.xsd +0 -4
  45. data/test/files/metacharset.html +0 -10
  46. data/test/files/namespace_pressure_test.xml +0 -1684
  47. data/test/files/noencoding.html +0 -47
  48. data/test/files/po.xml +0 -32
  49. data/test/files/po.xsd +0 -66
  50. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  51. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  52. data/test/files/saml/xenc_schema.xsd +0 -146
  53. data/test/files/saml/xmldsig_schema.xsd +0 -318
  54. data/test/files/shift_jis.html +0 -10
  55. data/test/files/shift_jis.xml +0 -5
  56. data/test/files/shift_jis_no_charset.html +0 -9
  57. data/test/files/slow-xpath.xml +0 -25509
  58. data/test/files/snuggles.xml +0 -3
  59. data/test/files/staff.dtd +0 -10
  60. data/test/files/staff.xml +0 -59
  61. data/test/files/staff.xslt +0 -32
  62. data/test/files/test_document_url/bar.xml +0 -2
  63. data/test/files/test_document_url/document.dtd +0 -4
  64. data/test/files/test_document_url/document.xml +0 -6
  65. data/test/files/tlm.html +0 -851
  66. data/test/files/to_be_xincluded.xml +0 -2
  67. data/test/files/valid_bar.xml +0 -2
  68. data/test/files/xinclude.xml +0 -4
  69. data/test/helper.rb +0 -271
  70. data/test/html/sax/test_parser.rb +0 -168
  71. data/test/html/sax/test_parser_context.rb +0 -46
  72. data/test/html/sax/test_parser_text.rb +0 -163
  73. data/test/html/sax/test_push_parser.rb +0 -87
  74. data/test/html/test_attributes.rb +0 -85
  75. data/test/html/test_builder.rb +0 -164
  76. data/test/html/test_document.rb +0 -722
  77. data/test/html/test_document_encoding.rb +0 -143
  78. data/test/html/test_document_fragment.rb +0 -310
  79. data/test/html/test_element_description.rb +0 -105
  80. data/test/html/test_named_characters.rb +0 -14
  81. data/test/html/test_node.rb +0 -212
  82. data/test/html/test_node_encoding.rb +0 -91
  83. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  84. data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
  85. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  86. data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
  87. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  88. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
  89. data/test/namespaces/test_namespaces_preservation.rb +0 -31
  90. data/test/test_convert_xpath.rb +0 -135
  91. data/test/test_css_cache.rb +0 -47
  92. data/test/test_encoding_handler.rb +0 -48
  93. data/test/test_memory_leak.rb +0 -226
  94. data/test/test_nokogiri.rb +0 -138
  95. data/test/test_soap4r_sax.rb +0 -52
  96. data/test/test_xslt_transforms.rb +0 -314
  97. data/test/xml/node/test_save_options.rb +0 -28
  98. data/test/xml/node/test_subclass.rb +0 -44
  99. data/test/xml/sax/test_parser.rb +0 -402
  100. data/test/xml/sax/test_parser_context.rb +0 -115
  101. data/test/xml/sax/test_parser_text.rb +0 -202
  102. data/test/xml/sax/test_push_parser.rb +0 -265
  103. data/test/xml/test_attr.rb +0 -96
  104. data/test/xml/test_attribute_decl.rb +0 -86
  105. data/test/xml/test_builder.rb +0 -353
  106. data/test/xml/test_c14n.rb +0 -180
  107. data/test/xml/test_cdata.rb +0 -54
  108. data/test/xml/test_comment.rb +0 -40
  109. data/test/xml/test_document.rb +0 -982
  110. data/test/xml/test_document_encoding.rb +0 -31
  111. data/test/xml/test_document_fragment.rb +0 -312
  112. data/test/xml/test_dtd.rb +0 -187
  113. data/test/xml/test_dtd_encoding.rb +0 -31
  114. data/test/xml/test_element_content.rb +0 -56
  115. data/test/xml/test_element_decl.rb +0 -73
  116. data/test/xml/test_entity_decl.rb +0 -122
  117. data/test/xml/test_entity_reference.rb +0 -262
  118. data/test/xml/test_namespace.rb +0 -96
  119. data/test/xml/test_node.rb +0 -1379
  120. data/test/xml/test_node_attributes.rb +0 -115
  121. data/test/xml/test_node_encoding.rb +0 -75
  122. data/test/xml/test_node_inheritance.rb +0 -32
  123. data/test/xml/test_node_reparenting.rb +0 -661
  124. data/test/xml/test_node_set.rb +0 -828
  125. data/test/xml/test_parse_options.rb +0 -64
  126. data/test/xml/test_processing_instruction.rb +0 -30
  127. data/test/xml/test_reader.rb +0 -620
  128. data/test/xml/test_reader_encoding.rb +0 -134
  129. data/test/xml/test_relax_ng.rb +0 -60
  130. data/test/xml/test_schema.rb +0 -142
  131. data/test/xml/test_syntax_error.rb +0 -36
  132. data/test/xml/test_text.rb +0 -69
  133. data/test/xml/test_unparented_node.rb +0 -483
  134. data/test/xml/test_xinclude.rb +0 -83
  135. data/test/xml/test_xpath.rb +0 -470
  136. data/test/xslt/test_custom_functions.rb +0 -133
  137. data/test/xslt/test_exception_handling.rb +0 -37
@@ -1,105 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module HTML
5
- class TestElementDescription < Nokogiri::TestCase
6
- def test_fetch_nonexistent
7
- assert_nil ElementDescription['foo']
8
- end
9
-
10
- def test_fetch_element_description
11
- assert desc = ElementDescription['a']
12
- assert_instance_of ElementDescription, desc
13
- end
14
-
15
- def test_name
16
- assert_equal 'a', ElementDescription['a'].name
17
- end
18
-
19
- def test_implied_start_tag?
20
- assert !ElementDescription['a'].implied_start_tag?
21
- end
22
-
23
- def test_implied_end_tag?
24
- assert !ElementDescription['a'].implied_end_tag?
25
- assert ElementDescription['p'].implied_end_tag?
26
- end
27
-
28
- def test_save_end_tag?
29
- assert !ElementDescription['a'].save_end_tag?
30
- assert ElementDescription['br'].save_end_tag?
31
- end
32
-
33
- def test_empty?
34
- assert ElementDescription['br'].empty?
35
- assert !ElementDescription['a'].empty?
36
- end
37
-
38
- def test_deprecated?
39
- assert ElementDescription['applet'].deprecated?
40
- assert !ElementDescription['br'].deprecated?
41
- end
42
-
43
- def test_inline?
44
- assert ElementDescription['a'].inline?
45
- assert !ElementDescription['div'].inline?
46
- end
47
-
48
- def test_block?
49
- element = ElementDescription['a']
50
- assert_equal(!element.inline?, element.block?)
51
- end
52
-
53
- def test_description
54
- assert ElementDescription['a'].description
55
- end
56
-
57
- def test_subelements
58
- sub_elements = ElementDescription['body'].sub_elements
59
- if Nokogiri.uses_libxml? && Nokogiri::LIBXML_VERSION >= '2.7.7'
60
- assert_equal 65, sub_elements.length
61
- elsif Nokogiri.uses_libxml?
62
- assert_equal 61, sub_elements.length
63
- else
64
- assert sub_elements.length > 0
65
- end
66
- end
67
-
68
- def test_default_sub_element
69
- assert_equal 'div', ElementDescription['body'].default_sub_element
70
- end
71
-
72
- def test_null_default_sub_element
73
- doc = Nokogiri::HTML('foo')
74
- doc.root.description.default_sub_element
75
- end
76
-
77
- def test_optional_attributes
78
- attrs = ElementDescription['table'].optional_attributes
79
- assert attrs
80
- end
81
-
82
- def test_deprecated_attributes
83
- attrs = ElementDescription['table'].deprecated_attributes
84
- assert attrs
85
- assert_equal 2, attrs.length
86
- end
87
-
88
- def test_required_attributes
89
- attrs = ElementDescription['table'].required_attributes
90
- assert attrs
91
- assert_equal 0, attrs.length
92
- end
93
-
94
- def test_inspect
95
- desc = ElementDescription['input']
96
- assert_match desc.name, desc.inspect
97
- end
98
-
99
- def test_to_s
100
- desc = ElementDescription['input']
101
- assert_match desc.name, desc.to_s
102
- end
103
- end
104
- end
105
- end
@@ -1,14 +0,0 @@
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
@@ -1,212 +0,0 @@
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
-
196
- def test_GH_1042
197
- file = File.join(ASSETS_DIR, 'GH_1042.html');
198
- html = Nokogiri::HTML(File.read(file))
199
- table = html.xpath("//table")[1]
200
- trs = table.xpath("tr").drop(1)
201
-
202
- # the jruby inplementation of drop uses dup() on the IRubyObject (which
203
- # is NOT the same dup() method on the ruby Object) which produces a
204
- # shallow clone. a shallow of valid XMLNode triggers several
205
- # NullPointerException on inspect() since loads of invariants
206
- # are not set. the fix for GH1042 ensures a proper working clone.
207
- assert_nothing_raised do
208
- trs.inspect
209
- end
210
- end
211
- end
212
- end
@@ -1,91 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "helper"
3
-
4
- module Nokogiri
5
- module HTML
6
- class TestNodeEncoding < Nokogiri::TestCase
7
- def setup
8
- super
9
- @html = Nokogiri::HTML(File.open(NICH_FILE, "rb"))
10
- end
11
-
12
- def test_get_attribute
13
- node = @html.css('a').first
14
- assert_equal 'UTF-8', node['href'].encoding.name
15
- end
16
-
17
- def test_text_encoding_is_utf_8
18
- assert_equal 'UTF-8', @html.text.encoding.name
19
- end
20
-
21
- def test_serialize_encoding_html
22
- assert_equal @html.encoding.downcase,
23
- @html.serialize.encoding.name.downcase
24
-
25
- @doc = Nokogiri::HTML(@html.serialize)
26
- assert_equal @html.serialize, @doc.serialize
27
- end
28
-
29
- def test_default_encoding
30
- doc = Nokogiri::HTML(nil)
31
- assert_nil doc.encoding
32
- assert_equal 'UTF-8', doc.serialize.encoding.name
33
- end
34
-
35
- def test_encode_special_chars
36
- foo = @html.css('a').first.encode_special_chars('foo')
37
- assert_equal 'UTF-8', foo.encoding.name
38
- end
39
-
40
- def test_content
41
- node = @html.css('a').first
42
- assert_equal 'UTF-8', node.content.encoding.name
43
- end
44
-
45
- def test_name
46
- node = @html.css('a').first
47
- assert_equal 'UTF-8', node.name.encoding.name
48
- end
49
-
50
- def test_path
51
- node = @html.css('a').first
52
- assert_equal 'UTF-8', node.path.encoding.name
53
- end
54
-
55
- def test_inner_html
56
- doc = Nokogiri::HTML File.open(SHIFT_JIS_HTML, 'rb')
57
-
58
- hello = "こんにちは"
59
-
60
- contents = doc.at('h2').inner_html
61
- assert_equal doc.encoding, contents.encoding.name
62
- assert_match hello.encode('Shift_JIS'), contents
63
-
64
- contents = doc.at('h2').inner_html(:encoding => 'UTF-8')
65
- assert_match hello, contents
66
-
67
- doc.encoding = 'UTF-8'
68
- contents = doc.at('h2').inner_html
69
- assert_match hello, contents
70
- end
71
-
72
- def test_encoding_GH_1113
73
- doc = Nokogiri::HTML::Document.new
74
- hex = '<p>&#x1f340;</p>'
75
- decimal = '<p>&#127808;</p>'
76
- encoded = '<p>🍀</p>'
77
-
78
- doc.encoding = 'UTF-8'
79
- [hex, decimal, encoded].each do |document|
80
- assert_equal encoded, doc.fragment(document).to_s
81
- end
82
-
83
- doc.encoding = 'US-ASCII'
84
- expected = Nokogiri.jruby? ? hex : decimal
85
- [hex, decimal].each do |document|
86
- assert_equal expected, doc.fragment(document).to_s
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,14 +0,0 @@
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
@@ -1,24 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestAliasedDefaultNamespaces < Nokogiri::TestCase
6
- def setup
7
- super
8
- end
9
-
10
- def test_alised_default_namespace_on_parse
11
- doc = Nokogiri::XML('<apple xmlns="ns:fruit" xmlns:fruit="ns:fruit" />')
12
- ns = doc.root.namespaces
13
- assert_equal "ns:fruit", ns["xmlns:fruit"], "Should have parsed aliased default namespace"
14
- end
15
-
16
- def test_add_aliased_default_namespace
17
- doc = Nokogiri::XML('<apple xmlns="ns:fruit" />')
18
- doc.root.add_namespace_definition("fruit", "ns:fruit")
19
- ns = doc.root.namespaces
20
- assert_equal "ns:fruit", ns["xmlns:fruit"],"Should have added aliased default namespace"
21
- end
22
- end
23
- end
24
- end