mechanize 2.14.1 → 2.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -1
  3. data/lib/mechanize/directory_saver.rb +2 -1
  4. data/lib/mechanize/file_saver.rb +2 -0
  5. data/lib/mechanize/parser.rb +33 -3
  6. data/lib/mechanize/test_case.rb +2 -9
  7. data/lib/mechanize/version.rb +1 -1
  8. metadata +3 -172
  9. data/.autotest +0 -6
  10. data/.github/dependabot.yml +0 -11
  11. data/.github/workflows/ci.yml +0 -43
  12. data/.github/workflows/upstream.yml +0 -51
  13. data/.gitignore +0 -15
  14. data/.yardopts +0 -8
  15. data/Gemfile +0 -12
  16. data/Rakefile +0 -56
  17. data/examples/flickr_upload.rb +0 -22
  18. data/examples/latest_user_agents.rb +0 -100
  19. data/examples/mech-dump.rb +0 -5
  20. data/examples/proxy_req.rb +0 -7
  21. data/examples/rubygems.rb +0 -23
  22. data/examples/spider.rb +0 -22
  23. data/examples/wikipedia_links_to_philosophy.rb +0 -158
  24. data/mechanize.gemspec +0 -74
  25. data/test/data/htpasswd +0 -1
  26. data/test/data/server.crt +0 -16
  27. data/test/data/server.csr +0 -12
  28. data/test/data/server.key +0 -15
  29. data/test/data/server.pem +0 -15
  30. data/test/test_mechanize.rb +0 -1382
  31. data/test/test_mechanize_cookie.rb +0 -559
  32. data/test/test_mechanize_cookie_jar.rb +0 -615
  33. data/test/test_mechanize_directory_saver.rb +0 -60
  34. data/test/test_mechanize_download.rb +0 -102
  35. data/test/test_mechanize_element_not_found_error.rb +0 -16
  36. data/test/test_mechanize_file.rb +0 -118
  37. data/test/test_mechanize_file_connection.rb +0 -40
  38. data/test/test_mechanize_file_request.rb +0 -26
  39. data/test/test_mechanize_file_response.rb +0 -48
  40. data/test/test_mechanize_file_saver.rb +0 -22
  41. data/test/test_mechanize_form.rb +0 -1025
  42. data/test/test_mechanize_form_check_box.rb +0 -49
  43. data/test/test_mechanize_form_encoding.rb +0 -110
  44. data/test/test_mechanize_form_field.rb +0 -78
  45. data/test/test_mechanize_form_file_upload.rb +0 -21
  46. data/test/test_mechanize_form_image_button.rb +0 -13
  47. data/test/test_mechanize_form_keygen.rb +0 -34
  48. data/test/test_mechanize_form_multi_select_list.rb +0 -98
  49. data/test/test_mechanize_form_option.rb +0 -60
  50. data/test/test_mechanize_form_radio_button.rb +0 -96
  51. data/test/test_mechanize_form_select_list.rb +0 -81
  52. data/test/test_mechanize_form_textarea.rb +0 -53
  53. data/test/test_mechanize_headers.rb +0 -36
  54. data/test/test_mechanize_history.rb +0 -104
  55. data/test/test_mechanize_http_agent.rb +0 -2145
  56. data/test/test_mechanize_http_auth_challenge.rb +0 -64
  57. data/test/test_mechanize_http_auth_realm.rb +0 -56
  58. data/test/test_mechanize_http_auth_store.rb +0 -233
  59. data/test/test_mechanize_http_content_disposition_parser.rb +0 -167
  60. data/test/test_mechanize_http_www_authenticate_parser.rb +0 -204
  61. data/test/test_mechanize_image.rb +0 -9
  62. data/test/test_mechanize_link.rb +0 -171
  63. data/test/test_mechanize_page.rb +0 -295
  64. data/test/test_mechanize_page_encoding.rb +0 -215
  65. data/test/test_mechanize_page_frame.rb +0 -17
  66. data/test/test_mechanize_page_image.rb +0 -191
  67. data/test/test_mechanize_page_link.rb +0 -377
  68. data/test/test_mechanize_page_meta_refresh.rb +0 -151
  69. data/test/test_mechanize_parser.rb +0 -316
  70. data/test/test_mechanize_pluggable_parser.rb +0 -68
  71. data/test/test_mechanize_redirect_limit_reached_error.rb +0 -25
  72. data/test/test_mechanize_redirect_not_get_or_head_error.rb +0 -15
  73. data/test/test_mechanize_response_read_error.rb +0 -29
  74. data/test/test_mechanize_subclass.rb +0 -23
  75. data/test/test_mechanize_util.rb +0 -144
  76. data/test/test_mechanize_xml_file.rb +0 -30
  77. data/test/test_multi_select.rb +0 -120
@@ -1,102 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizeDownload < Mechanize::TestCase
5
-
6
- def setup
7
- super
8
-
9
- @parser = Mechanize::Download
10
- end
11
-
12
- def test_body
13
- uri = URI.parse 'http://example/foo.html'
14
- body_io = StringIO.new '0123456789'
15
-
16
- download = @parser.new uri, nil, body_io
17
-
18
- assert_equal '0123456789', download.body
19
- assert_equal 0, download.body_io.pos
20
- end
21
-
22
- def test_save_string_io
23
- uri = URI.parse 'http://example/foo.html'
24
- body_io = StringIO.new '0123456789'
25
-
26
- download = @parser.new uri, nil, body_io
27
-
28
- in_tmpdir do
29
- filename = download.save
30
-
31
- assert File.exist? 'foo.html'
32
- assert_equal "foo.html", filename
33
- end
34
- end
35
-
36
- def test_save_bang
37
- uri = URI.parse 'http://example/foo.html'
38
- body_io = StringIO.new '0123456789'
39
-
40
- download = @parser.new uri, nil, body_io
41
-
42
- in_tmpdir do
43
- filename = download.save!
44
-
45
- assert File.exist? 'foo.html'
46
- assert_equal "foo.html", filename
47
- end
48
- end
49
-
50
- def test_save_bang_does_not_allow_command_injection
51
- skip if windows?
52
- uri = URI.parse 'http://example/foo.html'
53
- body_io = StringIO.new '0123456789'
54
-
55
- download = @parser.new uri, nil, body_io
56
-
57
- in_tmpdir do
58
- download.save!('| ruby -rfileutils -e \'FileUtils.touch("vul.txt")\'')
59
- refute_operator(File, :exist?, "vul.txt")
60
- end
61
- end
62
-
63
- def test_save_tempfile
64
- uri = URI.parse 'http://example/foo.html'
65
- Tempfile.open @NAME do |body_io|
66
- body_io.unlink
67
- body_io.write '0123456789'
68
-
69
- body_io.flush
70
- body_io.rewind
71
-
72
- download = @parser.new uri, nil, body_io
73
-
74
- in_tmpdir do
75
- filename = download.save
76
-
77
- assert File.exist? 'foo.html'
78
- assert_equal "foo.html", filename
79
-
80
- filename = download.save
81
-
82
- assert File.exist? 'foo.html.1'
83
- assert_equal "foo.html.1", filename
84
-
85
- filename = download.save
86
-
87
- assert File.exist? 'foo.html.2'
88
- assert_equal "foo.html.2", filename
89
- end
90
- end
91
- end
92
-
93
- def test_filename
94
- uri = URI.parse 'http://example/foo.html'
95
- body_io = StringIO.new '0123456789'
96
-
97
- download = @parser.new uri, nil, body_io
98
-
99
- assert_equal "foo.html", download.filename
100
- end
101
- end
102
-
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizeRedirectLimitReachedError < Mechanize::TestCase
5
-
6
- def test_to_s
7
- page = fake_page
8
-
9
- error = Mechanize::ElementNotFoundError.new(page, :element, :conditions)
10
-
11
- assert_match(/element/, error.to_s)
12
- assert_match(/conditions/, error.to_s)
13
- end
14
-
15
- end
16
-
@@ -1,118 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizeFile < Mechanize::TestCase
5
-
6
- def setup
7
- super
8
-
9
- @parser = Mechanize::File
10
- end
11
-
12
- def test_save
13
- uri = URI 'http://example/name.html'
14
- page = Mechanize::File.new uri, nil, '0123456789'
15
-
16
- Dir.mktmpdir do |dir|
17
- Dir.chdir dir do
18
- filename = page.save 'test.html'
19
-
20
- assert File.exist? 'test.html'
21
- assert_equal '0123456789', File.read('test.html')
22
- assert_equal "test.html", filename
23
-
24
- filename = page.save 'test.html'
25
-
26
- assert File.exist? 'test.html.1'
27
- assert_equal '0123456789', File.read('test.html.1')
28
- assert_equal "test.html.1", filename
29
-
30
- filename = page.save 'test.html'
31
-
32
- assert File.exist? 'test.html.2'
33
- assert_equal '0123456789', File.read('test.html.2')
34
- assert_equal "test.html.2", filename
35
- end
36
- end
37
- end
38
-
39
- def test_save_default
40
- uri = URI 'http://example/test.html'
41
- page = Mechanize::File.new uri, nil, ''
42
-
43
- Dir.mktmpdir do |dir|
44
- Dir.chdir dir do
45
- filename = page.save
46
-
47
- assert File.exist? 'test.html'
48
- assert_equal "test.html", filename
49
-
50
- filename = page.save
51
-
52
- assert File.exist? 'test.html.1'
53
- assert_equal "test.html.1", filename
54
-
55
- filename = page.save
56
-
57
- assert File.exist? 'test.html.2'
58
- assert_equal "test.html.2", filename
59
- end
60
- end
61
- end
62
-
63
- def test_save_default_dots
64
- uri = URI 'http://localhost/../test.html'
65
- page = Mechanize::File.new uri, nil, ''
66
-
67
- Dir.mktmpdir do |dir|
68
- Dir.chdir dir do
69
- filename = page.save
70
- assert File.exist? 'test.html'
71
- assert_equal "test.html", filename
72
-
73
- filename = page.save
74
- assert File.exist? 'test.html.1'
75
- assert_equal "test.html.1", filename
76
- end
77
- end
78
- end
79
-
80
- def test_filename
81
- uri = URI 'http://localhost/test.html'
82
- page = Mechanize::File.new uri, nil, ''
83
-
84
- assert_equal "test.html", page.filename
85
- end
86
-
87
- def test_save_overwrite
88
- uri = URI 'http://example/test.html'
89
- page = Mechanize::File.new uri, nil, ''
90
-
91
- Dir.mktmpdir do |dir|
92
- Dir.chdir dir do
93
- filename = page.save 'test.html'
94
-
95
- assert File.exist? 'test.html'
96
- assert_equal "test.html", filename
97
-
98
- filename = page.save! 'test.html'
99
-
100
- assert File.exist? 'test.html'
101
- refute File.exist? 'test.html.1'
102
- assert_equal "test.html", filename
103
- end
104
- end
105
- end
106
-
107
- def test_save_bang_does_not_allow_command_injection
108
- skip if windows?
109
- uri = URI 'http://example/test.html'
110
- page = Mechanize::File.new uri, nil, ''
111
-
112
- in_tmpdir do
113
- page.save!('| ruby -rfileutils -e \'FileUtils.touch("vul.txt")\'')
114
- refute_operator(File, :exist?, "vul.txt")
115
- end
116
- end
117
- end
118
-
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizeFileConnection < Mechanize::TestCase
5
-
6
- def test_request
7
- file_path = File.expand_path(__FILE__)
8
- uri = URI.parse "file://#{file_path}"
9
- conn = Mechanize::FileConnection.new
10
-
11
- body = +''
12
-
13
- conn.request uri, nil do |response|
14
- assert_equal(file_path, response.file_path)
15
- response.read_body do |part|
16
- body << part
17
- end
18
- end
19
-
20
- assert_equal File.read(__FILE__), body.gsub(/\r\n/, "\n")
21
- end
22
-
23
- def test_request_on_uri_with_windows_drive
24
- uri_string = "file://C:/path/to/file.html"
25
- expected_file_path = "C:/path/to/file.html"
26
-
27
- uri = URI.parse(uri_string)
28
- conn = Mechanize::FileConnection.new
29
-
30
- called = false
31
- yielded_file_path = nil
32
- conn.request(uri, nil) do |response|
33
- called = true
34
- yielded_file_path = response.file_path
35
- end
36
-
37
- assert(called)
38
- assert_equal(expected_file_path, yielded_file_path)
39
- end
40
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizeFileRequest < Mechanize::TestCase
5
-
6
- def setup
7
- @uri = URI.parse 'file:///nonexistent'
8
-
9
- @r = Mechanize::FileRequest.new @uri
10
- end
11
-
12
- def test_initialize
13
- assert_equal @uri, @r.uri
14
- assert_equal '/nonexistent', @r.path
15
-
16
- assert_respond_to @r, :[]=
17
- assert_respond_to @r, :add_field
18
- assert_respond_to @r, :each_header
19
- end
20
-
21
- def test_response_body_permitted_eh
22
- assert @r.response_body_permitted?
23
- end
24
-
25
- end
26
-
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizeFileResponse < Mechanize::TestCase
5
- def test_file_path
6
- res = Mechanize::FileResponse.new("/path/to/foo.html")
7
- assert_equal("/path/to/foo.html", res.file_path)
8
- end
9
-
10
- def test_content_type
11
- Tempfile.open %w[pi .nothtml] do |tempfile|
12
- res = Mechanize::FileResponse.new tempfile.path
13
- assert_nil res['content-type']
14
- end
15
-
16
- Tempfile.open %w[pi .xhtml] do |tempfile|
17
- res = Mechanize::FileResponse.new tempfile.path
18
- assert_equal 'text/html', res['content-type']
19
- end
20
-
21
- Tempfile.open %w[pi .html] do |tempfile|
22
- res = Mechanize::FileResponse.new tempfile.path
23
- assert_equal 'text/html', res['Content-Type']
24
- end
25
- end
26
-
27
- def test_read_body
28
- Tempfile.open %w[pi .html] do |tempfile|
29
- tempfile.write("asdfasdfasdf")
30
- tempfile.close
31
-
32
- res = Mechanize::FileResponse.new(tempfile.path)
33
- res.read_body do |input|
34
- assert_equal("asdfasdfasdf", input)
35
- end
36
- end
37
- end
38
-
39
- def test_read_body_does_not_allow_command_injection
40
- skip if windows?
41
- in_tmpdir do
42
- FileUtils.touch('| ruby -rfileutils -e \'FileUtils.touch("vul.txt")\'')
43
- res = Mechanize::FileResponse.new('| ruby -rfileutils -e \'FileUtils.touch("vul.txt")\'')
44
- res.read_body { |_| }
45
- refute_operator(File, :exist?, "vul.txt")
46
- end
47
- end
48
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizeFileSaver < Mechanize::TestCase
5
-
6
- def setup
7
- super
8
-
9
- @uri = URI 'http://example'
10
- @io = StringIO.new 'hello world'
11
- end
12
-
13
- def test_initialize
14
- in_tmpdir do
15
- Mechanize::FileSaver.new @uri, nil, @io, 200
16
-
17
- assert File.exist? 'example/index.html'
18
- end
19
- end
20
-
21
- end
22
-