calabash 1.2.1 → 1.9.9.pre1

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 (137) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +39 -0
  3. data/LICENSE +204 -21
  4. data/README.md +36 -6
  5. data/VERSIONING.md +16 -0
  6. data/bin/calabash +95 -0
  7. data/lib/calabash.rb +185 -1
  8. data/lib/calabash/android.rb +64 -0
  9. data/lib/calabash/android/adb.rb +277 -0
  10. data/lib/calabash/android/application.rb +110 -0
  11. data/lib/calabash/android/build.rb +12 -0
  12. data/lib/calabash/android/build/application.rb +13 -0
  13. data/lib/calabash/android/build/build_error.rb +11 -0
  14. data/lib/calabash/android/build/builder.rb +119 -0
  15. data/lib/calabash/android/build/java_keystore.rb +177 -0
  16. data/lib/calabash/android/build/resigner.rb +56 -0
  17. data/lib/calabash/android/build/test_server.rb +27 -0
  18. data/lib/calabash/android/console_helpers.rb +44 -0
  19. data/lib/calabash/android/cucumber.rb +3 -0
  20. data/lib/calabash/android/device.rb +965 -0
  21. data/lib/calabash/android/environment.rb +470 -0
  22. data/lib/calabash/android/gestures.rb +369 -0
  23. data/lib/calabash/android/interactions.rb +45 -0
  24. data/lib/calabash/android/lib/.irbrc +55 -0
  25. data/lib/calabash/android/lib/AndroidManifest.xml +51 -0
  26. data/lib/calabash/android/lib/TestServer.apk +0 -0
  27. data/lib/calabash/android/lib/calmd5/arm64-v8a/calmd5 +0 -0
  28. data/lib/calabash/android/lib/calmd5/arm64-v8a/calmd5-pie +0 -0
  29. data/lib/calabash/android/lib/calmd5/armeabi-v7a/calmd5 +0 -0
  30. data/lib/calabash/android/lib/calmd5/armeabi-v7a/calmd5-pie +0 -0
  31. data/lib/calabash/android/lib/calmd5/armeabi/calmd5 +0 -0
  32. data/lib/calabash/android/lib/calmd5/armeabi/calmd5-pie +0 -0
  33. data/lib/calabash/android/lib/calmd5/mips/calmd5 +0 -0
  34. data/lib/calabash/android/lib/calmd5/mips/calmd5-pie +0 -0
  35. data/lib/calabash/android/lib/calmd5/mips64/calmd5 +0 -0
  36. data/lib/calabash/android/lib/calmd5/mips64/calmd5-pie +0 -0
  37. data/lib/calabash/android/lib/calmd5/x86/calmd5 +0 -0
  38. data/lib/calabash/android/lib/calmd5/x86/calmd5-pie +0 -0
  39. data/lib/calabash/android/lib/calmd5/x86_64/calmd5 +0 -0
  40. data/lib/calabash/android/lib/calmd5/x86_64/calmd5-pie +0 -0
  41. data/lib/calabash/android/lib/screenshot_taker.jar +0 -0
  42. data/lib/calabash/android/life_cycle.rb +37 -0
  43. data/lib/calabash/android/orientation.rb +30 -0
  44. data/lib/calabash/android/physical_buttons.rb +39 -0
  45. data/lib/calabash/android/screenshot.rb +9 -0
  46. data/lib/calabash/android/scroll.rb +5 -0
  47. data/lib/calabash/android/server.rb +10 -0
  48. data/lib/calabash/android/text.rb +54 -0
  49. data/lib/calabash/application.rb +74 -0
  50. data/lib/calabash/cli.rb +12 -0
  51. data/lib/calabash/cli/build.rb +33 -0
  52. data/lib/calabash/cli/console.rb +90 -0
  53. data/lib/calabash/cli/generate.rb +110 -0
  54. data/lib/calabash/cli/helpers.rb +130 -0
  55. data/lib/calabash/cli/resign.rb +33 -0
  56. data/lib/calabash/cli/run.rb +99 -0
  57. data/lib/calabash/cli/setup_keystore.rb +39 -0
  58. data/lib/calabash/color.rb +32 -0
  59. data/lib/calabash/console_helpers.rb +90 -0
  60. data/lib/calabash/defaults.rb +56 -0
  61. data/lib/calabash/device.rb +401 -0
  62. data/lib/calabash/environment.rb +75 -0
  63. data/lib/calabash/gestures.rb +384 -0
  64. data/lib/calabash/http.rb +8 -0
  65. data/lib/calabash/http/error.rb +15 -0
  66. data/lib/calabash/http/request.rb +42 -0
  67. data/lib/calabash/http/retriable_client.rb +156 -0
  68. data/lib/calabash/interactions.rb +105 -0
  69. data/lib/calabash/ios.rb +37 -0
  70. data/lib/calabash/ios/application.rb +119 -0
  71. data/lib/calabash/ios/conditions.rb +79 -0
  72. data/lib/calabash/ios/console_helpers.rb +72 -0
  73. data/lib/calabash/ios/device.rb +24 -0
  74. data/lib/calabash/ios/device/device_implementation.rb +779 -0
  75. data/lib/calabash/ios/device/gestures_mixin.rb +167 -0
  76. data/lib/calabash/ios/device/keyboard_mixin.rb +133 -0
  77. data/lib/calabash/ios/device/physical_device_mixin.rb +266 -0
  78. data/lib/calabash/ios/device/rotation_mixin.rb +124 -0
  79. data/lib/calabash/ios/device/routes/backdoor_route_mixin.rb +86 -0
  80. data/lib/calabash/ios/device/routes/condition_route_mixin.rb +62 -0
  81. data/lib/calabash/ios/device/routes/error.rb +8 -0
  82. data/lib/calabash/ios/device/routes/handle_route_mixin.rb +102 -0
  83. data/lib/calabash/ios/device/routes/map_route_mixin.rb +38 -0
  84. data/lib/calabash/ios/device/routes/playback_route_mixin.rb +70 -0
  85. data/lib/calabash/ios/device/routes/response_parser.rb +48 -0
  86. data/lib/calabash/ios/device/routes/uia_route_mixin.rb +238 -0
  87. data/lib/calabash/ios/device/runtime_attributes.rb +184 -0
  88. data/lib/calabash/ios/device/status_bar_mixin.rb +17 -0
  89. data/lib/calabash/ios/device/text_mixin.rb +19 -0
  90. data/lib/calabash/ios/device/uia_keyboard_mixin.rb +188 -0
  91. data/lib/calabash/ios/device/uia_mixin.rb +12 -0
  92. data/lib/calabash/ios/environment.rb +41 -0
  93. data/lib/calabash/ios/interactions.rb +10 -0
  94. data/lib/calabash/ios/lib/.irbrc +55 -0
  95. data/lib/calabash/ios/lib/recordings/rotate_left_home_down_ipad.base64 +2 -0
  96. data/lib/calabash/ios/lib/recordings/rotate_left_home_down_iphone.base64 +2 -0
  97. data/lib/calabash/ios/lib/recordings/rotate_left_home_left_ipad.base64 +2 -0
  98. data/lib/calabash/ios/lib/recordings/rotate_left_home_left_iphone.base64 +2 -0
  99. data/lib/calabash/ios/lib/recordings/rotate_left_home_right_ipad.base64 +2 -0
  100. data/lib/calabash/ios/lib/recordings/rotate_left_home_right_iphone.base64 +2 -0
  101. data/lib/calabash/ios/lib/recordings/rotate_left_home_up_ipad.base64 +2 -0
  102. data/lib/calabash/ios/lib/recordings/rotate_left_home_up_iphone.base64 +2 -0
  103. data/lib/calabash/ios/lib/recordings/rotate_right_home_down_ipad.base64 +2 -0
  104. data/lib/calabash/ios/lib/recordings/rotate_right_home_down_iphone.base64 +2 -0
  105. data/lib/calabash/ios/lib/recordings/rotate_right_home_left_ipad.base64 +2 -0
  106. data/lib/calabash/ios/lib/recordings/rotate_right_home_left_iphone.base64 +2 -0
  107. data/lib/calabash/ios/lib/recordings/rotate_right_home_right_ipad.base64 +2 -0
  108. data/lib/calabash/ios/lib/recordings/rotate_right_home_right_iphone.base64 +2 -0
  109. data/lib/calabash/ios/lib/recordings/rotate_right_home_up_ipad.base64 +2 -0
  110. data/lib/calabash/ios/lib/recordings/rotate_right_home_up_iphone.base64 +2 -0
  111. data/lib/calabash/ios/orientation.rb +117 -0
  112. data/lib/calabash/ios/scroll.rb +504 -0
  113. data/lib/calabash/ios/server.rb +73 -0
  114. data/lib/calabash/ios/text.rb +248 -0
  115. data/lib/calabash/ios/uia.rb +24 -0
  116. data/lib/calabash/lib/skeleton/config/cucumber.yml +6 -0
  117. data/lib/calabash/lib/skeleton/features/sample.feature +5 -0
  118. data/lib/calabash/lib/skeleton/features/step_definitions/calabash_steps.rb +29 -0
  119. data/lib/calabash/lib/skeleton/features/support/env.rb +54 -0
  120. data/lib/calabash/lib/skeleton/features/support/hooks.rb +83 -0
  121. data/lib/calabash/life_cycle.rb +111 -0
  122. data/lib/calabash/location.rb +51 -0
  123. data/lib/calabash/logger.rb +87 -0
  124. data/lib/calabash/orientation.rb +84 -0
  125. data/lib/calabash/page.rb +35 -0
  126. data/lib/calabash/patch.rb +14 -0
  127. data/lib/calabash/patch/array.rb +16 -0
  128. data/lib/calabash/patch/run_loop.rb +90 -0
  129. data/lib/calabash/query.rb +160 -0
  130. data/lib/calabash/query_result.rb +85 -0
  131. data/lib/calabash/screenshot.rb +89 -0
  132. data/lib/calabash/server.rb +16 -0
  133. data/lib/calabash/text.rb +76 -0
  134. data/lib/calabash/utility.rb +58 -0
  135. data/lib/calabash/version.rb +3 -1
  136. data/lib/calabash/wait.rb +474 -0
  137. metadata +462 -24
@@ -0,0 +1,369 @@
1
+ require 'json'
2
+
3
+ module Calabash
4
+ module Android
5
+ module Gestures
6
+ class MultiTouchGesture
7
+ attr_reader :gestures
8
+ attr_accessor :timeout
9
+
10
+ def initialize(gestures = [])
11
+ unless gestures.is_a?(Array)
12
+ gestures = [gestures]
13
+ end
14
+
15
+ @gestures = gestures
16
+ @timeout = Calabash::Gestures::DEFAULT_GESTURE_WAIT_TIMEOUT
17
+ end
18
+
19
+ def +(gesture_collection)
20
+ MultiTouchGesture.new(@gestures + gesture_collection.gestures)
21
+ end
22
+
23
+ def add_gesture
24
+ gestures = @gestures
25
+ MultiTouchGesture.new(gestures + gesture_collection.gestures)
26
+ end
27
+
28
+ def <<(gesture)
29
+ @gestures << gesture
30
+ end
31
+
32
+ def add_touch(touch, index=0)
33
+ gestures = @gestures
34
+ gestures[index] << touch
35
+ MultiTouchGesture.new(gestures)
36
+ end
37
+
38
+ def add_touch!(touch, index=0)
39
+ @gestures = add_touch(touch, index).gestures
40
+ end
41
+
42
+ def merge(multi_touch_gesture)
43
+ MultiTouchGesture.new(gestures.map.with_index {|gesture, index| gesture + multi_touch_gesture.gestures[index]})
44
+ end
45
+
46
+ def merge!(multi_touch_gesture)
47
+ @gestures = merge(multi_touch_gesture).gestures
48
+ end
49
+
50
+ def to_json(*object)
51
+ {
52
+ query_timeout: @timeout.to_f,
53
+ gestures: @gestures
54
+ }.to_json(*object)
55
+ end
56
+
57
+ def query=(query)
58
+ @gestures.each {|gesture| gesture.query=query}
59
+ end
60
+
61
+ def reset_query
62
+ @gestures.each {|gesture| gesture.reset_query}
63
+ end
64
+
65
+ def offset=(offset)
66
+ @gestures.each {|gesture| gesture.offset=offset}
67
+ end
68
+
69
+ def max_execution_time
70
+ (@gestures.map {|gesture| gesture.max_execution_time}).max
71
+ end
72
+
73
+ def queries
74
+ gestures.map(&:queries).flatten.uniq.reject(&:nil?)
75
+ end
76
+ end
77
+
78
+ class Gesture
79
+ attr_reader :touches
80
+
81
+ def initialize(touches = [], query = nil)
82
+ unless touches.is_a?(Array)
83
+ touches = [touches]
84
+ end
85
+
86
+ @touches = []
87
+
88
+ touches.each do |touch|
89
+ @touches << Touch.new(touch)
90
+ end
91
+
92
+ @query = query
93
+ end
94
+
95
+ def from(touch)
96
+ to(touch)
97
+ end
98
+
99
+ def to(touch)
100
+ if touch.is_a?(Hash)
101
+ touch = Touch.new(touch)
102
+ end
103
+
104
+ unless (last_touch = @touches.last).nil?
105
+ touch.x ||= last_touch.x
106
+ touch.y ||= last_touch.y
107
+ end
108
+
109
+ Gesture.new(@touches << touch, @query)
110
+ end
111
+
112
+ def +(gesture)
113
+ Gesture.new(@touches + gesture.touches, @query)
114
+ end
115
+
116
+ def add_touch(touch)
117
+ touches = @touches
118
+ Gesture.new(touches << touch, @query)
119
+ end
120
+
121
+ def <<(touch)
122
+ @touches << touch
123
+ end
124
+
125
+ def to_json(*object)
126
+ {
127
+ query_string: @query && @query.to_s,
128
+ touches: @touches
129
+ }.to_json(*object)
130
+ end
131
+
132
+ def query=(query)
133
+ @query = query
134
+ end
135
+
136
+ def reset_query
137
+ touches.each {|touch| touch.query=nil}
138
+ end
139
+
140
+ def offset=(offset)
141
+ @touches.each {|touch| touch.offset=offset}
142
+ end
143
+
144
+ def max_execution_time
145
+ (@touches.map {|touch| touch.wait + touch.time}).reduce(:+)
146
+ end
147
+
148
+ def queries
149
+ (@touches.map(&:query).uniq + [@query]).reject(&:nil?)
150
+ end
151
+
152
+ def self.with_parameters(multi_touch_gesture, params={})
153
+ multi_touch_gesture.query = params[:query] if params[:query]
154
+ multi_touch_gesture.timeout = params[:timeout] if params[:timeout]
155
+
156
+ multi_touch_gesture
157
+ end
158
+
159
+ def self.generate_tap(touch_hash)
160
+ MultiTouchGesture.new(Gesture.new(Touch.new(touch_hash)))
161
+ end
162
+
163
+ def self.tap(opt={})
164
+ touch = opt[:touch] || {}
165
+ touch[:x] ||= (opt[:x] || 50)
166
+ touch[:y] ||= (opt[:y] || 50)
167
+ touch[:time] ||= (opt[:time] || 0.1)
168
+ touch[:release] = touch[:release].nil? ? (opt[:release].nil? ? true : opt[:release]) : touch[:release]
169
+ touch[:wait] ||= (opt[:wait] || 0)
170
+ touch[:offset] ||= opt[:offset]
171
+
172
+ generate_tap(touch)
173
+ end
174
+
175
+ def self.double_tap(opt={})
176
+ self.tap(opt).merge(self.tap({wait: 0.1}.merge(opt)))
177
+ end
178
+
179
+ def self.generate_swipe(from_hash, to_hash, opt={})
180
+ from_params = from_hash.merge(opt).merge(opt[:from] || {})
181
+ to_params = {time: 0}.merge(to_hash).merge(opt[:to] || {})
182
+
183
+ if opt[:flick]
184
+ to_params.merge!(wait: 0)
185
+ else
186
+ to_params = {wait: 0.2}.merge(to_params)
187
+ end
188
+
189
+ self.tap({release: false}.merge(from_params)).merge(self.tap(to_params))
190
+ end
191
+
192
+ def self.swipe(direction, opt={})
193
+ from = {x: 50, y: 50}
194
+ to = {x: 50, y: 50}
195
+
196
+ case direction
197
+ when :left
198
+ from[:x] = 90
199
+ to[:x] = 10
200
+ when :right
201
+ from[:x] = 10
202
+ to[:x] = 90
203
+ when :up
204
+ from[:y] = 90
205
+ to[:y] = 10
206
+ when :down
207
+ from[:y] = 10
208
+ to[:y] = 90
209
+ else
210
+ raise "Cannot swipe in #{direction}"
211
+ end
212
+
213
+ opt[:time] ||= 0.3
214
+
215
+ generate_swipe(from, to, opt)
216
+ end
217
+
218
+ def self.generate_pinch_out(from_arr, to_arr, opt={})
219
+ self.generate_swipe(from_arr[0], to_arr[0], opt) + self.generate_swipe(from_arr[1], to_arr[1], opt)
220
+ end
221
+
222
+ def self.pinch(direction, opt={})
223
+ opt[:from] ||= []
224
+ opt[:from][0] = (opt[:from][0] || {}).merge(opt)
225
+ opt[:from][1] = (opt[:from][1] || {}).merge(opt)
226
+ opt[:to] ||= []
227
+ opt[:to][0] ||= {}
228
+ opt[:to][1] ||= {}
229
+
230
+ from = [{x: 40, y: 40}.merge(opt[:from][0]), {x: 60, y: 60}.merge(opt[:from][1])]
231
+ to = [{x: 10, y: 10}.merge(opt[:to][0]), {x: 90, y: 90}.merge(opt[:to][1])]
232
+
233
+ case direction
234
+ when :out
235
+
236
+ when :in
237
+ from,to = to,from
238
+ else
239
+ raise "Cannot pinch #{direction}"
240
+ end
241
+
242
+ generate_pinch_out(from, to)
243
+ end
244
+ end
245
+
246
+ class Touch
247
+ attr_accessor :x, :y, :offset_x, :offset_y, :wait, :time, :release, :query
248
+
249
+ def initialize(touch)
250
+ if touch.is_a?(Touch)
251
+ touch = touch.to_hash
252
+ end
253
+
254
+ touch[:offset] ||= {}
255
+ touch[:offset_x] ||= touch[:offset][:x]
256
+ touch[:offset_y] ||= touch[:offset][:y]
257
+
258
+ @x = touch[:x]
259
+ @y = touch[:y]
260
+ @offset_x = touch[:offset_x] || 0
261
+ @offset_y = touch[:offset_y] || 0
262
+ @wait = touch[:wait] || 0
263
+ @time = touch[:time] || 0
264
+ @release = touch[:release].nil? ? false : touch[:release]
265
+ @query = touch[:query]
266
+ end
267
+
268
+ def merge(touch)
269
+ Touch.new(to_hash.merge(touch.to_hash))
270
+ end
271
+
272
+ def to_hash
273
+ {
274
+ x: @x,
275
+ y: @y,
276
+ offset_x: @offset_x || 0,
277
+ offset_y: @offset_y || 0,
278
+ wait: @wait.to_f,
279
+ time: @time.to_f,
280
+ release: @release,
281
+ query: @query && @query
282
+ }
283
+ end
284
+
285
+ def to_json(object = Hash)
286
+ hash = to_hash
287
+ hash[:query_string] = hash[:query] && hash[:query].to_s
288
+ hash.to_json(object)
289
+ end
290
+
291
+ def +(touch)
292
+ hash = to_hash
293
+ hash[:x] += touch.x
294
+ hash[:y] += touch.y
295
+ hash[:offset_x] += touch.offset_x
296
+ hash[:offset_y] += touch.offset_y
297
+ Touch.new(hash)
298
+ end
299
+
300
+ def -(touch)
301
+ hash = to_hash
302
+ hash[:x] -= touch.x
303
+ hash[:y] -= touch.y
304
+ hash[:offset_x] -= touch.offset_x
305
+ hash[:offset_y] -= touch.offset_y
306
+ Touch.new(hash)
307
+ end
308
+
309
+ def offset=(offset)
310
+ @offset_x = offset[:x]
311
+ @offset_y = offset[:y]
312
+ end
313
+ end
314
+
315
+ # @!visibility private
316
+ def _pan_screen_up(options={})
317
+ from = {x: 50, y: 90}
318
+ to = {x: 50, y: 10}
319
+
320
+ pan("* id:'content'", from, to, options)
321
+ end
322
+
323
+ # @!visibility private
324
+ def _pan_screen_down(options={})
325
+ from = {x: 50, y: 10}
326
+ to = {x: 50, y: 90}
327
+
328
+ pan("* id:'content'", from, to, options)
329
+ end
330
+
331
+ # @!visibility private
332
+ def _flick_screen_up(options={})
333
+ from = {x: 50, y: 90}
334
+ to = {x: 50, y: 10}
335
+
336
+ flick("* id:'content'", from, to, options)
337
+ end
338
+
339
+ # @!visibility private
340
+ def _flick_screen_down(options={})
341
+ from = {x: 50, y: 10}
342
+ to = {x: 50, y: 90}
343
+
344
+ flick("* id:'content'", from, to, options)
345
+ end
346
+
347
+ # !@visibility private
348
+ def _pinch_screen(direction, options={})
349
+ Device.default.pinch(direction, "* id:'content'", options)
350
+ end
351
+
352
+ # !@visibility private
353
+ def _pinch_to_zoom(direction, query, options={})
354
+ if direction == :out
355
+ Device.default.pinch(:in, query, options)
356
+ elsif direction == :in
357
+ Device.default.pinch(:out, query, options)
358
+ else
359
+ raise "Invalid direction '#{direction}'"
360
+ end
361
+ end
362
+
363
+ # !@visibility private
364
+ def _pinch_screen_to_zoom(direction, options={})
365
+ _pinch_to_zoom(direction, "* id:'content'", options)
366
+ end
367
+ end
368
+ end
369
+ end
@@ -0,0 +1,45 @@
1
+ module Calabash
2
+ module Android
3
+ module Interactions
4
+ # Go back.
5
+ def go_back
6
+ dismiss_keyboard
7
+ press_back_button
8
+ end
9
+
10
+ # Go to the home screen.
11
+ def go_home
12
+ Device.default.go_home
13
+
14
+ true
15
+ end
16
+
17
+ # Get the name of the currently focused activity
18
+ #
19
+ # @example
20
+ # puts focused_activity
21
+ # # => com.example.MainActivity
22
+ #
23
+ # @return [String] The name of the currently focused activity.
24
+ def focused_activity
25
+ Device.default.current_focus[:activity]
26
+ end
27
+
28
+ # Get the name of the currently focused package
29
+ #
30
+ # @example
31
+ # puts focused_package
32
+ # # => com.example
33
+ #
34
+ # @return [String] The name of the currently focused package
35
+ def focused_package
36
+ Device.default.current_focus[:package]
37
+ end
38
+
39
+ # @!visibility private
40
+ def _evaluate_javascript_in(query, javascript)
41
+ Device.default.evaluate_javascript_in(query, javascript)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,55 @@
1
+ begin
2
+ require 'irb/completion'
3
+ require 'irb/ext/save-history'
4
+
5
+ begin
6
+ require 'awesome_print'
7
+ rescue LoadError => e
8
+ msg = ["Caught a LoadError: could not load 'awesome_print'",
9
+ "#{e}",
10
+ '',
11
+ 'Use bundler (recommended) or uninstall awesome_print.',
12
+ '',
13
+ '# Use bundler (recommended)',
14
+ '$ bundle update',
15
+ '$ bundle exec calabash console [path to apk]',
16
+ '',
17
+ '# Uninstall',
18
+ '$ gem update --system',
19
+ '$ gem uninstall -Vax --force --no-abort-on-dependent awesome_print']
20
+ puts msg
21
+ exit(1)
22
+ end
23
+
24
+ AwesomePrint.irb!
25
+
26
+ ARGV.concat [ '--readline',
27
+ '--prompt-mode',
28
+ 'simple']
29
+
30
+ # 50 entries in the list
31
+ IRB.conf[:SAVE_HISTORY] = 50
32
+
33
+ # Store results in home directory with specified file name
34
+ IRB.conf[:HISTORY_FILE] = '.irb-history'
35
+
36
+ require 'calabash/android'
37
+
38
+ extend Calabash::Android
39
+ extend Calabash::ConsoleHelpers
40
+
41
+ identifier = Calabash::Android::Device.default_serial
42
+ server = Calabash::Android::Server.default
43
+
44
+ Calabash::Android::Device.default = Calabash::Android::Device.new(identifier, server)
45
+
46
+ Calabash::Application.default = Calabash::Android::Application.default_from_environment
47
+
48
+ Calabash.new_embed_method!(lambda {|*_| Calabash::Logger.info 'Embed is not available in the console.'})
49
+ Calabash::Screenshot.screenshot_directory_prefix = 'console_'
50
+ rescue Exception => e
51
+ puts 'Unable to start console:'
52
+ puts "#{e.class}: #{e.message}"
53
+ puts "#{e.backtrace.join("\n")}"
54
+ exit(1)
55
+ end