calabash-cucumber 0.10.0.pre1 → 0.10.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/features/step_definitions/calabash_steps.rb +1 -1
- data/lib/calabash-cucumber/actions/instruments_actions.rb +15 -4
- data/lib/calabash-cucumber/actions/playback_actions.rb +12 -3
- data/lib/calabash-cucumber/connection.rb +3 -0
- data/lib/calabash-cucumber/connection_helpers.rb +4 -0
- data/lib/calabash-cucumber/core.rb +637 -83
- data/lib/calabash-cucumber/date_picker.rb +148 -29
- data/lib/calabash-cucumber/device.rb +160 -3
- data/lib/calabash-cucumber/environment_helpers.rb +91 -46
- data/lib/calabash-cucumber/failure_helpers.rb +40 -0
- data/lib/calabash-cucumber/http_helpers.rb +9 -2
- data/lib/calabash-cucumber/ibase.rb +136 -17
- data/lib/calabash-cucumber/ios7_operations.rb +13 -9
- data/lib/calabash-cucumber/ipad_1x_2x.rb +103 -48
- data/lib/calabash-cucumber/keyboard_helpers.rb +253 -144
- data/lib/calabash-cucumber/keychain_helpers.rb +46 -32
- data/lib/calabash-cucumber/launch/simulator_helper.rb +13 -12
- data/lib/calabash-cucumber/launch/simulator_launcher.rb +111 -78
- data/lib/calabash-cucumber/launcher.rb +265 -25
- data/lib/calabash-cucumber/map.rb +24 -22
- data/lib/calabash-cucumber/operations.rb +4 -160
- data/lib/calabash-cucumber/playback_helpers.rb +26 -0
- data/lib/calabash-cucumber/query_helpers.rb +12 -0
- data/lib/calabash-cucumber/rotation_helpers.rb +64 -8
- data/lib/calabash-cucumber/status_bar_helpers.rb +40 -3
- data/lib/calabash-cucumber/tests_helpers.rb +43 -14
- data/lib/calabash-cucumber/uia.rb +93 -9
- data/lib/calabash-cucumber/utils/logging.rb +30 -16
- data/lib/calabash-cucumber/utils/plist_buddy.rb +18 -19
- data/lib/calabash-cucumber/utils/simulator_accessibility.rb +41 -30
- data/lib/calabash-cucumber/utils/xctools.rb +31 -21
- data/lib/calabash-cucumber/version.rb +98 -2
- data/lib/calabash-cucumber/wait_helpers.rb +257 -77
- data/staticlib/calabash.framework.zip +0 -0
- metadata +64 -231
- data/.gitignore +0 -17
- data/CHANGES.txt +0 -1
- data/Gemfile +0 -4
- data/Rakefile +0 -72
- data/calabash-cucumber.gemspec +0 -36
- data/epl-v10.html +0 -261
- data/lib/calabash-cucumber/resources/cell_swipe_ios4_ipad.base64 +0 -51
- data/lib/calabash-cucumber/resources/cell_swipe_ios4_iphone.base64 +0 -51
- data/lib/calabash-cucumber/resources/cell_swipe_ios5_ipad.base64 +0 -74
- data/lib/calabash-cucumber/resources/cell_swipe_ios5_iphone.base64 +0 -74
- data/lib/calabash-cucumber/resources/double_tap_ios5_ipad.base64 +0 -15
- data/lib/calabash-cucumber/resources/double_tap_ios5_iphone.base64 +0 -15
- data/lib/calabash-cucumber/resources/double_tap_ios6_ipad.base64 +0 -22
- data/lib/calabash-cucumber/resources/double_tap_ios6_iphone.base64 +0 -22
- data/lib/calabash-cucumber/resources/pan_ios5_ipad.base64 +0 -199
- data/lib/calabash-cucumber/resources/pan_ios5_iphone.base64 +0 -199
- data/lib/calabash-cucumber/resources/pan_ios6_ipad.base64 +0 -206
- data/lib/calabash-cucumber/resources/pan_ios6_iphone.base64 +0 -206
- data/lib/calabash-cucumber/resources/pinch_in_ios4_ipad.base64 +0 -104
- data/lib/calabash-cucumber/resources/pinch_in_ios4_iphone.base64 +0 -104
- data/lib/calabash-cucumber/resources/pinch_in_ios5_ipad.base64 +0 -144
- data/lib/calabash-cucumber/resources/pinch_in_ios5_iphone.base64 +0 -144
- data/lib/calabash-cucumber/resources/pinch_in_ios6_ipad.base64 +0 -70
- data/lib/calabash-cucumber/resources/pinch_in_ios6_iphone.base64 +0 -70
- data/lib/calabash-cucumber/resources/pinch_out_ios5_ipad.base64 +0 -207
- data/lib/calabash-cucumber/resources/pinch_out_ios5_iphone.base64 +0 -207
- data/lib/calabash-cucumber/resources/pinch_out_ios6_ipad.base64 +0 -96
- data/lib/calabash-cucumber/resources/pinch_out_ios6_iphone.base64 +0 -96
- data/lib/calabash-cucumber/resources/rotate_left_home_down_ios4_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_down_ios4_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_down_ios5_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_down_ios5_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_left_ios4_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_left_ios4_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_left_ios5_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_left_ios5_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_right_ios4_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_right_ios4_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_right_ios5_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_right_ios5_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_up_ios4_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_up_ios4_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_up_ios5_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_left_home_up_ios5_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_down_ios4_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_down_ios4_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_down_ios5_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_down_ios5_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_left_ios4_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_left_ios4_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_left_ios5_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_left_ios5_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_right_ios4_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_right_ios4_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_right_ios5_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_right_ios5_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_up_ios4_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_up_ios4_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_up_ios5_ipad.base64 +0 -2
- data/lib/calabash-cucumber/resources/rotate_right_home_up_ios5_iphone.base64 +0 -2
- data/lib/calabash-cucumber/resources/swipe_down_ios5_ipad.base64 +0 -18
- data/lib/calabash-cucumber/resources/swipe_down_ios5_iphone.base64 +0 -31
- data/lib/calabash-cucumber/resources/swipe_down_ios6_ipad.base64 +0 -25
- data/lib/calabash-cucumber/resources/swipe_down_ios6_iphone.base64 +0 -25
- data/lib/calabash-cucumber/resources/swipe_left_hard_ios4_ipad.base64 +0 -15
- data/lib/calabash-cucumber/resources/swipe_left_hard_ios4_iphone.base64 +0 -15
- data/lib/calabash-cucumber/resources/swipe_left_ios4_ipad.base64 +0 -18
- data/lib/calabash-cucumber/resources/swipe_left_ios4_iphone.base64 +0 -18
- data/lib/calabash-cucumber/resources/swipe_left_ios5_ipad.base64 +0 -17
- data/lib/calabash-cucumber/resources/swipe_left_ios5_iphone.base64 +0 -34
- data/lib/calabash-cucumber/resources/swipe_left_ios6_ipad.base64 +0 -28
- data/lib/calabash-cucumber/resources/swipe_left_ios6_iphone.base64 +0 -28
- data/lib/calabash-cucumber/resources/swipe_right_hard_ios4_ipad.base64 +0 -17
- data/lib/calabash-cucumber/resources/swipe_right_hard_ios4_iphone.base64 +0 -17
- data/lib/calabash-cucumber/resources/swipe_right_ios4_ipad.base64 +0 -13
- data/lib/calabash-cucumber/resources/swipe_right_ios4_iphone.base64 +0 -13
- data/lib/calabash-cucumber/resources/swipe_right_ios5_ipad.base64 +0 -17
- data/lib/calabash-cucumber/resources/swipe_right_ios5_iphone.base64 +0 -17
- data/lib/calabash-cucumber/resources/swipe_right_ios6_ipad.base64 +0 -25
- data/lib/calabash-cucumber/resources/swipe_right_ios6_iphone.base64 +0 -25
- data/lib/calabash-cucumber/resources/swipe_up_ios5_ipad.base64 +0 -34
- data/lib/calabash-cucumber/resources/swipe_up_ios5_iphone.base64 +0 -28
- data/lib/calabash-cucumber/resources/swipe_up_ios6_ipad.base64 +0 -25
- data/lib/calabash-cucumber/resources/swipe_up_ios6_iphone.base64 +0 -25
- data/lib/calabash-cucumber/resources/touch_done_ios4_ipad.base64 +0 -7
- data/lib/calabash-cucumber/resources/touch_done_ios4_iphone.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_done_ios5_ipad.base64 +0 -7
- data/lib/calabash-cucumber/resources/touch_done_ios5_iphone.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_hold_ios5_ipad.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_hold_ios5_iphone.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_hold_ios6_ipad.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_hold_ios6_iphone.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_ios4_ipad.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_ios4_iphone.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_ios5_ipad.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_ios5_iphone.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_ios7_ipad.base64 +0 -9
- data/lib/calabash-cucumber/resources/touch_ios7_iphone.base64 +0 -9
- data/lib/calabash-cucumber/resources/wheel_down_ios4_ipad.base64 +0 -159
- data/lib/calabash-cucumber/resources/wheel_down_ios4_iphone.base64 +0 -159
- data/lib/calabash-cucumber/resources/wheel_down_ios5_ipad.base64 +0 -156
- data/lib/calabash-cucumber/resources/wheel_down_ios5_iphone.base64 +0 -156
- data/lib/calabash-cucumber/resources/wheel_up_ios4_ipad.base64 +0 -166
- data/lib/calabash-cucumber/resources/wheel_up_ios4_iphone.base64 +0 -166
- data/lib/calabash-cucumber/resources/wheel_up_ios5_ipad.base64 +0 -156
- data/lib/calabash-cucumber/resources/wheel_up_ios5_iphone.base64 +0 -156
- data/scripts/EmptyAppHack.app/Default-568h@2x.png +0 -0
- data/scripts/EmptyAppHack.app/Default.png +0 -0
- data/scripts/EmptyAppHack.app/Default@2x.png +0 -0
- data/scripts/EmptyAppHack.app/EmptyAppHack +0 -0
- data/scripts/EmptyAppHack.app/Info.plist +0 -0
- data/scripts/EmptyAppHack.app/PkgInfo +0 -1
- data/scripts/EmptyAppHack.app/en.lproj/InfoPlist.strings +0 -0
- data/scripts/com.example.plist +0 -0
- data/scripts/data/.GlobalPreferences.plist +0 -0
- data/scripts/reset_simulator.scpt +0 -0
- data/spec/bin/calabash_ios_sim_spec.rb +0 -24
- data/spec/launcher_spec.rb +0 -166
- data/spec/logging_spec.rb +0 -38
- data/spec/plist_buddy_spec.rb +0 -99
- data/spec/resources/enable-accessibility/6.1/.gitkeep +0 -0
- data/spec/resources/enable-accessibility/7.0.3-64/.gitkeep +0 -0
- data/spec/resources/enable-accessibility/7.0.3/.gitkeep +0 -0
- data/spec/resources/enable-accessibility/7.1-64/.gitkeep +0 -0
- data/spec/resources/enable-accessibility/7.1/.gitkeep +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/Default-568h@2x.png +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/Info.plist +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/LPSimpleExample-cal +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/PkgInfo +0 -1
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/InfoPlist.strings +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPFirstViewController.nib +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPFirstViewController~ipad.nib +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPFourthViewController.nib +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPFourthViewController~ipad.nib +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPSecondViewController.nib +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPSecondViewController~ipad.nib +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPThirdViewController.nib +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPThirdViewController~ipad.nib +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/first.png +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/first@2x.png +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/second.png +0 -0
- data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/second@2x.png +0 -0
- data/spec/resources/plist_buddy/com.example.plist +0 -0
- data/spec/resources/plist_buddy/com.testing.plist +0 -18
- data/spec/simulator_accessibility_spec.rb +0 -206
- data/spec/spec_helper.rb +0 -31
- data/spec/version_spec.rb +0 -13
- data/spec/xctools_spec.rb +0 -58
@@ -2,20 +2,22 @@ require 'json'
|
|
2
2
|
|
3
3
|
module Calabash
|
4
4
|
module Cucumber
|
5
|
-
module Map #=> Connection
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
# @!visibility private
|
7
|
+
module Map
|
8
|
+
|
9
|
+
# returns an array of views matched by the `query` or the result of
|
10
|
+
# performing the Objective-C sequence defined by the `method_name` and
|
11
|
+
# `method_args` on all the views matched by the `query`
|
10
12
|
#
|
11
13
|
# the query language is documented here: https://github.com/calabash/calabash-ios/wiki
|
12
14
|
#
|
13
15
|
# returns a JSON representation of each view that is matched
|
14
16
|
#
|
15
|
-
# when the
|
16
|
-
# contains the result of calling the objc selector
|
17
|
-
# matched view. these are examples of calabash operations:
|
18
|
-
#
|
17
|
+
# when the `method_name` is a calabash operation, returns an array that
|
18
|
+
# contains the result of calling the objc selector `description` on each
|
19
|
+
# matched view. these are examples of calabash operations: `:flash`,
|
20
|
+
# `:scrollToRowWithMark`, `:changeDatePickerDate`.
|
19
21
|
def map(query, method_name, *method_args)
|
20
22
|
#todo calabash operations should return 'views touched' in JSON format
|
21
23
|
raw_map(query, method_name, *method_args)['results']
|
@@ -24,26 +26,26 @@ module Calabash
|
|
24
26
|
# returns a JSON object the represents the result of performing an http
|
25
27
|
# query against the calabash server.
|
26
28
|
#
|
27
|
-
# gem users should _not_ call this method directly; call
|
29
|
+
# gem users should _not_ call this method directly; call `map` instead.
|
28
30
|
#
|
29
|
-
# raises an error and takes a screenshot if the value of the
|
31
|
+
# raises an error and takes a screenshot if the value of the `outcome` key
|
30
32
|
# is _not_ 'SUCCESS'
|
31
33
|
#
|
32
34
|
# the JSON object contains the following keys:
|
33
35
|
#
|
34
|
-
#
|
36
|
+
# `outcome` => indicates the success or failure of the query
|
35
37
|
#
|
36
|
-
#
|
38
|
+
# `status_bar_orientation` => the orientation of the status bar
|
37
39
|
#
|
38
|
-
#
|
40
|
+
# `results` => views matched by the `query` or the result of
|
39
41
|
# performing the Objective-C selector sequence defined by
|
40
|
-
# the
|
41
|
-
#
|
42
|
+
# the `method_name` with arguments defined in
|
43
|
+
# `method_args` on all views matched by the `query`
|
42
44
|
#
|
43
45
|
# the query language is documented here: https://github.com/calabash/calabash-ios/wiki
|
44
46
|
#
|
45
|
-
# here are some examples that clarify how the
|
46
|
-
# influence the value of the
|
47
|
+
# here are some examples that clarify how the `method_name` and `method_args`
|
48
|
+
# influence the value of the `results` key
|
47
49
|
#
|
48
50
|
# simple examples:
|
49
51
|
#
|
@@ -76,20 +78,20 @@ module Calabash
|
|
76
78
|
res
|
77
79
|
end
|
78
80
|
|
79
|
-
# asserts the result of a calabash
|
80
|
-
#
|
81
|
+
# asserts the result of a calabash `map` call and raises an error with
|
82
|
+
# `msg` if no valid results are found.
|
81
83
|
#
|
82
84
|
# casual gem users should never need to call this method; this is a
|
83
85
|
# convenience method for gem maintainers.
|
84
86
|
#
|
85
|
-
# raises an error if
|
87
|
+
# raises an error if `map_results`:
|
86
88
|
#
|
87
89
|
# is an empty list #=> []
|
88
90
|
# contains a '<VOID>' string #=> [ "<VOID>" ]
|
89
91
|
# contains '*****' string #=> [ "*****" ]
|
90
92
|
# contains a single nil #=> [ nil ]
|
91
93
|
#
|
92
|
-
# when evaluating whether a
|
94
|
+
# when evaluating whether a `map` call is successful it is important to
|
93
95
|
# note that sometimes a <tt>[ nil ]</tt> or <tt>[nil, <val>, nil]</tt> is
|
94
96
|
# a valid result.
|
95
97
|
#
|
@@ -110,7 +112,7 @@ module Calabash
|
|
110
112
|
#
|
111
113
|
# here a <tt>[ nil ]</tt> should be considered invalid because the
|
112
114
|
# the operation could not be performed because there is not row that
|
113
|
-
# matches
|
115
|
+
# matches `mark`
|
114
116
|
def assert_map_results(map_results, msg)
|
115
117
|
compact = map_results.compact
|
116
118
|
if compact.empty? or compact.member? '<VOID>' or compact.member? '*****'
|
@@ -5,7 +5,7 @@ require 'calabash-cucumber/keychain_helpers'
|
|
5
5
|
require 'calabash-cucumber/wait_helpers'
|
6
6
|
require 'calabash-cucumber/launcher'
|
7
7
|
require 'net/http'
|
8
|
-
require 'test/unit'
|
8
|
+
require 'test/unit/assertions'
|
9
9
|
require 'json'
|
10
10
|
require 'set'
|
11
11
|
require 'calabash-cucumber/version'
|
@@ -13,17 +13,13 @@ require 'calabash-cucumber/date_picker'
|
|
13
13
|
require 'calabash-cucumber/ipad_1x_2x'
|
14
14
|
require 'calabash-cucumber/utils/logging'
|
15
15
|
|
16
|
-
if not Object.const_defined?(:CALABASH_COUNT)
|
17
|
-
#compatability with IRB
|
18
|
-
CALABASH_COUNT = {:step_index => 0, :step_line => "irb"}
|
19
|
-
end
|
20
|
-
|
21
|
-
|
22
16
|
module Calabash
|
23
17
|
module Cucumber
|
18
|
+
|
19
|
+
# A module for wrapping the public APIs of this gem.
|
24
20
|
module Operations
|
25
21
|
|
26
|
-
include
|
22
|
+
include Test::Unit::Assertions
|
27
23
|
include Calabash::Cucumber::Logging
|
28
24
|
include Calabash::Cucumber::Core
|
29
25
|
include Calabash::Cucumber::TestsHelpers
|
@@ -33,158 +29,6 @@ module Calabash
|
|
33
29
|
include Calabash::Cucumber::DatePicker
|
34
30
|
include Calabash::Cucumber::IPad
|
35
31
|
|
36
|
-
def page(clz,*args)
|
37
|
-
clz.new(self,*args)
|
38
|
-
end
|
39
|
-
|
40
|
-
def await_page(clz,*args)
|
41
|
-
clz.new(self,*args).await
|
42
|
-
end
|
43
|
-
|
44
|
-
def home_direction
|
45
|
-
status_bar_orientation.to_sym
|
46
|
-
end
|
47
|
-
|
48
|
-
def assert_home_direction(expected)
|
49
|
-
unless expected.to_sym == home_direction
|
50
|
-
screenshot_and_raise "Expected home button to have direction #{expected} but had #{home_direction}"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def label(uiquery)
|
55
|
-
query(uiquery, :accessibilityLabel)
|
56
|
-
end
|
57
|
-
|
58
|
-
def identifier(uiquery)
|
59
|
-
query(uiquery, :accessibilityIdentifier)
|
60
|
-
end
|
61
|
-
|
62
|
-
def simple_touch(label, *args)
|
63
|
-
touch("view marked:'#{label}'", *args)
|
64
|
-
end
|
65
|
-
|
66
|
-
def tap(hash_or_string, *args)
|
67
|
-
if hash_or_string.is_a?(String)
|
68
|
-
tap_mark(hash_or_string, *args)
|
69
|
-
elsif hash_or_string.respond_to?(:[])
|
70
|
-
wait_tap(hash_or_string[:query], hash_or_string)
|
71
|
-
else
|
72
|
-
raise(ArgumentError, "first parameter to tap must be a string or a hash. Was: #{hash_or_string.class}, #{hash_or_string}")
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def tap_mark(label, *args)
|
77
|
-
simple_touch(label, *args)
|
78
|
-
end
|
79
|
-
|
80
|
-
def html(q)
|
81
|
-
query(q).map { |e| e['html'] }
|
82
|
-
end
|
83
|
-
|
84
|
-
# sets the text value of the views matched by +uiquery+ to +txt+
|
85
|
-
#
|
86
|
-
# @deprecated since 0.9.145
|
87
|
-
#
|
88
|
-
# we have stopped testing this method. you have been warned.
|
89
|
-
#
|
90
|
-
# * to enter text using the native keyboard use 'keyboard_enter_text'
|
91
|
-
# * to delete text use 'keyboard_enter_text('Delete')"
|
92
|
-
# * to clear a text field or text view:
|
93
|
-
# - RECOMMENDED: use queries and touches to replicate what the user would do
|
94
|
-
# - for text fields, implement a clear text button and touch it
|
95
|
-
# - for text views, use touches to reveal text editing popup
|
96
|
-
# see https://github.com/calabash/calabash-ios/issues/151
|
97
|
-
# - use 'clear_text'
|
98
|
-
# https://github.com/calabash/calabash-ios/wiki/03.5-Calabash-iOS-Ruby-API
|
99
|
-
#
|
100
|
-
# raises an error if the +uiquery+ finds no matching queries or finds
|
101
|
-
# a view that does not respond to the objc selector 'setText'
|
102
|
-
def set_text(uiquery, txt)
|
103
|
-
msgs = ["'set_text' is deprecated and its behavior is now unpredictable",
|
104
|
-
"* to enter text using the native keyboard use 'keyboard_enter_text'",
|
105
|
-
"* to delete text use 'keyboard_enter_text('Delete')",
|
106
|
-
'* to clear a text field or text view:',
|
107
|
-
' - RECOMMENDED: use queries and touches to replicate what the user would do',
|
108
|
-
' * for text fields, implement a clear text button and touch it',
|
109
|
-
' * for text views, use touches to reveal text editing popup',
|
110
|
-
' see https://github.com/calabash/calabash-ios/issues/151',
|
111
|
-
" - use 'clear_text'",
|
112
|
-
'https://github.com/calabash/calabash-ios/wiki/03.5-Calabash-iOS-Ruby-API']
|
113
|
-
msg = msgs.join("\n")
|
114
|
-
_deprecated('0.9.145', msg, :warn)
|
115
|
-
|
116
|
-
text_fields_modified = map(uiquery, :setText, txt)
|
117
|
-
|
118
|
-
msg = "query '#{uiquery}' returned no matching views that respond to 'setText'"
|
119
|
-
assert_map_results(text_fields_modified, msg)
|
120
|
-
text_fields_modified
|
121
|
-
end
|
122
|
-
|
123
|
-
# sets the text value of the views matched by +uiquery+ to <tt>''</tt>
|
124
|
-
# (the empty string)
|
125
|
-
#
|
126
|
-
# using this sparingly and with caution
|
127
|
-
#
|
128
|
-
#
|
129
|
-
# it is recommended that you instead do some combination of the following
|
130
|
-
#
|
131
|
-
# * use queries and touches to replicate with the user would
|
132
|
-
# - for text fields, implement a clear text button and touch it
|
133
|
-
# - for text views, use touches to reveal text editing popup
|
134
|
-
# see https://github.com/calabash/calabash-ios/issues/151
|
135
|
-
#
|
136
|
-
# https://github.com/calabash/calabash-ios/wiki/03.5-Calabash-iOS-Ruby-API
|
137
|
-
#
|
138
|
-
# raises an error if the +uiquery+ finds no matching queries or finds
|
139
|
-
# a _single_ view that does not respond to the objc selector 'setText'
|
140
|
-
#
|
141
|
-
# IMPORTANT
|
142
|
-
# calling:
|
143
|
-
#
|
144
|
-
# > clear_text("view")
|
145
|
-
#
|
146
|
-
# will clear the text on _all_ visible views that respond to 'setText'
|
147
|
-
def clear_text(uiquery)
|
148
|
-
views_modified = map(uiquery, :setText, '')
|
149
|
-
msg = "query '#{uiquery}' returned no matching views that respond to 'setText'"
|
150
|
-
assert_map_results(views_modified, msg)
|
151
|
-
views_modified
|
152
|
-
end
|
153
|
-
|
154
|
-
|
155
|
-
def set_user_pref(key, val)
|
156
|
-
res = http({:method => :post, :path => 'userprefs'},
|
157
|
-
{:key=> key, :value => val})
|
158
|
-
res = JSON.parse(res)
|
159
|
-
if res['outcome'] != 'SUCCESS'
|
160
|
-
screenshot_and_raise "set_user_pref #{key} = #{val} failed because: #{res['reason']}\n#{res['details']}"
|
161
|
-
end
|
162
|
-
|
163
|
-
res['results']
|
164
|
-
end
|
165
|
-
|
166
|
-
def user_pref(key)
|
167
|
-
res = http({:method => :get, :raw => true, :path => 'userprefs'},
|
168
|
-
{:key=> key})
|
169
|
-
res = JSON.parse(res)
|
170
|
-
if res['outcome'] != 'SUCCESS'
|
171
|
-
screenshot_and_raise "get user_pref #{key} failed because: #{res['reason']}\n#{res['details']}"
|
172
|
-
end
|
173
|
-
|
174
|
-
res['results'].first
|
175
|
-
end
|
176
|
-
|
177
|
-
#def screencast_begin
|
178
|
-
# http({:method=>:post, :path=>'screencast'}, {:action => :start})
|
179
|
-
#end
|
180
|
-
#
|
181
|
-
#def screencast_end(file_name)
|
182
|
-
# res = http({:method=>:post, :path=>'screencast'}, {:action => :stop})
|
183
|
-
# File.open(file_name,'wb') do |f|
|
184
|
-
# f.write res
|
185
|
-
# end
|
186
|
-
# file_name
|
187
|
-
#end
|
188
32
|
end
|
189
33
|
end
|
190
34
|
end
|
@@ -3,12 +3,25 @@ require 'calabash-cucumber/device'
|
|
3
3
|
|
4
4
|
module Calabash
|
5
5
|
module Cucumber
|
6
|
+
|
7
|
+
# This module provides methods for interaction with UIAutomation's
|
8
|
+
# record-and-playback features.
|
9
|
+
#
|
10
|
+
# @note
|
11
|
+
# In iOS 7, the record-and-playback feature was dropped from UIAutomation.
|
12
|
+
# As such, using the record-and-playback API is not recommended.
|
13
|
+
#
|
14
|
+
# @note
|
15
|
+
# We expect that this module will be deprecated once iOS 6 testing is no
|
16
|
+
# longer supported.
|
6
17
|
module PlaybackHelpers
|
7
18
|
|
8
19
|
include Calabash::Cucumber::Logging
|
9
20
|
|
21
|
+
# @!visibility private
|
10
22
|
DATA_PATH = File.expand_path(File.dirname(__FILE__))
|
11
23
|
|
24
|
+
# @!visibility private
|
12
25
|
def recording_name_for(recording_name, os, device)
|
13
26
|
#noinspection RubyControlFlowConversionInspection
|
14
27
|
if !recording_name.end_with? '.base64'
|
@@ -18,6 +31,7 @@ module Calabash
|
|
18
31
|
end
|
19
32
|
end
|
20
33
|
|
34
|
+
# @!visibility private
|
21
35
|
def load_recording(recording, rec_dir)
|
22
36
|
directories = playback_file_directories(rec_dir)
|
23
37
|
directories.each { |dir|
|
@@ -29,6 +43,7 @@ module Calabash
|
|
29
43
|
nil
|
30
44
|
end
|
31
45
|
|
46
|
+
# @!visibility private
|
32
47
|
def playback_file_directories (rec_dir)
|
33
48
|
# rec_dir is either ENV['PLAYBACK_DIR'] or ./features/playback
|
34
49
|
[File.expand_path(rec_dir),
|
@@ -38,6 +53,7 @@ module Calabash
|
|
38
53
|
"#{DATA_PATH}/resources/"].uniq
|
39
54
|
end
|
40
55
|
|
56
|
+
# @!visibility private
|
41
57
|
def load_playback_data(recording_name, options={})
|
42
58
|
device = options['DEVICE'] || ENV['DEVICE'] || 'iphone'
|
43
59
|
|
@@ -79,6 +95,7 @@ EOF
|
|
79
95
|
data
|
80
96
|
end
|
81
97
|
|
98
|
+
# @!visibility private
|
82
99
|
def find_compatible_recording (recording_name, os, rec_dir, device, candidates)
|
83
100
|
recording = recording_name_for(recording_name, os, device)
|
84
101
|
data = load_recording(recording, rec_dir)
|
@@ -99,6 +116,9 @@ EOF
|
|
99
116
|
data
|
100
117
|
end
|
101
118
|
|
119
|
+
# Plays back a recording.
|
120
|
+
# @param [String] recording the filename of the recording
|
121
|
+
# @param [Hash] options can control the behavior of the recording
|
102
122
|
def playback(recording, options={})
|
103
123
|
data = load_playback_data(recording)
|
104
124
|
|
@@ -119,6 +139,9 @@ EOF
|
|
119
139
|
res['results']
|
120
140
|
end
|
121
141
|
|
142
|
+
# Plays back a recording but interpolates it first.
|
143
|
+
# @param [String] recording the filename of the recording
|
144
|
+
# @param [Hash] options can control the behavior of the recording
|
122
145
|
def interpolate(recording, options={})
|
123
146
|
data = load_playback_data(recording)
|
124
147
|
|
@@ -138,10 +161,13 @@ EOF
|
|
138
161
|
res['results']
|
139
162
|
end
|
140
163
|
|
164
|
+
# Begins a recording.
|
141
165
|
def record_begin
|
142
166
|
http({:method => :post, :path => 'record'}, {:action => :start})
|
143
167
|
end
|
144
168
|
|
169
|
+
# Ends a recording and saves it.
|
170
|
+
# @param [String] file_name where to save the recording.
|
145
171
|
def record_end(file_name)
|
146
172
|
res = http({:method => :post, :path => 'record'}, {:action => :stop})
|
147
173
|
File.open('_recording.plist', 'wb') do |f|
|
@@ -1,11 +1,23 @@
|
|
1
1
|
module Calabash
|
2
2
|
module Cucumber
|
3
|
+
|
4
|
+
# A module of methods that can help you construct queries.
|
3
5
|
module QueryHelpers
|
4
6
|
|
7
|
+
# call this method to properly escape single quotes in Calabash queries
|
8
|
+
# Calabash iOS has some annoying rules for text containing single quotes.
|
9
|
+
# This helper frees you from manual escaping.
|
10
|
+
# @example
|
11
|
+
# quoted = escape_quotes("Karl's child")
|
12
|
+
# # => "Karl\\'s child"
|
13
|
+
# @param {String} str string to escape
|
14
|
+
# @return {String} escaped version of `str`
|
5
15
|
def escape_quotes(str)
|
6
16
|
str.gsub("'", "\\\\'")
|
7
17
|
end
|
8
18
|
|
19
|
+
# converts a query result or off-set hash to a point hash
|
20
|
+
# @!visibility private
|
9
21
|
def point_from(query_result, options={})
|
10
22
|
offset_x = 0
|
11
23
|
offset_y = 0
|
@@ -2,23 +2,57 @@ require 'calabash-cucumber/utils/logging'
|
|
2
2
|
|
3
3
|
module Calabash
|
4
4
|
module Cucumber
|
5
|
-
|
5
|
+
|
6
|
+
# Provides methods for rotating a device in a direction or to a particular
|
7
|
+
# orientation.
|
8
|
+
module RotationHelpers
|
6
9
|
|
7
10
|
include Calabash::Cucumber::Logging
|
8
11
|
|
12
|
+
# @!visibility private
|
9
13
|
def rotation_candidates
|
10
14
|
%w(rotate_left_home_down rotate_left_home_left rotate_left_home_right rotate_left_home_up
|
11
15
|
rotate_right_home_down rotate_right_home_left rotate_right_home_right rotate_right_home_up)
|
12
16
|
end
|
13
17
|
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
18
|
+
# Rotates the home button position to the position indicated by `dir`.
|
19
|
+
#
|
20
|
+
# @example portrait
|
21
|
+
# rotate_home_button_to :down
|
22
|
+
#
|
23
|
+
# @example upside down
|
24
|
+
# rotate_home_button_to :up
|
25
|
+
#
|
26
|
+
# @example landscape with left home button AKA: _right_ landscape
|
27
|
+
# rotate_home_button_to :left
|
28
|
+
#
|
29
|
+
# @example landscape with right home button AKA: _left_ landscape
|
30
|
+
# rotate_home_button_to :right
|
31
|
+
#
|
32
|
+
# @note Refer to Apple's documentation for clarification about left vs.
|
33
|
+
# right landscape orientations.
|
34
|
+
#
|
35
|
+
# @note For legacy support the `dir` argument can be a String or Symbol.
|
36
|
+
# Please update your code to pass a Symbol.
|
37
|
+
#
|
38
|
+
# @note For legacy support `:top` and `top` are synonyms for `:up`.
|
39
|
+
# Please update your code to pass `:up`.
|
40
|
+
#
|
41
|
+
# @note For legacy support `:bottom` and `bottom` are synonyms for `:down`.
|
42
|
+
# Please update your code to pass `:down`.
|
43
|
+
#
|
44
|
+
# @note This method generates verbose messages when full console logging
|
45
|
+
# is enabled. See {Calabash::Cucumber::Logging#full_console_logging?}.
|
19
46
|
#
|
20
|
-
#
|
21
|
-
#
|
47
|
+
# @param [Symbol] dir The position of the home button after the rotation.
|
48
|
+
# Can be one of `{:down | :left | :right | :up }`.
|
49
|
+
#
|
50
|
+
# @return [Symbol] The orientation of the button when all rotations have
|
51
|
+
# been completed. If there is problem rotating, this method will return
|
52
|
+
# `:down` regardless of the actual home button position.
|
53
|
+
#
|
54
|
+
# @todo When running under UIAutomation, we should use that API to rotate
|
55
|
+
# instead of relying on playbacks.
|
22
56
|
def rotate_home_button_to(dir)
|
23
57
|
dir_sym = dir.to_sym
|
24
58
|
if dir_sym.eql?(:top)
|
@@ -75,6 +109,28 @@ module Calabash
|
|
75
109
|
:down
|
76
110
|
end
|
77
111
|
|
112
|
+
# Rotates the device in the direction indicated by `dir`.
|
113
|
+
#
|
114
|
+
# @example rotate left
|
115
|
+
# rotate :left
|
116
|
+
#
|
117
|
+
# @example rotate right
|
118
|
+
# rotate :right
|
119
|
+
#
|
120
|
+
# @example rotate down
|
121
|
+
# rotate :down
|
122
|
+
#
|
123
|
+
# @example rotate up
|
124
|
+
# rotate :up
|
125
|
+
#
|
126
|
+
# @note For legacy support the `dir` argument can be a String or Symbol.
|
127
|
+
# Please update your code to pass a Symbol.
|
128
|
+
#
|
129
|
+
# @param [Symbol] dir The position of the home button after the rotation.
|
130
|
+
# Can be one of `{:down | :left | :right | :up }`.
|
131
|
+
#
|
132
|
+
# @todo When running under UIAutomation, we should use that API to rotate
|
133
|
+
# instead of relying on playbacks.
|
78
134
|
def rotate(dir)
|
79
135
|
dir = dir.to_sym
|
80
136
|
current_orientation = status_bar_orientation().to_sym
|