calabash 1.2.1 → 1.9.9.pre1

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.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +39 -0
  3. data/LICENSE +204 -21
  4. data/README.md +36 -6
  5. data/VERSIONING.md +16 -0
  6. data/bin/calabash +95 -0
  7. data/lib/calabash.rb +185 -1
  8. data/lib/calabash/android.rb +64 -0
  9. data/lib/calabash/android/adb.rb +277 -0
  10. data/lib/calabash/android/application.rb +110 -0
  11. data/lib/calabash/android/build.rb +12 -0
  12. data/lib/calabash/android/build/application.rb +13 -0
  13. data/lib/calabash/android/build/build_error.rb +11 -0
  14. data/lib/calabash/android/build/builder.rb +119 -0
  15. data/lib/calabash/android/build/java_keystore.rb +177 -0
  16. data/lib/calabash/android/build/resigner.rb +56 -0
  17. data/lib/calabash/android/build/test_server.rb +27 -0
  18. data/lib/calabash/android/console_helpers.rb +44 -0
  19. data/lib/calabash/android/cucumber.rb +3 -0
  20. data/lib/calabash/android/device.rb +965 -0
  21. data/lib/calabash/android/environment.rb +470 -0
  22. data/lib/calabash/android/gestures.rb +369 -0
  23. data/lib/calabash/android/interactions.rb +45 -0
  24. data/lib/calabash/android/lib/.irbrc +55 -0
  25. data/lib/calabash/android/lib/AndroidManifest.xml +51 -0
  26. data/lib/calabash/android/lib/TestServer.apk +0 -0
  27. data/lib/calabash/android/lib/calmd5/arm64-v8a/calmd5 +0 -0
  28. data/lib/calabash/android/lib/calmd5/arm64-v8a/calmd5-pie +0 -0
  29. data/lib/calabash/android/lib/calmd5/armeabi-v7a/calmd5 +0 -0
  30. data/lib/calabash/android/lib/calmd5/armeabi-v7a/calmd5-pie +0 -0
  31. data/lib/calabash/android/lib/calmd5/armeabi/calmd5 +0 -0
  32. data/lib/calabash/android/lib/calmd5/armeabi/calmd5-pie +0 -0
  33. data/lib/calabash/android/lib/calmd5/mips/calmd5 +0 -0
  34. data/lib/calabash/android/lib/calmd5/mips/calmd5-pie +0 -0
  35. data/lib/calabash/android/lib/calmd5/mips64/calmd5 +0 -0
  36. data/lib/calabash/android/lib/calmd5/mips64/calmd5-pie +0 -0
  37. data/lib/calabash/android/lib/calmd5/x86/calmd5 +0 -0
  38. data/lib/calabash/android/lib/calmd5/x86/calmd5-pie +0 -0
  39. data/lib/calabash/android/lib/calmd5/x86_64/calmd5 +0 -0
  40. data/lib/calabash/android/lib/calmd5/x86_64/calmd5-pie +0 -0
  41. data/lib/calabash/android/lib/screenshot_taker.jar +0 -0
  42. data/lib/calabash/android/life_cycle.rb +37 -0
  43. data/lib/calabash/android/orientation.rb +30 -0
  44. data/lib/calabash/android/physical_buttons.rb +39 -0
  45. data/lib/calabash/android/screenshot.rb +9 -0
  46. data/lib/calabash/android/scroll.rb +5 -0
  47. data/lib/calabash/android/server.rb +10 -0
  48. data/lib/calabash/android/text.rb +54 -0
  49. data/lib/calabash/application.rb +74 -0
  50. data/lib/calabash/cli.rb +12 -0
  51. data/lib/calabash/cli/build.rb +33 -0
  52. data/lib/calabash/cli/console.rb +90 -0
  53. data/lib/calabash/cli/generate.rb +110 -0
  54. data/lib/calabash/cli/helpers.rb +130 -0
  55. data/lib/calabash/cli/resign.rb +33 -0
  56. data/lib/calabash/cli/run.rb +99 -0
  57. data/lib/calabash/cli/setup_keystore.rb +39 -0
  58. data/lib/calabash/color.rb +32 -0
  59. data/lib/calabash/console_helpers.rb +90 -0
  60. data/lib/calabash/defaults.rb +56 -0
  61. data/lib/calabash/device.rb +401 -0
  62. data/lib/calabash/environment.rb +75 -0
  63. data/lib/calabash/gestures.rb +384 -0
  64. data/lib/calabash/http.rb +8 -0
  65. data/lib/calabash/http/error.rb +15 -0
  66. data/lib/calabash/http/request.rb +42 -0
  67. data/lib/calabash/http/retriable_client.rb +156 -0
  68. data/lib/calabash/interactions.rb +105 -0
  69. data/lib/calabash/ios.rb +37 -0
  70. data/lib/calabash/ios/application.rb +119 -0
  71. data/lib/calabash/ios/conditions.rb +79 -0
  72. data/lib/calabash/ios/console_helpers.rb +72 -0
  73. data/lib/calabash/ios/device.rb +24 -0
  74. data/lib/calabash/ios/device/device_implementation.rb +779 -0
  75. data/lib/calabash/ios/device/gestures_mixin.rb +167 -0
  76. data/lib/calabash/ios/device/keyboard_mixin.rb +133 -0
  77. data/lib/calabash/ios/device/physical_device_mixin.rb +266 -0
  78. data/lib/calabash/ios/device/rotation_mixin.rb +124 -0
  79. data/lib/calabash/ios/device/routes/backdoor_route_mixin.rb +86 -0
  80. data/lib/calabash/ios/device/routes/condition_route_mixin.rb +62 -0
  81. data/lib/calabash/ios/device/routes/error.rb +8 -0
  82. data/lib/calabash/ios/device/routes/handle_route_mixin.rb +102 -0
  83. data/lib/calabash/ios/device/routes/map_route_mixin.rb +38 -0
  84. data/lib/calabash/ios/device/routes/playback_route_mixin.rb +70 -0
  85. data/lib/calabash/ios/device/routes/response_parser.rb +48 -0
  86. data/lib/calabash/ios/device/routes/uia_route_mixin.rb +238 -0
  87. data/lib/calabash/ios/device/runtime_attributes.rb +184 -0
  88. data/lib/calabash/ios/device/status_bar_mixin.rb +17 -0
  89. data/lib/calabash/ios/device/text_mixin.rb +19 -0
  90. data/lib/calabash/ios/device/uia_keyboard_mixin.rb +188 -0
  91. data/lib/calabash/ios/device/uia_mixin.rb +12 -0
  92. data/lib/calabash/ios/environment.rb +41 -0
  93. data/lib/calabash/ios/interactions.rb +10 -0
  94. data/lib/calabash/ios/lib/.irbrc +55 -0
  95. data/lib/calabash/ios/lib/recordings/rotate_left_home_down_ipad.base64 +2 -0
  96. data/lib/calabash/ios/lib/recordings/rotate_left_home_down_iphone.base64 +2 -0
  97. data/lib/calabash/ios/lib/recordings/rotate_left_home_left_ipad.base64 +2 -0
  98. data/lib/calabash/ios/lib/recordings/rotate_left_home_left_iphone.base64 +2 -0
  99. data/lib/calabash/ios/lib/recordings/rotate_left_home_right_ipad.base64 +2 -0
  100. data/lib/calabash/ios/lib/recordings/rotate_left_home_right_iphone.base64 +2 -0
  101. data/lib/calabash/ios/lib/recordings/rotate_left_home_up_ipad.base64 +2 -0
  102. data/lib/calabash/ios/lib/recordings/rotate_left_home_up_iphone.base64 +2 -0
  103. data/lib/calabash/ios/lib/recordings/rotate_right_home_down_ipad.base64 +2 -0
  104. data/lib/calabash/ios/lib/recordings/rotate_right_home_down_iphone.base64 +2 -0
  105. data/lib/calabash/ios/lib/recordings/rotate_right_home_left_ipad.base64 +2 -0
  106. data/lib/calabash/ios/lib/recordings/rotate_right_home_left_iphone.base64 +2 -0
  107. data/lib/calabash/ios/lib/recordings/rotate_right_home_right_ipad.base64 +2 -0
  108. data/lib/calabash/ios/lib/recordings/rotate_right_home_right_iphone.base64 +2 -0
  109. data/lib/calabash/ios/lib/recordings/rotate_right_home_up_ipad.base64 +2 -0
  110. data/lib/calabash/ios/lib/recordings/rotate_right_home_up_iphone.base64 +2 -0
  111. data/lib/calabash/ios/orientation.rb +117 -0
  112. data/lib/calabash/ios/scroll.rb +504 -0
  113. data/lib/calabash/ios/server.rb +73 -0
  114. data/lib/calabash/ios/text.rb +248 -0
  115. data/lib/calabash/ios/uia.rb +24 -0
  116. data/lib/calabash/lib/skeleton/config/cucumber.yml +6 -0
  117. data/lib/calabash/lib/skeleton/features/sample.feature +5 -0
  118. data/lib/calabash/lib/skeleton/features/step_definitions/calabash_steps.rb +29 -0
  119. data/lib/calabash/lib/skeleton/features/support/env.rb +54 -0
  120. data/lib/calabash/lib/skeleton/features/support/hooks.rb +83 -0
  121. data/lib/calabash/life_cycle.rb +111 -0
  122. data/lib/calabash/location.rb +51 -0
  123. data/lib/calabash/logger.rb +87 -0
  124. data/lib/calabash/orientation.rb +84 -0
  125. data/lib/calabash/page.rb +35 -0
  126. data/lib/calabash/patch.rb +14 -0
  127. data/lib/calabash/patch/array.rb +16 -0
  128. data/lib/calabash/patch/run_loop.rb +90 -0
  129. data/lib/calabash/query.rb +160 -0
  130. data/lib/calabash/query_result.rb +85 -0
  131. data/lib/calabash/screenshot.rb +89 -0
  132. data/lib/calabash/server.rb +16 -0
  133. data/lib/calabash/text.rb +76 -0
  134. data/lib/calabash/utility.rb +58 -0
  135. data/lib/calabash/version.rb +3 -1
  136. data/lib/calabash/wait.rb +474 -0
  137. metadata +462 -24
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ package="#testPackage#"
4
+ android:versionCode="3"
5
+ android:versionName="0.3.0">
6
+ <application android:label="instrumentation_backend">
7
+ <uses-library android:name="android.test.runner" />
8
+ <uses-library android:name="com.google.android.maps" android:required="false" />
9
+ <activity
10
+ android:name="sh.calaba.instrumentationbackend.WakeUp"
11
+ android:label="WakeUp"
12
+ android:exported="true"
13
+ android:launchMode="singleInstance"
14
+ android:finishOnTaskLaunch="true"
15
+ android:stateNotNeeded="true"
16
+ android:noHistory="false"
17
+ android:excludeFromRecents="true"/>
18
+ <activity
19
+ android:name="sh.calaba.instrumentationbackend.StatusReporterActivity"
20
+ android:label="StatusReporterActivity"
21
+ android:exported="true"
22
+ android:finishOnTaskLaunch="true"
23
+ android:stateNotNeeded="true"
24
+ android:noHistory="true"
25
+ android:excludeFromRecents="true"/>
26
+ <activity
27
+ android:name="sh.calaba.instrumentationbackend.ResumeTaskActivity"
28
+ android:label="ResumeTaskActivity"
29
+ android:exported="true"
30
+ android:finishOnTaskLaunch="true"
31
+ android:stateNotNeeded="true"
32
+ android:noHistory="true"
33
+ android:excludeFromRecents="true"/>
34
+ </application>
35
+ <uses-sdk android:minSdkVersion="4" />
36
+ <instrumentation android:targetPackage="#targetPackage#" android:name="sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner" />
37
+ <instrumentation android:targetPackage="#targetPackage#" android:name="sh.calaba.instrumentationbackend.ClearAppData" />
38
+ <instrumentation android:targetPackage="#targetPackage#" android:name="sh.calaba.instrumentationbackend.ClearAppData2" />
39
+ <instrumentation android:targetPackage="#targetPackage#" android:name="sh.calaba.instrumentationbackend.ClearPreferences" />
40
+ <instrumentation android:targetPackage="#targetPackage#" android:name="sh.calaba.instrumentationbackend.SetPreferences" />
41
+ <instrumentation android:targetPackage="#targetPackage#" android:name="sh.calaba.instrumentationbackend.GetPreferences" />
42
+
43
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
44
+ <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
45
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
46
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
47
+ <uses-permission android:name="android.permission.INTERNET" />
48
+ <uses-permission android:name="android.permission.GET_TASKS" />
49
+ <uses-permission android:name="android.permission.REORDER_TASKS" />
50
+
51
+ </manifest>
@@ -0,0 +1,37 @@
1
+ module Calabash
2
+ module Android
3
+ module LifeCycle
4
+ # Resume an application. If the application is already focused, nothing
5
+ # will happen.
6
+ #
7
+ # @example
8
+ # go_home
9
+ # resume_app
10
+ #
11
+ # @param [String, Calabash::Application] path_or_application The
12
+ # application to resume.
13
+ def resume_app(path_or_application = nil)
14
+ path_or_application ||= Application.default
15
+
16
+ unless path_or_application
17
+ raise 'No application given, and Application.default is not set'
18
+ end
19
+
20
+ Device.default.resume_app(path_or_application)
21
+
22
+ true
23
+ end
24
+
25
+
26
+ # !@visibility private
27
+ def _send_current_app_to_background(for_seconds)
28
+ package = focused_package
29
+ activity = focused_activity
30
+
31
+ go_home
32
+ sleep(for_seconds)
33
+ Device.default.resume_activity(package, activity)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,30 @@
1
+ module Calabash
2
+ module Android
3
+ module Orientation
4
+ # @!visibility private
5
+ def _set_orientation_landscape
6
+ Device.default.perform_action('set_activity_orientation', 'landscape')
7
+ end
8
+
9
+ # @!visibility private
10
+ def _set_orientation_portrait
11
+ Device.default.perform_action('set_activity_orientation', 'portrait')
12
+ end
13
+
14
+ # @!visibility private
15
+ def _portrait?
16
+ _orientation == 'portrait'
17
+ end
18
+
19
+ # @!visibility private
20
+ def _landscape?
21
+ _orientation == 'landscape'
22
+ end
23
+
24
+ # @!visibility private
25
+ def _orientation
26
+ Device.default.perform_action('get_activity_orientation')['message']
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,39 @@
1
+ # @todo: Add not about this class being easily abused
2
+ module Calabash
3
+ module Android
4
+ module PhysicalButtons
5
+ def press_button(key)
6
+ Device.default.perform_action('press_key', key)
7
+ true
8
+ end
9
+
10
+ def press_back_button
11
+ press_button('KEYCODE_BACK')
12
+ end
13
+
14
+ def press_menu_button
15
+ press_button('KEYCODE_MENU')
16
+ end
17
+
18
+ def press_down_button
19
+ press_button('KEYCODE_DPAD_DOWN')
20
+ end
21
+
22
+ def press_up_button
23
+ press_button('KEYCODE_DPAD_UP')
24
+ end
25
+
26
+ def press_left_button
27
+ press_button('KEYCODE_DPAD_LEFT')
28
+ end
29
+
30
+ def press_right_button
31
+ press_button('KEYCODE_DPAD_RIGHT')
32
+ end
33
+
34
+ def press_enter_button
35
+ press_button('KEYCODE_ENTER')
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,9 @@
1
+ # @!visibility private
2
+ module Calabash
3
+ module Android
4
+ # @!visibility private
5
+ module Screenshot
6
+ SCREENSHOT_JAR_PATH = File.join(File.dirname(__FILE__), 'lib', 'screenshot_taker.jar')
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ module Calabash
2
+ module Android
3
+
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ module Calabash
2
+ module Android
3
+ # A representation of the Calabash Android test server.
4
+ class Server < ::Calabash::Server
5
+ def self.default
6
+ Server.new(URI.parse('http://127.0.0.1:33765'))
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,54 @@
1
+ module Calabash
2
+ module Android
3
+ module Text
4
+ def dismiss_keyboard
5
+ Device.default.perform_action('hide_soft_keyboard')
6
+ end
7
+
8
+ # Taps a keyboard action key on the keyboard. Notice that Calabash does
9
+ # not ensure that this particular action key is actually available on the
10
+ # current keyboard.
11
+ #
12
+ # @example
13
+ # tap_keyboard_action_key(:normal)
14
+ # tap_keyboard_action_key(:unspecified)
15
+ # tap_keyboard_action_key(:none)
16
+ # tap_keyboard_action_key(:go)
17
+ # tap_keyboard_action_key(:search)
18
+ # tap_keyboard_action_key(:send)
19
+ # tap_keyboard_action_key(:next)
20
+ # tap_keyboard_action_key(:done)
21
+ # tap_keyboard_action_key(:previous)
22
+ #
23
+ # @see http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html
24
+ #
25
+ # @param [Symbol] action_key The key to press.
26
+ def tap_keyboard_action_key(action_key)
27
+ Device.default.perform_action('press_user_action_button', action_key.to_s)
28
+ end
29
+
30
+ # @!visibility private
31
+ def _clear_text
32
+ Device.default.perform_action('clear_text')
33
+ end
34
+
35
+ def _clear_text_in(view)
36
+ tap(view)
37
+ sleep 0.5
38
+ clear_text
39
+ end
40
+
41
+ # @!visibility private
42
+ def _enter_text_in(view, text)
43
+ tap(view)
44
+ sleep 0.5
45
+ enter_text(text)
46
+ end
47
+
48
+ # @!visibility private
49
+ def _tap_current_keyboard_action_key
50
+ Device.default.perform_action('press_user_action_button')
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,74 @@
1
+ require 'digest'
2
+
3
+ module Calabash
4
+ # A representation of the application that is under test.
5
+ class Application
6
+ include Calabash::Utility
7
+
8
+ @@default = nil
9
+
10
+ def self.default
11
+ @@default
12
+ end
13
+
14
+ def self.default=(value)
15
+ @@default = value
16
+ end
17
+
18
+ attr_reader :path
19
+
20
+ def self.from_path(path)
21
+ extension = File.extname(path)
22
+
23
+ case extension
24
+ when '.apk'
25
+ Android::Application.new(path, nil)
26
+ when '.ipa', '.app'
27
+ IOS::Application.new(path)
28
+ else
29
+ Application.new(path)
30
+ end
31
+ end
32
+
33
+ # @raise [RuntimeError] Raises an error if `application_path` does not
34
+ # exist.
35
+ def initialize(application_path, options = {})
36
+ if application_path.nil?
37
+ raise ArgumentError, "Invalid application path '#{application_path}'."
38
+ end
39
+
40
+ @path = File.expand_path(application_path)
41
+ @logger = options[:logger] || Calabash::Logger.new
42
+ @identifier = options[:identifier]
43
+ ensure_application_path
44
+ end
45
+
46
+ def to_s
47
+ "#<Application #{path}>"
48
+ end
49
+
50
+ def inspect
51
+ to_s
52
+ end
53
+
54
+ def extract_identifier
55
+ abstract_method!
56
+ end
57
+
58
+ def identifier
59
+ @identifier ||= extract_identifier
60
+ end
61
+
62
+ def md5_checksum
63
+ Digest::MD5.file(path).hexdigest
64
+ end
65
+
66
+ private
67
+
68
+ def ensure_application_path
69
+ unless File.exist?(path)
70
+ raise "The app '#{path}' does not exist."
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,12 @@
1
+ module Calabash
2
+ # @!visibility private
3
+ module CLI
4
+ require 'calabash/cli/build'
5
+ require 'calabash/cli/console'
6
+ require 'calabash/cli/generate'
7
+ require 'calabash/cli/helpers'
8
+ require 'calabash/cli/resign'
9
+ require 'calabash/cli/run'
10
+ require 'calabash/cli/setup_keystore'
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ module Calabash
2
+ module CLI
3
+ # @!visibility private
4
+ module Build
5
+ def parse_build_arguments!
6
+ fail('Should only build test-server for Android') unless @platform.nil? || @platform == :android
7
+
8
+ application = @arguments.shift
9
+
10
+ if application.nil?
11
+ fail('Must supply application as first parameter to build', :build)
12
+ elsif !File.exists?(application)
13
+ fail("File '#{application}' does not exist", :build)
14
+ else
15
+ extension = File.extname(application)
16
+ application_path = File.expand_path(application)
17
+
18
+ case extension
19
+ when '.apk'
20
+ set_platform!(:android)
21
+ Calabash::Android::Build::Builder.new(application_path).build
22
+ when '.ipa', '.app'
23
+ set_platform!(:ios)
24
+ fail('Should only build test-server for Android')
25
+ else
26
+ fail('Application must be an apk', :build)
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,90 @@
1
+ module Calabash
2
+ # @!visibility private
3
+ module CLI
4
+ # @!visibility private
5
+ module Console
6
+ def parse_console_arguments!
7
+ application = @arguments.shift
8
+
9
+ if application.nil?
10
+ Logger.info("No application specified. Using default application specified by env variable CAL_APP")
11
+ application = Environment::APP_PATH
12
+ Logger.debug("New application: '#{application}'")
13
+
14
+ fail("No application given and env variable CAL_APP is not set.", :console) if application.nil?
15
+ end
16
+
17
+ if File.exists?(application)
18
+ extension = File.extname(application)
19
+ application_path = File.expand_path(application)
20
+
21
+ case extension
22
+ when '.apk'
23
+ set_platform!(:android)
24
+
25
+ # Create the test server if it does not exist
26
+ test_server = Android::Build::TestServer.new(application_path)
27
+
28
+ unless test_server.exists?
29
+ Logger.info('Test server does not exist. Creating test server.')
30
+ Calabash::Android::Build::Builder.new(application_path).build
31
+ end
32
+
33
+ enter_console(application_path)
34
+ when '.ipa'
35
+ set_platform!(:ios)
36
+ enter_console(application_path)
37
+ when '.app'
38
+ set_platform!(:ios)
39
+ enter_console(application_path)
40
+ else
41
+ fail('Application must be either an .apk, .ipa or .app', :console)
42
+ end
43
+ else
44
+ fail("File '#{application}' does not exist", :console)
45
+ end
46
+ end
47
+
48
+ def enter_console(application_path)
49
+ irbrc_path = Environment::IRBRC
50
+
51
+ console_environment = {}
52
+ console_environment['CAL_DEBUG'] = Environment::DEBUG ? '1' : '0'
53
+
54
+ if @options[:verbose]
55
+ console_environment['CAL_DEBUG'] = '1'
56
+ end
57
+
58
+ if @platform == :android
59
+ irbrc_path ||= File.expand_path(File.join(File.dirname(__FILE__), '..', 'android', 'lib', '.irbrc'))
60
+
61
+ console_environment['CAL_APP'] = application_path
62
+
63
+ if Environment::TEST_SERVER_PATH
64
+ console_environment['CAL_TEST_SERVER'] = Environment::TEST_SERVER_PATH
65
+ else
66
+ test_server = Android::Build::TestServer.new(application_path)
67
+
68
+ raise 'Cannot locate test-server' unless test_server.exists?
69
+
70
+ console_environment['CAL_TEST_SERVER'] = test_server.path
71
+ end
72
+ elsif @platform == :ios
73
+ irbrc_path ||= File.expand_path(File.join(File.dirname(__FILE__), '..', 'ios', 'lib', '.irbrc'))
74
+
75
+ console_environment['CAL_APP'] = application_path
76
+ else
77
+ raise "Invalid platform '#{@platform}'"
78
+ end
79
+
80
+ console_environment['IRBRC'] = irbrc_path
81
+
82
+ Logger.info 'Running irb...'
83
+ Logger.debug "From file: '#{irbrc_path}'"
84
+ Logger.debug "With ENV: '#{console_environment}'"
85
+
86
+ exec(console_environment, RbConfig.ruby, '-S', 'irb')
87
+ end
88
+ end
89
+ end
90
+ end