bbc-capybara-mechanize 0.3.0.rc0

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.
data/README.mdown ADDED
@@ -0,0 +1,76 @@
1
+ Capybara-mechanize
2
+ ==================
3
+
4
+ This gems makes it possible to use Capybara for (partially) remote testing. It inherits most functionality from the RackTest driver and only uses [Mechanize](http://github.com/tenderlove/mechanize) for remote requests.
5
+
6
+ It is currently in use to test the integration between a Rails application and Twitter authorization and sharing.
7
+
8
+ This gem is a [Capybara](http://github.com/jnicklas/capybara) extension. I have been inspired by the Capybara driver and some earlier efforts for a Mechanize driver.
9
+
10
+ Thanks to [Pinkelstar](http://www.pinkelstar.com) for giving me the time and the need to develop this gem.
11
+
12
+ ### Installation
13
+
14
+ gem install capybara-mechanize
15
+
16
+ ### Usage without Cucumber
17
+
18
+ require 'capybara/mechanize'
19
+
20
+ ### Usage with Cucumber and tags
21
+
22
+ A @mechanize tag is added to your hooks when you add the following line to your env.rb
23
+
24
+ require 'capybara/mechanize/cucumber'
25
+
26
+ The following scenario will then be using the Mechanize driver
27
+
28
+ @mechanize
29
+ Scenario: do something remote
30
+ When I click the remote link
31
+
32
+ ### Remote testing
33
+
34
+ When you want to use this driver to test a remote application. You have to set the app_host:
35
+
36
+ Capybara.app_host = "http://www.yourapp.com"
37
+
38
+ Note that I haven't tested this case for my self yet. The Capybara tests pass for this situation though so it should work! Please provide me with feedback if it doesn't.
39
+
40
+ ## Running tests
41
+
42
+ Until this library is merged with capybara there needs to be local app and you need to add the following to your host file:
43
+
44
+ 127.0.0.1 capybara-testapp.heroku.com
45
+
46
+ Run bundler
47
+
48
+ bundle install
49
+
50
+ Run the app with the following line:
51
+
52
+ bundle exec ruby -rrubygems lib/capybara/spec/extended_test_app.rb
53
+
54
+ Then you are ready to run the test like so
55
+
56
+ rake spec
57
+
58
+ Todo
59
+ ----
60
+ * Make the last 12 failing remote session spec pass, see remote_mechanize_spec and uncomment one line there to see them fail
61
+ * Test this driver with non-rack/non-ruby projects
62
+
63
+ Note on Patches/Pull Requests
64
+ -----------------------------
65
+
66
+ * Fork the project.
67
+ * Make your feature addition or bug fix.
68
+ * Add tests for it. This is important so I don't break it in a
69
+ future version unintentionally.
70
+ * Commit, do not mess with rakefile, version, or history.
71
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
72
+ * Send me a pull request. Bonus points for topic branches.
73
+
74
+ Copyright
75
+ ---------
76
+ Copyright (c) 2010 Jeroen van Dijk. See LICENSE for details.
@@ -0,0 +1,221 @@
1
+ require 'capybara/rack_test/driver'
2
+ require 'mechanize'
3
+
4
+ class Capybara::Mechanize::Browser < Capybara::RackTest::Browser
5
+ extend Forwardable
6
+
7
+ def_delegator :agent, :scheme_handlers
8
+ def_delegator :agent, :scheme_handlers=
9
+
10
+ def initialize(app, options)
11
+ @agent = ::Mechanize.new
12
+ @agent.redirect_ok = false
13
+
14
+ super
15
+ end
16
+
17
+ def reset_host!
18
+ @last_remote_host = nil
19
+ @last_request_remote = nil
20
+ super
21
+ end
22
+
23
+ def current_url
24
+ last_request_remote? ? remote_response.current_url : super
25
+ end
26
+
27
+ def last_response
28
+ last_request_remote? ? remote_response : super
29
+ end
30
+
31
+ def follow_redirects!
32
+ 5.times do
33
+ follow_redirect! if last_response.redirect?
34
+ end
35
+ raise Capybara::InfiniteRedirectError, "redirected more than 5 times, check for infinite redirects." if last_response.redirect?
36
+ end
37
+
38
+ def follow_redirect!
39
+ unless last_response.redirect?
40
+ raise "Last response was not a redirect. Cannot follow_redirect!"
41
+ end
42
+
43
+ get(last_location_header)
44
+ end
45
+
46
+ def process(method, path, *options)
47
+ reset_cache!
48
+ send(method, path, *options)
49
+ follow_redirects!
50
+ end
51
+
52
+ def process_without_redirect(method, path, attributes, headers)
53
+ path = @last_path if path.nil? || path.empty?
54
+
55
+ if remote?(path)
56
+ process_remote_request(method, path, attributes, headers)
57
+ else
58
+ register_local_request
59
+
60
+ path = determine_path(path)
61
+
62
+ reset_cache!
63
+ send("racktest_#{method}", path, attributes, env.merge(headers))
64
+ end
65
+
66
+ @last_path = path
67
+ end
68
+
69
+ # TODO path Capybara to move this into its own method
70
+ def determine_path(path)
71
+ new_uri = URI.parse(path)
72
+ current_uri = URI.parse(current_url)
73
+
74
+ if new_uri.host
75
+ @current_host = new_uri.scheme + '://' + new_uri.host
76
+ end
77
+
78
+ if new_uri.relative?
79
+ path = request_path + path if path.start_with?('?')
80
+
81
+ unless path.start_with?('/')
82
+ folders = request_path.split('/')
83
+ path = (folders[0, folders.size - 1] << path).join('/')
84
+ end
85
+ path = current_host + path
86
+ end
87
+ path
88
+ end
89
+
90
+ alias :racktest_get :get
91
+ def get(path, attributes = {}, headers = {})
92
+ process_without_redirect(:get, path, attributes, headers)
93
+ end
94
+
95
+ alias :racktest_post :post
96
+ def post(path, attributes = {}, headers = {})
97
+ process_without_redirect(:post, path, post_data(attributes), headers)
98
+ end
99
+
100
+ alias :racktest_put :put
101
+ def put(path, attributes = {}, headers = {})
102
+ process_without_redirect(:put, path, attributes, headers)
103
+ end
104
+
105
+ alias :racktest_delete :delete
106
+ def delete(path, attributes = {}, headers = {})
107
+ process_without_redirect(:delete, path, attributes, headers)
108
+ end
109
+
110
+ def post_data(params)
111
+ params.inject({}) do |memo, param|
112
+ case param
113
+ when Hash
114
+ param.each {|attribute, value| memo[attribute] = value }
115
+ memo
116
+ when Array
117
+ case param.last
118
+ when Hash
119
+ param.last.each {|attribute, value| memo["#{param.first}[#{attribute}]"] = value }
120
+ else
121
+ memo[param.first] = param.last
122
+ end
123
+ memo
124
+ end
125
+ end
126
+ end
127
+
128
+ def remote?(url)
129
+ if Capybara.app_host
130
+ true
131
+ else
132
+ host = URI.parse(url).host
133
+
134
+ if host.nil?
135
+ last_request_remote?
136
+ else
137
+ !Capybara::Mechanize.local_hosts.include?(host)
138
+ end
139
+ end
140
+ end
141
+
142
+ attr_reader :agent
143
+
144
+ private
145
+
146
+ def last_location_header
147
+ last_request_remote? ? remote_response.page.response['Location'] : last_response['Location']
148
+ end
149
+
150
+ def last_request_remote?
151
+ !!@last_request_remote
152
+ end
153
+
154
+ def register_local_request
155
+ @last_remote_host = nil
156
+ @last_request_remote = false
157
+ end
158
+
159
+ def process_remote_request(method, url, attributes, headers)
160
+ if remote?(url)
161
+ remote_uri = URI.parse(url)
162
+
163
+ if remote_uri.host.nil?
164
+ remote_host = @last_remote_host || Capybara.app_host || Capybara.default_host
165
+ url = File.join(remote_host, url)
166
+ url = "http://#{url}" unless url.include?("http")
167
+ else
168
+ @last_remote_host = "#{remote_uri.host}:#{remote_uri.port}"
169
+ end
170
+
171
+ reset_cache!
172
+ begin
173
+ args = []
174
+ args << attributes unless attributes.empty?
175
+ args << headers unless headers.empty?
176
+ @agent.send(method, url, *args)
177
+ rescue => e
178
+ raise "Received the following error for a #{method.to_s.upcase} request to #{url}: '#{e.message}'"
179
+ end
180
+ @last_request_remote = true
181
+ end
182
+ end
183
+
184
+ def remote_response
185
+ ResponseProxy.new(@agent.current_page) if @agent.current_page
186
+ end
187
+
188
+ class ResponseProxy
189
+ extend Forwardable
190
+
191
+ def_delegator :page, :body
192
+
193
+ attr_reader :page
194
+
195
+ def initialize(page)
196
+ @page = page
197
+ end
198
+
199
+ def current_url
200
+ page.uri.to_s
201
+ end
202
+
203
+ def headers
204
+ # Hax the content-type contains utf8, so Capybara specs are failing, need to ask mailinglist
205
+ headers = page.response
206
+ headers["content-type"].gsub!(';charset=utf-8', '') if headers["content-type"]
207
+ headers
208
+ end
209
+
210
+ def status
211
+ page.code.to_i
212
+ end
213
+
214
+ def redirect?
215
+ [301, 302].include?(status)
216
+ end
217
+
218
+ end
219
+
220
+ end
221
+
@@ -0,0 +1,5 @@
1
+ require 'capybara/mechanize'
2
+
3
+ Before('@mechanize') do
4
+ Capybara.current_driver = :mechanize
5
+ end
@@ -0,0 +1,21 @@
1
+ require 'capybara/mechanize/browser'
2
+
3
+ class Capybara::Mechanize::Driver < Capybara::RackTest::Driver
4
+
5
+ def initialize(app = nil, options = {})
6
+ if !app && !Capybara.app_host
7
+ raise ArgumentError, "You have to set at least Capybara.app_host or Capybara.app"
8
+ end
9
+
10
+ @app, @options = app, options
11
+ end
12
+
13
+ def remote?(url)
14
+ browser.remote?(url)
15
+ end
16
+
17
+ def browser
18
+ @browser ||= Capybara::Mechanize::Browser.new(app, options)
19
+ end
20
+
21
+ end
@@ -0,0 +1,5 @@
1
+ module Capybara
2
+ module Mechanize
3
+ VERSION = '0.3.0.rc0'
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ require 'capybara'
2
+
3
+ module Capybara::Mechanize
4
+ class << self
5
+
6
+ # Host that should be considered local (includes default_host)
7
+ def local_hosts
8
+ @local_hosts ||= begin
9
+ default_host = URI.parse(Capybara.default_host || "").host || Capybara.default_host
10
+ [default_host].compact
11
+ end
12
+ end
13
+
14
+ def local_hosts=(hosts)
15
+ @local_hosts = hosts
16
+ end
17
+ end
18
+ end
19
+
20
+ require 'capybara/mechanize/driver'
21
+
22
+ Capybara.register_driver :mechanize do |app|
23
+ Capybara::Mechanize::Driver.new(app)
24
+ end
@@ -0,0 +1,41 @@
1
+ require 'capybara/spec/test_app'
2
+
3
+ class ExtendedTestApp < TestApp#< Sinatra::Base
4
+ set :environment, :production # so we don't get debug info that makes our test pass!
5
+
6
+ get %r{/redirect_to/(.*)} do
7
+ redirect params[:captures]
8
+ end
9
+
10
+ get '/form_with_relative_action_to_host' do
11
+ %{<form action="/request_info/host" method="post">
12
+ <input type="submit" value="submit" />
13
+ </form>}
14
+ end
15
+
16
+ get '/request_info/form_with_no_action' do
17
+ %{<form method="post">
18
+ <input type="submit" value="submit" />
19
+ </form>}
20
+ end
21
+
22
+ get '/relative_link_to_host' do
23
+ %{<a href="/request_info/host">host</a>}
24
+ end
25
+
26
+ get '/request_info/*' do
27
+ current_request_info
28
+ end
29
+
30
+ post '/request_info/*' do
31
+ current_request_info
32
+ end
33
+
34
+
35
+ private
36
+
37
+ def current_request_info
38
+ "Current host is #{request.url}, method #{request.request_method.downcase}"
39
+ end
40
+ end
41
+
@@ -0,0 +1,151 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Capybara::Driver::Mechanize, in local model" do
4
+ before do
5
+ @driver = Capybara::Mechanize::Driver.new(ExtendedTestApp)
6
+ end
7
+
8
+ it "should throw an error when no rack app is given without an app host" do
9
+ running do
10
+ Capybara::Mechanize::Driver.new
11
+ end.should raise_error(ArgumentError, "You have to set at least Capybara.app_host or Capybara.app")
12
+ end
13
+
14
+ it_should_behave_like "driver"
15
+ it_should_behave_like "driver with header support"
16
+ it_should_behave_like "driver with status code support"
17
+ it_should_behave_like "driver with cookies support"
18
+ it_should_behave_like "driver with infinite redirect detection"
19
+
20
+ it "should default to local mode for relative paths" do
21
+ @driver.should_not be_remote('/')
22
+ end
23
+
24
+ it "should default to local mode for the default host" do
25
+ @driver.should_not be_remote('http://www.example.com')
26
+ end
27
+
28
+ context "with an app_host" do
29
+
30
+ before do
31
+ Capybara.app_host = 'http://www.remote.com'
32
+ end
33
+
34
+ after do
35
+ Capybara.app_host = nil
36
+ end
37
+
38
+ it "should treat urls as remote" do
39
+ @driver.should be_remote('http://www.remote.com')
40
+ end
41
+ end
42
+
43
+ context "with a default url, no app host" do
44
+ before :each do
45
+ Capybara.default_host = 'www.local.com'
46
+ end
47
+
48
+ it "should allow local hosts to be set" do
49
+ Capybara::Mechanize.local_hosts = ['subdomain.local.com']
50
+ @driver.should_not be_remote('http://subdomain.local.com')
51
+ end
52
+
53
+ it "should treat urls with the same host names as local" do
54
+ @driver.should_not be_remote('http://www.local.com')
55
+ end
56
+
57
+ it "should treat other urls as remote" do
58
+ @driver.should be_remote('http://www.remote.com')
59
+ end
60
+
61
+ it "should treat relative paths as remote if the previous request was remote" do
62
+ @driver.visit(REMOTE_TEST_URL)
63
+ @driver.should be_remote('/some_relative_link')
64
+ end
65
+
66
+ it "should treat relative paths as local if the previous request was local" do
67
+ @driver.visit('http://www.local.com')
68
+ @driver.should_not be_remote('/some_relative_link')
69
+ end
70
+
71
+ it "should receive the right host" do
72
+ @driver.visit('http://www.local.com/host')
73
+ should_be_a_local_get
74
+ end
75
+
76
+ it "should consider relative paths to be local when the previous request was local" do
77
+ @driver.visit('http://www.local.com/host')
78
+ @driver.visit('/host')
79
+
80
+ should_be_a_local_get
81
+ @driver.should_not be_remote('/first_local')
82
+ end
83
+
84
+ it "should consider relative paths to be remote when the previous request was remote" do
85
+ @driver.visit("#{REMOTE_TEST_URL}/host")
86
+ @driver.get('/host')
87
+
88
+ should_be_a_remote_get
89
+ @driver.should be_remote('/second_remote')
90
+ end
91
+
92
+ it "should always switch to the right context" do
93
+ @driver.visit('http://www.local.com/host')
94
+ @driver.get('/host')
95
+ @driver.get("#{REMOTE_TEST_URL}/host")
96
+ @driver.get('/host')
97
+ @driver.get('http://www.local.com/host')
98
+
99
+ should_be_a_local_get
100
+ @driver.should_not be_remote('/second_local')
101
+ end
102
+
103
+ it "should follow redirects from local to remote" do
104
+ @driver.visit("http://www.local.com/redirect_to/#{REMOTE_TEST_URL}/host")
105
+ should_be_a_remote_get
106
+ end
107
+
108
+ it "should follow redirects from remote to local" do
109
+ @driver.visit("#{REMOTE_TEST_URL}/redirect_to/http://www.local.com/host")
110
+ should_be_a_local_get
111
+ end
112
+
113
+ after :each do
114
+ Capybara.default_host = nil
115
+ end
116
+
117
+ it "should raise a useful error for sites that return a 404, because it is probably a misconfiguration" do
118
+ lambda {
119
+ @driver.visit("http://iamreallysurethatthisdoesntexist.com/canttouchthis")
120
+ }.should raise_error(%r{Received the following error for a GET request to http://iamreallysurethatthisdoesntexist.com/canttouchthis:})
121
+ end
122
+ end
123
+
124
+ it "should include the right host when remote" do
125
+ @driver.visit("#{REMOTE_TEST_URL}/host")
126
+ should_be_a_remote_get
127
+ end
128
+
129
+ describe '#reset!' do
130
+ before :each do
131
+ Capybara.default_host = 'http://www.local.com'
132
+ end
133
+
134
+ it 'should reset remote host' do
135
+ @driver.visit("#{REMOTE_TEST_URL}/host")
136
+ should_be_a_remote_get
137
+ @driver.reset!
138
+ @driver.visit("/host")
139
+ should_be_a_local_get
140
+ end
141
+ end
142
+
143
+ def should_be_a_remote_get
144
+ @driver.body.should include(REMOTE_TEST_URL)
145
+ end
146
+
147
+ def should_be_a_local_get
148
+ @driver.body.should include("www.local.com")
149
+ end
150
+
151
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe Capybara::Mechanize::Driver do
4
+ before(:each) do
5
+ Capybara.app_host = REMOTE_TEST_URL
6
+ end
7
+
8
+ after(:each) do
9
+ Capybara.app_host = nil
10
+ end
11
+
12
+ before do
13
+ @driver = Capybara::Mechanize::Driver.new
14
+ end
15
+
16
+ context "in remote mode" do
17
+ it "should not throw an error when no rack app is given" do
18
+ running do
19
+ Capybara::Mechanize::Driver.new
20
+ end.should_not raise_error(ArgumentError)
21
+ end
22
+
23
+ it "should pass arguments through to a get request" do
24
+ @driver.visit("#{REMOTE_TEST_URL}/form/get", {:form => "success"})
25
+ @driver.body.should include('success')
26
+ end
27
+
28
+ it "should pass arguments through to a post request" do
29
+ @driver.post("#{REMOTE_TEST_URL}/form", {:form => "success"})
30
+ @driver.body.should include('success')
31
+ end
32
+
33
+ context "for a post request" do
34
+
35
+ it "should transform nested map in post data" do
36
+ @driver.post("#{REMOTE_TEST_URL}/form", {:form => {:key => "value"}})
37
+ @driver.body.should include('key: value')
38
+ end
39
+
40
+ end
41
+
42
+ context "process remote request" do
43
+
44
+ it "should transform nested map in post data" do
45
+ @driver.submit(:post, "#{REMOTE_TEST_URL}/form", {:form => {:key => "value"}})
46
+ @driver.body.should include('key: value')
47
+ end
48
+
49
+ end
50
+
51
+ it_should_behave_like "driver"
52
+ it_should_behave_like "driver with header support"
53
+ it_should_behave_like "driver with status code support"
54
+ it_should_behave_like "driver with cookies support"
55
+ it_should_behave_like "driver with infinite redirect detection"
56
+ end
57
+
58
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe Capybara::Session do
4
+ context 'with mechanize driver' do
5
+ before do
6
+ @session = Capybara::Session.new(:mechanize, TestApp)
7
+ Capybara.default_host = 'http://www.local.com'
8
+ end
9
+
10
+ describe '#driver' do
11
+ it "should be a mechanize driver" do
12
+ @session.driver.should be_an_instance_of(Capybara::Mechanize::Driver)
13
+ end
14
+ end
15
+
16
+ describe '#mode' do
17
+ it "should remember the mode" do
18
+ @session.mode.should == :mechanize
19
+ end
20
+ end
21
+
22
+ describe '#click_link' do
23
+ it "should use data-method if available" do
24
+ @session.visit "/with_html"
25
+ @session.click_link "A link with data-method"
26
+ @session.body.should include('The requested object was deleted')
27
+ end
28
+ end
29
+
30
+ it "should use the last remote url when following relative links" do
31
+ @session.visit("#{REMOTE_TEST_URL}/relative_link_to_host")
32
+ @session.click_link "host"
33
+ @session.body.should include("Current host is #{REMOTE_TEST_URL}/request_info/host, method get")
34
+ end
35
+
36
+ it "should use the last remote url when submitting a form with a relative action" do
37
+ @session.visit("#{REMOTE_TEST_URL}/form_with_relative_action_to_host")
38
+ @session.click_button "submit"
39
+ @session.body.should include("Current host is #{REMOTE_TEST_URL}/request_info/host, method post")
40
+ end
41
+
42
+ it "should use the last url when submitting a form with no action" do
43
+ @session.visit("#{REMOTE_TEST_URL}/request_info/form_with_no_action")
44
+ @session.click_button "submit"
45
+ @session.body.should include("Current host is #{REMOTE_TEST_URL}/request_info/form_with_no_action, method post")
46
+ end
47
+
48
+ it_should_behave_like "session"
49
+ it_should_behave_like "session without javascript support"
50
+ it_should_behave_like "session with headers support"
51
+ it_should_behave_like "session with status code support"
52
+ end
53
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Capybara::Session do
4
+ context 'with remote mechanize driver' do
5
+ before(:each) do
6
+ Capybara.app_host = REMOTE_TEST_URL
7
+ end
8
+
9
+ after(:each) do
10
+ Capybara.app_host = nil
11
+ end
12
+
13
+
14
+ before do
15
+ @session = Capybara::Session.new(:mechanize)
16
+ end
17
+
18
+ describe '#driver' do
19
+ it "should be a mechanize driver" do
20
+ @session.driver.should be_an_instance_of(Capybara::Mechanize::Driver)
21
+ end
22
+ end
23
+
24
+ describe '#mode' do
25
+ it "should remember the mode" do
26
+ @session.mode.should == :mechanize
27
+ end
28
+ end
29
+
30
+ describe '#click_link' do
31
+ it "should use data-method if available" do
32
+ @session.visit "/with_html"
33
+ @session.click_link "A link with data-method"
34
+ @session.body.should include('The requested object was deleted')
35
+ end
36
+ end
37
+
38
+ # Pending: Still 16 failing tests here (result is 706 examples, 16 failures, instead of 385 examples)
39
+ # it_should_behave_like "session"
40
+
41
+ it_should_behave_like "session without javascript support"
42
+ it_should_behave_like "session with headers support"
43
+ it_should_behave_like "session with status code support"
44
+ end
45
+ end
@@ -0,0 +1,34 @@
1
+ require 'bundler/setup'
2
+ require 'capybara'
3
+ require 'capybara/mechanize'
4
+ require 'artifice'
5
+
6
+ require 'sinatra'
7
+
8
+ require 'capybara/spec/extended_test_app'
9
+
10
+ # TODO move this stuff into capybara
11
+ require 'capybara/spec/driver'
12
+ require 'capybara/spec/session'
13
+
14
+ alias :running :lambda
15
+
16
+ Capybara.default_wait_time = 0 # less timeout so tests run faster
17
+
18
+ RSpec.configure do |config|
19
+ config.before(:all) do
20
+ Artifice.activate_with(ExtendedTestApp)
21
+ end
22
+
23
+ config.after do
24
+ Capybara.default_selector = :xpath
25
+ Capybara::Mechanize.local_hosts = nil
26
+ end
27
+
28
+ config.after(:all) do
29
+ Artifice.deactivate
30
+ end
31
+ # config.filter_run :focus => true
32
+ end
33
+
34
+ REMOTE_TEST_URL = "http://localhost"
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bbc-capybara-mechanize
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: true
5
+ segments:
6
+ - 0
7
+ - 3
8
+ - 0
9
+ - rc0
10
+ version: 0.3.0.rc0
11
+ platform: ruby
12
+ authors:
13
+ - Jeroen van Dijk
14
+ - Matthew Crouch
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-08-31 00:00:00 +01:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: mechanize
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ segments:
31
+ - 1
32
+ - 0
33
+ - 0
34
+ version: 1.0.0
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: capybara
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ segments:
46
+ - 1
47
+ - 0
48
+ - 0
49
+ version: 1.0.0
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ description: RackTest driver for Capybara, but with remote request support thanks to mechanize
53
+ email: jeroen@jeevidee.nl
54
+ executables: []
55
+
56
+ extensions: []
57
+
58
+ extra_rdoc_files: []
59
+
60
+ files:
61
+ - lib/capybara/mechanize/browser.rb
62
+ - lib/capybara/mechanize/cucumber.rb
63
+ - lib/capybara/mechanize/driver.rb
64
+ - lib/capybara/mechanize/version.rb
65
+ - lib/capybara/mechanize.rb
66
+ - lib/capybara/spec/extended_test_app.rb
67
+ - spec/driver/mechanize_driver_spec.rb
68
+ - spec/driver/remote_mechanize_driver_spec.rb
69
+ - spec/session/mechanize_spec.rb
70
+ - spec/session/remote_mechanize_spec.rb
71
+ - spec/spec_helper.rb
72
+ - README.mdown
73
+ has_rdoc: true
74
+ homepage: https://github.com/mobzilla/capybara-mechanize
75
+ licenses: []
76
+
77
+ post_install_message:
78
+ rdoc_options:
79
+ - --charset=UTF-8
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ segments:
96
+ - 0
97
+ version: "0"
98
+ requirements: []
99
+
100
+ rubyforge_project:
101
+ rubygems_version: 1.3.7
102
+ signing_key:
103
+ specification_version: 3
104
+ summary: RackTest driver for Capybara with remote request support
105
+ test_files: []
106
+