lib/watir/waiter.rb in commonwatir-1.6.2 vs lib/watir/waiter.rb in commonwatir-1.6.5

- old
+ new

@@ -1,92 +1,92 @@ -require 'watir/exceptions' - -module Watir - - def wait_until(*args) - Waiter.wait_until(*args) {yield} - end - -class TimeKeeper - attr_reader :sleep_time - def initialize - @sleep_time = 0.0 - end - def sleep seconds - @sleep_time += Kernel.sleep seconds - end - def now - Time.now - end -end - -class Waiter - # This is an interface to a TimeKeeper which proxies - # calls to "sleep" and "Time.now". - # Useful for unit testing Waiter. - attr_accessor :timer - - # How long to wait between each iteration through the wait_until - # loop. In seconds. - attr_accessor :polling_interval - - # Timeout for wait_until. - attr_accessor :timeout - - @@default_polling_interval = 0.5 - @@default_timeout = 60.0 - - def initialize(timeout=@@default_timeout, - polling_interval=@@default_polling_interval) - @timeout = timeout - @polling_interval = polling_interval - @timer = TimeKeeper.new - end - - # Execute the provided block until either (1) it returns true, or - # (2) the timeout (in seconds) has been reached. If the timeout is reached, - # a TimeOutException will be raised. The block will always - # execute at least once. - # - # waiter = Waiter.new(5) - # waiter.wait_until {puts 'hello'} - # - # This code will print out "hello" for five seconds, and then raise a - # Watir::TimeOutException. - def wait_until # block - start_time = now - until yield do - if (duration = now - start_time) > @timeout - raise Watir::Exception::TimeOutException.new(duration, @timeout), - "Timed out after #{duration} seconds." - end - sleep @polling_interval - end - end - - # Execute the provided block until either (1) it returns true, or - # (2) the timeout (in seconds) has been reached. If the timeout is reached, - # a TimeOutException will be raised. The block will always - # execute at least once. - # - # Waiter.wait_until(5) {puts 'hello'} - # - # This code will print out "hello" for five seconds, and then raise a - # Watir::TimeOutException. - - # IDEA: wait_until: remove defaults from Waiter.wait_until - def self.wait_until(timeout=@@default_timeout, - polling_interval=@@default_polling_interval) - waiter = new(timeout, polling_interval) - waiter.wait_until { yield } - end - - private - def sleep seconds - @timer.sleep seconds - end - def now - @timer.now - end -end - +require 'watir/exceptions' + +module Watir + + def wait_until(*args) + Waiter.wait_until(*args) {yield} + end + +class TimeKeeper + attr_reader :sleep_time + def initialize + @sleep_time = 0.0 + end + def sleep seconds + @sleep_time += Kernel.sleep seconds + end + def now + Time.now + end +end + +class Waiter + # This is an interface to a TimeKeeper which proxies + # calls to "sleep" and "Time.now". + # Useful for unit testing Waiter. + attr_accessor :timer + + # How long to wait between each iteration through the wait_until + # loop. In seconds. + attr_accessor :polling_interval + + # Timeout for wait_until. + attr_accessor :timeout + + @@default_polling_interval = 0.5 + @@default_timeout = 60.0 + + def initialize(timeout=@@default_timeout, + polling_interval=@@default_polling_interval) + @timeout = timeout + @polling_interval = polling_interval + @timer = TimeKeeper.new + end + + # Execute the provided block until either (1) it returns true, or + # (2) the timeout (in seconds) has been reached. If the timeout is reached, + # a TimeOutException will be raised. The block will always + # execute at least once. + # + # waiter = Waiter.new(5) + # waiter.wait_until {puts 'hello'} + # + # This code will print out "hello" for five seconds, and then raise a + # Watir::TimeOutException. + def wait_until # block + start_time = now + until yield do + if (duration = now - start_time) > @timeout + raise Watir::Exception::TimeOutException.new(duration, @timeout), + "Timed out after #{duration} seconds." + end + sleep @polling_interval + end + end + + # Execute the provided block until either (1) it returns true, or + # (2) the timeout (in seconds) has been reached. If the timeout is reached, + # a TimeOutException will be raised. The block will always + # execute at least once. + # + # Waiter.wait_until(5) {puts 'hello'} + # + # This code will print out "hello" for five seconds, and then raise a + # Watir::TimeOutException. + + # IDEA: wait_until: remove defaults from Waiter.wait_until + def self.wait_until(timeout=@@default_timeout, + polling_interval=@@default_polling_interval) + waiter = new(timeout, polling_interval) + waiter.wait_until { yield } + end + + private + def sleep seconds + @timer.sleep seconds + end + def now + @timer.now + end +end + end # module \ No newline at end of file