calabash 2.0.0.pre11 → 2.0.0.prelegacy
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 +17 -5
- data/bin/calabash +4 -3
- data/lib/calabash/android/adb.rb +37 -34
- 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 +46 -204
- data/lib/calabash/android/environment.rb +1 -14
- data/lib/calabash/android/gestures.rb +22 -6
- data/lib/calabash/android/interactions.rb +17 -14
- data/lib/calabash/android/legacy.rb +141 -4
- data/lib/calabash/android/lib/.irbrc +1 -9
- data/lib/calabash/android/lib/AndroidManifest.xml +2 -23
- 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 +16 -19
- data/lib/calabash/android/server.rb +1 -6
- data/lib/calabash/android/text.rb +12 -12
- data/lib/calabash/android.rb +26 -92
- data/lib/calabash/application.rb +0 -3
- data/lib/calabash/cli/generate.rb +18 -8
- data/lib/calabash/cli/helpers.rb +9 -4
- data/lib/calabash/cli/run.rb +1 -1
- data/lib/calabash/console_helpers.rb +11 -179
- data/lib/calabash/device.rb +19 -4
- data/lib/calabash/gestures.rb +198 -292
- data/lib/calabash/http/retriable_client.rb +3 -18
- data/lib/calabash/http.rb +0 -1
- data/lib/calabash/interactions.rb +40 -3
- data/lib/calabash/ios/conditions.rb +1 -1
- data/lib/calabash/ios/console_helpers.rb +2 -2
- data/lib/calabash/ios/date_picker.rb +8 -10
- data/lib/calabash/ios/device/device_implementation.rb +21 -9
- data/lib/calabash/ios/device/gestures_mixin.rb +55 -53
- data/lib/calabash/ios/device/keyboard_mixin.rb +0 -21
- data/lib/calabash/ios/device/rotation_mixin.rb +65 -3
- data/lib/calabash/ios/device/text_mixin.rb +21 -0
- data/lib/calabash/ios/device.rb +1 -0
- data/lib/calabash/ios/gestures.rb +90 -24
- data/lib/calabash/ios/interactions.rb +6 -1
- data/lib/calabash/ios/lib/.irbrc +2 -9
- data/lib/calabash/ios/orientation.rb +8 -8
- data/lib/calabash/ios/runtime.rb +14 -14
- data/lib/calabash/ios/scroll.rb +17 -25
- data/lib/calabash/ios/slider.rb +18 -11
- data/lib/calabash/ios/text.rb +74 -20
- data/lib/calabash/ios/uia.rb +1 -1
- data/lib/calabash/ios.rb +16 -77
- data/lib/calabash/legacy.rb +6 -9
- data/lib/calabash/lib/skeleton/{Gemfile.skeleton → Gemfile} +0 -0
- data/lib/calabash/lib/skeleton/config/{cucumber.yml.skeleton → cucumber.yml} +0 -0
- data/lib/calabash/lib/skeleton/features/{sample.feature.skeleton → sample.feature} +0 -0
- data/lib/calabash/lib/skeleton/features/step_definitions/{sample_steps.rb.skeleton → calabash_steps.rb} +8 -8
- data/lib/calabash/lib/skeleton/features/support/{dry_run.rb.skeleton → dry_run.rb} +5 -2
- data/lib/calabash/lib/skeleton/features/support/{env.rb.skeleton → env.rb} +8 -2
- data/lib/calabash/lib/skeleton/features/support/hooks.rb +83 -0
- data/lib/calabash/life_cycle.rb +8 -16
- data/lib/calabash/location.rb +15 -14
- data/lib/calabash/orientation.rb +8 -8
- data/lib/calabash/page.rb +4 -1
- data/lib/calabash/screenshot.rb +3 -3
- data/lib/calabash/text.rb +19 -31
- data/lib/calabash/utility.rb +8 -41
- data/lib/calabash/version.rb +1 -1
- data/lib/calabash/wait.rb +192 -177
- data/lib/calabash.rb +10 -53
- metadata +32 -43
- data/lib/calabash/android/device/helper_application.rb +0 -95
- data/lib/calabash/android/lib/HelperApplication.apk +0 -0
- data/lib/calabash/android/lib/HelperApplicationTestServer.apk +0 -0
- data/lib/calabash/android/web.rb +0 -12
- data/lib/calabash/http/forwarding_client.rb +0 -23
- data/lib/calabash/internal.rb +0 -48
- data/lib/calabash/ios/automator/automator.rb +0 -217
- data/lib/calabash/ios/automator/coordinates.rb +0 -37
- data/lib/calabash/ios/automator/device_agent.rb +0 -379
- data/lib/calabash/ios/automator.rb +0 -9
- data/lib/calabash/ios/legacy.rb +0 -6
- data/lib/calabash/ios/web.rb +0 -10
- data/lib/calabash/lib/skeleton/features/support/hooks.rb.skeleton +0 -34
- data/lib/calabash/retry.rb +0 -33
- data/lib/calabash/stubs.rb +0 -21
- data/lib/calabash/web.rb +0 -44
@@ -1,6 +1,143 @@
|
|
1
|
-
if
|
2
|
-
Calabash::
|
1
|
+
if ENV["APP_PATH"]
|
2
|
+
Calabash::Environment::APP_PATH = ENV["APP_PATH"]
|
3
|
+
end
|
3
4
|
|
4
|
-
|
5
|
-
|
5
|
+
if ENV["TEST_APP_PATH"]
|
6
|
+
Calabash::Environment::TEST_SERVER_PATH = ENV["TEST_APP_PATH"]
|
6
7
|
end
|
8
|
+
|
9
|
+
|
10
|
+
module Calabash
|
11
|
+
module Android
|
12
|
+
class Device < Calabash::Device
|
13
|
+
def screen_on?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def md5_checksum(file_path)
|
18
|
+
"samplechecksum"
|
19
|
+
end
|
20
|
+
|
21
|
+
def adb_install_app(application)
|
22
|
+
@logger.log "Patch: Installing #{application.path}"
|
23
|
+
|
24
|
+
begin
|
25
|
+
result = adb.command("install #{application.path}", timeout: 60)
|
26
|
+
rescue ADB::ADBCallError => e
|
27
|
+
raise "Failed to install the application on device: '#{e.message}'"
|
28
|
+
end
|
29
|
+
|
30
|
+
if result.lines.last.downcase.chomp != 'success'
|
31
|
+
raise "Could not install app '#{application.identifier}': #{result.chomp}"
|
32
|
+
end
|
33
|
+
|
34
|
+
unless installed_packages.include?(application.identifier)
|
35
|
+
raise "App '#{application.identifier}' was not installed"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def _start_app(application, options={})
|
40
|
+
env_options = {}
|
41
|
+
|
42
|
+
options.fetch(:extras, {}).each do |k, v|
|
43
|
+
env_options[k] = v
|
44
|
+
end
|
45
|
+
|
46
|
+
env_options[:target_package] = application.identifier
|
47
|
+
|
48
|
+
if options[:activity]
|
49
|
+
env_options[:main_activity] = options[:activity]
|
50
|
+
end
|
51
|
+
|
52
|
+
env_options[:test_server_port] = server.test_server_port
|
53
|
+
env_options[:class] = options.fetch(:class, 'sh.calaba.instrumentationbackend.InstrumentationBackend')
|
54
|
+
|
55
|
+
if application.test_server.nil?
|
56
|
+
raise 'Invalid application. No test-server set.'
|
57
|
+
end
|
58
|
+
|
59
|
+
unless app_installed?(application.identifier)
|
60
|
+
raise "The application '#{application.identifier}' is not installed"
|
61
|
+
end
|
62
|
+
|
63
|
+
unless app_installed?(application.test_server.identifier)
|
64
|
+
raise "The test-server '#{application.test_server.identifier}' is not installed"
|
65
|
+
end
|
66
|
+
|
67
|
+
installed_app = installed_apps.find{|app| app[:package] == application.identifier}
|
68
|
+
installed_app_md5_checksum = md5_checksum(installed_app[:path])
|
69
|
+
|
70
|
+
if application.md5_checksum != installed_app_md5_checksum
|
71
|
+
raise "The specified app is not the same as the installed app (#{application.md5_checksum} != #{installed_app_md5_checksum})."
|
72
|
+
end
|
73
|
+
|
74
|
+
installed_test_server = installed_apps.find{|app| app[:package] == application.test_server.identifier}
|
75
|
+
installed_test_server_md5_checksum = md5_checksum(installed_test_server[:path])
|
76
|
+
|
77
|
+
if application.test_server.md5_checksum != installed_test_server_md5_checksum
|
78
|
+
raise "The specified test-server is not the same as the installed test-server (#{application.test_server.md5_checksum} != #{installed_test_server_md5_checksum})."
|
79
|
+
end
|
80
|
+
|
81
|
+
# We have to forward the port ourselves, as an old test-server could be
|
82
|
+
# running on the old port. If the retriable client was able to
|
83
|
+
# determine if the port had been forwarded, we would not need this.
|
84
|
+
port_forward(server.endpoint.port, server.test_server_port)
|
85
|
+
|
86
|
+
# For now, the test-server cannot rebind an existing socket.
|
87
|
+
# So we have to stop any running Calabash servers from the client
|
88
|
+
# for now.
|
89
|
+
if test_server_responding?
|
90
|
+
@logger.log("A test-server is already running on port #{server.test_server_port}")
|
91
|
+
@logger.log("Trying to stop it")
|
92
|
+
|
93
|
+
begin
|
94
|
+
_stop_app
|
95
|
+
rescue => _
|
96
|
+
raise 'Failed to stop old running test-server'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
extras = ''
|
101
|
+
|
102
|
+
env_options.each_pair do |key, val|
|
103
|
+
extras = "#{extras} -e #{key.to_s} #{val.to_s}"
|
104
|
+
end
|
105
|
+
|
106
|
+
begin
|
107
|
+
instrument(application,
|
108
|
+
'sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner',
|
109
|
+
extras)
|
110
|
+
rescue ADB::ADBCallError => e
|
111
|
+
raise "Failed to start the application: '#{e.stderr.lines.first.chomp}'"
|
112
|
+
end
|
113
|
+
|
114
|
+
begin
|
115
|
+
Retriable.retriable(tries: 30, interval: 1, timeout: 30, on: RetryError) do
|
116
|
+
unless test_server_responding?
|
117
|
+
raise RetryError
|
118
|
+
end
|
119
|
+
end
|
120
|
+
rescue RetryError => _
|
121
|
+
@logger.log('Could not contact test-server', :error)
|
122
|
+
@logger.log('For information, see the adb logcat', :error)
|
123
|
+
raise 'Could not contact test-server'
|
124
|
+
end
|
125
|
+
|
126
|
+
begin
|
127
|
+
Retriable.retriable(tries: 10, interval: 1, timeout: 10) do
|
128
|
+
unless test_server_ready?
|
129
|
+
raise RetryError
|
130
|
+
end
|
131
|
+
end
|
132
|
+
rescue RetryError => _
|
133
|
+
@logger.log('Test-server was never ready', :error)
|
134
|
+
@logger.log('For information, see the adb logcat', :error)
|
135
|
+
raise 'Test-server was never ready'
|
136
|
+
end
|
137
|
+
|
138
|
+
# Return true to avoid cluttering the console
|
139
|
+
true
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
@@ -39,15 +39,7 @@ end
|
|
39
39
|
begin
|
40
40
|
require 'calabash/android'
|
41
41
|
|
42
|
-
|
43
|
-
:PROMPT_I => "calabash #{Calabash::VERSION}> ",
|
44
|
-
:PROMPT_S => "%03n> ",
|
45
|
-
:PROMPT_C => "%03n> ",
|
46
|
-
:RETURN => "%s\n"
|
47
|
-
}
|
48
|
-
|
49
|
-
IRB.conf[:PROMPT_MODE] = :CALABASH
|
50
|
-
|
42
|
+
extend Calabash::Android
|
51
43
|
extend Calabash::ConsoleHelpers
|
52
44
|
|
53
45
|
Calabash::Android.setup_defaults!
|
@@ -3,9 +3,7 @@
|
|
3
3
|
package="#testPackage#"
|
4
4
|
android:versionCode="3"
|
5
5
|
android:versionName="0.3.0">
|
6
|
-
<application android:label="instrumentation_backend"
|
7
|
-
android:largeHeap="true">
|
8
|
-
|
6
|
+
<application android:label="instrumentation_backend">
|
9
7
|
<uses-library android:name="android.test.runner" />
|
10
8
|
<uses-library android:name="com.google.android.maps" android:required="false" />
|
11
9
|
<activity
|
@@ -33,26 +31,8 @@
|
|
33
31
|
android:stateNotNeeded="true"
|
34
32
|
android:noHistory="true"
|
35
33
|
android:excludeFromRecents="true"/>
|
36
|
-
<activity
|
37
|
-
android:name="sh.calaba.instrumentationbackend.FakeCameraActivity"
|
38
|
-
android:label="FakeCameraActivity"
|
39
|
-
android:exported="true"
|
40
|
-
android:finishOnTaskLaunch="true"
|
41
|
-
android:stateNotNeeded="true"
|
42
|
-
android:noHistory="true"
|
43
|
-
android:excludeFromRecents="true"
|
44
|
-
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
|
45
|
-
<activity
|
46
|
-
android:name="sh.calaba.instrumentationbackend.FakePickerActivity"
|
47
|
-
android:label="FakePickerActivity"
|
48
|
-
android:exported="true"
|
49
|
-
android:finishOnTaskLaunch="true"
|
50
|
-
android:stateNotNeeded="true"
|
51
|
-
android:noHistory="true"
|
52
|
-
android:excludeFromRecents="true"/>
|
53
34
|
</application>
|
54
|
-
<uses-sdk android:minSdkVersion="4"
|
55
|
-
android:targetSdkVersion="21"/>
|
35
|
+
<uses-sdk android:minSdkVersion="4" />
|
56
36
|
<instrumentation android:targetPackage="#targetPackage#" android:name="sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner" />
|
57
37
|
<instrumentation android:targetPackage="#targetPackage#" android:name="sh.calaba.instrumentationbackend.ClearAppData" />
|
58
38
|
<instrumentation android:targetPackage="#targetPackage#" android:name="sh.calaba.instrumentationbackend.ClearAppData2" />
|
@@ -67,6 +47,5 @@
|
|
67
47
|
<uses-permission android:name="android.permission.INTERNET" />
|
68
48
|
<uses-permission android:name="android.permission.GET_TASKS" />
|
69
49
|
<uses-permission android:name="android.permission.REORDER_TASKS" />
|
70
|
-
<uses-permission android:name="android.permission.CAMERA" />
|
71
50
|
|
72
51
|
</manifest>
|
Binary file
|
@@ -21,19 +21,19 @@ module Calabash
|
|
21
21
|
raise 'No application given, and Application.default is not set'
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
Device.default.resume_app(path_or_application)
|
25
25
|
|
26
26
|
true
|
27
27
|
end
|
28
28
|
|
29
29
|
# @!visibility private
|
30
|
-
|
30
|
+
def _send_current_app_to_background(for_seconds)
|
31
31
|
package = focused_package
|
32
32
|
activity = focused_activity
|
33
33
|
|
34
34
|
go_home
|
35
35
|
sleep(for_seconds)
|
36
|
-
|
36
|
+
Device.default.resume_activity(package, activity)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -3,28 +3,28 @@ module Calabash
|
|
3
3
|
# @!visibility private
|
4
4
|
module Orientation
|
5
5
|
# @!visibility private
|
6
|
-
|
7
|
-
|
6
|
+
def _set_orientation_landscape
|
7
|
+
Device.default.perform_action('set_activity_orientation', 'landscape')
|
8
8
|
end
|
9
9
|
|
10
10
|
# @!visibility private
|
11
|
-
|
12
|
-
|
11
|
+
def _set_orientation_portrait
|
12
|
+
Device.default.perform_action('set_activity_orientation', 'portrait')
|
13
13
|
end
|
14
14
|
|
15
15
|
# @!visibility private
|
16
|
-
|
16
|
+
def _portrait?
|
17
17
|
_orientation == 'portrait'
|
18
18
|
end
|
19
19
|
|
20
20
|
# @!visibility private
|
21
|
-
|
21
|
+
def _landscape?
|
22
22
|
_orientation == 'landscape'
|
23
23
|
end
|
24
24
|
|
25
25
|
# @!visibility private
|
26
|
-
|
27
|
-
|
26
|
+
def _orientation
|
27
|
+
Device.default.perform_action('get_activity_orientation')['message']
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -8,47 +8,44 @@ module Calabash
|
|
8
8
|
module PhysicalButtons
|
9
9
|
|
10
10
|
# @!visibility private
|
11
|
-
def
|
12
|
-
|
13
|
-
device.perform_action('press_physical_key', key)
|
14
|
-
end
|
15
|
-
|
11
|
+
def press_button(key)
|
12
|
+
Device.default.perform_action('press_key', key)
|
16
13
|
true
|
17
14
|
end
|
18
15
|
|
19
16
|
# @!visibility private
|
20
|
-
def
|
21
|
-
|
17
|
+
def press_back_button
|
18
|
+
press_button('KEYCODE_BACK')
|
22
19
|
end
|
23
20
|
|
24
21
|
# @!visibility private
|
25
|
-
def
|
26
|
-
|
22
|
+
def press_menu_button
|
23
|
+
press_button('KEYCODE_MENU')
|
27
24
|
end
|
28
25
|
|
29
26
|
# @!visibility private
|
30
|
-
def
|
31
|
-
|
27
|
+
def press_down_button
|
28
|
+
press_button('KEYCODE_DPAD_DOWN')
|
32
29
|
end
|
33
30
|
|
34
31
|
# @!visibility private
|
35
|
-
def
|
36
|
-
|
32
|
+
def press_up_button
|
33
|
+
press_button('KEYCODE_DPAD_UP')
|
37
34
|
end
|
38
35
|
|
39
36
|
# @!visibility private
|
40
|
-
def
|
41
|
-
|
37
|
+
def press_left_button
|
38
|
+
press_button('KEYCODE_DPAD_LEFT')
|
42
39
|
end
|
43
40
|
|
44
41
|
# @!visibility private
|
45
|
-
def
|
46
|
-
|
42
|
+
def press_right_button
|
43
|
+
press_button('KEYCODE_DPAD_RIGHT')
|
47
44
|
end
|
48
45
|
|
49
46
|
# @!visibility private
|
50
|
-
def
|
51
|
-
|
47
|
+
def press_enter_button
|
48
|
+
press_button('KEYCODE_ENTER')
|
52
49
|
end
|
53
50
|
end
|
54
51
|
end
|
@@ -5,12 +5,7 @@ module Calabash
|
|
5
5
|
# The default Android test server.
|
6
6
|
def self.default
|
7
7
|
endpoint = Environment::DEVICE_ENDPOINT
|
8
|
-
Server.new(endpoint
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.default_helper
|
12
|
-
endpoint = Environment::DEVICE_HELPER_ENDPOINT
|
13
|
-
Server.new(endpoint, 8081)
|
8
|
+
Server.new(endpoint)
|
14
9
|
end
|
15
10
|
end
|
16
11
|
end
|
@@ -6,46 +6,46 @@ module Calabash
|
|
6
6
|
# pressing the back button if the keyboard is showing. If the keyboard is
|
7
7
|
# already hidden/dismissed, nothing is done.
|
8
8
|
def dismiss_keyboard
|
9
|
-
|
9
|
+
Device.default.perform_action('hide_soft_keyboard')
|
10
10
|
sleep 0.5
|
11
11
|
end
|
12
12
|
|
13
13
|
# @!visibility private
|
14
|
-
|
15
|
-
|
14
|
+
def _clear_text
|
15
|
+
Device.default.perform_action('clear_text')
|
16
16
|
end
|
17
17
|
|
18
18
|
# @!visibility private
|
19
|
-
|
19
|
+
def _clear_text_in(view)
|
20
20
|
tap(view)
|
21
21
|
sleep 0.5
|
22
22
|
clear_text
|
23
23
|
end
|
24
24
|
|
25
25
|
# @!visibility private
|
26
|
-
|
27
|
-
|
26
|
+
def _enter_text(text)
|
27
|
+
Device.default.enter_text(text)
|
28
28
|
end
|
29
29
|
|
30
30
|
# @!visibility private
|
31
|
-
|
31
|
+
def _enter_text_in(view, text)
|
32
32
|
tap(view)
|
33
33
|
sleep 0.5
|
34
34
|
enter_text(text)
|
35
35
|
end
|
36
36
|
|
37
37
|
# @!visibility private
|
38
|
-
|
38
|
+
def _tap_keyboard_action_key(action_key)
|
39
39
|
if action_key.nil?
|
40
|
-
|
40
|
+
Device.default.perform_action('press_user_action_button')
|
41
41
|
else
|
42
|
-
|
42
|
+
Device.default.perform_action('press_user_action_button', action_key.to_s)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
# @!visibility private
|
47
|
-
|
48
|
-
|
47
|
+
def _keyboard_visible?
|
48
|
+
Device.default.keyboard_visible?
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
data/lib/calabash/android.rb
CHANGED
@@ -1,7 +1,28 @@
|
|
1
1
|
module Calabash
|
2
|
-
#
|
3
|
-
module
|
2
|
+
# Contains the Android implementations of the Calabash APIs.
|
3
|
+
module Android
|
4
|
+
# @!visibility private
|
5
|
+
TEST_SERVER_CODE_PATH = File.join(File.dirname(__FILE__), '..', '..', 'android', 'test-server')
|
6
|
+
# @!visibility private
|
7
|
+
UNSIGNED_TEST_SERVER_APK = File.join(File.dirname(__FILE__), 'android', 'lib', 'TestServer.apk')
|
8
|
+
# @!visibility private
|
9
|
+
ANDROID_MANIFEST_PATH = File.join(File.dirname(__FILE__), 'android', 'lib', 'AndroidManifest.xml')
|
10
|
+
|
4
11
|
require 'calabash'
|
12
|
+
include Calabash
|
13
|
+
|
14
|
+
# @!visibility private
|
15
|
+
def self.extended(base)
|
16
|
+
Calabash.send(:extended, base)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @!visibility private
|
20
|
+
def self.included(base)
|
21
|
+
Calabash.send(:included, base)
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'calabash/android/defaults'
|
25
|
+
extend Calabash::Android::Defaults
|
5
26
|
|
6
27
|
require 'calabash/android/environment'
|
7
28
|
require 'calabash/android/application'
|
@@ -15,10 +36,10 @@ module Calabash
|
|
15
36
|
require 'calabash/android/orientation'
|
16
37
|
require 'calabash/android/physical_buttons'
|
17
38
|
require 'calabash/android/text'
|
18
|
-
require 'calabash/android/web'
|
19
39
|
require 'calabash/android/console_helpers'
|
20
40
|
require 'calabash/android/life_cycle'
|
21
41
|
require 'calabash/android/scroll'
|
42
|
+
require 'calabash/android/legacy'
|
22
43
|
|
23
44
|
include Calabash::Android::Gestures
|
24
45
|
include Calabash::Android::Interactions
|
@@ -27,40 +48,6 @@ module Calabash
|
|
27
48
|
include Calabash::Android::PhysicalButtons
|
28
49
|
include Calabash::Android::Text
|
29
50
|
include Calabash::Android::Scroll
|
30
|
-
include Calabash::Android::Web
|
31
|
-
end
|
32
|
-
|
33
|
-
# Contains the Android implementations of the Calabash APIs.
|
34
|
-
module Android
|
35
|
-
# @!visibility private
|
36
|
-
TEST_SERVER_CODE_PATH = File.join(File.dirname(__FILE__), '..', '..', 'android', 'test-server')
|
37
|
-
# @!visibility private
|
38
|
-
UNSIGNED_TEST_SERVER_APK = File.join(File.dirname(__FILE__), 'android', 'lib', 'TestServer.apk')
|
39
|
-
# @!visibility private
|
40
|
-
ANDROID_MANIFEST_PATH = File.join(File.dirname(__FILE__), 'android', 'lib', 'AndroidManifest.xml')
|
41
|
-
# @!visibility private
|
42
|
-
HELPER_APPLICATION = File.join(File.dirname(__FILE__), 'android', 'lib', 'HelperApplication.apk')
|
43
|
-
# @!visibility private
|
44
|
-
HELPER_APPLICATION_TEST_SERVER = File.join(File.dirname(__FILE__), 'android', 'lib', 'HelperApplicationTestServer.apk')
|
45
|
-
|
46
|
-
# @!visibility private
|
47
|
-
def self.extended(base)
|
48
|
-
Calabash.send(:extended, base)
|
49
|
-
end
|
50
|
-
|
51
|
-
# @!visibility private
|
52
|
-
def self.included(base)
|
53
|
-
Calabash.send(:included, base)
|
54
|
-
end
|
55
|
-
|
56
|
-
require 'calabash'
|
57
|
-
# Hide from documentation
|
58
|
-
send(:include, Calabash)
|
59
|
-
|
60
|
-
require 'calabash/android/defaults'
|
61
|
-
extend Calabash::Android::Defaults
|
62
|
-
|
63
|
-
include ::Calabash::AndroidInternal
|
64
51
|
|
65
52
|
# @!visibility private
|
66
53
|
def self.binary_location(name, abi, using_pie)
|
@@ -78,61 +65,8 @@ module Calabash
|
|
78
65
|
|
79
66
|
file
|
80
67
|
end
|
81
|
-
|
82
|
-
require 'calabash/android/legacy'
|
83
68
|
end
|
84
69
|
end
|
85
70
|
|
86
|
-
|
87
|
-
|
88
|
-
Calabash::Android::Environment.setup
|
89
|
-
end
|
90
|
-
|
91
|
-
# @!visibility private
|
92
|
-
class CalabashAndroidMethodsInternal
|
93
|
-
include ::Calabash::Android
|
94
|
-
end
|
95
|
-
|
96
|
-
# @!visibility private
|
97
|
-
class CalabashAndroidMethods < BasicObject
|
98
|
-
include ::Calabash::AndroidInternal
|
99
|
-
|
100
|
-
instance_methods.each do |method_name|
|
101
|
-
define_method(method_name) do |*args, &block|
|
102
|
-
::CalabashAndroidMethodsInternal.new.send(method_name, *args, &block)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
# Returns a object that exposes all of the public Calabash Android API.
|
108
|
-
# This method should *always* be used to access the Calabash API. By default,
|
109
|
-
# all methods are executed using the default device and the default
|
110
|
-
# application.
|
111
|
-
#
|
112
|
-
# For iOS specific methods use {cal_ios}. For cross-platform methods use {cal}.
|
113
|
-
#
|
114
|
-
# All Android API methods are available with documentation in
|
115
|
-
# {Calabash::Android}
|
116
|
-
#
|
117
|
-
# @see Calabash::Android
|
118
|
-
#
|
119
|
-
# @return [Object] Instance responding to all Calabash Android methods
|
120
|
-
# in the API.
|
121
|
-
def cal_android
|
122
|
-
CalabashAndroidMethods.new
|
123
|
-
end
|
124
|
-
|
125
|
-
# We also want to patch `cal` to invoke the Android implementations
|
126
|
-
class CalabashMethodsInternal
|
127
|
-
include ::Calabash::Android
|
128
|
-
|
129
|
-
instance_methods.each do |method_name|
|
130
|
-
define_method(method_name) do |*args, &block|
|
131
|
-
::CalabashAndroidMethodsInternal.new.send(method_name, *args, &block)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
if defined?(::Calabash::IOSInternal)
|
137
|
-
raise Calabash::RequiredBothPlatformsError, "Cannot require both calabash/android and calabash/ios"
|
138
|
-
end
|
71
|
+
# Setup environment on load
|
72
|
+
Calabash::Android::Environment.setup
|
data/lib/calabash/application.rb
CHANGED
@@ -17,14 +17,24 @@ module Calabash
|
|
17
17
|
exit 1
|
18
18
|
end
|
19
19
|
|
20
|
-
|
20
|
+
reset_between = :features
|
21
|
+
reset_method = :clear
|
21
22
|
|
22
|
-
|
23
|
-
dry_run = File.read(file(File.join('features', 'support', 'dry_run.rb.skeleton')))
|
24
|
-
sample_feature = File.read(file(File.join('features', 'sample.feature.skeleton')))
|
25
|
-
calabash_steps = File.read(file(File.join('features', 'step_definitions', 'sample_steps.rb.skeleton')))
|
23
|
+
cucumber_config = File.read(file(File.join('config', 'cucumber.yml')))
|
26
24
|
|
27
|
-
|
25
|
+
env = File.read(file(File.join('features', 'support', 'env.rb')))
|
26
|
+
dry_run = File.read(file(File.join('features', 'support', 'dry_run.rb')))
|
27
|
+
sample_feature = File.read(file(File.join('features', 'sample.feature')))
|
28
|
+
calabash_steps = File.read(file(File.join('features', 'step_definitions', 'calabash_steps.rb')))
|
29
|
+
|
30
|
+
hooks = File.read(file(File.join('features', 'support', 'hooks.rb')))
|
31
|
+
hooks.sub!("#!DEFAULT_RESET_BETWEEN#!", ":#{reset_between}")
|
32
|
+
|
33
|
+
if reset_method.nil?
|
34
|
+
hooks.sub!("#!DEFAULT_RESET_METHOD#!", 'nil')
|
35
|
+
else
|
36
|
+
hooks.sub!("#!DEFAULT_RESET_METHOD#!", ":#{reset_method}")
|
37
|
+
end
|
28
38
|
|
29
39
|
FileUtils.mkdir('config')
|
30
40
|
|
@@ -35,12 +45,12 @@ module Calabash
|
|
35
45
|
FileUtils.mkdir('features/support')
|
36
46
|
|
37
47
|
File.open(File.join('features', 'sample.feature'), 'w') {|file| file.write(sample_feature) }
|
38
|
-
File.open(File.join('features', 'step_definitions', '
|
48
|
+
File.open(File.join('features', 'step_definitions', 'calabash_steps.rb'), 'w') {|file| file.write(calabash_steps) }
|
39
49
|
File.open(File.join('features', 'support', 'hooks.rb'), 'w') {|file| file.write(hooks) }
|
40
50
|
File.open(File.join('features', 'support', 'env.rb'), 'w') {|file| file.write(env) }
|
41
51
|
File.open(File.join('features', 'support', 'dry_run.rb'), 'w') {|file| file.write(dry_run) }
|
42
52
|
|
43
|
-
gemfile = File.readlines(file(File.join('Gemfile
|
53
|
+
gemfile = File.readlines(file(File.join('Gemfile')))
|
44
54
|
|
45
55
|
unless File.exist?('Gemfile')
|
46
56
|
File.open('Gemfile', 'w') do |file|
|
data/lib/calabash/cli/helpers.rb
CHANGED
@@ -6,7 +6,8 @@ module Calabash
|
|
6
6
|
# @!visibility private
|
7
7
|
HELP = {
|
8
8
|
help: 'help',
|
9
|
-
:
|
9
|
+
generate: 'generate',
|
10
|
+
run: 'run [application] [cucumber options]',
|
10
11
|
console: 'console [application]',
|
11
12
|
version: 'version',
|
12
13
|
setup_keystore: 'setup-keystore',
|
@@ -34,7 +35,7 @@ EOF
|
|
34
35
|
else
|
35
36
|
output.write <<EOF
|
36
37
|
Usage:
|
37
|
-
|
38
|
+
calabash [options] #{HELP[key]}
|
38
39
|
EOF
|
39
40
|
end
|
40
41
|
end
|
@@ -42,14 +43,18 @@ EOF
|
|
42
43
|
# @!visibility private
|
43
44
|
def print_usage(output=STDOUT)
|
44
45
|
output.write <<EOF
|
45
|
-
Usage:
|
46
|
+
Usage: calabash [options] <command-name> [command specific options]
|
46
47
|
<command-name> can be one of
|
47
48
|
#{HELP[:help]} [command]
|
48
49
|
print help information.
|
49
50
|
|
50
|
-
#{HELP[:
|
51
|
+
#{HELP[:generate]}
|
51
52
|
generate a Cucumber project folder structure.
|
52
53
|
|
54
|
+
#{HELP[:run]}
|
55
|
+
runs Cucumber in the current folder with the environment needed.
|
56
|
+
the cucumber options will be passed unchanged to cucumber
|
57
|
+
|
53
58
|
#{HELP[:console]}
|
54
59
|
starts an interactive console to interact with your app via Calabash
|
55
60
|
|
data/lib/calabash/cli/run.rb
CHANGED