motion-calabash 0.9.127 → 0.9.136
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.
- data/lib/framework/libcalabashuni-0.9.136.a +0 -0
- data/lib/motion/project/calabash.rb +56 -22
- data/motion-calabash.gemspec +4 -4
- data/scripts/launch.rb +171 -0
- metadata +8 -6
- data/lib/framework/libcalabashuni-0.9.126.a +0 -0
Binary file
|
@@ -34,13 +34,13 @@ namespace 'calabash' do
|
|
34
34
|
|
35
35
|
# Retrieve optional Calabash args.
|
36
36
|
def gather_calabash_env
|
37
|
-
|
37
|
+
sdk = ENV['target'] || ENV['sdk'] || ENV['SDK_VERSION'] || "6.1" #Calabash env vars
|
38
38
|
major = sdk[0]
|
39
39
|
os = ENV['os'] || ENV['OS']
|
40
40
|
if os.nil?
|
41
41
|
os = "ios#{major}"
|
42
42
|
end
|
43
|
-
device = ENV['device'] || ENV['DEVICE'] || 'iphone' #Calabash env vars
|
43
|
+
device = ENV['device_family'] || ENV['device'] || ENV['DEVICE'] || 'iphone' #Calabash env vars
|
44
44
|
{"SDK_VERSION" => sdk, "OS" => os, "DEVICE" => device}
|
45
45
|
end
|
46
46
|
|
@@ -49,33 +49,46 @@ namespace 'calabash' do
|
|
49
49
|
# Retrieve optional args to pass to cucumber.
|
50
50
|
args = ENV["args"] || ""
|
51
51
|
|
52
|
+
ENV['DEVICE_ENDPOINT'] ||= 'http://localhost:37265/'
|
53
|
+
|
54
|
+
target = ARGV[1] || 'simulator'
|
55
|
+
|
56
|
+
|
57
|
+
project_config_vars = Motion::Project::App.config.variables
|
58
|
+
|
59
|
+
bundle_id = project_config_vars["identifier"]
|
60
|
+
|
52
61
|
calabash_env = gather_calabash_env
|
53
62
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
calabash_env['DEVICE_TARGET'] = target
|
64
|
+
calabash_env['BUNDLE_ID'] = bundle_id
|
65
|
+
|
66
|
+
unless target == 'device'
|
67
|
+
# Retrieve optional bundle path.
|
68
|
+
bundle_path = ENV['APP_BUNDLE_PATH']
|
69
|
+
unless bundle_path
|
70
|
+
build = "build"
|
71
|
+
unless File.exist?(build)
|
72
|
+
App.fail "No dir found: #{build}. Please build app first."
|
73
|
+
end
|
74
|
+
sim_dir = Dir.glob("#{build}/*").find {|d| /Simulator-/.match(d)}
|
75
|
+
unless sim_dir and File.directory?(sim_dir)
|
76
|
+
App.fail "No Simulator dir found in #{build}. Please build app for simulator first."
|
77
|
+
end
|
78
|
+
app = Dir.glob("#{sim_dir}/*").find {|d| /\.app$/.match(d)}
|
79
|
+
unless app and File.exist?(app)
|
80
|
+
App.fail "No .app found in #{sim_dir}. Please build app for simulator first."
|
81
|
+
end
|
82
|
+
bundle_path = File.expand_path("#{app}")
|
68
83
|
end
|
69
|
-
bundle_path
|
84
|
+
App.fail "No app found in #{bundle_path} (APP_BUNDLE_PATH)" unless File.exist?(bundle_path)
|
85
|
+
calabash_env["APP_BUNDLE_PATH"] = bundle_path
|
70
86
|
end
|
71
87
|
|
72
|
-
App.fail "No app found in #{bundle_path} (APP_BUNDLE_PATH)" unless File.exist?(bundle_path)
|
73
|
-
|
74
|
-
calabash_env["APP_BUNDLE_PATH"] = "\"#{bundle_path}\""
|
75
88
|
|
76
89
|
App.info 'Run', "#{calabash_env} cucumber #{args}"
|
77
|
-
|
78
|
-
|
90
|
+
|
91
|
+
exec(calabash_env,"cucumber", *(args.split(' ')))
|
79
92
|
end
|
80
93
|
|
81
94
|
desc "Start Calabash console."
|
@@ -88,5 +101,26 @@ namespace 'calabash' do
|
|
88
101
|
exec(calabash_env,"calabash-ios","console")
|
89
102
|
end
|
90
103
|
|
104
|
+
desc "Scaffold Calabash features folder."
|
105
|
+
task :scaffold do
|
106
|
+
# Retrieve configuration settings.
|
107
|
+
calabash_env = gather_calabash_env
|
108
|
+
cmd = '(echo "" | calabash-ios gen) &> /dev/null'
|
109
|
+
App.info 'Run', "Scaffolding features"
|
110
|
+
App.info 'Info', "Run rake calabash:run to try"
|
111
|
+
|
112
|
+
env_str = calabash_env.map {|envname, envval| "export #{envname}=#{envval};"}.join(" ")
|
113
|
+
system("(#{env_str}) && #{cmd}")
|
114
|
+
|
115
|
+
|
116
|
+
this_path = File.expand_path(__FILE__)
|
117
|
+
launch_path = File.join(this_path,'..','..','..','..','scripts','launch.rb')
|
118
|
+
launch_path = File.expand_path(launch_path)
|
119
|
+
puts "Copy launch file #{launch_path} to features/support/launch.rb"
|
120
|
+
FileUtils.cp(launch_path,File.join('features','support','launch.rb'))
|
121
|
+
|
122
|
+
|
123
|
+
end
|
124
|
+
|
91
125
|
end
|
92
126
|
|
data/motion-calabash.gemspec
CHANGED
@@ -7,12 +7,12 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.author = 'Karl Krukow'
|
8
8
|
s.email = 'karl@lesspainful.com'
|
9
9
|
s.homepage = 'http://www.lesspainful.com'
|
10
|
-
s.version = '0.9.
|
10
|
+
s.version = '0.9.136'
|
11
11
|
s.summary = %q{Calabash support for RubyMotion}
|
12
|
-
s.description = %q{This
|
13
|
-
s.files = ["lib/framework/libcalabashuni-0.9.
|
12
|
+
s.description = %q{This linkes-in calabash for iOS}
|
13
|
+
s.files = ["lib/framework/libcalabashuni-0.9.136.a"].concat(`git ls-files`.split("\n"))
|
14
14
|
s.require_paths = ["lib"]
|
15
15
|
|
16
|
-
s.add_dependency("calabash-cucumber", "0.9.
|
16
|
+
s.add_dependency("calabash-cucumber", "0.9.136")
|
17
17
|
|
18
18
|
end
|
data/scripts/launch.rb
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
########################################
|
2
|
+
# #
|
3
|
+
# Important Note #
|
4
|
+
# #
|
5
|
+
# When running calabash-ios tests at #
|
6
|
+
# www.lesspainful.com #
|
7
|
+
# this file will be overwritten by #
|
8
|
+
# a file which automates #
|
9
|
+
# app launch on devices. #
|
10
|
+
# #
|
11
|
+
# Don't rely on this file being #
|
12
|
+
# present when running at #
|
13
|
+
# www.lesspainful.com. #
|
14
|
+
# #
|
15
|
+
# Only put stuff here to automate #
|
16
|
+
# iOS Simulator. #
|
17
|
+
# #
|
18
|
+
# You can put your app bundle path #
|
19
|
+
# for automating simulator app start: #
|
20
|
+
# Uncomment APP_BUNDLE_PATH =.. #
|
21
|
+
# #
|
22
|
+
########################################
|
23
|
+
|
24
|
+
require 'calabash-cucumber/launch/simulator_helper'
|
25
|
+
require 'sim_launcher'
|
26
|
+
require 'run_loop'
|
27
|
+
|
28
|
+
# Uncomment and replace ?? appropriately
|
29
|
+
# This should point to your Simulator build
|
30
|
+
# which includes calabash framework
|
31
|
+
# this is usually the Calabash build configuration
|
32
|
+
# of your production target.
|
33
|
+
#APP_BUNDLE_PATH = "~/Library/Developer/Xcode/DerivedData/??/Build/Products/Calabash-iphonesimulator/??.app"
|
34
|
+
#
|
35
|
+
|
36
|
+
|
37
|
+
def calabash_no_stop?
|
38
|
+
ENV['NO_LAUNCH']=="1" or ENV['NO_STOP']=="1"
|
39
|
+
end
|
40
|
+
|
41
|
+
def device_target?
|
42
|
+
ENV['DEVICE_TARGET'] == 'device'
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
class MotionLauncherTimeoutErr < Timeout::Error
|
47
|
+
end
|
48
|
+
|
49
|
+
class MotionLauncher
|
50
|
+
attr_accessor :run_loop
|
51
|
+
|
52
|
+
def reset_app_jail(sdk, app_path)
|
53
|
+
return if device_target?
|
54
|
+
|
55
|
+
app = File.basename(app_path)
|
56
|
+
bundle = `find "#{ENV['HOME']}/Library/Application Support/iPhone Simulator/#{sdk}/Applications/" -type d -depth 2 -name "#{app}" | head -n 1`
|
57
|
+
return if bundle.empty? # Assuming we're already clean
|
58
|
+
|
59
|
+
sandbox = File.dirname(bundle)
|
60
|
+
['Library', 'Documents', 'tmp'].each do |dir|
|
61
|
+
FileUtils.rm_rf(File.join(sandbox, dir))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def relaunch(args=nil)
|
66
|
+
if run_loop
|
67
|
+
RunLoop.stop(run_loop)
|
68
|
+
end
|
69
|
+
if device_target?
|
70
|
+
self.run_loop = RunLoop.run(:app => ENV['BUNDLE_ID'])
|
71
|
+
ensure_connectivity
|
72
|
+
else
|
73
|
+
sdk = ENV['SDK_VERSION'] || SimLauncher::SdkDetector.new().latest_sdk_version
|
74
|
+
path = Calabash::Cucumber::SimulatorHelper.app_bundle_or_raise(app_path)
|
75
|
+
if ENV['RESET_BETWEEN_SCENARIOS']=="1"
|
76
|
+
reset_app_jail(sdk, path)
|
77
|
+
end
|
78
|
+
Calabash::Cucumber::SimulatorHelper.relaunch(path, sdk, ENV['DEVICE'] || 'iphone', args)
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
def ensure_connectivity
|
84
|
+
begin
|
85
|
+
max_retry_count = (ENV['MAX_CONNECT_RETRY'] || 10).to_i
|
86
|
+
timeout = (ENV['CONNECT_TIMEOUT'] || 30).to_i
|
87
|
+
retry_count = 0
|
88
|
+
connected = false
|
89
|
+
puts "Waiting for App to be ready"
|
90
|
+
until connected do
|
91
|
+
raise "MAX_RETRIES" if retry_count == max_retry_count
|
92
|
+
retry_count += 1
|
93
|
+
begin
|
94
|
+
Timeout::timeout(timeout, MotionLauncherTimeoutErr) do
|
95
|
+
until connected
|
96
|
+
begin
|
97
|
+
connected = (ping_app == '200')
|
98
|
+
break if connected
|
99
|
+
rescue Exception => e
|
100
|
+
#p e
|
101
|
+
#retry
|
102
|
+
ensure
|
103
|
+
sleep 1 unless connected
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
rescue MotionLauncherTimeoutErr => e
|
108
|
+
puts "Timed out...Retry.."
|
109
|
+
end
|
110
|
+
end
|
111
|
+
rescue e
|
112
|
+
p e
|
113
|
+
msg = "Unable to make connection to Calabash Server at #{ENV['DEVICE_ENDPOINT']|| "http://localhost:37265/"}\n"
|
114
|
+
msg << "Make sure you don't have a firewall blocking traffic to #{ENV['DEVICE_ENDPOINT']|| "http://localhost:37265/"}.\n"
|
115
|
+
raise msg
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def ping_app
|
120
|
+
url = URI.parse(ENV['DEVICE_ENDPOINT']|| "http://localhost:37265/")
|
121
|
+
|
122
|
+
http = Net::HTTP.new(url.host, url.port)
|
123
|
+
res = http.start do |sess|
|
124
|
+
sess.request Net::HTTP::Get.new "version"
|
125
|
+
end
|
126
|
+
status = res.code
|
127
|
+
begin
|
128
|
+
http.finish if http and http.started?
|
129
|
+
rescue Exception => e
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
status
|
134
|
+
end
|
135
|
+
|
136
|
+
def stop
|
137
|
+
RunLoop.stop(run_loop)
|
138
|
+
end
|
139
|
+
|
140
|
+
def app_path
|
141
|
+
ENV['APP_BUNDLE_PATH'] || (defined?(APP_BUNDLE_PATH) && APP_BUNDLE_PATH)
|
142
|
+
end
|
143
|
+
|
144
|
+
def calabash_notify(world)
|
145
|
+
if world.respond_to?(:on_launch)
|
146
|
+
world.on_launch
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
AfterConfiguration do
|
154
|
+
system("rake device") if device_target?
|
155
|
+
end
|
156
|
+
|
157
|
+
Before do |scenario|
|
158
|
+
@launcher = MotionLauncher.new
|
159
|
+
@launcher.relaunch
|
160
|
+
@launcher.calabash_notify(self)
|
161
|
+
end
|
162
|
+
|
163
|
+
After do |scenario|
|
164
|
+
unless calabash_no_stop?
|
165
|
+
if device_target?
|
166
|
+
@launcher.stop
|
167
|
+
else
|
168
|
+
Calabash::Cucumber::SimulatorHelper.stop
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-calabash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.136
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: calabash-cucumber
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.9.
|
21
|
+
version: 0.9.136
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,14 +26,14 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.9.
|
30
|
-
description: This
|
29
|
+
version: 0.9.136
|
30
|
+
description: This linkes-in calabash for iOS
|
31
31
|
email: karl@lesspainful.com
|
32
32
|
executables: []
|
33
33
|
extensions: []
|
34
34
|
extra_rdoc_files: []
|
35
35
|
files:
|
36
|
-
- lib/framework/libcalabashuni-0.9.
|
36
|
+
- lib/framework/libcalabashuni-0.9.136.a
|
37
37
|
- .gitignore
|
38
38
|
- LICENSE
|
39
39
|
- README.rdoc
|
@@ -41,6 +41,7 @@ files:
|
|
41
41
|
- lib/motion-calabash.rb
|
42
42
|
- lib/motion/project/calabash.rb
|
43
43
|
- motion-calabash.gemspec
|
44
|
+
- scripts/launch.rb
|
44
45
|
homepage: http://www.lesspainful.com
|
45
46
|
licenses: []
|
46
47
|
post_install_message:
|
@@ -66,3 +67,4 @@ signing_key:
|
|
66
67
|
specification_version: 3
|
67
68
|
summary: Calabash support for RubyMotion
|
68
69
|
test_files: []
|
70
|
+
has_rdoc:
|
Binary file
|