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.
- checksums.yaml +4 -4
- data/README.md +5 -17
- data/bin/calabash +3 -4
- data/lib/calabash.rb +53 -10
- data/lib/calabash/android.rb +89 -28
- data/lib/calabash/android/adb.rb +32 -20
- data/lib/calabash/android/application.rb +1 -1
- data/lib/calabash/android/build/builder.rb +1 -1
- data/lib/calabash/android/build/java_keystore.rb +1 -1
- data/lib/calabash/android/build/resigner.rb +1 -1
- data/lib/calabash/android/device.rb +22 -66
- data/lib/calabash/android/device/helper_application.rb +95 -0
- data/lib/calabash/android/environment.rb +14 -1
- data/lib/calabash/android/gestures.rb +6 -22
- data/lib/calabash/android/interactions.rb +14 -17
- data/lib/calabash/android/lib/.irbrc +9 -1
- data/lib/calabash/android/lib/AndroidManifest.xml +23 -2
- data/lib/calabash/android/lib/HelperApplication.apk +0 -0
- data/lib/calabash/android/lib/HelperApplicationTestServer.apk +0 -0
- data/lib/calabash/android/lib/TestServer.apk +0 -0
- data/lib/calabash/android/life_cycle.rb +3 -3
- data/lib/calabash/android/orientation.rb +8 -8
- data/lib/calabash/android/physical_buttons.rb +19 -16
- data/lib/calabash/android/server.rb +1 -1
- data/lib/calabash/android/text.rb +12 -12
- data/lib/calabash/android/web.rb +12 -0
- data/lib/calabash/application.rb +3 -0
- data/lib/calabash/cli/generate.rb +8 -18
- data/lib/calabash/cli/helpers.rb +4 -9
- data/lib/calabash/cli/run.rb +1 -1
- data/lib/calabash/console_helpers.rb +179 -11
- data/lib/calabash/device.rb +4 -19
- data/lib/calabash/gestures.rb +292 -198
- data/lib/calabash/interactions.rb +3 -40
- data/lib/calabash/internal.rb +48 -0
- data/lib/calabash/ios.rb +76 -16
- data/lib/calabash/ios/automator.rb +9 -0
- data/lib/calabash/ios/automator/automator.rb +217 -0
- data/lib/calabash/ios/automator/coordinates.rb +37 -0
- data/lib/calabash/ios/automator/device_agent.rb +379 -0
- data/lib/calabash/ios/conditions.rb +1 -1
- data/lib/calabash/ios/console_helpers.rb +2 -2
- data/lib/calabash/ios/date_picker.rb +10 -8
- data/lib/calabash/ios/device.rb +0 -1
- data/lib/calabash/ios/device/device_implementation.rb +9 -21
- data/lib/calabash/ios/device/gestures_mixin.rb +53 -55
- data/lib/calabash/ios/device/keyboard_mixin.rb +21 -0
- data/lib/calabash/ios/device/rotation_mixin.rb +3 -65
- data/lib/calabash/ios/gestures.rb +24 -90
- data/lib/calabash/ios/interactions.rb +1 -6
- data/lib/calabash/ios/lib/.irbrc +9 -2
- data/lib/calabash/ios/orientation.rb +8 -8
- data/lib/calabash/ios/runtime.rb +14 -14
- data/lib/calabash/ios/scroll.rb +25 -17
- data/lib/calabash/ios/slider.rb +11 -18
- data/lib/calabash/ios/text.rb +20 -74
- data/lib/calabash/ios/uia.rb +1 -1
- data/lib/calabash/ios/web.rb +10 -0
- data/lib/calabash/lib/skeleton/{Gemfile → Gemfile.skeleton} +0 -0
- data/lib/calabash/lib/skeleton/config/{cucumber.yml → cucumber.yml.skeleton} +0 -0
- data/lib/calabash/lib/skeleton/features/{sample.feature → sample.feature.skeleton} +0 -0
- data/lib/calabash/lib/skeleton/features/step_definitions/{calabash_steps.rb → sample_steps.rb.skeleton} +8 -8
- data/lib/calabash/lib/skeleton/features/support/{dry_run.rb → dry_run.rb.skeleton} +2 -5
- data/lib/calabash/lib/skeleton/features/support/{env.rb → env.rb.skeleton} +2 -8
- data/lib/calabash/lib/skeleton/features/support/hooks.rb.skeleton +34 -0
- data/lib/calabash/life_cycle.rb +16 -8
- data/lib/calabash/location.rb +14 -15
- data/lib/calabash/orientation.rb +8 -8
- data/lib/calabash/page.rb +1 -4
- data/lib/calabash/retry.rb +33 -0
- data/lib/calabash/screenshot.rb +3 -3
- data/lib/calabash/stubs.rb +21 -0
- data/lib/calabash/text.rb +31 -19
- data/lib/calabash/utility.rb +41 -8
- data/lib/calabash/version.rb +1 -1
- data/lib/calabash/wait.rb +177 -192
- data/lib/calabash/web.rb +44 -0
- metadata +39 -32
- data/lib/calabash/ios/device/text_mixin.rb +0 -21
- data/lib/calabash/lib/skeleton/features/support/hooks.rb +0 -83
data/lib/calabash/ios/uia.rb
CHANGED
@@ -17,7 +17,7 @@ module Calabash
|
|
17
17
|
# uia("UIATarget.localTarget().frontMostApp().keyboard().buttons()['Delete']")
|
18
18
|
# uia("UIATarget.localTarget().frontMostApp().mainWindow().elements()")
|
19
19
|
def uia(script)
|
20
|
-
|
20
|
+
Calabash::Internal.with_default_device(required_os: :ios) {|device| device.evaluate_uia(script)}
|
21
21
|
end
|
22
22
|
|
23
23
|
# Evaluates `script` after prefixing with "UIATarget.localTarget()"
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,10 +1,10 @@
|
|
1
1
|
Given(/^I have done a specific thing$/) do
|
2
2
|
# Sample step definition
|
3
3
|
# Example: (Given I am logged in)
|
4
|
-
# enter_text(
|
5
|
-
# enter_text(
|
6
|
-
#
|
7
|
-
# wait_for_view("* text:'Welcome #{USERNAME}'")
|
4
|
+
# cal.enter_text({marked: 'username'}, USERNAME)
|
5
|
+
# cal.enter_text({marked: 'password'}, PASSWORD)
|
6
|
+
# cal.tap({marked: 'login'}")
|
7
|
+
# cal.wait_for_view("* text:'Welcome #{USERNAME}'")
|
8
8
|
|
9
9
|
# Remember: any Ruby is allowed in your step definitions
|
10
10
|
did_something = true
|
@@ -17,13 +17,13 @@ end
|
|
17
17
|
When(/^I do something$/) do
|
18
18
|
# Sample step definition
|
19
19
|
# Example: When I create a new entry
|
20
|
-
#
|
21
|
-
# enter_text(
|
22
|
-
#
|
20
|
+
# cal.tap({marked:'new_entry'})
|
21
|
+
# cal.enter_text({marked: 'entry_title'}, 'My Entry')
|
22
|
+
# cal.tap({marked: 'submit'})
|
23
23
|
end
|
24
24
|
|
25
25
|
Then(/^something should happen$/) do
|
26
26
|
# Sample step definition
|
27
27
|
# Example: Then I should see the entry on my home page
|
28
|
-
# wait_for_view(
|
28
|
+
# cal.wait_for_view({text: 'My Entry'})
|
29
29
|
end
|
@@ -1,8 +1,5 @@
|
|
1
1
|
# Cucumber does not load env.rb when running a dry-run. As the pages inherit
|
2
2
|
# from Calabash::Page and assert that the scopes IOS and Android are defined,
|
3
|
-
# we should require calabash.
|
3
|
+
# we should require calabash stubs, which are empty scopes.
|
4
4
|
|
5
|
-
|
6
|
-
require 'calabash/android'
|
7
|
-
require 'calabash/ios'
|
8
|
-
end
|
5
|
+
require 'calabash/stubs'
|
@@ -1,6 +1,4 @@
|
|
1
1
|
require 'calabash'
|
2
|
-
require 'calabash/android/application'
|
3
|
-
require 'calabash/ios/application'
|
4
2
|
|
5
3
|
platform = ENV['PLATFORM']
|
6
4
|
|
@@ -12,7 +10,7 @@ unless platform
|
|
12
10
|
elsif application.ios_application?
|
13
11
|
platform = 'ios'
|
14
12
|
else
|
15
|
-
raise "Application '#{application}' is neither an Android app
|
13
|
+
raise "Application '#{application}' is neither an Android app nor an iOS app"
|
16
14
|
end
|
17
15
|
end
|
18
16
|
|
@@ -20,14 +18,10 @@ case platform
|
|
20
18
|
when 'android'
|
21
19
|
require 'calabash/android'
|
22
20
|
|
23
|
-
World(Calabash::Android)
|
24
|
-
|
25
21
|
Calabash::Android.setup_defaults!
|
26
22
|
when 'ios'
|
27
23
|
require 'calabash/ios'
|
28
24
|
|
29
|
-
World(Calabash::IOS)
|
30
|
-
|
31
25
|
Calabash::IOS.setup_defaults!
|
32
26
|
else
|
33
27
|
message = if platform.nil? || platform.empty?
|
@@ -40,7 +34,7 @@ case platform
|
|
40
34
|
[
|
41
35
|
'ERROR! Unable to start the cucumber test:',
|
42
36
|
message,
|
43
|
-
"Run cucumber with the ENV variable 'CAL_APP'
|
37
|
+
"Run cucumber with the ENV variable 'CAL_APP' set to the path of the application under test, or specify 'PLATFORM'"
|
44
38
|
]
|
45
39
|
|
46
40
|
Calabash::Logger.error(failure_messages.join("\n"))
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'calabash'
|
2
|
+
|
3
|
+
Before do |scenario|
|
4
|
+
if scenario.respond_to?(:scenario_outline)
|
5
|
+
scenario = scenario.scenario_outline
|
6
|
+
end
|
7
|
+
|
8
|
+
reset_between_scenarios(scenario) do
|
9
|
+
cal.reset_device_changes # Resets changes Calabash has made to the device
|
10
|
+
cal.ensure_app_installed # Installs the app unless it is already installed
|
11
|
+
cal.clear_app_data # Clears the application data
|
12
|
+
cal.start_app # Starts the application
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
After do |scenario|
|
17
|
+
if scenario.failed?
|
18
|
+
cal.screenshot_embed
|
19
|
+
end
|
20
|
+
|
21
|
+
cal.stop_app
|
22
|
+
end
|
23
|
+
|
24
|
+
def reset_between_scenarios(scenario, &block)
|
25
|
+
block.call
|
26
|
+
end
|
27
|
+
|
28
|
+
def reset_between_features(scenario, &block)
|
29
|
+
if scenario.feature != @last_feature
|
30
|
+
block.call
|
31
|
+
end
|
32
|
+
|
33
|
+
@last_feature = scenario.feature
|
34
|
+
end
|
data/lib/calabash/life_cycle.rb
CHANGED
@@ -38,13 +38,13 @@ module Calabash
|
|
38
38
|
raise 'No application given, and Calabash.default_application is not set'
|
39
39
|
end
|
40
40
|
|
41
|
-
|
41
|
+
Calabash::Internal.with_default_device {|device| device.start_app(path_or_application, options.dup)}
|
42
42
|
end
|
43
43
|
|
44
44
|
# Stop the app running on
|
45
45
|
# {Calabash::Defaults#default_server Calabash.default_server}
|
46
46
|
def stop_app
|
47
|
-
|
47
|
+
Calabash::Internal.with_default_device {|device| device.stop_app}
|
48
48
|
end
|
49
49
|
|
50
50
|
# Installs the given application. If the application is already installed,
|
@@ -67,7 +67,7 @@ module Calabash
|
|
67
67
|
raise 'No application given, and Calabash.default_application is not set'
|
68
68
|
end
|
69
69
|
|
70
|
-
|
70
|
+
Calabash::Internal.with_default_device {|device| device.install_app(path_or_application)}
|
71
71
|
end
|
72
72
|
|
73
73
|
# Installs the given application *if it is not already installed*. If no
|
@@ -90,7 +90,7 @@ module Calabash
|
|
90
90
|
raise 'No application given, and Calabash.default_application is not set'
|
91
91
|
end
|
92
92
|
|
93
|
-
|
93
|
+
Calabash::Internal.with_default_device {|device| device.ensure_app_installed(path_or_application)}
|
94
94
|
end
|
95
95
|
|
96
96
|
# Uninstalls the given application. Does nothing if the application is
|
@@ -108,7 +108,7 @@ module Calabash
|
|
108
108
|
raise 'No application given, and Calabash.default_application is not set'
|
109
109
|
end
|
110
110
|
|
111
|
-
|
111
|
+
Calabash::Internal.with_default_device {|device| device.uninstall_app(path_or_application)}
|
112
112
|
end
|
113
113
|
|
114
114
|
# Clears the contents of the given application. This is roughly equivalent to
|
@@ -126,7 +126,7 @@ module Calabash
|
|
126
126
|
raise 'No application given, and Calabash.default_application is not set'
|
127
127
|
end
|
128
128
|
|
129
|
-
|
129
|
+
Calabash::Internal.with_default_device {|device| device.clear_app_data(path_or_application)}
|
130
130
|
end
|
131
131
|
|
132
132
|
# Sends the current app to the background and resumes it after
|
@@ -150,9 +150,17 @@ module Calabash
|
|
150
150
|
true
|
151
151
|
end
|
152
152
|
|
153
|
+
# Attempts to reset the changes Calabash has made to the device.
|
154
|
+
#
|
155
|
+
# This method does nothing at the moment, but will be required to reset the
|
156
|
+
# device changes in the future.
|
157
|
+
def reset_device_changes
|
158
|
+
true
|
159
|
+
end
|
160
|
+
|
153
161
|
# @!visibility private
|
154
|
-
|
155
|
-
abstract_method!
|
162
|
+
define_method(:_send_current_app_to_background) do |for_seconds|
|
163
|
+
abstract_method!(:_send_current_app_to_background)
|
156
164
|
end
|
157
165
|
end
|
158
166
|
end
|
data/lib/calabash/location.rb
CHANGED
@@ -5,40 +5,39 @@ module Calabash
|
|
5
5
|
# An API for setting the location of your app.
|
6
6
|
module Location
|
7
7
|
# Simulates gps location of the device/simulator.
|
8
|
-
# @note Seems UIAutomation is broken here on physical devices on iOS 7.1
|
9
8
|
#
|
10
9
|
# @example
|
11
|
-
# set_location(
|
10
|
+
# cal.set_location(latitude: 48.8567, longitude: 2.3508)
|
12
11
|
#
|
13
12
|
# @example
|
14
|
-
# set_location(coordinates_for_place('The little mermaid, Copenhagen'))
|
13
|
+
# cal.set_location(coordinates_for_place('The little mermaid, Copenhagen'))
|
15
14
|
#
|
16
|
-
# @param [
|
17
|
-
# @
|
18
|
-
#
|
19
|
-
def set_location(
|
20
|
-
unless
|
21
|
-
raise ArgumentError, "Expected
|
15
|
+
# @param [Number] latitude The latitude of the location to simulate.
|
16
|
+
# @param [Number] longitude The longitude of the location to simulate.
|
17
|
+
# @raise [ArgumentError] If not given a latitude or longitude key.
|
18
|
+
def set_location(latitude: nil, longitude: nil)
|
19
|
+
unless latitude
|
20
|
+
raise ArgumentError, "Expected latitude to be a number, not '#{latitude.class}'"
|
22
21
|
end
|
23
22
|
|
24
|
-
unless
|
25
|
-
raise ArgumentError,
|
23
|
+
unless longitude
|
24
|
+
raise ArgumentError, "Expected longitude to be a number, not '#{longitude.class}'"
|
26
25
|
end
|
27
26
|
|
28
|
-
|
27
|
+
Calabash::Internal.with_default_device {|device| device.set_location(latitude: latitude, longitude: longitude)}
|
29
28
|
end
|
30
29
|
|
31
30
|
# Get the latitude and longitude for a certain place, resolved via Google
|
32
31
|
# maps api. This hash can be used in `set_location`.
|
33
32
|
#
|
34
33
|
# @example
|
35
|
-
# coordinates_for_place('The little mermaid, Copenhagen')
|
34
|
+
# cal.coordinates_for_place('The little mermaid, Copenhagen')
|
36
35
|
# # => {:latitude => 55.6760968, :longitude => 12.5683371}
|
37
36
|
#
|
38
37
|
# @return [Hash] Latitude and longitude for the given place
|
39
38
|
# @raise [RuntimeError] If the place cannot be found
|
40
|
-
def coordinates_for_place(
|
41
|
-
result = Geocoder.search(
|
39
|
+
def coordinates_for_place(place_name)
|
40
|
+
result = Geocoder.search(place_name)
|
42
41
|
|
43
42
|
if result.empty?
|
44
43
|
raise "No result found for '#{place}'"
|
data/lib/calabash/orientation.rb
CHANGED
@@ -62,23 +62,23 @@ module Calabash
|
|
62
62
|
end
|
63
63
|
|
64
64
|
# @!visibility private
|
65
|
-
|
66
|
-
abstract_method!
|
65
|
+
define_method(:_portrait?) do
|
66
|
+
abstract_method!(:_portrait?)
|
67
67
|
end
|
68
68
|
|
69
69
|
# @!visibility private
|
70
|
-
|
71
|
-
abstract_method!
|
70
|
+
define_method(:_landscape?) do
|
71
|
+
abstract_method!(:_landscape?)
|
72
72
|
end
|
73
73
|
|
74
74
|
# @!visibility private
|
75
|
-
|
76
|
-
abstract_method!
|
75
|
+
define_method(:_set_orientation_portrait) do
|
76
|
+
abstract_method!(:_set_orientation_portrait)
|
77
77
|
end
|
78
78
|
|
79
79
|
# @!visibility private
|
80
|
-
|
81
|
-
abstract_method!
|
80
|
+
define_method(:_set_orientation_landscape) do
|
81
|
+
abstract_method!(:_set_orientation_landscape)
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
data/lib/calabash/page.rb
CHANGED
@@ -8,9 +8,6 @@ module Calabash
|
|
8
8
|
# * https://github.com/calabash/calabash/tree/develop/samples/wordpress
|
9
9
|
# * https://github.com/calabash/calabash/tree/develop/samples/shared-page-logic
|
10
10
|
class Page
|
11
|
-
# For auto-completion
|
12
|
-
include Calabash
|
13
|
-
|
14
11
|
# @!visibility private
|
15
12
|
def self.inherited(subclass)
|
16
13
|
# Define the page into global scope
|
@@ -71,7 +68,7 @@ module Calabash
|
|
71
68
|
|
72
69
|
# Waits for the page trait to appear.
|
73
70
|
def await(options={})
|
74
|
-
wait_for_view(trait, options)
|
71
|
+
cal.wait_for_view(trait, options)
|
75
72
|
end
|
76
73
|
|
77
74
|
# @!visibility private
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Calabash
|
2
|
+
module Retry
|
3
|
+
DEFAULT_INTERVAL = 0.5
|
4
|
+
|
5
|
+
def self.retry(retries: nil, interval: DEFAULT_INTERVAL, timeout: nil, on_errors: [StandardError], &block)
|
6
|
+
if retries.nil?
|
7
|
+
raise ArgumentError, "Must supply retries"
|
8
|
+
end
|
9
|
+
|
10
|
+
if retries < 1
|
11
|
+
raise ArgumentError, "'retries' must be greater or equal to 1, it is #{retries}"
|
12
|
+
end
|
13
|
+
|
14
|
+
last_error = nil
|
15
|
+
start_time = Time.now
|
16
|
+
|
17
|
+
retries.times do
|
18
|
+
begin
|
19
|
+
return block.call
|
20
|
+
rescue *on_errors => e
|
21
|
+
last_error = e
|
22
|
+
sleep interval
|
23
|
+
|
24
|
+
if timeout && Time.now - start_time > timeout
|
25
|
+
break
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
raise last_error
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/calabash/screenshot.rb
CHANGED
@@ -38,7 +38,7 @@ module Calabash
|
|
38
38
|
# If the name given is an absolute path, then Calabash will save the
|
39
39
|
# screenshot to the absolute directory given.
|
40
40
|
#
|
41
|
-
# If the name given starts with ./ (e.g. `screenshot('./foo.png')`) then
|
41
|
+
# If the name given starts with ./ (e.g. `cal.screenshot('./foo.png')`) then
|
42
42
|
# the filename will be saved relative to the current working directory.
|
43
43
|
#
|
44
44
|
# If the file specified by `name` has no extension then the filename will
|
@@ -49,11 +49,11 @@ module Calabash
|
|
49
49
|
# @param [String] name Name of the screenshot.
|
50
50
|
# @return [String] Path to the screenshot
|
51
51
|
def screenshot(name=nil)
|
52
|
-
|
52
|
+
Calabash::Internal.with_default_device {|device| device.screenshot(name)}
|
53
53
|
end
|
54
54
|
|
55
55
|
# Takes a screenshot and embeds it in the test report. This method is only
|
56
|
-
# available/useful when running in the context of
|
56
|
+
# available/useful when running in the context of Cucumber.
|
57
57
|
# @see Screenshot#screenshot
|
58
58
|
def screenshot_embed(name=nil)
|
59
59
|
path = screenshot(name)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Stubs for Calabash. Used for example when running Cucumber's dry-run
|
2
|
+
|
3
|
+
# Page class
|
4
|
+
unless Object.const_defined?(:Calabash)
|
5
|
+
Object.const_set(:Calabash, Module.new)
|
6
|
+
end
|
7
|
+
|
8
|
+
unless Calabash.const_defined?(:Page)
|
9
|
+
Calabash.const_set(:Page, Class.new)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Android module (used for pages)
|
13
|
+
unless Object.const_defined?(:Android)
|
14
|
+
Object.const_set(:Android, Module.new)
|
15
|
+
end
|
16
|
+
|
17
|
+
# IOS module (used for pages)
|
18
|
+
unless Object.const_defined?(:IOS)
|
19
|
+
Object.const_set(:IOS, Module.new)
|
20
|
+
end
|
21
|
+
|
data/lib/calabash/text.rb
CHANGED
@@ -4,13 +4,19 @@ module Calabash
|
|
4
4
|
module Text
|
5
5
|
# Enter `text` into the currently focused view.
|
6
6
|
#
|
7
|
+
# @see Calabash::Text#enter_text_in
|
8
|
+
#
|
7
9
|
# @param [String] text The text to type.
|
8
10
|
# @raise [RuntimeError] if the text cannot be typed.
|
9
11
|
def enter_text(text)
|
10
12
|
_enter_text(text.to_s)
|
11
13
|
end
|
12
14
|
|
13
|
-
# Enter `text` into `query`.
|
15
|
+
# Enter `text` into the first view matched by `query`.
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# cal.enter_text_in({id: 'edit'}, "Hello World")
|
19
|
+
#
|
14
20
|
# @see Calabash::Text#enter_text
|
15
21
|
#
|
16
22
|
# @param [String] text The text to type.
|
@@ -21,11 +27,18 @@ module Calabash
|
|
21
27
|
end
|
22
28
|
|
23
29
|
# Clears the text of the currently focused view.
|
30
|
+
#
|
31
|
+
# @see Calabash::Text#clear_text_in
|
32
|
+
#
|
24
33
|
def clear_text
|
25
34
|
_clear_text
|
26
35
|
end
|
27
36
|
|
28
|
-
# Clears the text
|
37
|
+
# Clears the text in the first view matched by `query`
|
38
|
+
#
|
39
|
+
# @example
|
40
|
+
# cal.clear_text_in({id: 'edit'})
|
41
|
+
#
|
29
42
|
# @see Calabash::Text#clear_text
|
30
43
|
#
|
31
44
|
# @param [String, Hash, Calabash::Query] query A query describing the view
|
@@ -56,10 +69,10 @@ module Calabash
|
|
56
69
|
# See http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html
|
57
70
|
#
|
58
71
|
# @example
|
59
|
-
# tap_keyboard_action_key(:search)
|
60
|
-
# tap_keyboard_action_key(:send)
|
61
|
-
# tap_keyboard_action_key(:next)
|
62
|
-
# tap_keyboard_action_key(:previous)
|
72
|
+
# cal.tap_keyboard_action_key(:search)
|
73
|
+
# cal.tap_keyboard_action_key(:send)
|
74
|
+
# cal.tap_keyboard_action_key(:next)
|
75
|
+
# cal.tap_keyboard_action_key(:previous)
|
63
76
|
#
|
64
77
|
# Notice that, for Android, Calabash does not ensure that this particular action key is
|
65
78
|
# actually available on the current keyboard.
|
@@ -79,13 +92,13 @@ module Calabash
|
|
79
92
|
# Escapes single quotes in `string`.
|
80
93
|
#
|
81
94
|
# @example
|
82
|
-
# escape_single_quotes("Let's get this done.")
|
95
|
+
# cal.escape_single_quotes("Let's get this done.")
|
83
96
|
# => "Let\\'s get this done."
|
84
97
|
#
|
85
98
|
# @example
|
86
|
-
# query("* text:'#{escape_single_quotes("Let's go")}'")
|
99
|
+
# cal.query("* text:'#{escape_single_quotes("Let's go")}'")
|
87
100
|
# # Equivalent to
|
88
|
-
# query("* text:'Let\\'s go'")
|
101
|
+
# cal.query("* text:'Let\\'s go'")
|
89
102
|
#
|
90
103
|
# @param [String] string The string to escape.
|
91
104
|
# @return [String] A string with its single quotes properly escaped.
|
@@ -109,7 +122,7 @@ module Calabash
|
|
109
122
|
# @param [Number] timeout How long to wait for the keyboard.
|
110
123
|
# @raise [Calabash::Wait::TimeoutError] Raises error if no keyboard
|
111
124
|
# appears.
|
112
|
-
def wait_for_keyboard(timeout
|
125
|
+
def wait_for_keyboard(timeout: nil)
|
113
126
|
keyboard_timeout = keyboard_wait_timeout(timeout)
|
114
127
|
message = "Timed out after #{keyboard_timeout} seconds waiting for the keyboard to appear"
|
115
128
|
wait_for(message, timeout: keyboard_timeout) do
|
@@ -124,7 +137,7 @@ module Calabash
|
|
124
137
|
# @param [Number] timeout How log to wait for the keyboard to disappear.
|
125
138
|
# @raise [Calabash::Wait::TimeoutError] Raises error if any keyboard is
|
126
139
|
# visible after the `timeout`.
|
127
|
-
def wait_for_no_keyboard(timeout
|
140
|
+
def wait_for_no_keyboard(timeout: nil)
|
128
141
|
keyboard_timeout = keyboard_wait_timeout(timeout)
|
129
142
|
message = "Timed out after #{keyboard_timeout} seconds waiting for the keyboard to disappear"
|
130
143
|
wait_for(message, timeout: keyboard_timeout) do
|
@@ -132,33 +145,32 @@ module Calabash
|
|
132
145
|
end
|
133
146
|
end
|
134
147
|
|
135
|
-
|
136
|
-
def _enter_text(text)
|
148
|
+
define_method(:_enter_text) do |text|
|
137
149
|
abstract_method!
|
138
150
|
end
|
139
151
|
|
140
152
|
# @!visibility private
|
141
|
-
|
153
|
+
define_method(:_enter_text_in) do |view, text|
|
142
154
|
abstract_method!
|
143
155
|
end
|
144
156
|
|
145
157
|
# @!visibility private
|
146
|
-
|
158
|
+
define_method(:_clear_text) do
|
147
159
|
abstract_method!
|
148
160
|
end
|
149
161
|
|
150
162
|
# @!visibility private
|
151
|
-
|
163
|
+
define_method(:_clear_text_in) do |view|
|
152
164
|
abstract_method!
|
153
165
|
end
|
154
166
|
|
155
167
|
# @!visibility private
|
156
|
-
|
168
|
+
define_method(:_tap_keyboard_action_key) do |action_key|
|
157
169
|
abstract_method!
|
158
170
|
end
|
159
171
|
|
160
172
|
# @!visibility private
|
161
|
-
|
173
|
+
define_method(:_keyboard_visible?) do
|
162
174
|
abstract_method!
|
163
175
|
end
|
164
176
|
|
@@ -168,7 +180,7 @@ module Calabash
|
|
168
180
|
end
|
169
181
|
|
170
182
|
# @!visibility private
|
171
|
-
|
183
|
+
define_method(:keyboard_wait_timeout) do |timeout|
|
172
184
|
if timeout.nil?
|
173
185
|
Calabash::Gestures::DEFAULT_GESTURE_WAIT_TIMEOUT
|
174
186
|
else
|