calabash-cucumber 0.16.2 → 0.16.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e84d4389afc2bd91cbdba73ecbee008b9e3bf89d
4
- data.tar.gz: 221280823e7a79963e87dc3c429eab6480f1e2f6
3
+ metadata.gz: c76734ed962d6499a9320be6098ff8fc9bd2a00e
4
+ data.tar.gz: 5899f941d20500625327f94c9070f2bfe4db1573
5
5
  SHA512:
6
- metadata.gz: 64384eb9d28415ac608f3e840159e8c051d6be5b11ece9e85b9a983aed8dfb5a9209d2ac7c2e873a6728cc882e74ca59a06b2da57ea921893af2fdb5e299dbff
7
- data.tar.gz: cf001fb580c891bfbe8e6c1789ad9232d5e221b93e1d4caff370e9f25c7f849a4125d16e58f1e2829b4a332f50509d60b04bc588da042a5f0287e8c62fae567e
6
+ metadata.gz: b12531775965c0f235935bbbd35bd81f95dc56a46102b12de4139781cea0cc1a9392f6dd1b8803972484668797d49b4c900fce3ea9ed8e618581e5dd2783ed72
7
+ data.tar.gz: a65e9bf5bfb413bb127a1f8e375a72ae38575e448a1c2ec68067749cb671875c8c75769a2d588b65dffe5dfb3ebbb42ad28035e2497bdab640b1f125e24e821f
@@ -143,6 +143,21 @@ module Calabash
143
143
  RunLoop::Version.new(_default_device_or_create.ios_version)
144
144
  end
145
145
 
146
+ # The screen dimensions of the device under test.
147
+ #
148
+ # This is a hash of form:
149
+ # {
150
+ # :sample => 1,
151
+ # :height => 1334,
152
+ # :width => 750,
153
+ # :scale" => 2
154
+ # }
155
+ # @raise [RuntimeError] If the server cannot be reached.
156
+ # @return [RunLoop::Version] The version of the iOS running on the device.
157
+ def screen_dimensions
158
+ _default_device_or_create.screen_dimensions
159
+ end
160
+
146
161
  # Is the device under test running iOS 5?
147
162
  #
148
163
  # @note
@@ -6,6 +6,18 @@ require 'calabash-cucumber/utils/logging'
6
6
 
7
7
  module Calabash
8
8
  module Cucumber
9
+
10
+
11
+ # Raised when there is a problem involving a keyboard mode. There are
12
+ # three keyboard modes: docked, split, and undocked.
13
+ #
14
+ # All iPads support these keyboard modes, but the user can disable them
15
+ # in Settings.app.
16
+ #
17
+ # The iPhone 6+ family also supports keyboard modes, but Calabash does
18
+ # support keyboard modes on these devices.
19
+ class KeyboardModeError < StandardError; ; end
20
+
9
21
  # Collection of methods for interacting with the keyboard.
10
22
  #
11
23
  # We've gone to great lengths to provide the fastest keyboard entry possible.
@@ -80,36 +92,23 @@ module Calabash
80
92
  # @return [Boolean] if a keyboard is visible and docked.
81
93
  def docked_keyboard_visible?
82
94
  res = query(_qstr_for_keyboard).first
95
+
83
96
  return false if res.nil?
84
97
 
85
98
  return true if device_family_iphone?
86
99
 
87
- rect = res['rect']
88
- o = status_bar_orientation.to_sym
89
- case o
90
- when :left
91
- if ios8?
92
- rect['center_x'] == 512 and rect['center_y'] == 592
93
- else
94
- rect['center_x'] == 592 and rect['center_y'] == 512
95
- end
96
- when :right
97
- if ios8?
98
- rect['center_x'] == 512 and rect['center_y'] == 592
99
- else
100
- rect['center_x'] == 176 and rect['center_y'] == 512
101
- end
102
- when :up
103
- if ios8?
104
- rect['center_x'] == 384 and rect['center_y'] == 892
105
- else
106
- rect['center_x'] == 384 and rect['center_y'] == 132
107
- end
108
- when :down
109
- rect['center_x'] == 384 and rect['center_y'] == 892
110
- else
111
- false
100
+ orientation = status_bar_orientation.to_sym
101
+ keyboard_height = res['rect']['height']
102
+ keyboard_y = res['rect']['y']
103
+ scale = screen_dimensions[:scale]
104
+
105
+ if orientation == :left || orientation == :right
106
+ screen_height = screen_dimensions[:width]/scale
107
+ else
108
+ screen_height = screen_dimensions[:height]/scale
112
109
  end
110
+
111
+ screen_height - keyboard_height == keyboard_y
113
112
  end
114
113
 
115
114
  # Returns true if an undocked keyboard is visible.
@@ -593,10 +592,6 @@ module Calabash
593
592
  res = send_uia_command({:command => "#{_query_uia_hide_keyboard_button}.rect()"})
594
593
  origin = res['value']['origin']
595
594
  {:x => origin['x'], :y => origin['y']}
596
-
597
- # this did not work.
598
- #size = res['value']['size']
599
- #{:x => (origin['x'] (size['width']/2)), :y => (origin['y'] (size['height']/2))}
600
595
  end
601
596
 
602
597
  # @!visibility private
@@ -700,8 +695,10 @@ module Calabash
700
695
  # there are 10 pt btw the key and the popup and each row is 50 pt
701
696
  # NB: no amount of offsetting seems to allow touching the top row
702
697
  # when the keyboard is split
698
+
699
+ x_offset = 40
703
700
  y_offset = 10 + 50 + 25
704
- end_pt = {:x => (start_pt[:x] - 40), :y => (start_pt[:y] - y_offset)}
701
+ end_pt = {:x => (start_pt[:x] - x_offset), :y => (start_pt[:y] - y_offset)}
705
702
  uia_pan_offset(start_pt, end_pt, {:duration => 1.0})
706
703
  else
707
704
  pan(_query_for_keyboard_mode_key, nil, {})
@@ -726,15 +723,23 @@ module Calabash
726
723
  return if device_family_iphone?
727
724
 
728
725
  mode = ipad_keyboard_mode
729
- case mode
730
- when :split then
731
- _touch_bottom_keyboard_mode_row
732
- when :undocked then
733
- _touch_top_keyboard_mode_row
734
- when :docked then
735
- # already docked
736
- else
737
- screenshot_and_raise "expected '#{mode}' to be one of #{_ipad_keyboard_modes}"
726
+
727
+ return if mode == :docked
728
+
729
+ if ios9?
730
+ raise KeyboardModeError,
731
+ 'Changing keyboard modes is not supported on iOS 9'
732
+ else
733
+ case mode
734
+ when :split then
735
+ _touch_bottom_keyboard_mode_row
736
+ when :undocked then
737
+ _touch_top_keyboard_mode_row
738
+ when :docked then
739
+ # already docked
740
+ else
741
+ screenshot_and_raise "expected '#{mode}' to be one of #{_ipad_keyboard_modes}"
742
+ end
738
743
  end
739
744
 
740
745
  begin
@@ -748,7 +753,6 @@ module Calabash
748
753
  end
749
754
  end
750
755
 
751
-
752
756
  # Ensures that the iPad keyboard is undocked.
753
757
  #
754
758
  # Undocked means the keyboard is floating in the middle of the view.
@@ -762,35 +766,42 @@ module Calabash
762
766
  # @raise [RuntimeError] if there is no visible keyboard
763
767
  # @raise [RuntimeError] an undocked keyboard was not achieved
764
768
  def ensure_undocked_keyboard
765
- wait_for_keyboard()
769
+ wait_for_keyboard
766
770
 
767
771
  return if device_family_iphone?
768
772
 
769
773
  mode = ipad_keyboard_mode
770
- case mode
771
- when :split then
772
- # keep these condition separate because even though they do the same
773
- # thing, the else condition is a hack
774
- if ios5?
775
- # iOS 5 has no 'Merge' feature in split keyboard, so dock first then
776
- # undock from docked mode
777
- _touch_bottom_keyboard_mode_row
778
- _wait_for_keyboard_in_mode(:docked)
774
+
775
+ return if mode == :undocked
776
+
777
+ if ios9?
778
+ raise KeyboardModeError,
779
+ 'Changing keyboard modes is not supported on iOS 9'
780
+ else
781
+ case mode
782
+ when :split then
783
+ # keep these condition separate because even though they do the same
784
+ # thing, the else condition is a hack
785
+ if ios5?
786
+ # iOS 5 has no 'Merge' feature in split keyboard, so dock first then
787
+ # undock from docked mode
788
+ _touch_bottom_keyboard_mode_row
789
+ _wait_for_keyboard_in_mode(:docked)
790
+ else
791
+ # in iOS > 5, it seems to be impossible consistently touch the
792
+ # the top keyboard mode popup button, so we punt
793
+ _touch_bottom_keyboard_mode_row
794
+ _wait_for_keyboard_in_mode(:docked)
795
+ end
796
+ _touch_top_keyboard_mode_row
797
+ when :undocked then
798
+ # already undocked
799
+ when :docked then
800
+ _touch_top_keyboard_mode_row
779
801
  else
780
- # in iOS > 5, it seems to be impossible consistently touch the
781
- # the top keyboard mode popup button, so we punt
782
- _touch_bottom_keyboard_mode_row
783
- _wait_for_keyboard_in_mode(:docked)
784
- end
785
- _touch_top_keyboard_mode_row
786
- when :undocked then
787
- # already undocked
788
- when :docked then
789
- _touch_top_keyboard_mode_row
790
- else
791
- screenshot_and_raise "expected '#{mode}' to be one of #{_ipad_keyboard_modes}"
802
+ screenshot_and_raise "expected '#{mode}' to be one of #{_ipad_keyboard_modes}"
803
+ end
792
804
  end
793
-
794
805
  _wait_for_keyboard_in_mode(:undocked)
795
806
  end
796
807
 
@@ -814,17 +825,24 @@ module Calabash
814
825
  return if device_family_iphone?
815
826
 
816
827
  mode = ipad_keyboard_mode
817
- case mode
818
- when :split then
819
- # already split
820
- when :undocked then
821
- _touch_bottom_keyboard_mode_row
822
- when :docked then
823
- _touch_bottom_keyboard_mode_row
824
- else
825
- screenshot_and_raise "expected '#{mode}' to be one of #{_ipad_keyboard_modes}"
826
- end
827
828
 
829
+ return if mode == :split
830
+
831
+ if ios9?
832
+ raise KeyboardModeError,
833
+ 'Changing keyboard modes is not supported on iOS 9'
834
+ else
835
+ case mode
836
+ when :split then
837
+ # already split
838
+ when :undocked then
839
+ _touch_bottom_keyboard_mode_row
840
+ when :docked then
841
+ _touch_bottom_keyboard_mode_row
842
+ else
843
+ screenshot_and_raise "expected '#{mode}' to be one of #{_ipad_keyboard_modes}"
844
+ end
845
+ end
828
846
  _wait_for_keyboard_in_mode(:split)
829
847
  end
830
848
 
@@ -277,16 +277,16 @@ class Calabash::Cucumber::Launcher
277
277
  merged_opts = default_opts.merge opts
278
278
 
279
279
  sim_control = opts.fetch(:sim_control, RunLoop::SimControl.new)
280
+ xcode = sim_control.xcode
281
+
280
282
  if sim_control.xcode_version_gte_6?
281
283
  default_sim = RunLoop::Core.default_simulator(xcode)
282
284
  name_or_udid = merged_opts[:udid] || ENV['DEVICE_TARGET'] || default_sim
283
285
 
284
- target_simulator = nil
285
- sim_control.simulators.each do |device|
286
- instruments_launch_name = "#{device.name} (#{device.version.to_s} Simulator)"
287
- if instruments_launch_name == name_or_udid or device.udid == name_or_udid
288
- target_simulator = device
289
- end
286
+ target_simulator = sim_control.simulators.find do |sim|
287
+ [name_or_udid == sim.instruments_identifier(xcode),
288
+ name_or_udid == sim.udid,
289
+ name_or_udid == sim.name].any?
290
290
  end
291
291
 
292
292
  if target_simulator.nil?
@@ -3,7 +3,7 @@ module Calabash
3
3
 
4
4
  # @!visibility public
5
5
  # The Calabash iOS gem version.
6
- VERSION = '0.16.2'
6
+ VERSION = '0.16.3'
7
7
 
8
8
  # @!visibility public
9
9
  # The minimum required version of the Calabash embedded server.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calabash-cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.2
4
+ version: 0.16.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl Krukow