sc-frank-cucumber 1.2.1.00af28c

Sign up to get free protection for your applications and to get access to all the features.
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