calabash 2.0.0.pre10 → 2.0.0.pre11

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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -17
  3. data/bin/calabash +3 -4
  4. data/lib/calabash.rb +53 -10
  5. data/lib/calabash/android.rb +89 -28
  6. data/lib/calabash/android/adb.rb +32 -20
  7. data/lib/calabash/android/application.rb +1 -1
  8. data/lib/calabash/android/build/builder.rb +1 -1
  9. data/lib/calabash/android/build/java_keystore.rb +1 -1
  10. data/lib/calabash/android/build/resigner.rb +1 -1
  11. data/lib/calabash/android/device.rb +22 -66
  12. data/lib/calabash/android/device/helper_application.rb +95 -0
  13. data/lib/calabash/android/environment.rb +14 -1
  14. data/lib/calabash/android/gestures.rb +6 -22
  15. data/lib/calabash/android/interactions.rb +14 -17
  16. data/lib/calabash/android/lib/.irbrc +9 -1
  17. data/lib/calabash/android/lib/AndroidManifest.xml +23 -2
  18. data/lib/calabash/android/lib/HelperApplication.apk +0 -0
  19. data/lib/calabash/android/lib/HelperApplicationTestServer.apk +0 -0
  20. data/lib/calabash/android/lib/TestServer.apk +0 -0
  21. data/lib/calabash/android/life_cycle.rb +3 -3
  22. data/lib/calabash/android/orientation.rb +8 -8
  23. data/lib/calabash/android/physical_buttons.rb +19 -16
  24. data/lib/calabash/android/server.rb +1 -1
  25. data/lib/calabash/android/text.rb +12 -12
  26. data/lib/calabash/android/web.rb +12 -0
  27. data/lib/calabash/application.rb +3 -0
  28. data/lib/calabash/cli/generate.rb +8 -18
  29. data/lib/calabash/cli/helpers.rb +4 -9
  30. data/lib/calabash/cli/run.rb +1 -1
  31. data/lib/calabash/console_helpers.rb +179 -11
  32. data/lib/calabash/device.rb +4 -19
  33. data/lib/calabash/gestures.rb +292 -198
  34. data/lib/calabash/interactions.rb +3 -40
  35. data/lib/calabash/internal.rb +48 -0
  36. data/lib/calabash/ios.rb +76 -16
  37. data/lib/calabash/ios/automator.rb +9 -0
  38. data/lib/calabash/ios/automator/automator.rb +217 -0
  39. data/lib/calabash/ios/automator/coordinates.rb +37 -0
  40. data/lib/calabash/ios/automator/device_agent.rb +379 -0
  41. data/lib/calabash/ios/conditions.rb +1 -1
  42. data/lib/calabash/ios/console_helpers.rb +2 -2
  43. data/lib/calabash/ios/date_picker.rb +10 -8
  44. data/lib/calabash/ios/device.rb +0 -1
  45. data/lib/calabash/ios/device/device_implementation.rb +9 -21
  46. data/lib/calabash/ios/device/gestures_mixin.rb +53 -55
  47. data/lib/calabash/ios/device/keyboard_mixin.rb +21 -0
  48. data/lib/calabash/ios/device/rotation_mixin.rb +3 -65
  49. data/lib/calabash/ios/gestures.rb +24 -90
  50. data/lib/calabash/ios/interactions.rb +1 -6
  51. data/lib/calabash/ios/lib/.irbrc +9 -2
  52. data/lib/calabash/ios/orientation.rb +8 -8
  53. data/lib/calabash/ios/runtime.rb +14 -14
  54. data/lib/calabash/ios/scroll.rb +25 -17
  55. data/lib/calabash/ios/slider.rb +11 -18
  56. data/lib/calabash/ios/text.rb +20 -74
  57. data/lib/calabash/ios/uia.rb +1 -1
  58. data/lib/calabash/ios/web.rb +10 -0
  59. data/lib/calabash/lib/skeleton/{Gemfile → Gemfile.skeleton} +0 -0
  60. data/lib/calabash/lib/skeleton/config/{cucumber.yml → cucumber.yml.skeleton} +0 -0
  61. data/lib/calabash/lib/skeleton/features/{sample.feature → sample.feature.skeleton} +0 -0
  62. data/lib/calabash/lib/skeleton/features/step_definitions/{calabash_steps.rb → sample_steps.rb.skeleton} +8 -8
  63. data/lib/calabash/lib/skeleton/features/support/{dry_run.rb → dry_run.rb.skeleton} +2 -5
  64. data/lib/calabash/lib/skeleton/features/support/{env.rb → env.rb.skeleton} +2 -8
  65. data/lib/calabash/lib/skeleton/features/support/hooks.rb.skeleton +34 -0
  66. data/lib/calabash/life_cycle.rb +16 -8
  67. data/lib/calabash/location.rb +14 -15
  68. data/lib/calabash/orientation.rb +8 -8
  69. data/lib/calabash/page.rb +1 -4
  70. data/lib/calabash/retry.rb +33 -0
  71. data/lib/calabash/screenshot.rb +3 -3
  72. data/lib/calabash/stubs.rb +21 -0
  73. data/lib/calabash/text.rb +31 -19
  74. data/lib/calabash/utility.rb +41 -8
  75. data/lib/calabash/version.rb +1 -1
  76. data/lib/calabash/wait.rb +177 -192
  77. data/lib/calabash/web.rb +44 -0
  78. metadata +39 -32
  79. data/lib/calabash/ios/device/text_mixin.rb +0 -21
  80. data/lib/calabash/lib/skeleton/features/support/hooks.rb +0 -83
@@ -7,16 +7,15 @@ module Calabash
7
7
 
8
8
  # Utility methods for testing.
9
9
  module Utility
10
-
11
10
  # @!visibility private
12
- def abstract_method!
13
- method_name = if Kernel.method_defined?(:caller_locations)
11
+ def abstract_method!(method_name=nil)
12
+ method_name ||= if Kernel.method_defined?(:caller_locations)
14
13
  caller_locations.first.label
15
14
  else
16
15
  caller.first[/\`(.*)\'/, 1]
17
16
  end
18
17
 
19
- raise AbstractMethodError.new("Abstract method '#{method_name}'")
18
+ raise AbstractMethodError.new("Abstract method '#{method_name.to_s}'")
20
19
  end
21
20
 
22
21
  # @!visibility private
@@ -27,8 +26,8 @@ module Calabash
27
26
  #
28
27
  # @example
29
28
  # # These are equivalent.
30
- # pan("*", percent(20, 50), percent(20, 100))
31
- # pan("*", {x: 20, y: 50}, {x: 20, y: 100})
29
+ # cal.pan("*", percent(20, 50), percent(20, 100))
30
+ # cal.pan("*", {x: 20, y: 50}, {x: 20, y: 100})
32
31
  #
33
32
  # @param [Number] x The value of the x percent.
34
33
  # @param [Number] y The value of the y percent.
@@ -44,8 +43,8 @@ module Calabash
44
43
  #
45
44
  # @example
46
45
  # # These are equivalent.
47
- # tap_coordinate(coordinate(20, 50)
48
- # tap_coordinate({x: 20, y: 50})
46
+ # cal.tap("button", offset: coordinate(20, 50))
47
+ # cal.tap("button", offset: {x: 20, y: 50})
49
48
  #
50
49
  # @param [Number] x The value of the x.
51
50
  # @param [Number] y The value of the y.
@@ -55,5 +54,39 @@ module Calabash
55
54
  end
56
55
 
57
56
  alias_method :coord, :coordinate
57
+
58
+ # @!visibility private
59
+ # Sets the default values for a hash. The hash is not mutated by duplicated
60
+ #
61
+ # @example
62
+ # default_hash_values({a: 'b'}, {a: 'q', b: 'c'}) # => {a: 'b', b: 'c'}
63
+ #
64
+ # @notice
65
+ # This method does not overwrite nil
66
+ def self.default_hash_values(hash, defaults)
67
+ res = hash.dup
68
+
69
+ defaults.each do |key, value|
70
+ unless res.key?(key)
71
+ res[key] = value
72
+ end
73
+ end
74
+
75
+ res
76
+ end
77
+
78
+ # @!visibility private
79
+ def self.used_bundler?
80
+ defined?(Bundler) && !ENV['BUNDLE_BIN_PATH'].nil?
81
+ end
82
+
83
+ # @!visibility private
84
+ def self.bundle_exec_prepend
85
+ if used_bundler?
86
+ 'bundle exec '
87
+ else
88
+ ''
89
+ end
90
+ end
58
91
  end
59
92
  end
@@ -1,5 +1,5 @@
1
1
  module Calabash
2
2
 
3
3
  # @!visibility private
4
- VERSION = "2.0.0.pre10"
4
+ VERSION = "2.0.0.pre11"
5
5
  end
@@ -2,7 +2,7 @@ module Calabash
2
2
 
3
3
  # A public API for waiting for things to happen.
4
4
  module Wait
5
- # @!visibility private
5
+ # Default error indicating a timeout
6
6
  class TimeoutError < RuntimeError
7
7
  end
8
8
 
@@ -13,7 +13,7 @@ module Calabash
13
13
  timeout: Environment::WAIT_TIMEOUT,
14
14
 
15
15
  # default message (String or Proc) if timeout occurs
16
- message: lambda do |options|
16
+ timeout_message: lambda do |options|
17
17
  "Timed out after waiting for #{options[:timeout]} seconds..."
18
18
  end,
19
19
 
@@ -21,52 +21,60 @@ module Calabash
21
21
  retry_frequency: 0.1,
22
22
 
23
23
  # default exception type to raise when the timeout is exceeded
24
- exception_class: Calabash::Wait::TimeoutError,
25
-
26
- # whether to embed a screenshot on failure
27
- screenshot_on_error: true
24
+ exception_class: Calabash::Wait::TimeoutError
28
25
  }
29
26
 
30
27
  # Returns the default wait options.
28
+ #
29
+ # @example
30
+ # # Get the current timeout message
31
+ # Calabash::Wait.default_options[:timeout_message]
32
+ #
33
+ # @example
34
+ # Calabash::Wait.default_options[:timeout] = 60
35
+ #
36
+ # @see @@default_options
31
37
  # @return [Hash] Key/value pairs describing the wait options.
32
38
  def self.default_options
33
39
  @@default_options
34
40
  end
35
41
 
36
- # Sets the default wait options.
37
- # @param [Hash] value The new default wait options.
38
- def self.default_options=(value)
39
- @@default_options = value
40
- end
41
-
42
42
  # Evaluates the block given. If the execution time of the block exceeds
43
- # `timeout` it will raise a TimeoutError.
43
+ # `timeout` it will raise a `exception_class` (default:
44
+ # {Calabash::Wait.default_options
45
+ # Calabash::Wait.default_options[:exception_class]}).
44
46
  #
45
47
  # If you have an explicit or implicit loop in your block, or
46
48
  # you want to limit the possible execution time of your block, use
47
- # `with_timeout`.
49
+ # {Calabash::Wait#with_timeout cal.with_timeout}
48
50
  #
49
51
  # @example
50
- # # If the 'PictureRow' view does not exist, keep scrolling down.
51
- # with_timeout(15, 'Could not find picture row') do
52
- # scroll_down until view_exists?("PictureRow")
52
+ # # If the 'PictureRow' view does not exist, keep panning up.
53
+ # cal.with_timeout(15, 'Could not find picture row') do
54
+ # cal.pan_screen_up until cal.view_exists?("PictureRow")
53
55
  # end
54
56
  #
55
- # # Scroll down **at least once** and continue scrolling down until the
57
+ # @example
58
+ # # Pan up **at least once** and continue pan up until the
56
59
  # # 'PictureRow' exists.
57
- # wait_for(15, 'Could not find picture row') do
58
- # scroll_down
59
- # view_exists?("PictureRow")
60
+ # cal.wait_for('Could not find picture row') do
61
+ # cal.pan_screen_up
62
+ # cal.view_exists?("PictureRow")
60
63
  # end
61
64
  #
62
65
  # @param [Number] timeout The time before failing
63
66
  # @param [String, Proc] timeout_message The error message if timed out
64
- # @param [Class] exception_class The exception type raised if timed out
65
- # @return The returned value of `block`
67
+ # @param [Class] exception_class
68
+ # (default: {Calabash::Wait.default_options
69
+ # Calabash::Wait.default_options[:exception_class]}) The exception type
70
+ # raised if timed out
71
+ # @return The returned value of the block given
66
72
  # @raise [ArgumentError] If an invalid timeout is given (<= 0)
67
73
  # @raise [ArgumentError] If no timeout_message is given
68
74
  # @raise [ArgumentError] If no block is given
69
- def with_timeout(timeout, timeout_message, exception_class = TimeoutError, &block)
75
+ def with_timeout(timeout, timeout_message,
76
+ exception_class: Wait.default_options[:exception_class],
77
+ &block)
70
78
  if timeout_message.nil? ||
71
79
  (timeout_message.is_a?(String) && timeout_message.empty?)
72
80
  raise ArgumentError, 'You must provide a timeout message'
@@ -103,7 +111,7 @@ module Calabash
103
111
  end
104
112
 
105
113
  if failed
106
- fail(exception_class, message)
114
+ raise exception_class, message
107
115
  end
108
116
  end
109
117
 
@@ -113,31 +121,43 @@ module Calabash
113
121
  # If the block does not evaluate to truthy within the given timeout
114
122
  # an TimeoutError will be raised.
115
123
  #
116
- # The default timeout will be `Wait.default_options[:timeout]`.
124
+ # The default timeout will be {Calabash::Wait.default_options
125
+ # Wait.default_options[:timeout]}.
126
+ #
127
+ # @example
128
+ # # Pan up **at least once** and continue pan up until the
129
+ # # 'PictureRow' exists.
130
+ # cal.wait_for('Could not find picture row') do
131
+ # cal.pan_screen_up
132
+ # cal.view_exists?("PictureRow")
133
+ # end
117
134
  #
118
135
  # @see Calabash::Wait#with_timeout
119
- # @see Calabash::Environment::WAIT_TIMEOUT
120
- # @see Calabash::Wait.default_options
121
136
  #
122
137
  # @param [String, Proc] timeout_message The error message if timed out.
123
- # @param [Hash] options Used to control the behavior of the wait.
124
- # @option options [Number] :timeout (30) How long to wait before timing out.
125
- # @option options [Number] :retry_frequency (0.3) How often to check for
126
- # the condition block to be truthy.
127
- # @option options [Boolean] :screenshot_on_error (true) Take a screenshot
128
- # if the block fails to be truthy or an error is raised in the block.
138
+ # @param [Number] timeout (default: {Calabash::Wait.default_options
139
+ # Calabash::Wait.default_options[:timeout]}) The time before
140
+ # @param [Number] retry_frequency (default: {Calabash::Wait.default_options
141
+ # Calabash::Wait.default_options[:retry_frequency]}) How often to check
142
+ # for the block to be truthy
143
+ # @param [Class] exception_class
144
+ # (default: {Calabash::Wait.default_options
145
+ # Calabash::Wait.default_options[:exception_class]}) The exception type
146
+ # raised if timed out
129
147
  # @return The returned value of `block` if it is truthy
130
- def wait_for(timeout_message, options={}, &block)
131
- wait_options = Wait.default_options.merge(options)
132
- timeout = wait_options[:timeout]
133
-
134
- with_timeout(timeout, timeout_message, wait_options[:exception_class]) do
148
+ def wait_for(timeout_message,
149
+ timeout: Calabash::Wait.default_options[:timeout],
150
+ retry_frequency: Calabash::Wait.default_options[:retry_frequency],
151
+ exception_class: Calabash::Wait.default_options[:exception_class],
152
+ &block)
153
+ with_timeout(timeout, timeout_message,
154
+ exception_class: exception_class) do
135
155
  loop do
136
156
  value = block.call
137
157
 
138
158
  return value if value
139
159
 
140
- sleep(wait_options[:retry_frequency])
160
+ sleep(retry_frequency)
141
161
  end
142
162
  end
143
163
  end
@@ -145,62 +165,69 @@ module Calabash
145
165
  # Waits for `query` to match one or more views.
146
166
  #
147
167
  # @example
148
- # wait_for_view({marked: 'mark'})
168
+ # cal.wait_for_view({marked: 'mark'})
149
169
  #
150
170
  # @example
151
- # text = wait_for_view("myview")['text']
171
+ # cal.wait_for_view({marked: 'login'},
172
+ # timeout_message: "Did not see login button")
173
+ #
174
+ # @example
175
+ # text = cal.wait_for_view("myview")['text']
176
+ #
177
+ # @see Calabash::Wait#wait_for for optional parameters
152
178
  #
153
179
  # @param [String, Hash, Calabash::Query] query Query to match view
154
- # @see Calabash::Wait#with_timeout for options
155
180
  # @return [Hash] The first view matching `query`.
156
- def wait_for_view(query, options={})
181
+ # @raise [ViewNotFoundError] If `query` do not match at least one view.
182
+ def wait_for_view(query,
183
+ timeout: Calabash::Wait.default_options[:timeout],
184
+ timeout_message: nil,
185
+ retry_frequency: Calabash::Wait.default_options[:retry_frequency])
157
186
  if query.nil?
158
187
  raise ArgumentError, 'Query cannot be nil'
159
188
  end
160
189
 
161
- defaults = Wait.default_options.dup
162
-
163
- defaults[:message] = lambda do |wait_options|
164
- "Waited #{wait_options[:timeout]} seconds for #{parse_query_list(query)} to match a view"
190
+ timeout_message ||= lambda do |wait_options|
191
+ "Waited #{wait_options[:timeout]} seconds for #{Wait.parse_query_list(query)} to match a view"
165
192
  end
166
193
 
167
- defaults[:exception_class] = ViewNotFoundError
168
-
169
- timeout_options = defaults.merge(options)
170
-
171
- wait_for(timeout_options[:message],
172
- {timeout: timeout_options[:timeout],
173
- exception_class: timeout_options[:exception_class],
174
- retry_frequency: timeout_options[:retry_frequency]}) do
175
- view_exists?(query)
194
+ wait_for(timeout_message,
195
+ timeout: timeout,
196
+ retry_frequency: retry_frequency,
197
+ exception_class: ViewNotFoundError) do
198
+ result = query(query)
199
+ !result.empty? && result
176
200
  end.first
177
201
  end
178
202
 
179
203
  # Waits for all `queries` to simultaneously match at least one view.
180
204
  #
205
+ # @example
206
+ # cal.wait_for_views({id: 'foo'}, {id: 'bar'})
207
+ #
208
+ # @see Calabash::Wait#wait_for for optional parameters
209
+ #
181
210
  # @param [String, Hash, Calabash::Query] queries List of queries or a
182
211
  # query.
183
- #
184
- # @see Calabash::Wait#with_timeout for options
185
- # @return [void] The return value for this method is undefined.
186
- def wait_for_views(*queries, **options)
212
+ # @return The returned value is undefined
213
+ # @raise [ViewNotFoundError] If `queries` do not all match at least one
214
+ # view.
215
+ def wait_for_views(*queries,
216
+ timeout: Calabash::Wait.default_options[:timeout],
217
+ timeout_message: nil,
218
+ retry_frequency: Calabash::Wait.default_options[:retry_frequency])
187
219
  if queries.nil? || queries.any?(&:nil?)
188
220
  raise ArgumentError, 'Query cannot be nil'
189
221
  end
190
222
 
191
- defaults = Wait.default_options.dup
192
- defaults[:message] = lambda do |wait_options|
193
- "Waited #{wait_options[:timeout]} seconds for #{parse_query_list(queries)} to each match a view"
223
+ timeout_message ||= lambda do |wait_options|
224
+ "Waited #{wait_options[:timeout]} seconds for #{Wait.parse_query_list(queries)} to each match a view"
194
225
  end
195
226
 
196
- defaults[:exception_class] = ViewNotFoundError
197
-
198
- timeout_options = defaults.merge(options)
199
-
200
- wait_for(timeout_options[:message],
201
- {timeout: timeout_options[:timeout],
202
- exception_class: timeout_options[:exception_class],
203
- retry_frequency: timeout_options[:retry_frequency]}) do
227
+ wait_for(timeout_message,
228
+ timeout: timeout,
229
+ retry_frequency: retry_frequency,
230
+ exception_class: ViewNotFoundError) do
204
231
  views_exist?(*queries)
205
232
  end
206
233
 
@@ -211,54 +238,64 @@ module Calabash
211
238
 
212
239
  # Waits for `query` not to match any views
213
240
  #
241
+ # @example
242
+ # cal.wait_for_no_view({marked: 'mark'})
243
+ #
244
+ # @example
245
+ # cal.wait_for_no_view({marked: 'login'},
246
+ # timeout_message: "Login button did not disappear")
247
+ #
248
+ # @see Calabash::Wait#wait_for for optional parameters
249
+ #
214
250
  # @param [String, Hash, Calabash::Query] query Query to match view
215
- # @see Calabash::Wait#with_timeout for options
216
- def wait_for_no_view(query, options={})
251
+ # @raise [ViewFoundError] If `query` do not match at least one view.
252
+ def wait_for_no_view(query,
253
+ timeout: Calabash::Wait.default_options[:timeout],
254
+ timeout_message: nil,
255
+ retry_frequency: Calabash::Wait.default_options[:retry_frequency])
217
256
  if query.nil?
218
257
  raise ArgumentError, 'Query cannot be nil'
219
258
  end
220
259
 
221
- defaults = Wait.default_options.dup
222
- defaults[:message] = lambda do |wait_options|
223
- "Waited #{wait_options[:timeout]} seconds for #{parse_query_list(query)} to not match any view"
260
+ timeout_message ||= lambda do |wait_options|
261
+ "Waited #{wait_options[:timeout]} seconds for #{Wait.parse_query_list(query)} to not match any view"
224
262
  end
225
263
 
226
- defaults[:exception_class] = ViewFoundError
227
-
228
- timeout_options = defaults.merge(options)
229
-
230
- wait_for(timeout_options[:message],
231
- {timeout: timeout_options[:timeout],
232
- exception_class: timeout_options[:exception_class],
233
- retry_frequency: timeout_options[:retry_frequency]}) do
264
+ wait_for(timeout_message,
265
+ timeout: timeout,
266
+ retry_frequency: retry_frequency,
267
+ exception_class: ViewFoundError) do
234
268
  !view_exists?(query)
235
269
  end
236
270
  end
237
271
 
238
272
  # Waits for all `queries` to simultaneously match no views
239
273
  #
274
+ # @example
275
+ # cal.wait_for_no_views({id: 'foo'}, {id: 'bar'})
276
+ #
277
+ # @see Calabash::Wait#wait_for for optional parameters
278
+ #
240
279
  # @param [String, Hash, Calabash::Query] queries List of queries or a
241
280
  # query.
242
- #
243
- # @see Calabash::Wait#with_timeout for options
244
- def wait_for_no_views(*queries, **options)
281
+ # @raise [ViewNotFoundError] If `queries` do not all match at least one
282
+ # view.
283
+ def wait_for_no_views(*queries,
284
+ timeout: Calabash::Wait.default_options[:timeout],
285
+ timeout_message: nil,
286
+ retry_frequency: Calabash::Wait.default_options[:retry_frequency])
245
287
  if queries.nil? || queries.any?(&:nil?)
246
288
  raise ArgumentError, 'Query cannot be nil'
247
289
  end
248
290
 
249
- defaults = Wait.default_options.dup
250
- defaults[:message] = lambda do |wait_options|
251
- "Waited #{wait_options[:timeout]} seconds for #{parse_query_list(queries)} to each not match any view"
291
+ timeout_message ||= lambda do |wait_options|
292
+ "Waited #{wait_options[:timeout]} seconds for #{Wait.parse_query_list(queries)} to each not match any view"
252
293
  end
253
294
 
254
- defaults[:exception_class] = ViewFoundError
255
-
256
- timeout_options = defaults.merge(options)
257
-
258
- wait_for(timeout_options[:message],
259
- {timeout: timeout_options[:timeout],
260
- exception_class: timeout_options[:exception_class],
261
- retry_frequency: timeout_options[:retry_frequency]}) do
295
+ wait_for(timeout_message,
296
+ timeout: timeout,
297
+ retry_frequency: retry_frequency,
298
+ exception_class: ViewFoundError) do
262
299
  !views_exist?(*queries)
263
300
  end
264
301
  end
@@ -266,7 +303,7 @@ module Calabash
266
303
  # Does the given `query` match at least one view?
267
304
  #
268
305
  # @param [String, Hash, Calabash::Query] query Query to match view
269
- # @return [Object] Returns truthy if the `query` matches at least one view
306
+ # @return [Boolean] Returns true if the `query` matches at least one view
270
307
  # @raise [ArgumentError] If given an invalid `query`
271
308
  def view_exists?(query)
272
309
  if query.nil?
@@ -275,19 +312,15 @@ module Calabash
275
312
 
276
313
  result = query(query)
277
314
 
278
- if result.empty?
279
- false
280
- else
281
- result
282
- end
315
+ !result.empty?
283
316
  end
284
317
 
285
318
  # Does the given `queries` all match at least one view?
286
319
  #
287
320
  # @param [String, Hash, Calabash::Query] queries List of queries or a
288
321
  # query
289
- #
290
- # @return Returns truthy if the `queries` all match at least one view
322
+ # @return [Boolean] Returns true if the `queries` all match at least one
323
+ # view
291
324
  # @raise [ArgumentError] If given an invalid list of queries
292
325
  def views_exist?(*queries)
293
326
  if queries.nil? || queries.any?(&:nil?)
@@ -296,11 +329,7 @@ module Calabash
296
329
 
297
330
  results = queries.map{|query| view_exists?(query)}
298
331
 
299
- if results.all?
300
- results
301
- else
302
- false
303
- end
332
+ results.all?
304
333
  end
305
334
 
306
335
  # Expect `query` to match at least one view. Raise an exception if it does
@@ -316,7 +345,7 @@ module Calabash
316
345
 
317
346
  unless view_exists?(query)
318
347
  raise ViewNotFoundError,
319
- "No view matched #{parse_query_list(query)}"
348
+ "No view matched #{Wait.parse_query_list(query)}"
320
349
  end
321
350
 
322
351
  true
@@ -339,7 +368,7 @@ module Calabash
339
368
 
340
369
  unless views_exist?(*queries)
341
370
  raise ViewNotFoundError,
342
- "Not all queries #{parse_query_list(queries)} matched a view"
371
+ "Not all queries #{Wait.parse_query_list(queries)} matched a view"
343
372
  end
344
373
 
345
374
  true
@@ -358,7 +387,7 @@ module Calabash
358
387
  end
359
388
 
360
389
  if view_exists?(query)
361
- raise ViewFoundError, "A view matched #{parse_query_list(query)}"
390
+ raise ViewFoundError, "A view matched #{Wait.parse_query_list(query)}"
362
391
  end
363
392
 
364
393
  true
@@ -379,7 +408,7 @@ module Calabash
379
408
 
380
409
  if queries.map{|query| view_exists?(query)}.any?
381
410
  raise ViewFoundError,
382
- "Some views matched #{parse_query_list(queries)}"
411
+ "Some views matched #{Wait.parse_query_list(queries)}"
383
412
  end
384
413
 
385
414
  true
@@ -389,84 +418,52 @@ module Calabash
389
418
 
390
419
  # Waits for a view containing `text`.
391
420
  #
421
+ # @see Calabash::Wait#wait_for_view
422
+ #
392
423
  # @param text [String] Text to look for
393
424
  # @return [Object] The view matched by the text query
394
- # @see Calabash::Wait#wait_for_view
395
- def wait_for_text(text, options={})
396
- wait_for_view("* {text CONTAINS[c] '#{text}'}", options)
425
+ def wait_for_text(text,
426
+ timeout: Calabash::Wait.default_options[:timeout],
427
+ timeout_message: nil,
428
+ retry_frequency: Calabash::Wait.default_options[:retry_frequency])
429
+
430
+ wait_for_view("* {text CONTAINS[c] '#{text}'}",
431
+ timeout: timeout,
432
+ timeout_message: timeout_message,
433
+ retry_frequency: retry_frequency)
397
434
  end
398
435
 
399
436
  # Waits for no views containing `text`.
400
437
  #
438
+ # @see Calabash::Wait#wait_for_view
439
+ #
401
440
  # @param text [String] Text to look for
402
- # @see Calabash::Wait#wait_for_no_view
403
- def wait_for_text_to_disappear(text, options={})
404
- wait_for_no_view("* {text CONTAINS[c] '#{text}'}", options)
441
+ # @return [Object] The view matched by the text query
442
+ def wait_for_no_text(text,
443
+ timeout: Calabash::Wait.default_options[:timeout],
444
+ timeout_message: nil,
445
+ retry_frequency: Calabash::Wait.default_options[:retry_frequency])
446
+
447
+ wait_for_no_view("* {text CONTAINS[c] '#{text}'}",
448
+ timeout: timeout,
449
+ timeout_message: timeout_message,
450
+ retry_frequency: retry_frequency)
405
451
  end
406
452
 
407
- # Raises an exception. Embeds a screenshot if
408
- # Calabash::Wait#default_options[:screenshot_on_error] is true. The fail
409
- # method should be used when the test should fail and stop executing. Do
410
- # not use fail if you intent on rescuing the error raised without
411
- # re-raising.
412
- #
413
- # @example
414
- # unless view_exists?("* marked:'login'")
415
- # fail('Did not see "login" button')
416
- # end
417
- #
418
- # @example
419
- # entries = query("ListEntry").length
420
- #
421
- # if entries < 5
422
- # fail(MyError, "Should see at least 5 entries, saw #{entries}")
423
- # end
424
- #
425
- # @raise [RuntimeError, StandardError] By default, raises a RuntimeError with
426
- # `message`. You can pass in your own Exception class to override the
427
- # the default behavior.
428
- def fail(*several_variants)
429
- arg0 = several_variants[0]
430
- arg1 = several_variants[1]
431
-
432
- if arg1.nil?
433
- exception_type = RuntimeError
434
- message = arg0
435
- else
436
- exception_type = arg0
437
- message = arg1
438
- end
439
-
440
- screenshot_embed if Wait.default_options[:screenshot_on_error]
441
-
442
- raise exception_type, message
453
+ # Query matched an unexpected set of views
454
+ class UnexpectedMatchError < RuntimeError
443
455
  end
444
456
 
445
- # Raises an exception and always embeds a screenshot
446
- #
447
- # @raise [RuntimeError, StandardError] By default, raises a RuntimeError with
448
- # `message`. You can pass in your own Exception class to override the
449
- # the default behavior.
450
- # @see Wait#fail
451
- def screenshot_and_raise(*several_variants)
452
- arg0 = several_variants[0]
453
- arg1 = several_variants[1]
454
-
455
- if arg1.nil?
456
- exception_type = RuntimeError
457
- message = arg0
458
- else
459
- exception_type = arg0
460
- message = arg1
461
- end
462
-
463
- screenshot_embed
464
-
465
- raise exception_type, message
457
+ # View was found
458
+ class ViewFoundError < UnexpectedMatchError
466
459
  end
467
460
 
461
+ # View was not found
462
+ class ViewNotFoundError < UnexpectedMatchError
463
+ end
464
+
468
465
  # @!visibility private
469
- def parse_query_list(queries)
466
+ def self.parse_query_list(queries)
470
467
  unless queries.is_a?(Array)
471
468
  queries = [queries]
472
469
  end
@@ -484,18 +481,6 @@ module Calabash
484
481
  end
485
482
  end
486
483
 
487
- # Query matched an unexpected set of views
488
- class UnexpectedMatchError < RuntimeError
489
- end
490
-
491
- # View was found
492
- class ViewFoundError < UnexpectedMatchError
493
- end
494
-
495
- # View was not found
496
- class ViewNotFoundError < UnexpectedMatchError
497
- end
498
-
499
484
  # @!visibility private
500
485
  class PrivateWaitTimeoutError < RuntimeError
501
486
  end