nokogiri 1.8.5 → 1.9.1

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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/ext/nokogiri/extconf.rb +10 -6
  4. data/ext/nokogiri/xml_attr.c +26 -21
  5. data/ext/nokogiri/xml_document.c +4 -1
  6. data/ext/nokogiri/xml_namespace.c +3 -3
  7. data/ext/nokogiri/xml_namespace.h +1 -2
  8. data/ext/nokogiri/xml_node.c +55 -15
  9. data/lib/nokogiri/css/parser.rb +61 -61
  10. data/lib/nokogiri/version.rb +1 -1
  11. data/lib/nokogiri/xml/document_fragment.rb +11 -0
  12. data/lib/nokogiri/xml/node.rb +12 -0
  13. data/lib/nokogiri/xml/node_set.rb +4 -8
  14. metadata +17 -153
  15. data/.autotest +0 -22
  16. data/.cross_rubies +0 -8
  17. data/.editorconfig +0 -17
  18. data/.gemtest +0 -0
  19. data/.travis.yml +0 -63
  20. data/CHANGELOG.md +0 -1368
  21. data/CONTRIBUTING.md +0 -42
  22. data/C_CODING_STYLE.rdoc +0 -33
  23. data/Gemfile +0 -23
  24. data/Gemfile-libxml-ruby +0 -3
  25. data/Manifest.txt +0 -370
  26. data/ROADMAP.md +0 -111
  27. data/Rakefile +0 -348
  28. data/SECURITY.md +0 -19
  29. data/STANDARD_RESPONSES.md +0 -47
  30. data/Y_U_NO_GEMSPEC.md +0 -155
  31. data/appveyor.yml +0 -29
  32. data/build_all +0 -44
  33. data/patches/sort-patches-by-date +0 -25
  34. data/suppressions/README.txt +0 -1
  35. data/suppressions/nokogiri_ruby-2.supp +0 -10
  36. data/tasks/test.rb +0 -100
  37. data/test/css/test_nthiness.rb +0 -226
  38. data/test/css/test_parser.rb +0 -386
  39. data/test/css/test_tokenizer.rb +0 -215
  40. data/test/css/test_xpath_visitor.rb +0 -96
  41. data/test/decorators/test_slop.rb +0 -23
  42. data/test/files/2ch.html +0 -108
  43. data/test/files/GH_1042.html +0 -18
  44. data/test/files/address_book.rlx +0 -12
  45. data/test/files/address_book.xml +0 -10
  46. data/test/files/atom.xml +0 -344
  47. data/test/files/bar/bar.xsd +0 -4
  48. data/test/files/bogus.xml +0 -0
  49. data/test/files/dont_hurt_em_why.xml +0 -422
  50. data/test/files/encoding.html +0 -82
  51. data/test/files/encoding.xhtml +0 -84
  52. data/test/files/exslt.xml +0 -8
  53. data/test/files/exslt.xslt +0 -35
  54. data/test/files/foo/foo.xsd +0 -4
  55. data/test/files/metacharset.html +0 -10
  56. data/test/files/namespace_pressure_test.xml +0 -1684
  57. data/test/files/noencoding.html +0 -47
  58. data/test/files/po.xml +0 -32
  59. data/test/files/po.xsd +0 -66
  60. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  61. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  62. data/test/files/saml/xenc_schema.xsd +0 -146
  63. data/test/files/saml/xmldsig_schema.xsd +0 -318
  64. data/test/files/shift_jis.html +0 -10
  65. data/test/files/shift_jis.xml +0 -5
  66. data/test/files/shift_jis_no_charset.html +0 -9
  67. data/test/files/slow-xpath.xml +0 -25509
  68. data/test/files/snuggles.xml +0 -3
  69. data/test/files/staff.dtd +0 -10
  70. data/test/files/staff.xml +0 -59
  71. data/test/files/staff.xslt +0 -32
  72. data/test/files/test_document_url/bar.xml +0 -2
  73. data/test/files/test_document_url/document.dtd +0 -4
  74. data/test/files/test_document_url/document.xml +0 -6
  75. data/test/files/tlm.html +0 -851
  76. data/test/files/to_be_xincluded.xml +0 -2
  77. data/test/files/valid_bar.xml +0 -2
  78. data/test/files/xinclude.xml +0 -4
  79. data/test/helper.rb +0 -271
  80. data/test/html/sax/test_parser.rb +0 -168
  81. data/test/html/sax/test_parser_context.rb +0 -46
  82. data/test/html/sax/test_parser_text.rb +0 -163
  83. data/test/html/sax/test_push_parser.rb +0 -87
  84. data/test/html/test_attributes.rb +0 -85
  85. data/test/html/test_builder.rb +0 -164
  86. data/test/html/test_document.rb +0 -712
  87. data/test/html/test_document_encoding.rb +0 -143
  88. data/test/html/test_document_fragment.rb +0 -310
  89. data/test/html/test_element_description.rb +0 -105
  90. data/test/html/test_named_characters.rb +0 -14
  91. data/test/html/test_node.rb +0 -212
  92. data/test/html/test_node_encoding.rb +0 -91
  93. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  94. data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
  95. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  96. data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
  97. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  98. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
  99. data/test/namespaces/test_namespaces_preservation.rb +0 -31
  100. data/test/test_convert_xpath.rb +0 -135
  101. data/test/test_css_cache.rb +0 -47
  102. data/test/test_encoding_handler.rb +0 -48
  103. data/test/test_memory_leak.rb +0 -156
  104. data/test/test_nokogiri.rb +0 -138
  105. data/test/test_soap4r_sax.rb +0 -52
  106. data/test/test_xslt_transforms.rb +0 -314
  107. data/test/xml/node/test_save_options.rb +0 -28
  108. data/test/xml/node/test_subclass.rb +0 -44
  109. data/test/xml/sax/test_parser.rb +0 -402
  110. data/test/xml/sax/test_parser_context.rb +0 -115
  111. data/test/xml/sax/test_parser_text.rb +0 -202
  112. data/test/xml/sax/test_push_parser.rb +0 -265
  113. data/test/xml/test_attr.rb +0 -74
  114. data/test/xml/test_attribute_decl.rb +0 -86
  115. data/test/xml/test_builder.rb +0 -341
  116. data/test/xml/test_c14n.rb +0 -180
  117. data/test/xml/test_cdata.rb +0 -54
  118. data/test/xml/test_comment.rb +0 -40
  119. data/test/xml/test_document.rb +0 -982
  120. data/test/xml/test_document_encoding.rb +0 -31
  121. data/test/xml/test_document_fragment.rb +0 -298
  122. data/test/xml/test_dtd.rb +0 -187
  123. data/test/xml/test_dtd_encoding.rb +0 -31
  124. data/test/xml/test_element_content.rb +0 -56
  125. data/test/xml/test_element_decl.rb +0 -73
  126. data/test/xml/test_entity_decl.rb +0 -122
  127. data/test/xml/test_entity_reference.rb +0 -262
  128. data/test/xml/test_namespace.rb +0 -96
  129. data/test/xml/test_node.rb +0 -1325
  130. data/test/xml/test_node_attributes.rb +0 -115
  131. data/test/xml/test_node_encoding.rb +0 -75
  132. data/test/xml/test_node_inheritance.rb +0 -32
  133. data/test/xml/test_node_reparenting.rb +0 -592
  134. data/test/xml/test_node_set.rb +0 -809
  135. data/test/xml/test_parse_options.rb +0 -64
  136. data/test/xml/test_processing_instruction.rb +0 -30
  137. data/test/xml/test_reader.rb +0 -620
  138. data/test/xml/test_reader_encoding.rb +0 -134
  139. data/test/xml/test_relax_ng.rb +0 -60
  140. data/test/xml/test_schema.rb +0 -142
  141. data/test/xml/test_syntax_error.rb +0 -36
  142. data/test/xml/test_text.rb +0 -60
  143. data/test/xml/test_unparented_node.rb +0 -483
  144. data/test/xml/test_xinclude.rb +0 -83
  145. data/test/xml/test_xpath.rb +0 -470
  146. data/test/xslt/test_custom_functions.rb +0 -133
  147. data/test/xslt/test_exception_handling.rb +0 -37
data/tasks/test.rb DELETED
@@ -1,100 +0,0 @@
1
- namespace :test do
2
- desc "run test suite with aggressive GC"
3
- task :gc => :build do
4
- ENV['NOKOGIRI_GC'] = "true"
5
- Rake::Task["test"].invoke
6
- end
7
-
8
- task :installed do
9
- ENV['RUBY_FLAGS'] = "-w -Itest:."
10
- sh 'rake test'
11
- end
12
-
13
- desc "find call-seq in the rdoc"
14
- task :rdoc_call_seq => 'docs' do
15
- Dir['doc/**/*.html'].each { |docfile|
16
- next if docfile =~ /\.src/
17
- puts "FAIL: #{docfile}" if File.read(docfile) =~ /call-seq/
18
- }
19
- end
20
-
21
- desc "find all undocumented things"
22
- task :rdoc => 'docs' do
23
- base = File.expand_path(File.join(File.dirname(__FILE__), '..', 'doc'))
24
- require 'test/unit'
25
- test = Class.new(Test::Unit::TestCase)
26
- Dir["#{base}/**/*.html"].each { |docfile|
27
- test.class_eval(<<-eotest)
28
- def test_#{docfile.sub("#{base}/", '').gsub(/[\/\.-]/, '_')}
29
- assert_no_match(
30
- /Not documented/,
31
- File.read('#{docfile}'),
32
- '#{docfile} has undocumented things'
33
- )
34
- end
35
- eotest
36
- }
37
- end
38
-
39
- desc "Test against multiple versions of libxml2 (MULTIXML2_DIR=directory)"
40
- task :multixml2 do
41
- MULTI_XML = File.join(ENV['HOME'], '.multixml2')
42
- unless File.exists?(MULTI_XML)
43
- %w{ versions install build }.each { |x|
44
- FileUtils.mkdir_p(File.join(MULTI_XML, x))
45
- }
46
- Dir.chdir File.join(MULTI_XML, 'versions') do
47
- require 'net/ftp'
48
- puts "Contacting xmlsoft.org ..."
49
- ftp = Net::FTP.new('xmlsoft.org')
50
- ftp.login('anonymous', 'anonymous')
51
- ftp.chdir('libxml2')
52
- ftp.list('libxml2-2.*.tar.gz').each do |x|
53
- file = x[/[^\s]*$/]
54
- puts "Downloading #{file}"
55
- ftp.getbinaryfile(file)
56
- end
57
- end
58
- end
59
-
60
- # Build any libxml2 versions in $HOME/.multixml2/versions that
61
- # haven't been built yet
62
- Dir[File.join(MULTI_XML, 'versions','*.tar.gz')].each do |f|
63
- filename = File.basename(f, '.tar.gz')
64
-
65
- install_dir = File.join(MULTI_XML, 'install', filename)
66
- next if File.exists?(install_dir)
67
-
68
- Dir.chdir File.join(MULTI_XML, 'versions') do
69
- system "tar zxvf #{f} -C #{File.join(MULTI_XML, 'build')}"
70
- end
71
-
72
- Dir.chdir File.join(MULTI_XML, 'build', filename) do
73
- system "./configure --without-http --prefix=#{install_dir}"
74
- system "make && make install"
75
- end
76
- end
77
-
78
- test_results = {}
79
- libxslt = Dir[File.join(MULTI_XML, 'install', 'libxslt*')].first
80
-
81
- directories = ENV['MULTIXML2_DIR'] ? [ENV['MULTIXML2_DIR']] : Dir[File.join(MULTI_XML, 'install', '*')]
82
- directories.sort.reverse_each do |xml2_version|
83
- next unless xml2_version =~ /libxml2/
84
- extopts = "--with-xml2-include=#{xml2_version}/include/libxml2 --with-xml2-lib=#{xml2_version}/lib --with-xslt-dir=#{libxslt} --with-iconv-dir=/usr"
85
- cmd = "#{$0} clean test EXTOPTS='#{extopts}' LD_LIBRARY_PATH='#{xml2_version}/lib'"
86
-
87
- version = File.basename(xml2_version)
88
- result = system(cmd)
89
- test_results[version] = {
90
- :result => result,
91
- :cmd => cmd
92
- }
93
- end
94
- test_results.sort_by { |k,v| k }.each do |k,v|
95
- passed = v[:result]
96
- puts "#{k}: #{passed ? 'PASS' : 'FAIL'}"
97
- puts "repro: #{v[:cmd]}" unless passed
98
- end
99
- end
100
- end
@@ -1,226 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module CSS
5
- class TestNthiness < Nokogiri::TestCase
6
- def setup
7
- super
8
- doc = <<EOF
9
- <html>
10
- <table>
11
- <tr><td>row1 </td></tr>
12
- <tr><td>row2 </td></tr>
13
- <tr><td>row3 </td></tr>
14
- <tr><td>row4 </td></tr>
15
- <tr><td>row5 </td></tr>
16
- <tr><td>row6 </td></tr>
17
- <tr><td>row7 </td></tr>
18
- <tr><td>row8 </td></tr>
19
- <tr><td>row9 </td></tr>
20
- <tr><td>row10 </td></tr>
21
- <tr><td>row11 </td></tr>
22
- <tr><td>row12 </td></tr>
23
- <tr><td>row13 </td></tr>
24
- <tr><td>row14 </td></tr>
25
- </table>
26
- <div>
27
- <b>bold1 </b>
28
- <i>italic1 </i>
29
- <b class="a">bold2 </b>
30
- <em class="a">emphasis1 </em>
31
- <i>italic2 </i>
32
- <p>para1 </p>
33
- <b class="a">bold3 </b>
34
- </div>
35
- <div>
36
- <i class="b">italic3 </i>
37
- <em>emphasis2 </em>
38
- <i class="b">italic4 </i>
39
- <em>emphasis3 </em>
40
- <i class="c">italic5 </i>
41
- <span><i class="b">italic6 </i></span>
42
- <i>italic7 </i>
43
- </div>
44
- <div>
45
- <p>para2 </p>
46
- <p>para3 </p>
47
- </div>
48
- <div>
49
- <p>para4 </p>
50
- </div>
51
-
52
- <div>
53
- <h2></h2>
54
- <h1 class='c'>header1 </h1>
55
- <h2></h2>
56
- </div>
57
- <div>
58
- <h1 class='c'>header2 </h1>
59
- <h1 class='c'>header3 </h1>
60
- </div>
61
- <div>
62
- <h1 class='c'>header4</h1>
63
- </div>
64
-
65
- <p class='empty'></p>
66
- <p class='not-empty'><b></b></p>
67
- </html>
68
- EOF
69
- @parser = Nokogiri.HTML doc
70
- end
71
-
72
-
73
- def test_even
74
- assert_result_rows [2,4,6,8,10,12,14], @parser.search("table//tr:nth(even)")
75
- end
76
-
77
- def test_odd
78
- assert_result_rows [1,3,5,7,9,11,13], @parser.search("table//tr:nth(odd)")
79
- end
80
-
81
- def test_n
82
- assert_result_rows((1..14).to_a, @parser.search("table//tr:nth(n)"))
83
- end
84
-
85
- def test_2n
86
- assert_equal @parser.search("table//tr:nth(even)").inner_text, @parser.search("table//tr:nth(2n)").inner_text
87
- end
88
-
89
- def test_2np1
90
- assert_equal @parser.search("table//tr:nth(odd)").inner_text, @parser.search("table//tr:nth(2n+1)").inner_text
91
- end
92
-
93
- def test_4np3
94
- assert_result_rows [3,7,11], @parser.search("table//tr:nth(4n+3)")
95
- end
96
-
97
- def test_3np4
98
- assert_result_rows [4,7,10,13], @parser.search("table//tr:nth(3n+4)")
99
- end
100
-
101
- def test_mnp3
102
- assert_result_rows [1,2,3], @parser.search("table//tr:nth(-n+3)")
103
- end
104
-
105
- def test_4nm1
106
- assert_result_rows [3,7,11], @parser.search("table//tr:nth(4n-1)")
107
- end
108
-
109
- def test_np3
110
- assert_result_rows [3,4,5,6,7,8,9,10,11,12,13,14], @parser.search("table//tr:nth(n+3)")
111
- end
112
-
113
- def test_first
114
- assert_result_rows [1], @parser.search("table//tr:first")
115
- assert_result_rows [1], @parser.search("table//tr:first()")
116
- end
117
-
118
- def test_last
119
- assert_result_rows [14], @parser.search("table//tr:last")
120
- assert_result_rows [14], @parser.search("table//tr:last()")
121
- end
122
-
123
- def test_first_child
124
- assert_result_rows [1], @parser.search("div/b:first-child"), "bold"
125
- assert_result_rows [1], @parser.search("table//tr:first-child")
126
- assert_result_rows [2,4], @parser.search("div/h1.c:first-child"), "header"
127
- end
128
-
129
- def test_last_child
130
- assert_result_rows [3], @parser.search("div/b:last-child"), "bold"
131
- assert_result_rows [14], @parser.search("table//tr:last-child")
132
- assert_result_rows [3,4], @parser.search("div/h1.c:last-child"), "header"
133
- end
134
-
135
- def test_nth_child
136
- assert_result_rows [2], @parser.search("div/b:nth-child(3)"), "bold"
137
- assert_result_rows [5], @parser.search("table//tr:nth-child(5)")
138
- assert_result_rows [1,3], @parser.search("div/h1.c:nth-child(2)"), "header"
139
- assert_result_rows [3,4], @parser.search("div/i.b:nth-child(2n+1)"), "italic"
140
- end
141
-
142
- def test_first_of_type
143
- assert_result_rows [1], @parser.search("table//tr:first-of-type")
144
- assert_result_rows [1], @parser.search("div/b:first-of-type"), "bold"
145
- assert_result_rows [2], @parser.search("div/b.a:first-of-type"), "bold"
146
- assert_result_rows [3], @parser.search("div/i.b:first-of-type"), "italic"
147
- end
148
-
149
- def test_last_of_type
150
- assert_result_rows [14], @parser.search("table//tr:last-of-type")
151
- assert_result_rows [3], @parser.search("div/b:last-of-type"), "bold"
152
- assert_result_rows [2,7], @parser.search("div/i:last-of-type"), "italic"
153
- assert_result_rows [2,6,7], @parser.search("div i:last-of-type"), "italic"
154
- assert_result_rows [4], @parser.search("div/i.b:last-of-type"), "italic"
155
- end
156
-
157
- def test_nth_of_type
158
- assert_result_rows [1], @parser.search("div/b:nth-of-type(1)"), "bold"
159
- assert_result_rows [2], @parser.search("div/b:nth-of-type(2)"), "bold"
160
- assert_result_rows [2], @parser.search("div/.a:nth-of-type(1)"), "bold"
161
- assert_result_rows [2,4,7], @parser.search("div i:nth-of-type(2n)"), "italic"
162
- assert_result_rows [1,3,5,6], @parser.search("div i:nth-of-type(2n+1)"), "italic"
163
- assert_result_rows [1], @parser.search("div .a:nth-of-type(2n)"), "emphasis"
164
- assert_result_rows [2,3], @parser.search("div .a:nth-of-type(2n+1)"), "bold"
165
- end
166
-
167
- def test_nth_last_of_type
168
- assert_result_rows [14], @parser.search("table//tr:nth-last-of-type(1)")
169
- assert_result_rows [12], @parser.search("table//tr:nth-last-of-type(3)")
170
- assert_result_rows [2,6,7], @parser.search("div i:nth-last-of-type(1)"), "italic"
171
- assert_result_rows [1,5], @parser.search("div i:nth-last-of-type(2)"), "italic"
172
- assert_result_rows [4], @parser.search("div/i.b:nth-last-of-type(1)"), "italic"
173
- assert_result_rows [3], @parser.search("div/i.b:nth-last-of-type(2)"), "italic"
174
- end
175
-
176
- def test_only_of_type
177
- assert_result_rows [1,4], @parser.search("div/p:only-of-type"), "para"
178
- assert_result_rows [5], @parser.search("div/i.c:only-of-type"), "italic"
179
- end
180
-
181
- def test_only_child
182
- assert_result_rows [4], @parser.search("div/p:only-child"), "para"
183
- assert_result_rows [4], @parser.search("div/h1.c:only-child"), "header"
184
- end
185
-
186
- def test_empty
187
- result = @parser.search("p:empty")
188
- assert_equal 1, result.size, "unexpected number of rows returned: '#{result.inner_text}'"
189
- assert_equal 'empty', result.first['class']
190
- end
191
-
192
- def test_parent
193
- result = @parser.search("p:parent")
194
- assert_equal 5, result.size
195
- 0.upto(3) do |j|
196
- assert_equal "para#{j+1} ", result[j].inner_text
197
- end
198
- assert_equal "not-empty", result[4]['class']
199
- end
200
-
201
- def test_siblings
202
- doc = <<-EOF
203
- <html><body><div>
204
- <p id="1">p1 </p>
205
- <p id="2">p2 </p>
206
- <p id="3">p3 </p>
207
- <p id="4">p4 </p>
208
- <p id="5">p5 </p>
209
- EOF
210
- parser = Nokogiri.HTML doc
211
- assert_equal 2, parser.search("#3 ~ p").size
212
- assert_equal "p4 p5 ", parser.search("#3 ~ p").inner_text
213
- assert_equal 0, parser.search("#5 ~ p").size
214
-
215
- assert_equal 1, parser.search("#3 + p").size
216
- assert_equal "p4 ", parser.search("#3 + p").inner_text
217
- assert_equal 0, parser.search("#5 + p").size
218
- end
219
-
220
- def assert_result_rows intarray, result, word="row"
221
- assert_equal intarray.size, result.size, "unexpected number of rows returned: '#{result.inner_text}'"
222
- assert_equal intarray.map{|j| "#{word}#{j}"}.join(' '), result.inner_text.strip, result.inner_text
223
- end
224
- end
225
- end
226
- end