1
- # rubocop:disable Lint/HandleExceptions
1
+ require_relative 'wait/timer'
2
+
2
3
module Appium
3
4
module Core
4
5
module Wait
@@ -30,19 +31,14 @@ class << self
30
31
def until ( timeout : DEFAULT_TIMEOUT , interval : DEFAULT_INTERVAL , message : nil , ignored : nil , object : nil )
31
32
ignored = Array ( ignored || ::Exception )
32
33
33
- end_time = Time . now + timeout
34
34
last_error = nil
35
35
36
- until Time . now > end_time
37
- begin
38
- return yield ( object )
39
- rescue ::Errno ::ECONNREFUSED => e
40
- raise e
41
- rescue *ignored => last_error
42
- # swallowed
43
- end
44
-
45
- sleep interval
36
+ begin
37
+ run_with_timer ( timeout , interval ) { return yield ( object ) }
38
+ rescue ::Errno ::ECONNREFUSED => e
39
+ raise e
40
+ rescue *ignored => last_error # rubocop:disable Lint/HandleExceptions
41
+ # swallowed
46
42
end
47
43
48
44
msg = message_for timeout , message
@@ -75,20 +71,17 @@ def until(timeout: DEFAULT_TIMEOUT, interval: DEFAULT_INTERVAL, message: nil, ig
75
71
def until_true ( timeout : DEFAULT_TIMEOUT , interval : DEFAULT_INTERVAL , message : nil , ignored : nil , object : nil )
76
72
ignored = Array ( ignored || ::Exception )
77
73
78
- end_time = Time . now + timeout
79
74
last_error = nil
80
75
81
- until Time . now > end_time
82
- begin
76
+ begin
77
+ run_with_timer ( timeout , interval ) do
83
78
result = yield ( object )
84
79
return result if result
85
- rescue ::Errno ::ECONNREFUSED => e
86
- raise e
87
- rescue *ignored => last_error
88
- # swallowed
89
80
end
90
-
91
- sleep interval
81
+ rescue ::Errno ::ECONNREFUSED => e
82
+ raise e
83
+ rescue *ignored => last_error # rubocop:disable Lint/HandleExceptions
84
+ # swallowed
92
85
end
93
86
94
87
msg = message_for timeout , message
@@ -104,6 +97,17 @@ def message_for(timeout, message)
104
97
msg << ", #{ message } " if message
105
98
msg
106
99
end
100
+
101
+ def run_with_timer ( timeout , interval , &block )
102
+ if timeout . zero?
103
+ block . call # rubocop:disable Performance/RedundantBlockCall
104
+ else
105
+ Timer . wait timeout do
106
+ block . call # rubocop:disable Performance/RedundantBlockCall
107
+ sleep interval
108
+ end
109
+ end
110
+ end
107
111
end # self
108
112
end # module Wait
109
113
0 commit comments