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
@@ -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