calabash 2.0.0.pre11 → 2.0.0.prelegacy

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -5
  3. data/bin/calabash +4 -3
  4. data/lib/calabash/android/adb.rb +37 -34
  5. data/lib/calabash/android/application.rb +1 -1
  6. data/lib/calabash/android/build/builder.rb +1 -1
  7. data/lib/calabash/android/build/java_keystore.rb +1 -1
  8. data/lib/calabash/android/build/resigner.rb +1 -1
  9. data/lib/calabash/android/device.rb +46 -204
  10. data/lib/calabash/android/environment.rb +1 -14
  11. data/lib/calabash/android/gestures.rb +22 -6
  12. data/lib/calabash/android/interactions.rb +17 -14
  13. data/lib/calabash/android/legacy.rb +141 -4
  14. data/lib/calabash/android/lib/.irbrc +1 -9
  15. data/lib/calabash/android/lib/AndroidManifest.xml +2 -23
  16. data/lib/calabash/android/lib/TestServer.apk +0 -0
  17. data/lib/calabash/android/life_cycle.rb +3 -3
  18. data/lib/calabash/android/orientation.rb +8 -8
  19. data/lib/calabash/android/physical_buttons.rb +16 -19
  20. data/lib/calabash/android/server.rb +1 -6
  21. data/lib/calabash/android/text.rb +12 -12
  22. data/lib/calabash/android.rb +26 -92
  23. data/lib/calabash/application.rb +0 -3
  24. data/lib/calabash/cli/generate.rb +18 -8
  25. data/lib/calabash/cli/helpers.rb +9 -4
  26. data/lib/calabash/cli/run.rb +1 -1
  27. data/lib/calabash/console_helpers.rb +11 -179
  28. data/lib/calabash/device.rb +19 -4
  29. data/lib/calabash/gestures.rb +198 -292
  30. data/lib/calabash/http/retriable_client.rb +3 -18
  31. data/lib/calabash/http.rb +0 -1
  32. data/lib/calabash/interactions.rb +40 -3
  33. data/lib/calabash/ios/conditions.rb +1 -1
  34. data/lib/calabash/ios/console_helpers.rb +2 -2
  35. data/lib/calabash/ios/date_picker.rb +8 -10
  36. data/lib/calabash/ios/device/device_implementation.rb +21 -9
  37. data/lib/calabash/ios/device/gestures_mixin.rb +55 -53
  38. data/lib/calabash/ios/device/keyboard_mixin.rb +0 -21
  39. data/lib/calabash/ios/device/rotation_mixin.rb +65 -3
  40. data/lib/calabash/ios/device/text_mixin.rb +21 -0
  41. data/lib/calabash/ios/device.rb +1 -0
  42. data/lib/calabash/ios/gestures.rb +90 -24
  43. data/lib/calabash/ios/interactions.rb +6 -1
  44. data/lib/calabash/ios/lib/.irbrc +2 -9
  45. data/lib/calabash/ios/orientation.rb +8 -8
  46. data/lib/calabash/ios/runtime.rb +14 -14
  47. data/lib/calabash/ios/scroll.rb +17 -25
  48. data/lib/calabash/ios/slider.rb +18 -11
  49. data/lib/calabash/ios/text.rb +74 -20
  50. data/lib/calabash/ios/uia.rb +1 -1
  51. data/lib/calabash/ios.rb +16 -77
  52. data/lib/calabash/legacy.rb +6 -9
  53. data/lib/calabash/lib/skeleton/{Gemfile.skeleton → Gemfile} +0 -0
  54. data/lib/calabash/lib/skeleton/config/{cucumber.yml.skeleton → cucumber.yml} +0 -0
  55. data/lib/calabash/lib/skeleton/features/{sample.feature.skeleton → sample.feature} +0 -0
  56. data/lib/calabash/lib/skeleton/features/step_definitions/{sample_steps.rb.skeleton → calabash_steps.rb} +8 -8
  57. data/lib/calabash/lib/skeleton/features/support/{dry_run.rb.skeleton → dry_run.rb} +5 -2
  58. data/lib/calabash/lib/skeleton/features/support/{env.rb.skeleton → env.rb} +8 -2
  59. data/lib/calabash/lib/skeleton/features/support/hooks.rb +83 -0
  60. data/lib/calabash/life_cycle.rb +8 -16
  61. data/lib/calabash/location.rb +15 -14
  62. data/lib/calabash/orientation.rb +8 -8
  63. data/lib/calabash/page.rb +4 -1
  64. data/lib/calabash/screenshot.rb +3 -3
  65. data/lib/calabash/text.rb +19 -31
  66. data/lib/calabash/utility.rb +8 -41
  67. data/lib/calabash/version.rb +1 -1
  68. data/lib/calabash/wait.rb +192 -177
  69. data/lib/calabash.rb +10 -53
  70. metadata +32 -43
  71. data/lib/calabash/android/device/helper_application.rb +0 -95
  72. data/lib/calabash/android/lib/HelperApplication.apk +0 -0
  73. data/lib/calabash/android/lib/HelperApplicationTestServer.apk +0 -0
  74. data/lib/calabash/android/web.rb +0 -12
  75. data/lib/calabash/http/forwarding_client.rb +0 -23
  76. data/lib/calabash/internal.rb +0 -48
  77. data/lib/calabash/ios/automator/automator.rb +0 -217
  78. data/lib/calabash/ios/automator/coordinates.rb +0 -37
  79. data/lib/calabash/ios/automator/device_agent.rb +0 -379
  80. data/lib/calabash/ios/automator.rb +0 -9
  81. data/lib/calabash/ios/legacy.rb +0 -6
  82. data/lib/calabash/ios/web.rb +0 -10
  83. data/lib/calabash/lib/skeleton/features/support/hooks.rb.skeleton +0 -34
  84. data/lib/calabash/retry.rb +0 -33
  85. data/lib/calabash/stubs.rb +0 -21
  86. data/lib/calabash/web.rb +0 -44
data/lib/calabash.rb CHANGED
@@ -1,18 +1,14 @@
1
- # Calabash is a mobile automation tool used for automatic UI-testing.
2
- # It supports Android and iOS, both native and hybrid app testing.
1
+ # Calabash is a Behavior-driven development (BDD) framework for Android and
2
+ # iOS. It supports both native and hybrid app testing.
3
3
  #
4
4
  # It is developed and maintained by Xamarin and is released under the Eclipse
5
5
  # Public License.
6
6
  module Calabash
7
- class RequiredBothPlatformsError < LoadError
8
- end
9
-
10
7
  require 'calabash/version'
11
8
  require 'calabash/environment'
12
9
  require 'calabash/logger'
13
10
  require 'calabash/color'
14
11
  require 'calabash/utility'
15
- require 'calabash/retry'
16
12
  require 'calabash/application'
17
13
  require 'calabash/device'
18
14
  require 'calabash/http'
@@ -28,11 +24,9 @@ module Calabash
28
24
  require 'calabash/query'
29
25
  require 'calabash/text'
30
26
  require 'calabash/interactions'
31
- require 'calabash/web'
32
27
  require 'calabash/defaults'
33
28
  require 'calabash/legacy'
34
29
  require 'calabash/console_helpers'
35
- require 'calabash/internal'
36
30
 
37
31
 
38
32
  require 'calabash/patch'
@@ -48,7 +42,6 @@ module Calabash
48
42
  include Calabash::Orientation
49
43
  include Calabash::Text
50
44
  include Calabash::Interactions
51
- include Calabash::Web
52
45
  extend Calabash::Defaults
53
46
 
54
47
  require 'calabash/page'
@@ -61,9 +54,9 @@ module Calabash
61
54
  # @example
62
55
  # # android/pages/my_page.rb
63
56
  # class Android::MyPage < Calabash::Page
64
- # def method
65
- # # [...]
66
- # end
57
+ # include Calabash::Android
58
+ #
59
+ # # [...]
67
60
  # end
68
61
  #
69
62
  # # step definition
@@ -78,7 +71,7 @@ module Calabash
78
71
  # # pages/abstract_login_page.rb
79
72
  # class AbstractLoginPage < Calabash::Page
80
73
  # def login(username, password)
81
- # cal.enter_text_in(username_field, username)
74
+ # enter_text_in(username_field, username)
82
75
  # # [...]
83
76
  # end
84
77
  #
@@ -91,6 +84,8 @@ module Calabash
91
84
  #
92
85
  # # pages/android_login_page.rb
93
86
  # class Android::LoginPage < SharedLoginPage
87
+ # include Calabash::Android
88
+ #
94
89
  # private
95
90
  #
96
91
  # def username_field
@@ -127,9 +122,8 @@ module Calabash
127
122
  if page_class.is_a?(Class)
128
123
  modules = page_class.included_modules.map(&:to_s)
129
124
 
130
- if modules.include?("Calabash::#{platform_module}")
131
- Logger.warn("Page '#{page_class}' includes Calabash::#{platform_module}. It is recommended not to include Calabash.")
132
- Logger.warn("Use cal.<method> for cross-platform methods, cal_android.<method> for Android-only and cal_ios.<method> for iOS-only")
125
+ unless modules.include?("Calabash::#{platform_module}")
126
+ raise "Page '#{page_class}' does not include Calabash::#{platform_module}"
133
127
  end
134
128
 
135
129
  if modules.include?('Calabash::Android') &&
@@ -137,10 +131,6 @@ module Calabash
137
131
  raise "Page '#{page_class}' includes both Calabash::Android and Calabash::IOS"
138
132
  end
139
133
 
140
- unless page_class.ancestors.include?(Calabash::Page)
141
- raise "Page '#{page_class}' is not a Calabash::Page"
142
- end
143
-
144
134
  page = page_class.send(:new, self)
145
135
 
146
136
  if page.is_a?(Calabash::Page)
@@ -327,36 +317,3 @@ if Calabash::Environment::DEBUG_CALLED_METHODS
327
317
 
328
318
  set_trace_func(trace_func)
329
319
  end
330
-
331
- # @!visibility private
332
- class CalabashMethodsInternal
333
- include ::Calabash
334
- end
335
-
336
- # @!visibility private
337
- class CalabashMethods < BasicObject
338
- include ::Calabash
339
-
340
- instance_methods.each do |method_name|
341
- define_method(method_name) do |*args, &block|
342
- ::CalabashMethodsInternal.new.send(method_name, *args, &block)
343
- end
344
- end
345
- end
346
-
347
- # Returns a object that exposes all of the public Calabash cross-platform API.
348
- # This method should *always* be used to access the Calabash API. By default,
349
- # all methods are executed using the default device and the default
350
- # application.
351
- #
352
- # For OS specific methods use {cal_android} and {cal_ios}
353
- #
354
- # All API methods are available with documentation in {Calabash}
355
- #
356
- # @see {Calabash}
357
- #
358
- # @return [Object] Instance responding to all cross-platform Calabash methods
359
- # in the API.
360
- def cal
361
- CalabashMethods.new
362
- end
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calabash
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre11
4
+ version: 2.0.0.prelegacy
5
5
  platform: ruby
6
6
  authors:
7
+ - Jonas Maturana Larsen
7
8
  - Karl Krukow
8
9
  - Tobias Røikjer
9
10
  - Joshua Moody
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2016-11-21 00:00:00.000000000 Z
14
+ date: 2016-03-08 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: edn
@@ -92,7 +93,7 @@ dependencies:
92
93
  requirements:
93
94
  - - ">="
94
95
  - !ruby/object:Gem::Version
95
- version: 2.2.2
96
+ version: 2.0.2
96
97
  - - "<"
97
98
  - !ruby/object:Gem::Version
98
99
  version: '3.0'
@@ -102,7 +103,7 @@ dependencies:
102
103
  requirements:
103
104
  - - ">="
104
105
  - !ruby/object:Gem::Version
105
- version: 2.2.2
106
+ version: 2.0.2
106
107
  - - "<"
107
108
  - !ruby/object:Gem::Version
108
109
  version: '3.0'
@@ -238,6 +239,20 @@ dependencies:
238
239
  - - ">="
239
240
  - !ruby/object:Gem::Version
240
241
  version: '0'
242
+ - !ruby/object:Gem::Dependency
243
+ name: travis
244
+ requirement: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - ">="
247
+ - !ruby/object:Gem::Version
248
+ version: '0'
249
+ type: :development
250
+ prerelease: false
251
+ version_requirements: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ version: '0'
241
256
  - !ruby/object:Gem::Dependency
242
257
  name: pry
243
258
  requirement: !ruby/object:Gem::Requirement
@@ -308,20 +323,6 @@ dependencies:
308
323
  - - ">="
309
324
  - !ruby/object:Gem::Version
310
325
  version: '0'
311
- - !ruby/object:Gem::Dependency
312
- name: listen
313
- requirement: !ruby/object:Gem::Requirement
314
- requirements:
315
- - - '='
316
- - !ruby/object:Gem::Version
317
- version: 3.0.6
318
- type: :development
319
- prerelease: false
320
- version_requirements: !ruby/object:Gem::Requirement
321
- requirements:
322
- - - '='
323
- - !ruby/object:Gem::Version
324
- version: 3.0.6
325
326
  - !ruby/object:Gem::Dependency
326
327
  name: growl
327
328
  requirement: !ruby/object:Gem::Requirement
@@ -351,12 +352,13 @@ dependencies:
351
352
  - !ruby/object:Gem::Version
352
353
  version: '0'
353
354
  description: |-
354
- Calabash is a mobile automation tool used for automatic UI-testing.
355
- It supports Android and iOS, both native and hybrid app testing.
355
+ Calabash is a Behavior-driven development (BDD)
356
+ framework for Android and iOS. It supports both native and hybrid app testing.
356
357
 
357
358
  It is developed and maintained by Xamarin and is released under the Eclipse
358
359
  Public License.
359
360
  email:
361
+ - jonaspec.larsen@xamarin.com
360
362
  - karl.krukow@xamarin.com
361
363
  - tobias.roikjer@xamarin.com
362
364
  - joshua.moody@xamarin.com
@@ -384,15 +386,12 @@ files:
384
386
  - lib/calabash/android/console_helpers.rb
385
387
  - lib/calabash/android/defaults.rb
386
388
  - lib/calabash/android/device.rb
387
- - lib/calabash/android/device/helper_application.rb
388
389
  - lib/calabash/android/environment.rb
389
390
  - lib/calabash/android/gestures.rb
390
391
  - lib/calabash/android/interactions.rb
391
392
  - lib/calabash/android/legacy.rb
392
393
  - lib/calabash/android/lib/.irbrc
393
394
  - lib/calabash/android/lib/AndroidManifest.xml
394
- - lib/calabash/android/lib/HelperApplication.apk
395
- - lib/calabash/android/lib/HelperApplicationTestServer.apk
396
395
  - lib/calabash/android/lib/TestServer.apk
397
396
  - lib/calabash/android/lib/calmd5/arm64-v8a/calmd5
398
397
  - lib/calabash/android/lib/calmd5/arm64-v8a/calmd5-pie
@@ -416,7 +415,6 @@ files:
416
415
  - lib/calabash/android/scroll.rb
417
416
  - lib/calabash/android/server.rb
418
417
  - lib/calabash/android/text.rb
419
- - lib/calabash/android/web.rb
420
418
  - lib/calabash/application.rb
421
419
  - lib/calabash/cli.rb
422
420
  - lib/calabash/cli/build.rb
@@ -434,17 +432,11 @@ files:
434
432
  - lib/calabash/gestures.rb
435
433
  - lib/calabash/http.rb
436
434
  - lib/calabash/http/error.rb
437
- - lib/calabash/http/forwarding_client.rb
438
435
  - lib/calabash/http/request.rb
439
436
  - lib/calabash/http/retriable_client.rb
440
437
  - lib/calabash/interactions.rb
441
- - lib/calabash/internal.rb
442
438
  - lib/calabash/ios.rb
443
439
  - lib/calabash/ios/application.rb
444
- - lib/calabash/ios/automator.rb
445
- - lib/calabash/ios/automator/automator.rb
446
- - lib/calabash/ios/automator/coordinates.rb
447
- - lib/calabash/ios/automator/device_agent.rb
448
440
  - lib/calabash/ios/conditions.rb
449
441
  - lib/calabash/ios/console_helpers.rb
450
442
  - lib/calabash/ios/date_picker.rb
@@ -466,12 +458,12 @@ files:
466
458
  - lib/calabash/ios/device/routes/uia_route_mixin.rb
467
459
  - lib/calabash/ios/device/runtime_attributes.rb
468
460
  - lib/calabash/ios/device/status_bar_mixin.rb
461
+ - lib/calabash/ios/device/text_mixin.rb
469
462
  - lib/calabash/ios/device/uia_keyboard_mixin.rb
470
463
  - lib/calabash/ios/device/uia_mixin.rb
471
464
  - lib/calabash/ios/environment.rb
472
465
  - lib/calabash/ios/gestures.rb
473
466
  - lib/calabash/ios/interactions.rb
474
- - lib/calabash/ios/legacy.rb
475
467
  - lib/calabash/ios/lib/.irbrc
476
468
  - lib/calabash/ios/lib/recordings/rotate_left_home_down_ipad.base64
477
469
  - lib/calabash/ios/lib/recordings/rotate_left_home_down_iphone.base64
@@ -496,16 +488,15 @@ files:
496
488
  - lib/calabash/ios/slider.rb
497
489
  - lib/calabash/ios/text.rb
498
490
  - lib/calabash/ios/uia.rb
499
- - lib/calabash/ios/web.rb
500
491
  - lib/calabash/legacy.rb
501
492
  - lib/calabash/lib/skeleton/.gitignore
502
- - lib/calabash/lib/skeleton/Gemfile.skeleton
503
- - lib/calabash/lib/skeleton/config/cucumber.yml.skeleton
504
- - lib/calabash/lib/skeleton/features/sample.feature.skeleton
505
- - lib/calabash/lib/skeleton/features/step_definitions/sample_steps.rb.skeleton
506
- - lib/calabash/lib/skeleton/features/support/dry_run.rb.skeleton
507
- - lib/calabash/lib/skeleton/features/support/env.rb.skeleton
508
- - lib/calabash/lib/skeleton/features/support/hooks.rb.skeleton
493
+ - lib/calabash/lib/skeleton/Gemfile
494
+ - lib/calabash/lib/skeleton/config/cucumber.yml
495
+ - lib/calabash/lib/skeleton/features/sample.feature
496
+ - lib/calabash/lib/skeleton/features/step_definitions/calabash_steps.rb
497
+ - lib/calabash/lib/skeleton/features/support/dry_run.rb
498
+ - lib/calabash/lib/skeleton/features/support/env.rb
499
+ - lib/calabash/lib/skeleton/features/support/hooks.rb
509
500
  - lib/calabash/life_cycle.rb
510
501
  - lib/calabash/location.rb
511
502
  - lib/calabash/logger.rb
@@ -515,15 +506,12 @@ files:
515
506
  - lib/calabash/patch/array.rb
516
507
  - lib/calabash/query.rb
517
508
  - lib/calabash/query_result.rb
518
- - lib/calabash/retry.rb
519
509
  - lib/calabash/screenshot.rb
520
510
  - lib/calabash/server.rb
521
- - lib/calabash/stubs.rb
522
511
  - lib/calabash/text.rb
523
512
  - lib/calabash/utility.rb
524
513
  - lib/calabash/version.rb
525
514
  - lib/calabash/wait.rb
526
- - lib/calabash/web.rb
527
515
  homepage: https://xamarin.com/test-cloud
528
516
  licenses:
529
517
  - EPL-1.0
@@ -544,8 +532,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
544
532
  version: 1.3.1
545
533
  requirements: []
546
534
  rubyforge_project:
547
- rubygems_version: 2.5.1
535
+ rubygems_version: 2.4.5.1
548
536
  signing_key:
549
537
  specification_version: 4
550
538
  summary: Automated Acceptance Testing for Mobile Apps
551
539
  test_files: []
540
+ has_rdoc:
@@ -1,95 +0,0 @@
1
- require 'json'
2
-
3
- module Calabash
4
- module Android
5
- class Device
6
- module HelperApplication
7
- def ensure_helper_application_started
8
- unless $_calabash_helper_application_started
9
- $stdout.puts "NEW DEBUG: IN HERE"
10
- $stdout.puts "NEW DEBUG: INSTALLING"
11
- install_helper_application
12
- $stdout.puts "NEW DEBUG: STARTING"
13
- begin
14
- start_helper_application
15
- rescue => e
16
- $stdout.puts "NEW DEBUG EXCERPICON: #{e.backtrace.join("\n")}"
17
- raise e
18
- end
19
-
20
- $stdout.puts "NEW DEBUG: DONE STARTING"
21
- $_calabash_helper_application_started = true
22
- end
23
- end
24
-
25
- def helper_application_server
26
- Calabash::Android::Server.default_helper
27
- end
28
-
29
- def helper_application
30
- Calabash::Android::Application.new(Calabash::Android::HELPER_APPLICATION,
31
- Calabash::Android::HELPER_APPLICATION_TEST_SERVER)
32
- end
33
-
34
- def helper_application_http_client
35
- @helper_application_http_client ||= lambda do
36
- server = Calabash::HTTP::RetriableClient.new(helper_application_server)
37
- port_forward(helper_application_server.endpoint, helper_application_server.test_server_port)
38
-
39
- server.on_error(Errno::ECONNREFUSED) do |s|
40
- port_forward(s.endpoint.port, s.test_server_port)
41
- end
42
-
43
- server
44
- end.call
45
- end
46
-
47
- # @!visibility private
48
- def install_helper_application
49
- begin
50
- @logger.log "Ensuring helper application is installed"
51
- ensure_app_installed(helper_application)
52
- rescue => e
53
- @logger.log("Unable to install helper application!", :error)
54
- raise e
55
- end
56
-
57
- $_calabash_helper_application_installed = true
58
- end
59
-
60
- # @!visibility private
61
- def has_installed_helper_application?
62
- $_calabash_helper_application_installed
63
- end
64
-
65
- # @!visibility private
66
- def helper_application_responding?
67
- begin
68
- helper_application_http_client.post(HTTP::Request.new('ping'), retries: 1).body == 'pong'
69
- rescue HTTP::Error => e
70
- $stdout.puts "SH NEW DEBUG: PING ERROR #{e.backtrace.join("\n")}"
71
- false
72
- end
73
- end
74
-
75
- def start_helper_application
76
- cmd = ["am start",
77
- "-e testServerPort 0",
78
- "-e port 8081",
79
- "sh.calaba.calabashhelper/sh.calaba.calabashhelper.MainActivity"].join(" ")
80
-
81
- adb.shell(cmd)
82
-
83
- 100.times do |i|
84
- if i == 99
85
- raise "Unable to start helper application"
86
- end
87
-
88
- break if helper_application_responding?
89
- sleep 1
90
- end
91
- end
92
- end
93
- end
94
- end
95
- end
@@ -1,12 +0,0 @@
1
- module Calabash
2
- module Android
3
- module Web
4
- # @!visibility private
5
- define_method(:_evaluate_javascript_in) do |query, javascript|
6
- Calabash::Internal.with_default_device(required_os: :android) do |device|
7
- device.evaluate_javascript_in(query, javascript)
8
- end
9
- end
10
- end
11
- end
12
- end
@@ -1,23 +0,0 @@
1
- module Calabash
2
- module HTTP
3
- class ForwardingClient
4
- HEADER_FORWARD = 'X-FORWARD-PORT'
5
- ROUTES = [:get, :post, :put, :delete]
6
-
7
- def initialize(client, forward_to_port)
8
- @client = client
9
- @forward_to_port = forward_to_port
10
- end
11
-
12
- ROUTES.each do |route|
13
- define_method(route) do |request, options = {}|
14
- new_options = options.clone
15
- new_options[:header] ||= {}
16
- new_options[:header][HEADER_FORWARD] = @forward_to_port.to_s
17
-
18
- @client.send(route, request, new_options)
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,48 +0,0 @@
1
- module Calabash
2
- # @!visibility private
3
- # Internal usage, NOT a public API
4
- module Internal
5
- def self.with_default_device(required_os: nil, &block)
6
- unless block
7
- raise ArgumentError, "No block given"
8
- end
9
-
10
- device = Calabash.default_device
11
-
12
- if device.nil?
13
- raise "The default device is not set. Set it using Calabash.default_device = ..."
14
- end
15
-
16
- if required_os
17
- required_class = nil
18
- required_type = nil
19
- current_type = nil
20
-
21
- case required_os
22
- when :ios
23
- required_class = Calabash::IOS::Device
24
- required_type = 'iOS'
25
- when :android
26
- required_class = Calabash::Android::Device
27
- required_type = 'Android'
28
- else
29
- raise ArgumentError, "Unknown OS '#{required_os}'"
30
- end
31
-
32
- if Calabash::Android.const_defined?(:Device, false) && device.is_a?(Calabash::Android::Device)
33
- current_type = 'Android'
34
- elsif Calabash::IOS.const_defined?(:Device, false) && device.is_a?(Calabash::IOS::Device)
35
- current_type = 'iOS'
36
- else
37
- current_type = 'unknown'
38
- end
39
-
40
- unless device.is_a?(required_class)
41
- raise "The default device is not set to an #{required_type} device, it is an #{current_type} device."
42
- end
43
- end
44
-
45
- block.call(device)
46
- end
47
- end
48
- end