Merge remote branch 'smparkes/master'

This commit is contained in:
Jonas Nicklas 2010-03-18 13:10:10 +01:00
commit 47feb5e536
4 changed files with 25 additions and 15 deletions

View File

@ -19,6 +19,9 @@ class Capybara::Driver::Base
false
end
def wait_until *args
end
def response_headers
raise Capybara::NotSupportedByDriverError
end
@ -34,4 +37,8 @@ class Capybara::Driver::Base
def cleanup!
end
def has_shortcircuit_timeout?
false
end
end

View File

@ -21,16 +21,11 @@ module Capybara
end
def driver
@driver ||= case mode
when :rack_test
Capybara::Driver::RackTest.new(app)
when :selenium
Capybara::Driver::Selenium.new(app)
when :celerity
Capybara::Driver::Celerity.new(app)
when :culerity
Capybara::Driver::Culerity.new(app)
else
@driver ||= begin
string = mode.to_s
string.gsub!(%r{(^.)|(_.)}) { |m| m[m.length-1,1].upcase }
Capybara::Driver.const_get(string.to_sym).new(app)
rescue NameError
raise Capybara::DriverNotFoundError, "no driver called #{mode} was found"
end
end
@ -245,7 +240,7 @@ module Capybara
end
def wait_until(timeout = Capybara.default_wait_time)
WaitUntil.timeout(timeout) { yield }
WaitUntil.timeout(timeout,driver) { yield }
end
def evaluate_script(script)

View File

@ -4,7 +4,7 @@ module Capybara
class << self
def timeout(seconds = 1, &block)
def timeout(seconds = 1, driver = nil, &block)
start_time = Time.now
result = nil
@ -12,9 +12,12 @@ module Capybara
until result
return result if result = yield
if (Time.now - start_time) > seconds
raise TimeoutError
delay = seconds - (Time.now - start_time)
if delay <= 0
raise TimeoutError
end
driver && driver.wait_until(delay)
end
end

View File

@ -91,12 +91,17 @@ shared_examples_for "session with javascript support" do
end
it "should default to Capybara.default_wait_time before timeout" do
@session.driver # init the driver to exclude init timing from test
start = Time.now
Capybara.default_wait_time = 0.2
begin
@session.wait_until { false }
rescue Capybara::TimeoutError; end
(Time.now - start).should be_close(0.2, 0.1)
if @session.driver.has_shortcircuit_timeout?
(Time.now - start).should be_close(0, 0.1)
else
(Time.now - start).should be_close(0.2, 0.1)
end
end
end