sc-frank-cucumber 1.2.1.00af28c

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 (136) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/Rakefile +38 -0
  4. data/bin/frank +6 -0
  5. data/bin/frank-skeleton +33 -0
  6. data/frank-skeleton/features/my_first.feature +12 -0
  7. data/frank-skeleton/features/step_definitions/launch_steps.rb +20 -0
  8. data/frank-skeleton/features/support/env.rb +8 -0
  9. data/frank-skeleton/frank_static_resources.bundle/ViewAttributeMapping.plist +63 -0
  10. data/frank-skeleton/frank_static_resources.bundle/ViewAttributeMappingMac.plist +99 -0
  11. data/frank-skeleton/frank_static_resources.bundle/images/ajax-loader.gif +0 -0
  12. data/frank-skeleton/frank_static_resources.bundle/images/file.gif +0 -0
  13. data/frank-skeleton/frank_static_resources.bundle/images/folder-closed.gif +0 -0
  14. data/frank-skeleton/frank_static_resources.bundle/images/folder.gif +0 -0
  15. data/frank-skeleton/frank_static_resources.bundle/images/loader.gif +0 -0
  16. data/frank-skeleton/frank_static_resources.bundle/images/loader.png +0 -0
  17. data/frank-skeleton/frank_static_resources.bundle/images/minus.gif +0 -0
  18. data/frank-skeleton/frank_static_resources.bundle/images/plus.gif +0 -0
  19. data/frank-skeleton/frank_static_resources.bundle/images/treeview-black-line.gif +0 -0
  20. data/frank-skeleton/frank_static_resources.bundle/images/treeview-black.gif +0 -0
  21. data/frank-skeleton/frank_static_resources.bundle/images/treeview-default-line.gif +0 -0
  22. data/frank-skeleton/frank_static_resources.bundle/images/treeview-default.gif +0 -0
  23. data/frank-skeleton/frank_static_resources.bundle/images/treeview-famfamfam-line.gif +0 -0
  24. data/frank-skeleton/frank_static_resources.bundle/images/treeview-famfamfam.gif +0 -0
  25. data/frank-skeleton/frank_static_resources.bundle/images/treeview-gray-line.gif +0 -0
  26. data/frank-skeleton/frank_static_resources.bundle/images/treeview-gray.gif +0 -0
  27. data/frank-skeleton/frank_static_resources.bundle/images/treeview-red-line.gif +0 -0
  28. data/frank-skeleton/frank_static_resources.bundle/images/treeview-red.gif +0 -0
  29. data/frank-skeleton/frank_static_resources.bundle/index.html +86 -0
  30. data/frank-skeleton/frank_static_resources.bundle/index.html.haml +76 -0
  31. data/frank-skeleton/frank_static_resources.bundle/js/accessible_views_view.coffee +41 -0
  32. data/frank-skeleton/frank_static_resources.bundle/js/accessible_views_view.js +46 -0
  33. data/frank-skeleton/frank_static_resources.bundle/js/controller.coffee +134 -0
  34. data/frank-skeleton/frank_static_resources.bundle/js/controller.js +139 -0
  35. data/frank-skeleton/frank_static_resources.bundle/js/details_view.coffee +42 -0
  36. data/frank-skeleton/frank_static_resources.bundle/js/details_view.js +51 -0
  37. data/frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee +64 -0
  38. data/frank-skeleton/frank_static_resources.bundle/js/dropdown_control.js +73 -0
  39. data/frank-skeleton/frank_static_resources.bundle/js/ersatz_model.coffee +46 -0
  40. data/frank-skeleton/frank_static_resources.bundle/js/ersatz_model.js +60 -0
  41. data/frank-skeleton/frank_static_resources.bundle/js/ersatz_view.coffee +167 -0
  42. data/frank-skeleton/frank_static_resources.bundle/js/ersatz_view.js +205 -0
  43. data/frank-skeleton/frank_static_resources.bundle/js/experiment_bar_model.coffee +10 -0
  44. data/frank-skeleton/frank_static_resources.bundle/js/experiment_bar_model.js +17 -0
  45. data/frank-skeleton/frank_static_resources.bundle/js/experiment_bar_view.coffee +44 -0
  46. data/frank-skeleton/frank_static_resources.bundle/js/experiment_bar_view.js +63 -0
  47. data/frank-skeleton/frank_static_resources.bundle/js/frank.coffee +96 -0
  48. data/frank-skeleton/frank_static_resources.bundle/js/frank.js +146 -0
  49. data/frank-skeleton/frank_static_resources.bundle/js/lib/backbone.js +1431 -0
  50. data/frank-skeleton/frank_static_resources.bundle/js/lib/coffee-script.js +8 -0
  51. data/frank-skeleton/frank_static_resources.bundle/js/lib/jquery-ui.min.js +405 -0
  52. data/frank-skeleton/frank_static_resources.bundle/js/lib/jquery.min.js +4 -0
  53. data/frank-skeleton/frank_static_resources.bundle/js/lib/jquery.treeview.js +251 -0
  54. data/frank-skeleton/frank_static_resources.bundle/js/lib/json2.js +481 -0
  55. data/frank-skeleton/frank_static_resources.bundle/js/lib/raphael.js +5815 -0
  56. data/frank-skeleton/frank_static_resources.bundle/js/lib/require.js +2053 -0
  57. data/frank-skeleton/frank_static_resources.bundle/js/lib/underscore.js +1059 -0
  58. data/frank-skeleton/frank_static_resources.bundle/js/main.coffee +27 -0
  59. data/frank-skeleton/frank_static_resources.bundle/js/main.js +29 -0
  60. data/frank-skeleton/frank_static_resources.bundle/js/tabs_controller.coffee +13 -0
  61. data/frank-skeleton/frank_static_resources.bundle/js/tabs_controller.js +22 -0
  62. data/frank-skeleton/frank_static_resources.bundle/js/toast_controller.coffee +15 -0
  63. data/frank-skeleton/frank_static_resources.bundle/js/toast_controller.js +28 -0
  64. data/frank-skeleton/frank_static_resources.bundle/js/transform_stack.coffee +59 -0
  65. data/frank-skeleton/frank_static_resources.bundle/js/transform_stack.js +78 -0
  66. data/frank-skeleton/frank_static_resources.bundle/js/tree_view.coffee +53 -0
  67. data/frank-skeleton/frank_static_resources.bundle/js/tree_view.js +64 -0
  68. data/frank-skeleton/frank_static_resources.bundle/js/view_hier_model.coffee +37 -0
  69. data/frank-skeleton/frank_static_resources.bundle/js/view_hier_model.js +48 -0
  70. data/frank-skeleton/frank_static_resources.bundle/js/view_model.coffee +39 -0
  71. data/frank-skeleton/frank_static_resources.bundle/js/view_model.js +62 -0
  72. data/frank-skeleton/frank_static_resources.bundle/pictos/index.html +329 -0
  73. data/frank-skeleton/frank_static_resources.bundle/pictos/pictos-web.eot +0 -0
  74. data/frank-skeleton/frank_static_resources.bundle/pictos/pictos-web.svg +114 -0
  75. data/frank-skeleton/frank_static_resources.bundle/pictos/pictos-web.ttf +0 -0
  76. data/frank-skeleton/frank_static_resources.bundle/pictos/pictos-web.woff +0 -0
  77. data/frank-skeleton/frank_static_resources.bundle/pictos/pictos.css +20 -0
  78. data/frank-skeleton/frank_static_resources.bundle/pictos/pictos_base64.css +18 -0
  79. data/frank-skeleton/frank_static_resources.bundle/stylesheets/css/symbiote.css +1 -0
  80. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_elements.scss +28 -0
  81. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_header.scss +61 -0
  82. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_inspect_tabs_list_tabs.scss +194 -0
  83. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_jquery.treeview.scss +68 -0
  84. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_jqui.scss +2 -0
  85. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_layout.scss +13 -0
  86. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_mixins.sass +137 -0
  87. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_reset.scss +32 -0
  88. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_selector_test_toolbar.scss +81 -0
  89. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_solarized.scss +16 -0
  90. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_typography.scss +11 -0
  91. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_unicode.scss +3 -0
  92. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/_z_index.scss +2 -0
  93. data/frank-skeleton/frank_static_resources.bundle/stylesheets/sass/symbiote.scss +26 -0
  94. data/frank-skeleton/frankify.xcconfig.tt +6 -0
  95. data/frank-skeleton/libCocoaAsyncSocket.a +0 -0
  96. data/frank-skeleton/libCocoaAsyncSocketMac.a +0 -0
  97. data/frank-skeleton/libCocoaHTTPServer.a +0 -0
  98. data/frank-skeleton/libCocoaHTTPServerMac.a +0 -0
  99. data/frank-skeleton/libCocoaLumberjack.a +0 -0
  100. data/frank-skeleton/libCocoaLumberjackMac.a +0 -0
  101. data/frank-skeleton/libFrank.a +0 -0
  102. data/frank-skeleton/libFrankMac.a +0 -0
  103. data/frank-skeleton/libShelley.a +0 -0
  104. data/frank-skeleton/libShelleyMac.a +0 -0
  105. data/frank-skeleton/plugins/.empty_directory +0 -0
  106. data/lib/frank-cucumber.rb +15 -0
  107. data/lib/frank-cucumber/app_bundle_locator.rb +58 -0
  108. data/lib/frank-cucumber/bonjour.rb +73 -0
  109. data/lib/frank-cucumber/cli.rb +299 -0
  110. data/lib/frank-cucumber/color_helper.rb +13 -0
  111. data/lib/frank-cucumber/console.rb +28 -0
  112. data/lib/frank-cucumber/core_frank_steps.rb +260 -0
  113. data/lib/frank-cucumber/frank.xcconfig.erb +17 -0
  114. data/lib/frank-cucumber/frank_helper.rb +459 -0
  115. data/lib/frank-cucumber/frank_localize.rb +43 -0
  116. data/lib/frank-cucumber/frank_mac_helper.rb +120 -0
  117. data/lib/frank-cucumber/frankifier.rb +150 -0
  118. data/lib/frank-cucumber/gateway.rb +135 -0
  119. data/lib/frank-cucumber/gesture_helper.rb +99 -0
  120. data/lib/frank-cucumber/host_scripting.rb +96 -0
  121. data/lib/frank-cucumber/keyboard_helper.rb +69 -0
  122. data/lib/frank-cucumber/launcher.rb +70 -0
  123. data/lib/frank-cucumber/localize.yml +104 -0
  124. data/lib/frank-cucumber/location_helper.rb +20 -0
  125. data/lib/frank-cucumber/mac_launcher.rb +35 -0
  126. data/lib/frank-cucumber/plugins/plugin.rb +57 -0
  127. data/lib/frank-cucumber/rect.rb +26 -0
  128. data/lib/frank-cucumber/scroll_helper.rb +24 -0
  129. data/lib/frank-cucumber/version.rb +5 -0
  130. data/lib/frank-cucumber/wait_helper.rb +57 -0
  131. data/sc-frank-cucumber.gemspec +37 -0
  132. data/test/keyboard_helper_test.rb +84 -0
  133. data/test/launcher_test.rb +57 -0
  134. data/test/rect_test.rb +25 -0
  135. data/test/test_helper.rb +16 -0
  136. metadata +395 -0
@@ -0,0 +1,99 @@
1
+ module Frank
2
+ module Cucumber
3
+ module GestureHelper
4
+
5
+ # Touch and hold the selector for a given duration
6
+ #
7
+ # @param [String] selector a view selector.
8
+ # @param [Number] duration the duration of the touch, the default is 1.
9
+ #
10
+ # @return [Array<Boolean>] an array indicating for each view which matched the selector whether it was touched or not.
11
+ #
12
+ # @raise an expection if no views matched the selector
13
+ # @raise an expection if no views which matched the selector could be touched
14
+ def tap_and_hold( selector, duration = 1 )
15
+ touch_successes = frankly_map( selector, "touchAndHold:", duration )
16
+ raise "Could not find anything matching [#{selector}] to long touch" if touch_successes.empty?
17
+ raise "Some views could not be long touched (probably because they are not within the current viewport)" if touch_successes.include?(false)
18
+ end
19
+
20
+ # Touch and hold the selector at a specific point for a given duration
21
+ #
22
+ # @param [String] selector a view selector.
23
+ # @param [Number] duration the duration of the touch, the default is 1.
24
+ # @param [Number] x the x-coordinate to touch
25
+ # @param [Number] y the y-coordinate to touch
26
+ #
27
+ # @return [Array<Boolean>] an array indicating for each view which matched the selector whether it was touched or not.
28
+ #
29
+ # @raise an expection if no views matched the selector
30
+ # @raise an expection if no views which matched the selector could be touched
31
+ def tap_and_hold_point( selector, x, y, duration = 1 )
32
+ touch_successes = frankly_map( selector, "touchAndHold:x:y:", duration, x, y )
33
+ raise "Could not find anything matching [#{selector}] to long touch" if touch_successes.empty?
34
+ raise "Some views could not be long touched (probably because they are not within the current viewport)" if touch_successes.include?(false)
35
+ end
36
+
37
+ # Double tap the selector
38
+ #
39
+ # @param [String] selector a view selector.
40
+ #
41
+ # @return [Array<Boolean>] an array indicating for each view which matched the selector whether it was touched or not.
42
+ #
43
+ # @raise an expection if no views matched the selector
44
+ # @raise an expection if no views which matched the selector could be touched
45
+ def double_tap( selector )
46
+ touch_successes = frankly_map( selector, "doubleTap" )
47
+ raise "Could not find anything matching [#{selector}] to double tap" if touch_successes.empty?
48
+ raise "Some views could not be double tap (probably because they are not within the current viewport)" if touch_successes.include?(false)
49
+ end
50
+
51
+ # Double tap the selector at a specific point
52
+ #
53
+ # @param [String] selector a view selector.
54
+ # @param [Number] x the x-coordinate to touch
55
+ # @param [Number] y the y-coordinate to touch
56
+ #
57
+ # @return [Array<Boolean>] an array indicating for each view which matched the selector whether it was touched or not.
58
+ #
59
+ # @raise an expection if no views matched the selector
60
+ # @raise an expection if no views which matched the selector could be touched
61
+ def double_tap_point( selector, x, y )
62
+ touch_successes = frankly_map( selector, "doubleTapx:y:", x, y )
63
+ raise "Could not find anything matching [#{selector}] to double tap" if touch_successes.empty?
64
+ raise "Some views could not be double tap (probably because they are not within the current viewport)" if touch_successes.include?(false)
65
+ end
66
+
67
+ # Drag the slider thumb to required value, taking the specified time
68
+ #
69
+ # @param [String] selector A view selector
70
+ # @param [Number] value The value up to which the slider should be dragged
71
+ # @param [Number] duration The time interval that the drag should take
72
+ #
73
+ # @return [Array<Boolean>] an array indicating for each view which matched the selector if the value was acceptable or not
74
+ #
75
+ # @raise an expection if no views matched the selector
76
+ # @raise an expection if no views which matched the selector could have their thumbs dragged
77
+ def drag_thumb_in_slider( selector, value, duration )
78
+ touch_successes = frankly_map( selector, "FEX_dragThumbToValue:withDuration:", value, duration)
79
+ raise "Could not find anything matching [#{selector}] to have its thumb dragged" if touch_successes.empty?
80
+ raise "Some views could not had their thumbs dragged (are they even UISLiders?)" if touch_successes.include?(false)
81
+ end
82
+
83
+ # Drag the slider thumb to required value
84
+ #
85
+ # @param [String] selector A view selector
86
+ # @param [Number] value The value up to which the slider should be dragged
87
+ #
88
+ # @return [Array<Boolean>] an array indicating for each view which matched the selector if the value was acceptable or not
89
+ #
90
+ # @raise an expection if no views matched the selector
91
+ # @raise an expection if no views which matched the selector could have their thumbs dragged
92
+ def drag_thumb_in_slider_with_default_duration( selector, value )
93
+ touch_successes = frankly_map( selector, "FEX_dragThumbToValue:", value )
94
+ raise "Could not find anything matching [#{selector}] to have its thumb dragged" if touch_successes.empty?
95
+ raise "Some views could not had their thumbs dragged (are they even UISLiders?)" if touch_successes.include?(false)
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,96 @@
1
+ require 'frank-cucumber/frank_localize'
2
+
3
+ module Frank module Cucumber
4
+
5
+ module HostScripting
6
+
7
+ def start_recording
8
+ %x{osascript<<APPLESCRIPT
9
+ tell application "QuickTime Player"
10
+ set sr to new screen recording
11
+ tell sr to start
12
+ end tell
13
+ APPLESCRIPT}
14
+
15
+ end
16
+
17
+ def stop_recording
18
+ %x{osascript<<APPLESCRIPT
19
+ tell application "QuickTime Player"
20
+ set sr to (document 1)
21
+ tell sr to stop
22
+ end tell
23
+ APPLESCRIPT}
24
+ end
25
+
26
+ def quit_simulator
27
+ %x{osascript<<APPLESCRIPT-
28
+ application id "com.apple.iphonesimulator" quit
29
+ APPLESCRIPT}
30
+ end
31
+
32
+ def quit_double_simulator
33
+ %x{osascript<<APPLESCRIPT
34
+ activate application id "com.apple.iphonesimulator"
35
+ tell application "System Events"
36
+ tell process "#{Localize.t(:iphone_simulator)}"
37
+ if (value of static text 1 of window 1) is "#{Localize.t(:only_one_simulator)}" then
38
+ click button 1 of window 1
39
+ end if
40
+ end tell
41
+ end tell
42
+ }
43
+ end
44
+
45
+ def simulator_reset_data
46
+ %x{osascript<<APPLESCRIPT
47
+ activate application id "com.apple.iphonesimulator"
48
+ tell application "System Events"
49
+ click menu item 5 of menu 1 of menu bar item 2 of menu bar 1 of process "#{Localize.t(:iphone_simulator)}"
50
+ delay 0.5
51
+ click button "#{Localize.t(:iphone_simulator_reset)}" of window 1 of process "#{Localize.t(:iphone_simulator)}"
52
+ end tell
53
+ APPLESCRIPT}
54
+ end
55
+
56
+ #Note this needs to have "Enable access for assistive devices"
57
+ #chcked in the Universal Access system preferences
58
+ def simulator_hardware_menu_press( menu_label )
59
+ %x{osascript<<APPLESCRIPT
60
+ activate application id "com.apple.iphonesimulator"
61
+ tell application "System Events"
62
+ click menu item "#{menu_label}" of menu "#{Localize.t(:hardware)}" of menu bar of process "#{Localize.t(:iphone_simulator)}"
63
+ end tell
64
+ APPLESCRIPT}
65
+ end
66
+
67
+ def press_home_on_simulator
68
+ simulator_hardware_menu_press Localize.t(:home)
69
+ end
70
+
71
+ def rotate_simulator_left
72
+ simulator_hardware_menu_press Localize.t(:rotate_left)
73
+ end
74
+
75
+ def rotate_simulator_right
76
+ simulator_hardware_menu_press Localize.t(:rotate_right)
77
+ end
78
+
79
+ def shake_simulator
80
+ simulator_hardware_menu_press Localize.t(:shake_gesture)
81
+ end
82
+
83
+ def simulate_memory_warning
84
+ simulator_hardware_menu_press Localize.t(:simulate_memory_warning)
85
+ end
86
+
87
+ def toggle_call_status_bar
88
+ simulator_hardware_menu_press Localize.t(:toggle_call_status_bar)
89
+ end
90
+
91
+ def simulate_hardware_keyboard
92
+ simulator_hardware_menu_press Localize.t(:simulate_hardware_keyboard)
93
+ end
94
+ end
95
+
96
+ end end
@@ -0,0 +1,69 @@
1
+ module Frank
2
+ module Cucumber
3
+
4
+ module KeyboardHelper
5
+ # Ask Frank to press a sequence of keys on the iOS keyboard.
6
+ #
7
+ # @note The keyboard must be fully visible on the device before calling this method.
8
+ #
9
+ # The "/b" control character is interpreted as a request to press the 'Delete' key.
10
+ #
11
+ # An implicit return is appended to the key sequence, unless you explicitly specify otherwise by setting the :append_return option to false.
12
+ #
13
+ # @example
14
+ # # press the X, -, Y, and z keys on the
15
+ # # iOS keyboard, then press return
16
+ # type_into_keyboard("X-Yz")
17
+ #
18
+ # # press the 1, 2, and 3 keys on the
19
+ # # iOS keyboard, but don't press return afterwards
20
+ # type_into_keyboard("123", :append_return => false)
21
+ #
22
+ # # press the 1, 2, and 3 keys on the
23
+ # # iOS keyboard, but don't press return afterwards
24
+ # type_into_keyboard("123", :append_return => false)
25
+ #
26
+ # # press Delete twice, then type "foo"
27
+ # type_into_keyboard("\b\bfoo")
28
+ #
29
+ def type_into_keyboard(text_to_type, options = {})
30
+ options = {
31
+ :append_return => true
32
+ }.merge(options)
33
+
34
+ if( options[:append_return] )
35
+ text_to_type = text_to_type+"\n" unless text_to_type.end_with?("\n")
36
+ end
37
+ res = frank_server.send_post(
38
+ 'type_into_keyboard',
39
+ :text_to_type => text_to_type
40
+ )
41
+ Frank::Cucumber::Gateway.evaluate_frankly_response( res, "typing the following into the keyboard '#{text_to_type}'" )
42
+ end
43
+
44
+ # Type a keyboard shortcut (Mac only)
45
+ #
46
+ # This function takes as arguments either a single string, or an array of strings, with
47
+ # each string representing a different key to press. Modifier keys are represented by
48
+ # the strings "command", "shift", "option", and "control".
49
+ #
50
+ # For example, to sent a keyboard shortcut to quit the app, you would call
51
+ #
52
+ # type shortcut "command", "q"
53
+ def type_shortcut(*args)
54
+ if args[0].kind_of?(Array)
55
+ return type_shortcut(*args)
56
+ else
57
+ key = args.pop
58
+
59
+ res = frank_server.send_post(
60
+ 'type_into_keyboard',
61
+ :text_to_type => key,
62
+ :modifiers => args
63
+ )
64
+
65
+ Frank::Cucumber::Gateway.evaluate_frankly_response(res, "typing the following shortcut into the keyboard '#{key}' with modifiers #{args}")
66
+ end
67
+ end
68
+ end
69
+ end end
@@ -0,0 +1,70 @@
1
+ require 'sim_launcher'
2
+ require 'frank-cucumber/app_bundle_locator'
3
+
4
+ module Frank module Cucumber
5
+
6
+ module Launcher
7
+ attr_accessor :application_path, :sdk, :version
8
+
9
+ def simulator_client
10
+ @simulator_client ||= SimLauncher::Client.new(@application_path, @sdk, @version)
11
+ end
12
+
13
+ def simulator_direct_client
14
+ @simulator_direct_client ||= SimLauncher::DirectClient.new(@application_path, @sdk, @version)
15
+ end
16
+
17
+ def enforce(app_path, locator = Frank::Cucumber::AppBundleLocator.new)
18
+ if app_path.nil?
19
+ message = "APP_BUNDLE_PATH is not set. \n\nPlease set APP_BUNDLE_PATH (either an environment variable, or the ruby constant in support/env.rb) to the path of your Frankified target's iOS app bundle."
20
+ possible_app_bundles = locator.guess_possible_app_bundles_for_dir( Dir.pwd )
21
+ if possible_app_bundles && !possible_app_bundles.empty?
22
+ message << "\n\nBased on your current directory, you probably want to use one of the following paths for your APP_BUNDLE_PATH:\n"
23
+ message << possible_app_bundles.join("\n")
24
+ end
25
+ raise "\n\n"+("="*80)+"\n"+message+"\n"+("="*80)+"\n\n"
26
+ end
27
+
28
+ if app_path_problem = SimLauncher.check_app_path(app_path)
29
+ raise "\n\n"+("="*80)+"\n"+app_path_problem+"\n"+("="*80)+"\n\n"
30
+ end
31
+ end
32
+
33
+ def launch_app(app_path, sdk = nil, version = 'iphone')
34
+ @application_path = app_path
35
+ @sdk = sdk
36
+ @version = version
37
+
38
+ enforce(app_path)
39
+
40
+ # kill the app if it's already running, just in case this helps
41
+ # reduce simulator flakiness when relaunching the app. Use a timeout of 5 seconds to
42
+ # prevent us hanging around for ages waiting for the ping to fail if the app isn't running
43
+ begin
44
+ Timeout::timeout(5) { press_home_on_simulator if frankly_ping }
45
+ rescue Timeout::Error
46
+ end
47
+
48
+ if( ENV['USE_SIM_LAUNCHER_SERVER'] )
49
+ simulator = simulator_client
50
+ else
51
+ simulator = simulator_direct_client
52
+ end
53
+
54
+ num_timeouts = 0
55
+ begin
56
+ simulator.relaunch
57
+ wait_for_frank_to_come_up
58
+ rescue Timeout::Error
59
+ num_timeouts += 1
60
+ puts "Encountered #{num_timeouts} timeouts while launching the app."
61
+ if num_timeouts > 3
62
+ raise "Encountered #{num_timeouts} timeouts in a row while trying to launch the app."
63
+ end
64
+ quit_double_simulator
65
+ retry
66
+ end
67
+
68
+ end
69
+ end
70
+ end end
@@ -0,0 +1,104 @@
1
+ en:
2
+ iphone_simulator: iPhone Simulator
3
+ iphone_simulator_reset: Reset
4
+ hardware: Hardware
5
+ home: Home
6
+ rotate_left: Rotate Left
7
+ rotate_right: Rotate Right
8
+ shake_gesture: Shake Gesture
9
+ simulate_memory_warning: Simulate Memory Warning
10
+ toggle_in_call_status_bar: Toggle In-Call Status Bar
11
+ simulate_hardware_keyboard: Simulate Hardware Keyboard
12
+ only_one_simulator: Only one iOS Simulator can run at a time.
13
+
14
+ fr:
15
+ iphone_simulator: Simulateur iOS
16
+ iphone_simulator_reset: Réinitialiser
17
+ hardware: Matériel
18
+ home: Écran d’accueil
19
+ rotate_left: Rotation à gauche
20
+ rotate_right: Rotation à droite
21
+ shake_gesture: Secousse
22
+ simulate_memory_warning: Simuler un avertissement de mémoire
23
+ toggle_in_call_status_bar: Afficher/Masquer la barre d'état d'appel en cour
24
+ simulate_hardware_keyboard: Simuler un clavier matériel
25
+ only_one_simulator: Un seul Simulateur iOS peut être exécuté à la fois.
26
+
27
+ de:
28
+ iphone_simulator: iOS-Simulator
29
+ iphone_simulator_reset: Zurücksetzen
30
+ hardware: Hardware
31
+ home: Home
32
+ rotate_left: Links drehen
33
+ rotate_right: Rechts drehen
34
+ shake_gesture: Schüttelgeste
35
+ simulate_memory_warning: Speicherwarnhinweis simulieren
36
+ toggle_in_call_status_bar: Status für eingeh. Anrufe ein/aus
37
+ simulate_hardware_keyboard: Hardware-Tastatur simulieren
38
+ only_one_simulator: Es kann jeweils nur eine iOS-Simulator-Instanz aktiv sein.
39
+
40
+ ru:
41
+ iphone_simulator: Симулятор iOS
42
+ iphone_simulator_reset: Сбросить
43
+ hardware: Аппаратура
44
+ home: Экран «Домой»
45
+ rotate_left: Повернуть влево
46
+ rotate_right: Повернуть вправо
47
+ shake_gesture: Выполнить жест встряхивания
48
+ simulate_memory_warning: Симулировать предупреждение о нехватке памяти
49
+ toggle_in_call_status_bar: Переключить на строку состояния поступающего вызова
50
+ simulate_hardware_keyboard: Симулировать физическую клавиатуру
51
+ only_one_simulator: Два и более Симуляторов iOS не могут быть запущены одновременно.
52
+
53
+ zh:
54
+ iphone_simulator: iOS 模拟器
55
+ iphone_simulator_reset: 还原
56
+ hardware: 硬件
57
+ home: 首页
58
+ rotate_left: 向左旋转
59
+ rotate_right: 向右旋转
60
+ shake_gesture: 摇动手势
61
+ simulate_memory_warning: 模拟内存警告
62
+ toggle_in_call_status_bar: 切换呼叫状态栏
63
+ simulate_hardware_keyboard: 模拟硬件键盘
64
+ only_one_simulator: 一次只能运行一个“iOS 模拟器”。
65
+
66
+ ja:
67
+ iphone_simulator: iOSシミュレータ
68
+ iphone_simulator_reset: リセット
69
+ hardware: ハードウェア
70
+ home: ホーム
71
+ rotate_left: 反時計回りに回転
72
+ rotate_right: 時計回りに回転
73
+ shake_gesture: シェイクジェスチャー
74
+ simulate_memory_warning: メモリ警告をシミュレート
75
+ toggle_in_call_status_bar: 着信ステータスバーを切り替える
76
+ simulate_hardware_keyboard: ハードウェアキーボードをシミュレート
77
+ only_one_simulator: 実行できるiOSシミュレータは1度に1つのみです。
78
+
79
+ es:
80
+ iphone_simulator: Simulador iOS
81
+ iphone_simulator_reset: Restablecer
82
+ hardware: Hardware
83
+ home: Inicio
84
+ rotate_left: Girar a la izquierda
85
+ rotate_right: Girar a la derecha
86
+ shake_gesture: Agitar
87
+ simulate_memory_warning: Simular aviso de memoria
88
+ toggle_in_call_status_bar: Activar/Desactivar barra de estado durante llamada
89
+ simulate_hardware_keyboard: Simular teclado físico
90
+ only_one_simulator: Sólo se puede ejecutar un Simulador iOS a la vez.
91
+
92
+ it:
93
+ iphone_simulator: Simulatore iOS
94
+ iphone_simulator_reset: Reimposta
95
+ hardware: Hardware
96
+ home: Home
97
+ rotate_left: Ruota a sinistra
98
+ rotate_right: Ruota a destra
99
+ shake_gesture: Gesto Agita
100
+ simulate_memory_warning: Simula avviso memoria
101
+ toggle_in_call_status_bar: Attiva/disattiva barra di state chiamata
102
+ simulate_hardware_keyboard: Simula la tastiera hardware
103
+ only_one_simulator: Solo un Simulatore iOS può essere eseguito in un momento.
104
+
@@ -0,0 +1,20 @@
1
+ module Frank
2
+ module Cucumber
3
+ module LocationHelper
4
+ # Ask Frank to set the location.
5
+ #
6
+ # @example
7
+ # # Set the location to Stockholm
8
+ # set_location(:latitude => 59.338887, :longitude => 18.058425)
9
+ #
10
+ def set_location(options = {})
11
+ res = frank_server.send_post(
12
+ 'location',
13
+ :latitude => options[:latitude],
14
+ :longitude => options[:longitude]
15
+ )
16
+ Frank::Cucumber::Gateway.evaluate_frankly_response( res, "setting the location to #{options[:latitude]}, #{options[:longitude]}" )
17
+ end
18
+ end
19
+ end
20
+ end