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
@@ -5,10 +5,6 @@ module Calabash
|
|
5
5
|
# A representation of a Calabash Android device.
|
6
6
|
# @!visibility private
|
7
7
|
class Device < ::Calabash::Device
|
8
|
-
require 'calabash/android/device/helper_application'
|
9
|
-
|
10
|
-
include Calabash::Android::Device::HelperApplication
|
11
|
-
|
12
8
|
attr_reader :adb
|
13
9
|
|
14
10
|
def initialize(identifier, server)
|
@@ -70,28 +66,28 @@ module Calabash
|
|
70
66
|
|
71
67
|
# @!visibility private
|
72
68
|
def installed_packages
|
73
|
-
|
69
|
+
adb.shell('pm list packages').lines.map do |line|
|
70
|
+
line.sub('package:', '').chomp
|
71
|
+
end
|
74
72
|
end
|
75
73
|
|
76
74
|
# @!visibility private
|
77
75
|
def installed_apps
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
info = line.sub("package:", "")
|
76
|
+
adb.shell('pm list packages -f').lines.map do |line|
|
77
|
+
# line will be package:<path>=<package>
|
78
|
+
# e.g. "package:/system/app/GoogleEars.apk=com.google.android.ears"
|
79
|
+
info = line.sub("package:", "")
|
83
80
|
|
84
|
-
|
81
|
+
app_path, app_id = info.split('=').map(&:chomp)
|
85
82
|
|
86
|
-
|
87
|
-
|
88
|
-
end.call
|
83
|
+
{package: app_id, path: app_path}
|
84
|
+
end
|
89
85
|
end
|
90
86
|
|
91
87
|
# @!visibility private
|
92
88
|
def test_server_responding?
|
93
89
|
begin
|
94
|
-
http_client.
|
90
|
+
http_client.get(HTTP::Request.new('ping'), retries: 1).body == 'pong'
|
95
91
|
rescue HTTP::Error => _
|
96
92
|
false
|
97
93
|
end
|
@@ -100,7 +96,7 @@ module Calabash
|
|
100
96
|
# @!visibility private
|
101
97
|
def test_server_ready?
|
102
98
|
begin
|
103
|
-
http_client.
|
99
|
+
http_client.get(HTTP::Request.new('ready')).body == 'true'
|
104
100
|
rescue HTTP::Error => _
|
105
101
|
false
|
106
102
|
end
|
@@ -170,9 +166,9 @@ module Calabash
|
|
170
166
|
request = HTTP::Request.new('map', params_for_request(parameters))
|
171
167
|
|
172
168
|
http_result = if method_name == :flash
|
173
|
-
http_client.
|
169
|
+
http_client.get(request, timeout: 30)
|
174
170
|
else
|
175
|
-
http_client.
|
171
|
+
http_client.get(request)
|
176
172
|
end
|
177
173
|
|
178
174
|
result = JSON.parse(http_result.body)
|
@@ -189,9 +185,9 @@ module Calabash
|
|
189
185
|
@logger.log "Action: #{action} - Arguments: #{arguments.join(', ')}"
|
190
186
|
|
191
187
|
parameters = {command: action, arguments: arguments}
|
192
|
-
request = HTTP::Request.new('', params_for_request(parameters))
|
188
|
+
request = HTTP::Request.new('/', params_for_request(parameters))
|
193
189
|
|
194
|
-
result = JSON.parse(http_client.
|
190
|
+
result = JSON.parse(http_client.get(request).body)
|
195
191
|
|
196
192
|
unless result['success']
|
197
193
|
message = result['message'] || result['bonusInformation']
|
@@ -215,17 +211,6 @@ module Calabash
|
|
215
211
|
perform_action('keyboard_enter_text', text)
|
216
212
|
end
|
217
213
|
|
218
|
-
# @!visibility private
|
219
|
-
def md5_checksum_for_app_package(package)
|
220
|
-
app = installed_apps.find{|app| app[:package] == package}
|
221
|
-
|
222
|
-
unless app
|
223
|
-
raise "Application with package '#{app}' not installed"
|
224
|
-
end
|
225
|
-
|
226
|
-
md5_checksum(app[:path])
|
227
|
-
end
|
228
|
-
|
229
214
|
# @!visibility private
|
230
215
|
def md5_checksum(file_path)
|
231
216
|
result = adb.shell("#{md5_binary} '#{file_path}'")
|
@@ -244,7 +229,7 @@ module Calabash
|
|
244
229
|
json = parameters.to_json
|
245
230
|
request = HTTP::Request.new('/backdoor', json: json)
|
246
231
|
|
247
|
-
body = http_client.
|
232
|
+
body = http_client.get(request).body
|
248
233
|
result = JSON.parse(body)
|
249
234
|
|
250
235
|
if result['outcome'] != 'SUCCESS'
|
@@ -381,7 +366,7 @@ module Calabash
|
|
381
366
|
json = parameters.to_json
|
382
367
|
request = HTTP::Request.new('/map', json: json)
|
383
368
|
|
384
|
-
body = http_client.
|
369
|
+
body = http_client.get(request).body
|
385
370
|
result = JSON.parse(body)
|
386
371
|
|
387
372
|
if result['outcome'] != 'SUCCESS'
|
@@ -424,75 +409,25 @@ module Calabash
|
|
424
409
|
adb.shell(cmd, no_exit_code_check: true).chomp == file
|
425
410
|
end
|
426
411
|
|
427
|
-
def file_exists?(file)
|
428
|
-
ensure_helper_application_started
|
429
|
-
|
430
|
-
request = HTTP::Request.new('file-exists', params_for_request(fileName: file))
|
431
|
-
response = helper_application_http_client.post(request)
|
432
|
-
|
433
|
-
if response.status != 200
|
434
|
-
result = JSON.parse(response.body)
|
435
|
-
raise "Failed to find out if file exists #{result['reason']}"
|
436
|
-
end
|
437
|
-
|
438
|
-
case response.body
|
439
|
-
when 'true'
|
440
|
-
return true
|
441
|
-
when 'false'
|
442
|
-
return false
|
443
|
-
else
|
444
|
-
raise "Invalid resposne '#{response.body}'"
|
445
|
-
end
|
446
|
-
end
|
447
|
-
|
448
|
-
def read_file(file)
|
449
|
-
ensure_helper_application_started
|
450
|
-
|
451
|
-
request = HTTP::Request.new('read-file', params_for_request(fileName: file))
|
452
|
-
response = helper_application_http_client.post(request)
|
453
|
-
|
454
|
-
if response.status != 200
|
455
|
-
result = JSON.parse(response.body)
|
456
|
-
raise "Failed to read file. Reason: #{result['reason']}"
|
457
|
-
end
|
458
|
-
|
459
|
-
response.body
|
460
|
-
end
|
461
|
-
|
462
412
|
def calabash_server_failure_exists?(application)
|
463
|
-
|
413
|
+
adb_file_exists?(calabash_server_failure_file_path(application))
|
464
414
|
end
|
465
415
|
|
466
416
|
def calabash_server_finished_exists?(application)
|
467
|
-
|
417
|
+
adb_file_exists?(calabash_server_finished_file_path(application))
|
468
418
|
end
|
469
419
|
|
470
420
|
def read_calabash_sever_failure(application)
|
471
|
-
|
421
|
+
adb.shell("cat #{calabash_server_failure_file_path(application)}")
|
472
422
|
end
|
473
423
|
|
474
424
|
def read_calabash_sever_finished(application)
|
475
|
-
|
425
|
+
adb.shell("cat #{calabash_server_finished_file_path(application)}")
|
476
426
|
end
|
477
427
|
|
478
428
|
def clear_calabash_server_report(application)
|
479
429
|
if installed_packages.include?(application.test_server.identifier)
|
480
|
-
|
481
|
-
{
|
482
|
-
intent: {
|
483
|
-
flags: 0x10000000,
|
484
|
-
component: {
|
485
|
-
packageName: application.test_server.identifier,
|
486
|
-
className: 'sh.calaba.instrumentationbackend.StatusReporterActivity',
|
487
|
-
},
|
488
|
-
extras: {
|
489
|
-
method: 'clear'
|
490
|
-
}
|
491
|
-
}
|
492
|
-
}
|
493
|
-
|
494
|
-
ensure_helper_application_started
|
495
|
-
start_activity(parameters)
|
430
|
+
adb.shell("am start -e method clear -n #{application.test_server.identifier}/sh.calaba.instrumentationbackend.StatusReporterActivity")
|
496
431
|
end
|
497
432
|
end
|
498
433
|
|
@@ -504,13 +439,12 @@ module Calabash
|
|
504
439
|
end
|
505
440
|
|
506
441
|
env_options[:test_server_port] = server.test_server_port
|
442
|
+
env_options[:target_package] = application.identifier
|
507
443
|
|
508
444
|
env_options[:class] = options.fetch(:class, 'sh.calaba.instrumentationbackend.InstrumentationBackend')
|
509
445
|
|
510
446
|
if options[:activity]
|
511
447
|
env_options[:main_activity] = options[:activity]
|
512
|
-
else
|
513
|
-
env_options[:main_activity] = 'null'
|
514
448
|
end
|
515
449
|
|
516
450
|
if application.test_server.nil?
|
@@ -525,13 +459,15 @@ module Calabash
|
|
525
459
|
raise "The test-server '#{application.test_server.identifier}' is not installed"
|
526
460
|
end
|
527
461
|
|
528
|
-
|
462
|
+
installed_app = installed_apps.find{|app| app[:package] == application.identifier}
|
463
|
+
installed_app_md5_checksum = md5_checksum(installed_app[:path])
|
529
464
|
|
530
465
|
if application.md5_checksum != installed_app_md5_checksum
|
531
466
|
raise "The specified app is not the same as the installed app (#{application.md5_checksum} != #{installed_app_md5_checksum})."
|
532
467
|
end
|
533
468
|
|
534
|
-
|
469
|
+
installed_test_server = installed_apps.find{|app| app[:package] == application.test_server.identifier}
|
470
|
+
installed_test_server_md5_checksum = md5_checksum(installed_test_server[:path])
|
535
471
|
|
536
472
|
if application.test_server.md5_checksum != installed_test_server_md5_checksum
|
537
473
|
raise "The specified test-server is not the same as the installed test-server (#{application.test_server.md5_checksum} != #{installed_test_server_md5_checksum})."
|
@@ -539,6 +475,9 @@ module Calabash
|
|
539
475
|
|
540
476
|
ensure_screen_on
|
541
477
|
|
478
|
+
# Clear any old error reports
|
479
|
+
clear_calabash_server_report(application)
|
480
|
+
|
542
481
|
# We have to forward the port ourselves, as an old test-server could be
|
543
482
|
# running on the old port. If the retriable client was able to
|
544
483
|
# determine if the port had been forwarded, we would not need this.
|
@@ -558,17 +497,14 @@ module Calabash
|
|
558
497
|
end
|
559
498
|
end
|
560
499
|
|
561
|
-
# Clear any old error reports
|
562
|
-
clear_calabash_server_report(application)
|
563
|
-
|
564
500
|
extras = ''
|
565
501
|
|
566
502
|
env_options.each_pair do |key, val|
|
567
|
-
extras = "#{extras} -e #{key.to_s} #{val.to_s}"
|
503
|
+
extras = "#{extras} -e \"#{key.to_s}\" \"#{val.to_s}\""
|
568
504
|
end
|
569
505
|
|
570
506
|
begin
|
571
|
-
|
507
|
+
instrument(application,
|
572
508
|
'sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner',
|
573
509
|
extras)
|
574
510
|
rescue ADB::ADBCallError => e
|
@@ -576,7 +512,7 @@ module Calabash
|
|
576
512
|
end
|
577
513
|
|
578
514
|
begin
|
579
|
-
|
515
|
+
Retriable.retriable(tries: 30, interval: 1, timeout: 30, on: RetryError) do
|
580
516
|
unless test_server_responding?
|
581
517
|
# Read any message the test-server might have
|
582
518
|
if calabash_server_failure_exists?(application)
|
@@ -595,7 +531,7 @@ module Calabash
|
|
595
531
|
end
|
596
532
|
|
597
533
|
begin
|
598
|
-
|
534
|
+
Retriable.retriable(tries: 10, interval: 1, timeout: 10) do
|
599
535
|
unless test_server_ready?
|
600
536
|
raise RetryError
|
601
537
|
end
|
@@ -606,31 +542,15 @@ module Calabash
|
|
606
542
|
raise 'Test-server was never ready'
|
607
543
|
end
|
608
544
|
|
609
|
-
start_application(options[:intent])
|
610
|
-
|
611
545
|
# Return true to avoid cluttering the console
|
612
546
|
true
|
613
547
|
end
|
614
548
|
|
615
|
-
# @!visibility private
|
616
|
-
def start_application(intent)
|
617
|
-
request = HTTP::Request.new('start-application', params_for_request(intent: intent))
|
618
|
-
body = http_client.post(request).body
|
619
|
-
|
620
|
-
result = JSON.parse(body)
|
621
|
-
|
622
|
-
if result['outcome'] != 'SUCCESS'
|
623
|
-
raise "Failed to start application. Reason: #{result['reason']}"
|
624
|
-
end
|
625
|
-
|
626
|
-
result['result']
|
627
|
-
end
|
628
|
-
|
629
549
|
# @!visibility private
|
630
550
|
def _stop_app
|
631
|
-
|
551
|
+
Retriable.retriable(tries: 5, interval: 1) do
|
632
552
|
begin
|
633
|
-
http_client.
|
553
|
+
http_client.get(HTTP::Request.new('kill'), retries: 1, interval: 0)
|
634
554
|
rescue HTTP::Error => _
|
635
555
|
# It's fine that we can't contact the test-server, as it might already have been shut down
|
636
556
|
if test_server_responding?
|
@@ -674,7 +594,7 @@ module Calabash
|
|
674
594
|
end
|
675
595
|
|
676
596
|
# @!visibility private
|
677
|
-
def
|
597
|
+
def instrument(application, test_server_activity, extras = '')
|
678
598
|
unless application.is_a?(Android::Application)
|
679
599
|
raise ArgumentError, "Invalid application type '#{application.class}'"
|
680
600
|
end
|
@@ -702,45 +622,11 @@ module Calabash
|
|
702
622
|
class EnsureInstrumentActionError < RuntimeError; end
|
703
623
|
|
704
624
|
# @!visibility private
|
705
|
-
def
|
625
|
+
def ensure_instrument_action(application, test_server_activity, extras = '')
|
706
626
|
clear_calabash_server_report(application)
|
707
627
|
|
708
628
|
begin
|
709
|
-
|
710
|
-
rescue ADB::ADBCallError => e
|
711
|
-
raise EnsureInstrumentActionError, e
|
712
|
-
end
|
713
|
-
|
714
|
-
begin
|
715
|
-
Timeout.timeout(10) do
|
716
|
-
loop do
|
717
|
-
if calabash_server_failure_exists?(application)
|
718
|
-
failure_message = read_calabash_sever_failure(application)
|
719
|
-
|
720
|
-
raise EnsureInstrumentActionError, parse_failure_message(failure_message)
|
721
|
-
end
|
722
|
-
|
723
|
-
if calabash_server_finished_exists?(application)
|
724
|
-
output = read_calabash_sever_finished(application)
|
725
|
-
|
726
|
-
if output == 'SUCCESSFUL'
|
727
|
-
break
|
728
|
-
end
|
729
|
-
end
|
730
|
-
end
|
731
|
-
end
|
732
|
-
rescue Timeout::Error => _
|
733
|
-
raise EnsureInstrumentActionError, 'Timed out waiting for status'
|
734
|
-
end
|
735
|
-
end
|
736
|
-
|
737
|
-
# @!visibility private
|
738
|
-
def ensure_instrument_action(application, parameters)
|
739
|
-
ensure_helper_application_started
|
740
|
-
clear_calabash_server_report(application)
|
741
|
-
|
742
|
-
begin
|
743
|
-
instrument(parameters)
|
629
|
+
instrument(application, test_server_activity, extras)
|
744
630
|
rescue ADB::ADBCallError => e
|
745
631
|
raise EnsureInstrumentActionError, e
|
746
632
|
end
|
@@ -770,18 +656,8 @@ module Calabash
|
|
770
656
|
|
771
657
|
# @!visibility private
|
772
658
|
def ts_clear_app_data(application)
|
773
|
-
parameters =
|
774
|
-
{
|
775
|
-
intent: {
|
776
|
-
component: {
|
777
|
-
className: 'sh.calaba.instrumentationbackend.ClearAppData2',
|
778
|
-
packageName: application.test_server.identifier
|
779
|
-
}
|
780
|
-
}
|
781
|
-
}
|
782
|
-
|
783
659
|
begin
|
784
|
-
ensure_instrument_action(application,
|
660
|
+
ensure_instrument_action(application, 'sh.calaba.instrumentationbackend.ClearAppData2')
|
785
661
|
rescue EnsureInstrumentActionError => e
|
786
662
|
raise "Failed to clear app data: #{e.message}"
|
787
663
|
end
|
@@ -866,10 +742,11 @@ module Calabash
|
|
866
742
|
if installed_packages.include?(application.identifier)
|
867
743
|
@logger.log 'Application is already installed. Ensuring right checksum'
|
868
744
|
|
869
|
-
|
745
|
+
installed_app = installed_apps.find{|app| app[:package] == application.identifier}
|
746
|
+
installed_app_md5_checksum = md5_checksum(installed_app[:path])
|
870
747
|
|
871
748
|
if application.md5_checksum != installed_app_md5_checksum
|
872
|
-
@logger.log("The md5 checksum has changed
|
749
|
+
@logger.log("The md5 checksum has changed (#{application.md5_checksum} != #{installed_app_md5_checksum}).", :info)
|
873
750
|
_install_app(application)
|
874
751
|
end
|
875
752
|
else
|
@@ -1027,7 +904,6 @@ module Calabash
|
|
1027
904
|
|
1028
905
|
# @!visibility private
|
1029
906
|
def adb_uninstall_app(package)
|
1030
|
-
@installed_apps_cache = nil
|
1031
907
|
@logger.log "Uninstalling #{package}"
|
1032
908
|
result = adb.command('uninstall', package, timeout: 60).lines.last
|
1033
909
|
|
@@ -1042,7 +918,6 @@ module Calabash
|
|
1042
918
|
|
1043
919
|
# @!visibility private
|
1044
920
|
def adb_install_app(application)
|
1045
|
-
@installed_apps_cache = nil
|
1046
921
|
# Because of a bug in the latest version of ADB
|
1047
922
|
# https://github.com/android/platform_system_core/blob/0f91887868e51de67bdf9aedc97fbcb044dc1969/adb/commandline.cpp#L1466
|
1048
923
|
# ADB now uses rm -f ... to remove the temporary application on the
|
@@ -1113,9 +988,9 @@ module Calabash
|
|
1113
988
|
|
1114
989
|
# @!visibility private
|
1115
990
|
def execute_gesture(multi_touch_gesture)
|
1116
|
-
request = HTTP::Request.new('gesture',
|
991
|
+
request = HTTP::Request.new('gesture', json: multi_touch_gesture.to_json)
|
1117
992
|
|
1118
|
-
body = http_client.
|
993
|
+
body = http_client.get(request, timeout: multi_touch_gesture.timeout + 10).body
|
1119
994
|
result = JSON.parse(body)
|
1120
995
|
|
1121
996
|
if result['outcome'] != 'SUCCESS'
|
@@ -1139,36 +1014,6 @@ module Calabash
|
|
1139
1014
|
end
|
1140
1015
|
end
|
1141
1016
|
|
1142
|
-
class InstrumentationError < RuntimeError; end
|
1143
|
-
|
1144
|
-
def instrument(parameters, http_client = helper_application_http_client)
|
1145
|
-
request = HTTP::Request.new('instrument', params_for_request(parameters))
|
1146
|
-
|
1147
|
-
body = http_client.post(request).body
|
1148
|
-
result = JSON.parse(body)
|
1149
|
-
|
1150
|
-
if result['outcome'] != 'SUCCESS'
|
1151
|
-
raise InstrumentationError, "Failed to instrument. Reason: #{result['reason']}"
|
1152
|
-
end
|
1153
|
-
|
1154
|
-
true
|
1155
|
-
end
|
1156
|
-
|
1157
|
-
class StartActivityError < RuntimeError; end
|
1158
|
-
|
1159
|
-
def start_activity(parameters, http_client = helper_application_http_client)
|
1160
|
-
request = HTTP::Request.new('start-activity', params_for_request(parameters))
|
1161
|
-
|
1162
|
-
body = http_client.post(request).body
|
1163
|
-
result = JSON.parse(body)
|
1164
|
-
|
1165
|
-
if result['outcome'] != 'SUCCESS'
|
1166
|
-
raise StartActivityError, "Failed to start activity. Reason: #{result['reason']}"
|
1167
|
-
end
|
1168
|
-
|
1169
|
-
true
|
1170
|
-
end
|
1171
|
-
|
1172
1017
|
# @!visibility private
|
1173
1018
|
def params_for_request(parameters)
|
1174
1019
|
{json: parameters.to_json}
|
@@ -1181,9 +1026,6 @@ module Calabash
|
|
1181
1026
|
else
|
1182
1027
|
if adb.shell('md5', no_exit_code_check: true).chomp == 'md5 file ...'
|
1183
1028
|
@md5_binary = 'md5'
|
1184
|
-
elsif (r = adb.shell('md5sum _cal_no_such_file', no_exit_code_check: true)) && r.chomp.start_with?('md5sum:') &&
|
1185
|
-
!r.include?('permission denied')
|
1186
|
-
@md5_binary = 'md5sum'
|
1187
1029
|
else
|
1188
1030
|
# The device does not have 'md5'
|
1189
1031
|
calmd5 = Calabash::Android.binary_location('calmd5', info[:cpu_architecture], can_handle_pie_binaries?)
|
@@ -1,11 +1,6 @@
|
|
1
1
|
require 'rexml/document'
|
2
2
|
require 'timeout'
|
3
|
-
|
4
|
-
# We sometimes want to require a Ruby gem without having our IDE auto-complete
|
5
|
-
# using it. For example awesome_print adds a ton of methods to 'Object'
|
6
|
-
alias :cal_require_without_documentation :require
|
7
|
-
cal_require_without_documentation 'luffa'
|
8
|
-
|
3
|
+
require 'luffa'
|
9
4
|
require 'timeout'
|
10
5
|
|
11
6
|
if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
|
@@ -30,14 +25,6 @@ module Calabash
|
|
30
25
|
# @todo Maybe rename this to CAL_SERVER_URL or CAL_SERVER?
|
31
26
|
DEVICE_ENDPOINT = URI.parse((variable('CAL_ENDPOINT') || 'http://127.0.0.1:34777'))
|
32
27
|
|
33
|
-
# A URI that points to the helper server on the device.
|
34
|
-
#
|
35
|
-
# The default value is 'http://localhost:34778'.
|
36
|
-
#
|
37
|
-
# You can control the value of this variable by setting the `CAL_HELPER_ENDPOINT`
|
38
|
-
# variable.
|
39
|
-
DEVICE_HELPER_ENDPOINT = URI.parse((variable('CAL_HELPER_ENDPOINT') || 'http://127.0.0.1:34778'))
|
40
|
-
|
41
28
|
private
|
42
29
|
|
43
30
|
def self.set_android_dependencies(android_dependencies)
|
@@ -314,7 +314,7 @@ module Calabash
|
|
314
314
|
end
|
315
315
|
|
316
316
|
# @!visibility private
|
317
|
-
|
317
|
+
def _pan_screen_up(options={})
|
318
318
|
from = {x: 50, y: 90}
|
319
319
|
to = {x: 50, y: 10}
|
320
320
|
|
@@ -322,7 +322,7 @@ module Calabash
|
|
322
322
|
end
|
323
323
|
|
324
324
|
# @!visibility private
|
325
|
-
|
325
|
+
def _pan_screen_down(options={})
|
326
326
|
from = {x: 50, y: 10}
|
327
327
|
to = {x: 50, y: 90}
|
328
328
|
|
@@ -330,7 +330,7 @@ module Calabash
|
|
330
330
|
end
|
331
331
|
|
332
332
|
# @!visibility private
|
333
|
-
|
333
|
+
def _flick_screen_up(options={})
|
334
334
|
from = {x: 50, y: 90}
|
335
335
|
to = {x: 50, y: 10}
|
336
336
|
|
@@ -338,7 +338,7 @@ module Calabash
|
|
338
338
|
end
|
339
339
|
|
340
340
|
# @!visibility private
|
341
|
-
|
341
|
+
def _flick_screen_down(options={})
|
342
342
|
from = {x: 50, y: 10}
|
343
343
|
to = {x: 50, y: 90}
|
344
344
|
|
@@ -346,8 +346,24 @@ module Calabash
|
|
346
346
|
end
|
347
347
|
|
348
348
|
# @!visibility private
|
349
|
-
|
350
|
-
|
349
|
+
def _pinch_screen(direction, options={})
|
350
|
+
Device.default.pinch(direction, "* id:'content'", options)
|
351
|
+
end
|
352
|
+
|
353
|
+
# @!visibility private
|
354
|
+
def _pinch_to_zoom(direction, query, options={})
|
355
|
+
if direction == :out
|
356
|
+
Device.default.pinch(:in, query, options)
|
357
|
+
elsif direction == :in
|
358
|
+
Device.default.pinch(:out, query, options)
|
359
|
+
else
|
360
|
+
raise "Invalid direction '#{direction}'"
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
# @!visibility private
|
365
|
+
def _pinch_screen_to_zoom(direction, options={})
|
366
|
+
_pinch_to_zoom(direction, "* id:'content'", options)
|
351
367
|
end
|
352
368
|
end
|
353
369
|
end
|
@@ -8,16 +8,13 @@ module Calabash
|
|
8
8
|
module Interactions
|
9
9
|
# Go back. If the keyboard is shown, it will be dismissed.
|
10
10
|
def go_back
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
press_physical_back_button
|
11
|
+
Device.default.perform_action('hide_soft_keyboard')
|
12
|
+
press_back_button
|
16
13
|
end
|
17
14
|
|
18
15
|
# Go to the home screen.
|
19
16
|
def go_home
|
20
|
-
|
17
|
+
Device.default.go_home
|
21
18
|
|
22
19
|
true
|
23
20
|
end
|
@@ -25,33 +22,33 @@ module Calabash
|
|
25
22
|
# Get the name of the currently focused activity
|
26
23
|
#
|
27
24
|
# @example
|
28
|
-
# puts
|
25
|
+
# puts focused_activity
|
29
26
|
# # => com.example.MainActivity
|
30
27
|
#
|
31
28
|
# @return [String] The name of the currently focused activity.
|
32
29
|
def focused_activity
|
33
|
-
|
30
|
+
Device.default.current_focus[:activity]
|
34
31
|
end
|
35
32
|
|
36
33
|
# Get the name of the currently focused package
|
37
34
|
#
|
38
35
|
# @example
|
39
|
-
# puts
|
36
|
+
# puts focused_package
|
40
37
|
# # => com.example
|
41
38
|
#
|
42
39
|
# @return [String] The name of the currently focused package
|
43
40
|
def focused_package
|
44
|
-
|
41
|
+
Device.default.current_focus[:package]
|
45
42
|
end
|
46
43
|
|
47
44
|
# Sets the date of the first visible date picker widget.
|
48
45
|
#
|
49
46
|
# @example
|
50
|
-
#
|
47
|
+
# set_date('2012-04-24')
|
51
48
|
#
|
52
49
|
# @example
|
53
50
|
# date = Date.parse('3rd Feb 2012')
|
54
|
-
#
|
51
|
+
# set_date(date)
|
55
52
|
#
|
56
53
|
# @param [Date, String] date The date to set. If given a String,
|
57
54
|
# `Date.parse` is called on the string.
|
@@ -91,11 +88,11 @@ module Calabash
|
|
91
88
|
# Sets the time of the first visible time picker widget.
|
92
89
|
#
|
93
90
|
# @example
|
94
|
-
#
|
91
|
+
# set_time('14:42')
|
95
92
|
#
|
96
93
|
# @example
|
97
94
|
# time = Time.parse('8:30 AM')
|
98
|
-
#
|
95
|
+
# set_time(time)
|
99
96
|
#
|
100
97
|
# @param [Time, String] time The time to set. If given a String,
|
101
98
|
# `Time.parse` is called on the string.
|
@@ -141,6 +138,12 @@ module Calabash
|
|
141
138
|
|
142
139
|
true
|
143
140
|
end
|
141
|
+
|
142
|
+
|
143
|
+
# @!visibility private
|
144
|
+
def _evaluate_javascript_in(query, javascript)
|
145
|
+
Device.default.evaluate_javascript_in(query, javascript)
|
146
|
+
end
|
144
147
|
end
|
145
148
|
end
|
146
149
|
end
|