frank-cucumber 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/frank-skeleton/frank_static_resources.bundle/js/ersatz_view.js +3 -3
- data/frank-skeleton/frank_static_resources.bundle/js/frank.js +1 -1
- data/frank-skeleton/frankify.xcconfig.tt +1 -1
- data/frank-skeleton/libCocoaAsyncSocket.a +0 -0
- data/frank-skeleton/libCocoaAsyncSocketMac.a +0 -0
- data/frank-skeleton/libCocoaHTTPServer.a +0 -0
- data/frank-skeleton/libCocoaHTTPServerMac.a +0 -0
- data/frank-skeleton/libCocoaLumberjack.a +0 -0
- data/frank-skeleton/libCocoaLumberjackMac.a +0 -0
- data/frank-skeleton/libFrank.a +0 -0
- data/frank-skeleton/libFrankMac.a +0 -0
- data/frank-skeleton/libShelley.a +0 -0
- data/lib/frank-cucumber.rb +0 -1
- data/lib/frank-cucumber/cli.rb +11 -16
- data/lib/frank-cucumber/frank_helper.rb +8 -0
- data/lib/frank-cucumber/frankifier.rb +7 -4
- data/lib/frank-cucumber/host_scripting.rb +27 -21
- data/lib/frank-cucumber/launcher.rb +55 -7
- data/lib/frank-cucumber/localize.yml +9 -1
- data/lib/frank-cucumber/rect.rb +2 -0
- data/lib/frank-cucumber/version.rb +1 -1
- metadata +2 -3
- data/lib/frank-cucumber/mac_launcher.rb +0 -35
@@ -191,11 +191,11 @@
|
|
191
191
|
fill: "#aaff00",
|
192
192
|
opacity: 0.8,
|
193
193
|
stroke: "black",
|
194
|
-
transform: _this.backdropTransformer.push().translate(origin.x, origin.y).descAndPop(),
|
194
|
+
transform: _this.backdropTransformer.push().translate(origin.x * resolution.scale, origin.y * resolution.scale).descAndPop(),
|
195
195
|
x: 0,
|
196
196
|
y: 0,
|
197
|
-
width: size.width,
|
198
|
-
height: size.height
|
197
|
+
width: size.width *resolution.scale,
|
198
|
+
height: size.height * resolution.scale
|
199
199
|
});
|
200
200
|
});
|
201
201
|
}
|
@@ -114,7 +114,7 @@
|
|
114
114
|
fetchDevice: fetchDevice,
|
115
115
|
requestSnapshotRefresh: requestSnapshotRefresh,
|
116
116
|
baseScreenshotUrl: function() {
|
117
|
-
return cacheBust(baseUrlFor('/screenshot'));
|
117
|
+
return cacheBust(baseUrlFor('/screenshot/allwindows/'));
|
118
118
|
},
|
119
119
|
snapshotUrlForViewWithUid: function(uid) {
|
120
120
|
return cacheBust(baseUrlFor("/screenshot/view-snapshot/" + uid));
|
@@ -3,4 +3,4 @@ INSTALL_PATH = /./
|
|
3
3
|
FRANK_CORE_LDFLAGS = -all_load -ObjC -framework CFNetwork -framework Security <%= @libs.map { |lib| "-l#{lib}" }.join(' ') %>
|
4
4
|
FRANK_CORE_MAC_LDFLAGS = -all_load -ObjC -framework CFNetwork -framework Security <%= @libsMac.map { |lib| "-l#{lib}" }.join(' ') %>
|
5
5
|
|
6
|
-
|
6
|
+
GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = FRANKIFIED
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/frank-skeleton/libFrank.a
CHANGED
Binary file
|
Binary file
|
data/frank-skeleton/libShelley.a
CHANGED
Binary file
|
data/lib/frank-cucumber.rb
CHANGED
@@ -3,7 +3,6 @@ require 'frank-cucumber/color_helper'
|
|
3
3
|
require 'frank-cucumber/frank_helper'
|
4
4
|
require 'frank-cucumber/frank_mac_helper'
|
5
5
|
require 'frank-cucumber/launcher'
|
6
|
-
require 'frank-cucumber/mac_launcher'
|
7
6
|
|
8
7
|
World(Frank::Cucumber::ColorHelper)
|
9
8
|
World(Frank::Cucumber::FrankHelper)
|
data/lib/frank-cucumber/cli.rb
CHANGED
@@ -7,12 +7,12 @@ require 'thor'
|
|
7
7
|
require 'frank-cucumber/launcher'
|
8
8
|
require 'frank-cucumber/console'
|
9
9
|
require 'frank-cucumber/frankifier'
|
10
|
-
require 'frank-cucumber/mac_launcher'
|
11
10
|
require 'frank-cucumber/plugins/plugin'
|
12
11
|
|
13
12
|
module Frank
|
14
13
|
class CLI < Thor
|
15
14
|
include Thor::Actions
|
15
|
+
include Frank::Cucumber::Launcher
|
16
16
|
|
17
17
|
def self.source_root
|
18
18
|
File.join( File.dirname(__FILE__), '..','..','frank-skeleton' )
|
@@ -131,7 +131,7 @@ module Frank
|
|
131
131
|
else
|
132
132
|
extra_opts += " -arch #{options['arch']}"
|
133
133
|
|
134
|
-
run %Q|xcodebuild -xcconfig #{xcconfig_file} #{build_steps} #{extra_opts} #{separate_configuration_option} -sdk iphonesimulator DEPLOYMENT_LOCATION=YES DSTROOT="#{build_output_dir}" FRANK_LIBRARY_SEARCH_PATHS="#{frank_lib_search_paths}" #{xcodebuild_args}|
|
134
|
+
run %Q|xcodebuild -xcconfig #{xcconfig_file} #{build_steps} #{extra_opts} #{separate_configuration_option} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO DEPLOYMENT_LOCATION=YES DSTROOT="#{build_output_dir}" FRANK_LIBRARY_SEARCH_PATHS="#{frank_lib_search_paths}" #{xcodebuild_args}|
|
135
135
|
end
|
136
136
|
exit $?.exitstatus if not $?.success?
|
137
137
|
|
@@ -169,11 +169,11 @@ module Frank
|
|
169
169
|
method_option :idiom, :banner => 'iphone|ipad', :type => :string, :default => (ENV['FRANK_SIM_IDIOM'] || 'iphone')
|
170
170
|
def launch
|
171
171
|
$DEBUG = options[:debug]
|
172
|
-
|
172
|
+
version = case options[:idiom].downcase
|
173
173
|
when 'iphone'
|
174
|
-
|
174
|
+
'iphone'
|
175
175
|
when 'ipad'
|
176
|
-
|
176
|
+
'ipad'
|
177
177
|
else
|
178
178
|
say "idiom must be either iphone or ipad. You supplied '#{options[:idiom]}'", :red
|
179
179
|
exit 10
|
@@ -186,14 +186,9 @@ module Frank
|
|
186
186
|
invoke :build
|
187
187
|
end
|
188
188
|
|
189
|
-
|
190
|
-
launcher = Frank::MacLauncher.new( frankified_app_dir )
|
191
|
-
say "LAUNCHING APP..."
|
192
|
-
else
|
193
|
-
say "LAUNCHING IN THE SIMULATOR..."
|
194
|
-
end
|
189
|
+
say "LAUNCHING APP..."
|
195
190
|
|
196
|
-
|
191
|
+
launch_app(frankified_app_dir, nil, version, false)
|
197
192
|
end
|
198
193
|
end
|
199
194
|
|
@@ -205,6 +200,8 @@ module Frank
|
|
205
200
|
end
|
206
201
|
|
207
202
|
desc 'console', "launch a ruby console connected to your Frankified app"
|
203
|
+
method_option :bonjour, :type => :boolean, :default => false, :aliases => :b, :desc => "find Frank via Bonjour."
|
204
|
+
method_option :server, :type => :string, :default => false, :aliases => :s, :desc => "server URL for Frank."
|
208
205
|
def console
|
209
206
|
# TODO: check whether app is running (using ps or similar), and launch it if it's not
|
210
207
|
|
@@ -218,6 +215,8 @@ module Frank
|
|
218
215
|
|
219
216
|
Frank::Cucumber::FrankHelper.use_shelley_from_now_on
|
220
217
|
console = Frank::Console.new
|
218
|
+
Frank::Cucumber::FrankHelper.test_on_physical_device_via_bonjour if options[:bonjour]
|
219
|
+
Frank::Cucumber::FrankHelper.server_base_url = options[:server] if options[:server]
|
221
220
|
if console.check_for_running_app
|
222
221
|
console.pry
|
223
222
|
end
|
@@ -258,10 +257,6 @@ module Frank
|
|
258
257
|
File.expand_path 'Frank/plugins'
|
259
258
|
end
|
260
259
|
|
261
|
-
def built_product_is_mac_app ( app_dir )
|
262
|
-
return File.exists? File.join( app_dir, "Contents", "MacOS" )
|
263
|
-
end
|
264
|
-
|
265
260
|
def fix_frankified_apps_bundle_identifier
|
266
261
|
# as of iOS 6 the iOS Simulator locks up with a black screen if you try and launch an app which has the same
|
267
262
|
# bundle identifier as a previously installed app but which is in fact a different app. This impacts us because our
|
@@ -442,6 +442,14 @@ module FrankHelper
|
|
442
442
|
return frankly_device_name == "mac"
|
443
443
|
end
|
444
444
|
|
445
|
+
# @return [String] the operating system version currently running the application
|
446
|
+
def frankly_os_version
|
447
|
+
res = frank_server.send_get( 'device' )
|
448
|
+
os_version = JSON.parse( res )['os_version']
|
449
|
+
puts "os_version reported as '#{os_version}'" if $DEBUG
|
450
|
+
os_version
|
451
|
+
end
|
452
|
+
|
445
453
|
# Check whether Frank is able to communicate with the application under automation
|
446
454
|
def frankly_ping
|
447
455
|
frank_server.ping
|
@@ -25,12 +25,14 @@ class Frankifier
|
|
25
25
|
check_target_build_configuration_is_valid!
|
26
26
|
|
27
27
|
say ''
|
28
|
-
add_linker_flag
|
28
|
+
project_changed |= add_linker_flag
|
29
29
|
|
30
30
|
say ''
|
31
|
-
add_library_search_path
|
31
|
+
project_changed |= add_library_search_path
|
32
32
|
|
33
|
-
|
33
|
+
if project_changed
|
34
|
+
save_changes
|
35
|
+
end
|
34
36
|
end
|
35
37
|
|
36
38
|
private
|
@@ -99,7 +101,7 @@ class Frankifier
|
|
99
101
|
|
100
102
|
if setting_array.find{ |flag| flag.start_with? "$(FRANK_" }
|
101
103
|
say "It appears that your '#{@target_build_configuration}' configuration's #{build_setting} build setting already include some FRANK setup. Namely: #{setting_array.inspect}. I won't change anything here."
|
102
|
-
return
|
104
|
+
return false
|
103
105
|
end
|
104
106
|
|
105
107
|
say "Adding $(inherited) and $(#{entry_to_add}) to your '#{@target_build_configuration}' configuration's #{build_setting} build setting ..."
|
@@ -109,6 +111,7 @@ class Frankifier
|
|
109
111
|
say "... #{build_setting} is now: #{setting_array.inspect}"
|
110
112
|
|
111
113
|
build_settings_to_edit[build_setting] = setting_array
|
114
|
+
true
|
112
115
|
end
|
113
116
|
|
114
117
|
def check_target_build_configuration_is_valid!
|
@@ -3,7 +3,7 @@ require 'frank-cucumber/frank_localize'
|
|
3
3
|
module Frank module Cucumber
|
4
4
|
|
5
5
|
module HostScripting
|
6
|
-
|
6
|
+
|
7
7
|
def start_recording
|
8
8
|
%x{osascript<<APPLESCRIPT
|
9
9
|
tell application "QuickTime Player"
|
@@ -11,7 +11,7 @@ module HostScripting
|
|
11
11
|
tell sr to start
|
12
12
|
end tell
|
13
13
|
APPLESCRIPT}
|
14
|
-
|
14
|
+
|
15
15
|
end
|
16
16
|
|
17
17
|
def stop_recording
|
@@ -20,20 +20,22 @@ module HostScripting
|
|
20
20
|
set sr to (document 1)
|
21
21
|
tell sr to stop
|
22
22
|
end tell
|
23
|
-
APPLESCRIPT}
|
23
|
+
APPLESCRIPT}
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def quit_simulator
|
27
27
|
%x{osascript<<APPLESCRIPT-
|
28
|
-
application
|
28
|
+
application id "com.apple.iphonesimulator" quit
|
29
29
|
APPLESCRIPT}
|
30
30
|
end
|
31
31
|
|
32
32
|
def quit_double_simulator
|
33
33
|
%x{osascript<<APPLESCRIPT
|
34
|
-
activate application
|
34
|
+
activate application id "com.apple.iphonesimulator"
|
35
35
|
tell application "System Events"
|
36
|
-
|
36
|
+
set process_name_list to name of (application processes where bundle identifier is "com.apple.iphonesimulator")
|
37
|
+
set process_name to first item of process_name_list
|
38
|
+
tell process process_name
|
37
39
|
if (value of static text 1 of window 1) is "#{Localize.t(:only_one_simulator)}" then
|
38
40
|
click button 1 of window 1
|
39
41
|
end if
|
@@ -44,30 +46,34 @@ module HostScripting
|
|
44
46
|
|
45
47
|
def simulator_reset_data
|
46
48
|
%x{osascript<<APPLESCRIPT
|
47
|
-
activate application
|
49
|
+
activate application id "com.apple.iphonesimulator"
|
48
50
|
tell application "System Events"
|
49
|
-
|
51
|
+
set process_name_list to name of (application processes where bundle identifier is "com.apple.iphonesimulator")
|
52
|
+
set process_name to first item of process_name_list
|
53
|
+
click menu item 5 of menu 1 of menu bar item 2 of menu bar 1 of process process_name
|
50
54
|
delay 0.5
|
51
|
-
click button
|
55
|
+
click button "#{Localize.t(:iphone_simulator_reset)}" of window 1 of process process_name
|
52
56
|
end tell
|
53
|
-
APPLESCRIPT}
|
57
|
+
APPLESCRIPT}
|
54
58
|
end
|
55
59
|
|
56
60
|
#Note this needs to have "Enable access for assistive devices"
|
57
61
|
#chcked in the Universal Access system preferences
|
58
62
|
def simulator_hardware_menu_press( menu_label )
|
59
|
-
%x{osascript<<APPLESCRIPT
|
60
|
-
activate application
|
63
|
+
%x{osascript -s o <<APPLESCRIPT
|
64
|
+
activate application id "com.apple.iphonesimulator"
|
61
65
|
tell application "System Events"
|
62
|
-
|
66
|
+
set process_name_list to name of (application processes where bundle identifier is "com.apple.iphonesimulator")
|
67
|
+
set process_name to first item of process_name_list
|
68
|
+
click menu item "#{menu_label}" of menu "#{Localize.t(:hardware)}" of menu bar of process process_name
|
63
69
|
end tell
|
64
|
-
APPLESCRIPT}
|
70
|
+
APPLESCRIPT}
|
65
71
|
end
|
66
|
-
|
72
|
+
|
67
73
|
def press_home_on_simulator
|
68
74
|
simulator_hardware_menu_press Localize.t(:home)
|
69
75
|
end
|
70
|
-
|
76
|
+
|
71
77
|
def rotate_simulator_left
|
72
78
|
simulator_hardware_menu_press Localize.t(:rotate_left)
|
73
79
|
end
|
@@ -79,18 +85,18 @@ end tell
|
|
79
85
|
def shake_simulator
|
80
86
|
simulator_hardware_menu_press Localize.t(:shake_gesture)
|
81
87
|
end
|
82
|
-
|
88
|
+
|
83
89
|
def simulate_memory_warning
|
84
90
|
simulator_hardware_menu_press Localize.t(:simulate_memory_warning)
|
85
91
|
end
|
86
|
-
|
92
|
+
|
87
93
|
def toggle_call_status_bar
|
88
94
|
simulator_hardware_menu_press Localize.t(:toggle_call_status_bar)
|
89
95
|
end
|
90
|
-
|
96
|
+
|
91
97
|
def simulate_hardware_keyboard
|
92
98
|
simulator_hardware_menu_press Localize.t(:simulate_hardware_keyboard)
|
93
99
|
end
|
94
|
-
end
|
100
|
+
end
|
95
101
|
|
96
102
|
end end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
require 'sim_launcher'
|
2
2
|
require 'frank-cucumber/app_bundle_locator'
|
3
|
+
require 'frank-cucumber/frank_helper'
|
3
4
|
|
4
5
|
module Frank module Cucumber
|
5
6
|
|
6
|
-
module Launcher
|
7
|
+
module Launcher
|
8
|
+
include Frank::Cucumber::FrankHelper
|
9
|
+
|
7
10
|
attr_accessor :application_path, :sdk, :version
|
8
11
|
|
9
12
|
def simulator_client
|
@@ -30,19 +33,26 @@ module Launcher
|
|
30
33
|
end
|
31
34
|
end
|
32
35
|
|
33
|
-
def launch_app(app_path, sdk = nil, version = 'iphone')
|
36
|
+
def launch_app(app_path, sdk = nil, version = 'iphone', wait_for_launch = true)
|
34
37
|
@application_path = app_path
|
35
38
|
@sdk = sdk
|
36
39
|
@version = version
|
37
40
|
|
38
|
-
|
41
|
+
if path_is_mac_app(@application_path)
|
42
|
+
launch_mac_app(wait_for_launch)
|
43
|
+
else
|
44
|
+
enforce(app_path)
|
45
|
+
launch_ios_app(wait_for_launch)
|
46
|
+
end
|
47
|
+
end
|
39
48
|
|
40
|
-
|
41
|
-
#
|
49
|
+
def launch_ios_app(wait_for_launch = true)
|
50
|
+
# kill the app if it's already running, just in case this helps
|
51
|
+
# reduce simulator flakiness when relaunching the app. Use a timeout of 5 seconds to
|
42
52
|
# prevent us hanging around for ages waiting for the ping to fail if the app isn't running
|
43
53
|
begin
|
44
54
|
Timeout::timeout(5) { press_home_on_simulator if frankly_ping }
|
45
|
-
rescue Timeout::Error
|
55
|
+
rescue Timeout::Error
|
46
56
|
end
|
47
57
|
|
48
58
|
if( ENV['USE_SIM_LAUNCHER_SERVER'] )
|
@@ -54,7 +64,10 @@ module Launcher
|
|
54
64
|
num_timeouts = 0
|
55
65
|
begin
|
56
66
|
simulator.relaunch
|
57
|
-
|
67
|
+
|
68
|
+
if wait_for_launch
|
69
|
+
wait_for_frank_to_come_up
|
70
|
+
end
|
58
71
|
rescue Timeout::Error
|
59
72
|
num_timeouts += 1
|
60
73
|
puts "Encountered #{num_timeouts} timeouts while launching the app."
|
@@ -66,5 +79,40 @@ module Launcher
|
|
66
79
|
end
|
67
80
|
|
68
81
|
end
|
82
|
+
|
83
|
+
def path_is_mac_app (app_dir)
|
84
|
+
return File.exists? File.join( app_dir, "Contents", "MacOS" )
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
def launch_mac_app(wait_for_launch = true)
|
89
|
+
`open "#{@application_path}"`
|
90
|
+
|
91
|
+
if wait_for_launch
|
92
|
+
wait_for_frank_to_come_up
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def quit_mac_app_if_running
|
97
|
+
pid = `ps -ax | grep "#{@app_path}" | grep -v grep`
|
98
|
+
|
99
|
+
if pid != ""
|
100
|
+
pid = pid.strip.split[0]
|
101
|
+
`kill #{pid}`
|
102
|
+
end
|
103
|
+
|
104
|
+
Timeout::timeout(60) {
|
105
|
+
while pid != ""
|
106
|
+
pid = `ps -ax | grep "#{@app_path}" | grep -v grep`
|
107
|
+
end
|
108
|
+
}
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
def relaunch_mac_app
|
113
|
+
self.quit_if_running
|
114
|
+
self.launch
|
115
|
+
end
|
116
|
+
|
69
117
|
end
|
70
118
|
end end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
en:
|
2
|
-
iphone_simulator:
|
2
|
+
iphone_simulator: iOS Simulator
|
3
|
+
iphone_simulator_reset: Reset
|
3
4
|
hardware: Hardware
|
4
5
|
home: Home
|
5
6
|
rotate_left: Rotate Left
|
@@ -12,6 +13,7 @@ en:
|
|
12
13
|
|
13
14
|
fr:
|
14
15
|
iphone_simulator: Simulateur iOS
|
16
|
+
iphone_simulator_reset: Réinitialiser
|
15
17
|
hardware: Matériel
|
16
18
|
home: Écran d’accueil
|
17
19
|
rotate_left: Rotation à gauche
|
@@ -24,6 +26,7 @@ fr:
|
|
24
26
|
|
25
27
|
de:
|
26
28
|
iphone_simulator: iOS-Simulator
|
29
|
+
iphone_simulator_reset: Zurücksetzen
|
27
30
|
hardware: Hardware
|
28
31
|
home: Home
|
29
32
|
rotate_left: Links drehen
|
@@ -36,6 +39,7 @@ de:
|
|
36
39
|
|
37
40
|
ru:
|
38
41
|
iphone_simulator: Симулятор iOS
|
42
|
+
iphone_simulator_reset: Сбросить
|
39
43
|
hardware: Аппаратура
|
40
44
|
home: Экран «Домой»
|
41
45
|
rotate_left: Повернуть влево
|
@@ -48,6 +52,7 @@ ru:
|
|
48
52
|
|
49
53
|
zh:
|
50
54
|
iphone_simulator: iOS 模拟器
|
55
|
+
iphone_simulator_reset: 还原
|
51
56
|
hardware: 硬件
|
52
57
|
home: 首页
|
53
58
|
rotate_left: 向左旋转
|
@@ -60,6 +65,7 @@ zh:
|
|
60
65
|
|
61
66
|
ja:
|
62
67
|
iphone_simulator: iOSシミュレータ
|
68
|
+
iphone_simulator_reset: リセット
|
63
69
|
hardware: ハードウェア
|
64
70
|
home: ホーム
|
65
71
|
rotate_left: 反時計回りに回転
|
@@ -72,6 +78,7 @@ ja:
|
|
72
78
|
|
73
79
|
es:
|
74
80
|
iphone_simulator: Simulador iOS
|
81
|
+
iphone_simulator_reset: Restablecer
|
75
82
|
hardware: Hardware
|
76
83
|
home: Inicio
|
77
84
|
rotate_left: Girar a la izquierda
|
@@ -84,6 +91,7 @@ es:
|
|
84
91
|
|
85
92
|
it:
|
86
93
|
iphone_simulator: Simulatore iOS
|
94
|
+
iphone_simulator_reset: Reimposta
|
87
95
|
hardware: Hardware
|
88
96
|
home: Home
|
89
97
|
rotate_left: Ruota a sinistra
|
data/lib/frank-cucumber/rect.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frank-cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-11-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: cucumber
|
@@ -269,7 +269,6 @@ files:
|
|
269
269
|
- lib/frank-cucumber/launcher.rb
|
270
270
|
- lib/frank-cucumber/localize.yml
|
271
271
|
- lib/frank-cucumber/location_helper.rb
|
272
|
-
- lib/frank-cucumber/mac_launcher.rb
|
273
272
|
- lib/frank-cucumber/plugins/plugin.rb
|
274
273
|
- lib/frank-cucumber/rect.rb
|
275
274
|
- lib/frank-cucumber/scroll_helper.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require "timeout"
|
2
|
-
|
3
|
-
module Frank
|
4
|
-
class MacLauncher
|
5
|
-
|
6
|
-
def initialize(app_path)
|
7
|
-
@app_path = app_path
|
8
|
-
end
|
9
|
-
|
10
|
-
def launch
|
11
|
-
`open "#{@app_path}"`
|
12
|
-
end
|
13
|
-
|
14
|
-
def quit_if_running
|
15
|
-
pid = `ps -ax | grep "#{@app_path}" | grep -v grep`
|
16
|
-
|
17
|
-
if pid != ""
|
18
|
-
pid = pid.strip.split[0]
|
19
|
-
`kill #{pid}`
|
20
|
-
end
|
21
|
-
|
22
|
-
Timeout::timeout(60) {
|
23
|
-
while pid != ""
|
24
|
-
pid = `ps -ax | grep "#{@app_path}" | grep -v grep`
|
25
|
-
end
|
26
|
-
}
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
def relaunch
|
31
|
-
self.quit_if_running
|
32
|
-
self.launch
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|