calabash 2.0.0.pre10 → 2.0.0.pre11

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -16,7 +16,6 @@ module Calabash
16
16
  require 'calabash/ios/device/rotation_mixin'
17
17
  require 'calabash/ios/device/keyboard_mixin'
18
18
  require 'calabash/ios/device/uia_keyboard_mixin'
19
- require 'calabash/ios/device/text_mixin'
20
19
  require 'calabash/ios/device/uia_mixin'
21
20
  require 'calabash/ios/device/ipad_1x_2x_mixin'
22
21
  require 'calabash/ios/device/device_implementation'
@@ -17,13 +17,11 @@ module Calabash
17
17
  include Calabash::IOS::RotationMixin
18
18
  include Calabash::IOS::KeyboardMixin
19
19
  include Calabash::IOS::UIAKeyboardMixin
20
- include Calabash::IOS::TextMixin
21
20
  include Calabash::IOS::UIAMixin
22
21
  include Calabash::IOS::IPadMixin
23
22
  include Calabash::IOS::GesturesMixin
24
23
 
25
24
  attr_reader :run_loop
26
- attr_reader :uia_strategy
27
25
  attr_reader :start_options
28
26
 
29
27
  # Returns the default simulator identifier. The string that is return
@@ -50,7 +48,7 @@ module Calabash
50
48
  if run_loop_device.nil?
51
49
  raise "Could not find a simulator with a UDID or name matching '#{identifier}'"
52
50
  end
53
- run_loop_device.instruments_identifier
51
+ run_loop_device.instruments_identifier(RunLoop::SimControl.new.xcode)
54
52
  end
55
53
  end
56
54
 
@@ -84,14 +82,14 @@ module Calabash
84
82
  elsif connected_devices.count > 1
85
83
  raise 'There is more than one physical devices connected. Use CAL_DEVICE_ID to indicate which you want to connect to.'
86
84
  else
87
- connected_devices.first.instruments_identifier
85
+ connected_devices.first.instruments_identifier(RunLoop::SimControl.new.xcode)
88
86
  end
89
87
  else
90
88
  run_loop_device = Device.fetch_matching_physical_device(identifier)
91
89
  if run_loop_device.nil?
92
90
  raise "Could not find a physical device with a UDID or name matching '#{identifier}'"
93
91
  end
94
- run_loop_device.instruments_identifier
92
+ run_loop_device.instruments_identifier(RunLoop::SimControl.new.xcode)
95
93
  end
96
94
  end
97
95
 
@@ -345,8 +343,7 @@ module Calabash
345
343
 
346
344
  {
347
345
  :device => self,
348
- :application => application,
349
- :uia_strategy => uia_strategy
346
+ :application => application
350
347
  }
351
348
  end
352
349
 
@@ -394,7 +391,7 @@ module Calabash
394
391
  def start_app_with_device_and_options(application, run_loop_device, user_defined_options)
395
392
  start_options = merge_start_options!(application, run_loop_device, user_defined_options)
396
393
  @run_loop = RunLoop.run(start_options)
397
- @uia_strategy = @run_loop[:uia_strategy]
394
+ @automator = Calabash::IOS::Automator::DeviceAgent.new(@run_loop)
398
395
  end
399
396
 
400
397
  # @!visibility private
@@ -528,12 +525,6 @@ module Calabash
528
525
  end
529
526
  end
530
527
 
531
- # @!visibility private
532
- def enter_text(text)
533
- # @todo implement this
534
- raise 'ni'
535
- end
536
-
537
528
  # @!visibility private
538
529
  def clear_app_data_on_simulator(application, run_loop_device, bridge)
539
530
  begin
@@ -630,9 +621,8 @@ module Calabash
630
621
  # @!visibility private
631
622
  # Expensive!
632
623
  def Device.fetch_matching_simulator(udid_or_name)
633
- sim_control = RunLoop::SimControl.new
634
- sim_control.simulators.detect do |sim|
635
- sim.instruments_identifier == udid_or_name ||
624
+ RunLoop::SimControl.new.simulators.detect do |sim|
625
+ sim.instruments_identifier(RunLoop::SimControl.new.xcode) == udid_or_name ||
636
626
  sim.udid == udid_or_name
637
627
  end
638
628
  end
@@ -662,7 +652,7 @@ module Calabash
662
652
  Logger.error('which resolves to a physical device.')
663
653
  Logger.error("The server endpoint '#{server.endpoint}' is for an iOS Simulator.")
664
654
  Logger.error('Use CAL_ENDPOINT to specify the IP address of your device')
665
- Logger.error("Ex. $ CAL_ENDPOINT=http://10.0.1.2:37265 CAL_DEVICE_ID=#{identifier} be calabash ...")
655
+ Logger.error("Ex. $ CAL_ENDPOINT=http://10.0.1.2:37265 CAL_DEVICE_ID=#{identifier} #{Calabash::Utility.bundle_exec_prepend}calabash ...")
666
656
  raise "Invalid device endpoint '#{server.endpoint}'"
667
657
  end
668
658
  end
@@ -703,7 +693,7 @@ module Calabash
703
693
  {
704
694
  :app => application.path,
705
695
  :bundle_id => application.identifier,
706
- :device_target => run_loop_device.instruments_identifier,
696
+ :device_target => run_loop_device.instruments_identifier(RunLoop::SimControl.new.xcode),
707
697
  :uia_strategy => strategy
708
698
  }
709
699
  @start_options = default_options.merge(options_from_user)
@@ -775,13 +765,11 @@ module Calabash
775
765
 
776
766
  if strategy == :host
777
767
  @run_loop = RunLoop::HostCache.default.read
778
- @uia_strategy = :host
779
768
  else
780
769
  pid = instruments_pid
781
770
  @run_loop = {}
782
771
  @run_loop[:uia_strategy] = strategy
783
772
  @run_loop[:pid] = pid
784
- @uia_strategy = strategy
785
773
  end
786
774
 
787
775
  # populate the @runtime_attributes
@@ -96,36 +96,33 @@ module Calabash
96
96
 
97
97
  # @!visibility private
98
98
  def _tap(query, options={})
99
- view_to_touch = _gesture_waiter.wait_for_view(query, options)
99
+ view_to_touch = _gesture_waiter.wait_for_view(query, timeout: options[:timeout])
100
100
 
101
101
  rect = view_to_touch['rect']
102
102
  x = rect['x'] + (rect['width'] * (options[:at][:x] / 100.0)).to_i
103
103
  y = rect['y'] + (rect['height'] * (options[:at][:y] / 100.0)).to_i
104
104
 
105
- offset = coordinate(x, y)
106
-
107
- uia_serialize_and_call(:tapOffset, offset, options)
105
+ @automator.touch({coordinates: coordinate(x, y)})
108
106
 
109
107
  Calabash::QueryResult.create([view_to_touch], query)
110
108
  end
111
109
 
112
110
  # @!visibility private
113
111
  def _double_tap(query, options={})
114
- view_to_touch = _gesture_waiter.wait_for_view(query, options)
112
+ view_to_touch = _gesture_waiter.wait_for_view(query, timeout: options[:timeout])
115
113
 
116
114
  rect = view_to_touch['rect']
117
115
  x = rect['x'] + (rect['width'] * (options[:at][:x] / 100.0)).to_i
118
116
  y = rect['y'] + (rect['height'] * (options[:at][:y] / 100.0)).to_i
119
117
 
120
- offset = coordinate(x, y)
121
-
122
- uia_serialize_and_call(:doubleTapOffset, offset, options)
118
+ @automator.double_tap({coordinates: coordinate(x, y)})
123
119
 
124
120
  Calabash::QueryResult.create([view_to_touch], query)
125
121
  end
126
122
 
127
123
  # @!visibility private
128
124
  def _long_press(query, options={})
125
+ options[:duration] += 0.2
129
126
 
130
127
  begin
131
128
  _expect_valid_duration(options)
@@ -133,39 +130,66 @@ module Calabash
133
130
  raise ArgumentError e
134
131
  end
135
132
 
136
- view_to_touch = _gesture_waiter.wait_for_view(query, options)
133
+ view_to_touch = _gesture_waiter.wait_for_view(query, timeout: options[:timeout])
137
134
 
138
135
  rect = view_to_touch['rect']
139
136
  x = rect['x'] + (rect['width'] * (options[:at][:x] / 100.0)).to_i
140
137
  y = rect['y'] + (rect['height'] * (options[:at][:y] / 100.0)).to_i
141
138
 
142
- offset = coordinate(x, y)
143
-
144
- uia_serialize_and_call(:touchHoldOffset, options[:duration], offset)
139
+ @automator.touch_hold({coordinates: coordinate(x, y), duration: options[:duration]})
145
140
 
146
141
  Calabash::QueryResult.create([view_to_touch], query)
147
142
  end
148
143
 
149
144
  # @!visibility private
150
145
  def _pan_between(query_from, query_to, options={})
146
+ from_query_result = nil
147
+ to_query_result = nil
148
+ from = coordinate(0, 0)
149
+ to = coordinate(0, 0)
150
+
151
+ unless query_from.nil?
152
+ from_view = _gesture_waiter.wait_for_view(query_from, timeout: options[:timeout])
153
+ from = coordinate(from_view['rect']['center_x'], from_view['rect']['center_y'])
154
+ from_query_result = Calabash::QueryResult.create([from_view], query_from)
155
+ end
151
156
 
152
- begin
153
- _expect_valid_duration(options)
154
- rescue ArgumentError => e
155
- raise ArgumentError e
157
+ unless query_to.nil?
158
+ to_view = _gesture_waiter.wait_for_view(query_to, timeout: options[:timeout])
159
+ to = coordinate(to_view['rect']['center_x'], to_view['rect']['center_y'])
160
+ Calabash::QueryResult.create([to_view], query_to)
156
161
  end
157
162
 
158
- from_view = _gesture_waiter.wait_for_view(query_from, options)
159
- to_view = _gesture_waiter.wait_for_view(query_to, options)
163
+ offset = options[:offset]
164
+
165
+ if offset
166
+ from_offset = offset[:from]
167
+
168
+ if from_offset
169
+ x, y = from_offset[:x], from_offset[:y]
160
170
 
161
- from_offset = uia_center_of_view(from_view)
162
- to_offset = uia_center_of_view(to_view)
171
+ from[:x] += x || 0
172
+ from[:y] += y || 0
173
+ end
174
+
175
+ to_offset = offset[:to]
176
+
177
+ if from_offset
178
+ x, y = to_offset[:x], to_offset[:y]
179
+
180
+ to[:x] += x || 0
181
+ to[:y] += y || 0
182
+ end
183
+ end
163
184
 
164
- uia_serialize_and_call(:panOffset, from_offset, to_offset, options)
185
+ @automator.pan({coordinates:
186
+ {from: from,
187
+ to: to},
188
+ duration: options[:duration]})
165
189
 
166
190
  {
167
- :from => Calabash::QueryResult.create([from_view], query_from),
168
- :to => Calabash::QueryResult.create([to_view], query_to)
191
+ :from => from_query_result,
192
+ :to => to_query_result
169
193
  }
170
194
  end
171
195
 
@@ -178,48 +202,22 @@ module Calabash
178
202
  # If the view has a UINavigationBar or UITabBar, the defaults *might*
179
203
  # cause vertical gestures to start and/or end on one of these bars.
180
204
  def _pan(query, from, to, options={})
181
-
182
- begin
183
- _expect_valid_duration(options)
184
- rescue ArgumentError => e
185
- raise ArgumentError, e
186
- end
187
-
188
205
  gesture_waiter = _gesture_waiter
189
- view_to_pan = gesture_waiter.wait_for_view(query, options)
190
-
191
- begin
192
- check_for_broken_uia_automation(query, view_to_pan, gesture_waiter)
193
- rescue => e
194
- raise "Could not pan with query: #{query}\n#{e.message}"
195
- end
206
+ view_to_pan = gesture_waiter.wait_for_view(query, timeout: options[:timeout])
196
207
 
197
208
  rect = view_to_pan['rect']
198
209
 
199
210
  from_x = rect['width'] * (from[:x]/100.0)
200
211
  from_y = rect['height'] * (from[:y]/100.0)
201
- from_offset = coordinate(from_x, from_y)
202
212
 
203
213
  to_x = rect['width'] * (to[:x]/100.0)
204
214
  to_y = rect['height'] * (to[:y]/100.0)
205
- to_offset = coordinate(to_x, to_y)
206
215
 
207
- uia_serialize_and_call(:panOffset, from_offset, to_offset)
216
+ @automator.pan({coordinates: {from: coordinate(from_x, from_y), to: coordinate(to_x, to_y)},
217
+ duration: options[:duration]})
208
218
 
209
- Calabash::QueryResult.create([view_to_pan], query)
210
- end
211
219
 
212
- # @!visibility private
213
- def pan_screen(view_to_pan, from_offset, to_offset, options)
214
- begin
215
- _expect_valid_duration(options)
216
- rescue ArgumentError => e
217
- raise ArgumentError, e
218
- end
219
-
220
- uia_serialize_and_call(:panOffset, from_offset, to_offset, options)
221
-
222
- Calabash::QueryResult.create([view_to_pan], '*')
220
+ Calabash::QueryResult.create([view_to_pan], query)
223
221
  end
224
222
 
225
223
  # @!visibility private
@@ -238,7 +236,7 @@ module Calabash
238
236
  end
239
237
 
240
238
  gesture_waiter = _gesture_waiter
241
- view_to_flick = gesture_waiter.wait_for_view(query, options)
239
+ view_to_flick = gesture_waiter.wait_for_view(query, timeout: options[:timeout])
242
240
 
243
241
  begin
244
242
  check_for_broken_uia_automation(query, view_to_flick, gesture_waiter)
@@ -287,7 +285,7 @@ module Calabash
287
285
 
288
286
  gesture_waiter = _gesture_waiter
289
287
 
290
- view_to_pinch = gesture_waiter.wait_for_view(query, options)
288
+ view_to_pinch = gesture_waiter.wait_for_view(query, timeout: options[:timeout])
291
289
  offset = uia_center_of_view(view_to_pinch)
292
290
 
293
291
  gesture_direction = direction == :in ? :out : :in
@@ -3,6 +3,12 @@ module Calabash
3
3
 
4
4
  # @!visibility private
5
5
  module KeyboardMixin
6
+ # Enter `text` into the currently focused view.
7
+ # @see Calabash::Text#enter_text
8
+ # @!visibility private
9
+ def enter_text(text, options={})
10
+ @automator.enter_text_with_keyboard(text, options)
11
+ end
6
12
 
7
13
  # Returns true if a docked keyboard is visible.
8
14
  #
@@ -61,6 +67,21 @@ module Calabash
61
67
  docked_keyboard_visible? || undocked_keyboard_visible? || split_keyboard_visible?
62
68
  end
63
69
 
70
+ def tap_keyboard_delete_key(options={})
71
+ @automator.tap_keyboard_delete_key
72
+ end
73
+
74
+ def tap_keyboard_action_key
75
+ results = keyboard_waiter.query("* isFirstResponder:1", :returnKeyType)
76
+
77
+ if results.empty?
78
+ RunLoop.log_debug("Cannot find keyboard first responder to ask for its returnKeyType")
79
+ raise 'Cannot tap_keyboard_action_key. No view has focus'
80
+ end
81
+
82
+ @automator.tap_keyboard_action_key(results.first)
83
+ end
84
+
64
85
  # Returns the the text in the first responder.
65
86
  #
66
87
  # The first responder will be the UITextField or UITextView instance
@@ -14,55 +14,14 @@ module Calabash
14
14
  wait_for_server_to_start({:timeout => 1})
15
15
  end
16
16
 
17
- family = device_family
18
-
19
- current_orientation = status_bar_orientation.to_sym
20
- recording_name = nil
21
- case direction
22
- when :left
23
- if current_orientation == :down
24
- recording_name = 'left_home_down'
25
- elsif current_orientation == :right
26
- recording_name = 'left_home_right'
27
- elsif current_orientation == :left
28
- recording_name = 'left_home_left'
29
- elsif current_orientation == :up
30
- recording_name = 'left_home_up'
31
- end
32
- when :right
33
- if current_orientation == :down
34
- recording_name = 'right_home_down'
35
- elsif current_orientation == :left
36
- recording_name = 'right_home_left'
37
- elsif current_orientation == :right
38
- recording_name = 'right_home_right'
39
- elsif current_orientation == :up
40
- recording_name = 'right_home_up'
41
- end
42
- else
43
- # Caller should have guarded us against this case.
44
- raise ArgumentError, "Expected '#{direction}' to be :left or :right"
45
- end
46
-
47
- if family == 'iPad'
48
- form_factor = 'ipad'
49
- else
50
- form_factor = 'iphone'
51
- end
52
-
53
- if recording_name.nil?
54
- raise "Could not rotate device in direction '#{direction}' " \
55
- "with orientation '#{current_orientation}'"
56
- end
17
+ orientation = status_bar_orientation.to_sym
57
18
 
58
- recording_name = "rotate_#{recording_name}"
59
- playback_route(recording_name, form_factor)
19
+ @automator.rotate(direction, orientation)
60
20
  end
61
21
 
62
22
  # @!visibility private
63
23
  # Caller must pass position one of these positions :down, :left, :right, :up
64
24
  def rotate_home_button_to(position)
65
-
66
25
  valid_positions = [:down, :left, :right, :up]
67
26
  unless valid_positions.include?(position)
68
27
  raise ArgumentError,
@@ -83,28 +42,7 @@ module Calabash
83
42
  return orientation
84
43
  end
85
44
 
86
- family = device_family
87
-
88
- if family == 'iPad'
89
- form_factor = 'ipad'
90
- else
91
- form_factor = 'iphone'
92
- end
93
-
94
- ROTATION_CANDIDATES.each do |recording_name|
95
- playback_route(recording_name, form_factor)
96
-
97
- # Wait for rotation animation.
98
- #
99
- # Can't wait for animations because there might be animations other
100
- # than rotation on the screen.
101
- sleep(0.4)
102
-
103
- orientation = status_bar_orientation.to_sym
104
- if orientation == position
105
- return orientation.to_s
106
- end
107
- end
45
+ @automator.rotate_home_button_to(position, status_bar_orientation)
108
46
 
109
47
  orientation.to_s
110
48
  end
@@ -3,15 +3,8 @@ module Calabash
3
3
 
4
4
  # @!visibility private
5
5
  module Gestures
6
-
7
6
  # @!visibility private
8
- # Concrete implementation of pan_screen_up gesture.
9
- def _pan_screen_up(options={})
10
-
11
- gesture_options = options.dup
12
- gesture_options[:duration] ||= 0.5
13
- gesture_options[:timeout] ||= Calabash::Gestures::DEFAULT_GESTURE_WAIT_TIMEOUT
14
-
7
+ define_method (:_swipe_coordinates_for_screen) do
15
8
  points_from_top = gesture_points_from_top
16
9
  points_from_bottom = gesture_points_from_bottom
17
10
 
@@ -24,108 +17,49 @@ module Calabash
24
17
  end_y = points_from_top
25
18
  x = width/2.0
26
19
 
27
- from_offset = coordinate(x, start_y)
28
- to_offset = coordinate(x, end_y)
29
-
30
- Device.default.pan_screen(top_view, from_offset, to_offset, gesture_options)
20
+ {bottom: coordinate(x, start_y), top: coordinate(x, end_y)}
31
21
  end
32
22
 
33
23
  # @!visibility private
34
- # Concrete implementation of pan_screen_down gesture.
35
- def _pan_screen_down(options={})
36
-
37
- gesture_options = options.dup
38
- gesture_options[:duration] ||= 0.5
39
- gesture_options[:timeout] ||= Calabash::Gestures::DEFAULT_GESTURE_WAIT_TIMEOUT
40
-
41
- points_from_top = gesture_points_from_top
42
- points_from_bottom = gesture_points_from_bottom
43
-
44
- top_view = query('*').first
45
-
46
- height = top_view['frame']['height'].to_f
47
- width = top_view['frame']['width'].to_f
24
+ # Concrete implementation of pan_screen_up gesture.
25
+ define_method (:_pan_screen_up) do |options={}|
26
+ swipe = _swipe_coordinates_for_screen
27
+ gesture_options = options.merge({offset: {from: swipe[:bottom], to: swipe[:top]}})
48
28
 
49
- start_y = points_from_top
50
- end_y = height - points_from_bottom
51
- x = width/2.0
29
+ Calabash::Internal.with_default_device(required_os: :ios) {|device| device.pan_between(nil, nil, gesture_options)}
30
+ end
52
31
 
53
- from_offset = coordinate(x, start_y)
54
- to_offset = coordinate(x, end_y)
32
+ # @!visibility private
33
+ # Concrete implementation of pan_screen_down gesture.
34
+ define_method (:_pan_screen_down) do |options={}|
35
+ swipe = _swipe_coordinates_for_screen
36
+ gesture_options = options.merge({offset: {from: swipe[:top], to: swipe[:bottom]}})
55
37
 
56
- Device.default.pan_screen(top_view, from_offset, to_offset, gesture_options)
38
+ Calabash::Internal.with_default_device(required_os: :ios) {|device| device.pan_between(nil, nil, gesture_options)}
57
39
  end
58
40
 
59
41
  # @!visibility private
60
42
  # Concrete implementation of flick_screen_up gesture.
61
- def _flick_screen_up(options={})
62
-
63
- gesture_options = options.dup
64
- gesture_options[:duration] ||= 0.5
65
- gesture_options[:timeout] ||= Calabash::Gestures::DEFAULT_GESTURE_WAIT_TIMEOUT
66
-
67
- points_from_top = gesture_points_from_top
68
- points_from_bottom = gesture_points_from_bottom
69
-
70
- top_view = query('*').first
43
+ define_method (:_flick_screen_up) do |options={}|
44
+ swipe = _swipe_coordinates_for_screen
45
+ gesture_options = options.merge({offset: {from: swipe[:bottom], to: swipe[:top]}})
71
46
 
72
- height = top_view['frame']['height'].to_f
73
- width = top_view['frame']['width'].to_f
74
-
75
- start_y = height - points_from_bottom
76
- end_y = points_from_top
77
- x = width/2.0
78
-
79
- from_offset = coordinate(x, start_y)
80
- to_offset = coordinate(x, end_y)
81
-
82
- Device.default.flick_screen(top_view, from_offset, to_offset, gesture_options)
47
+ Calabash::Internal.with_default_device(required_os: :ios) {|device| device.flick_between(nil, nil, gesture_options)}
83
48
  end
84
49
 
85
50
  # @!visibility private
86
51
  # Concrete implementation of flick_screen_down gesture.
87
- def _flick_screen_down(options={})
88
-
89
- gesture_options = options.dup
90
- gesture_options[:duration] ||= 0.5
91
- gesture_options[:timeout] ||= Calabash::Gestures::DEFAULT_GESTURE_WAIT_TIMEOUT
92
-
93
- points_from_top = gesture_points_from_top
94
- points_from_bottom = gesture_points_from_bottom
95
-
96
- top_view = query('*').first
97
-
98
- height = top_view['frame']['height'].to_f
99
- width = top_view['frame']['width'].to_f
100
-
101
- start_y = points_from_top
102
- end_y = height - points_from_bottom
103
- x = width/2.0
104
-
105
- from_offset = coordinate(x, start_y)
106
- to_offset = coordinate(x, end_y)
52
+ define_method (:_flick_screen_down) do |options={}|
53
+ swipe = _swipe_coordinates_for_screen
54
+ gesture_options = options.merge({offset: {from: swipe[:top], to: swipe[:bottom]}})
107
55
 
108
- Device.default.flick_screen(top_view, from_offset, to_offset, gesture_options)
56
+ Calabash::Internal.with_default_device(required_os: :ios) {|device| device.flick_between(nil, nil, gesture_options)}
109
57
  end
110
58
 
111
59
  # @!visibility private
112
60
  # Concrete implementation of pinch_screen
113
- def _pinch_screen(direction, options={})
114
- Device.default.pinch(direction, '*', options)
115
- end
116
-
117
- # @!visibility private
118
- # Concrete implementation of pinch_to_zoom
119
- def _pinch_to_zoom(direction, query, options={})
120
- gesture_direction = direction == :in ? :out : :in
121
- Device.default.pinch(gesture_direction, query, options)
122
- end
123
-
124
- # @!visibility private
125
- # Concrete implementation of pinch_screen_to_zoom
126
- def _pinch_screen_to_zoom(direction, options={})
127
- gesture_direction = direction == :in ? :out : :in
128
- Device.default.pinch(gesture_direction, '*', options)
61
+ define_method (:_pinch_screen) do |direction, options={}|
62
+ Calabash::Internal.with_default_device(required_os: :ios) {|device| device.pinch(direction, '*', options)}
129
63
  end
130
64
 
131
65
  private