diff --git a/lib/capybara/server.rb b/lib/capybara/server.rb index 5f145426..d70754b2 100644 --- a/lib/capybara/server.rb +++ b/lib/capybara/server.rb @@ -1,6 +1,7 @@ require 'uri' require 'net/http' require 'rack' +require 'capybara/timeout' class Capybara::Server class Identify @@ -65,7 +66,7 @@ class Capybara::Server end Capybara.log "checking if application has booted" - Capybara::WaitUntil.timeout(10) do + Capybara.timeout(10) do if responsive? Capybara.log("application has booted") true diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index e62f488d..f19aa710 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -1,5 +1,5 @@ require 'forwardable' -require 'capybara/wait_until' +require 'capybara/timeout' module Capybara class Session @@ -242,7 +242,7 @@ module Capybara end def wait_until(timeout = Capybara.default_wait_time) - WaitUntil.timeout(timeout,driver) { yield } + Capybara.timeout(timeout,driver) { yield } end def execute_script(script) diff --git a/lib/capybara/timeout.rb b/lib/capybara/timeout.rb new file mode 100644 index 00000000..cc939e6c --- /dev/null +++ b/lib/capybara/timeout.rb @@ -0,0 +1,27 @@ +module Capybara + class << self + + ## + # Provides timeout similar to standard library Timeout, but avoids threads + # + def timeout(seconds = 1, driver = nil, &block) + start_time = Time.now + + result = nil + + until result + return result if result = yield + + delay = seconds - (Time.now - start_time) + if delay <= 0 + raise TimeoutError + end + + driver && driver.wait_until(delay) + + sleep(0.05) + end + end + + end +end diff --git a/lib/capybara/wait_until.rb b/lib/capybara/wait_until.rb deleted file mode 100644 index 6c0ba678..00000000 --- a/lib/capybara/wait_until.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Capybara - #Provides timeout similar to standard library Timeout, but avoids threads - class WaitUntil - - class << self - - def timeout(seconds = 1, driver = nil, &block) - start_time = Time.now - - result = nil - - until result - return result if result = yield - - delay = seconds - (Time.now - start_time) - if delay <= 0 - raise TimeoutError - end - - driver && driver.wait_until(delay) - - sleep(0.05) - end - end - - end - end -end diff --git a/spec/wait_until_spec.rb b/spec/timeout_spec.rb similarity index 67% rename from spec/wait_until_spec.rb rename to spec/timeout_spec.rb index eaa66d3c..f9b41bfb 100644 --- a/spec/wait_until_spec.rb +++ b/spec/timeout_spec.rb @@ -1,28 +1,28 @@ require File.expand_path('spec_helper', File.dirname(__FILE__)) require 'capybara' -require 'capybara/wait_until' +require 'capybara/timeout' module Capybara - describe WaitUntil do + describe '.timeout' do it "should return result of yield if it returns true value within timeout" do - WaitUntil.timeout { "hello" }.should == "hello" + Capybara.timeout { "hello" }.should == "hello" end it "should keep trying within timeout" do count = 0 - WaitUntil.timeout { count += 1; count == 5 ? count : nil }.should == 5 + Capybara.timeout { count += 1; count == 5 ? count : nil }.should == 5 end it "should raise Capybara::TimeoutError if block fails to return true within timeout" do running do - WaitUntil.timeout(0.1) { false } + Capybara.timeout(0.1) { false } end.should raise_error(::Capybara::TimeoutError) end end end - \ No newline at end of file +