calabash-cucumber 0.9.19 → 0.9.20
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/bin/calabash-ios +3 -0
- data/bin/calabash-ios-helpers.rb +2 -0
- data/bin/calabash-ios-setup.rb +157 -11
- data/doc/calabash-ios-help.txt +8 -0
- data/features-skeleton/support/launch.rb +1 -1
- data/lib/calabash-cucumber/version.rb +1 -1
- metadata +15 -15
data/bin/calabash-ios
CHANGED
data/bin/calabash-ios-helpers.rb
CHANGED
@@ -15,6 +15,8 @@ def print_usage
|
|
15
15
|
generate a features folder structure.
|
16
16
|
setup (EXPERIMENTAL)
|
17
17
|
setup your XCode project for calabash-ios)
|
18
|
+
check (EXPERIMENTAL)
|
19
|
+
check whether an app or ipa is linked with calabash.framework
|
18
20
|
sim locale [lang] [regional]?
|
19
21
|
change locale and regional settings in all iOS Simulators
|
20
22
|
sim reset
|
data/bin/calabash-ios-setup.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "calabash-cucumber/version"
|
2
|
+
|
1
3
|
def dup_scheme(project_name, pbx_dir)
|
2
4
|
|
3
5
|
userdata_dirs = Dir.foreach("#{pbx_dir}/xcuserdata").find_all { |x|
|
@@ -32,9 +34,19 @@ def dup_scheme(project_name, pbx_dir)
|
|
32
34
|
puts "Duplicating scheme #{project_name}.xcscheme as #{project_name}-cal.xcscheme"
|
33
35
|
|
34
36
|
doc = REXML::Document.new(File.new("#{pbx_dir}/xcuserdata/#{userdata_dir}/xcschemes/#{scheme}"))
|
37
|
+
|
35
38
|
doc.elements.each("Scheme/LaunchAction") do |la|
|
36
39
|
la.attributes["buildConfiguration"] = "Calabash"
|
37
40
|
end
|
41
|
+
doc.elements.each("Scheme/ArchiveAction") do |la|
|
42
|
+
la.attributes["buildConfiguration"] = "Calabash"
|
43
|
+
end
|
44
|
+
doc.elements.each("Scheme/AnalyzeAction") do |la|
|
45
|
+
la.attributes["buildConfiguration"] = "Calabash"
|
46
|
+
end
|
47
|
+
doc.elements.each("Scheme/ProfileAction") do |la|
|
48
|
+
la.attributes["buildConfiguration"] = "Calabash"
|
49
|
+
end
|
38
50
|
doc.write(File.open("#{pbx_dir}/xcuserdata/#{userdata_dir}/xcschemes/#{project_name}-cal.xcscheme", "w"))
|
39
51
|
end
|
40
52
|
end
|
@@ -57,7 +69,7 @@ def calabash_setup(args)
|
|
57
69
|
puts "Please validate by running the #{project_name}-cal scheme"
|
58
70
|
puts "from Xcode."
|
59
71
|
puts "When starting the iOS Simulator using the"
|
60
|
-
puts "new scheme: #{project_name}-cal, you should see:\n"
|
72
|
+
puts "new scheme: #{project_name}-cal, you should see:\n\n"
|
61
73
|
puts ' "Started LPHTTP server on port 37265"'
|
62
74
|
puts "\nin the application log in Xcode."
|
63
75
|
puts "\n\n"
|
@@ -142,16 +154,14 @@ def setup_project(project_name, project_path, path)
|
|
142
154
|
##Download calabash.framework
|
143
155
|
if not Dir.exists?(File.join(project_path, file))
|
144
156
|
msg("Info") do
|
145
|
-
zip_file =
|
146
|
-
puts "Did not find calabash.framework. I'll download
|
147
|
-
puts "
|
157
|
+
zip_file = "calabash.framework-#{Calabash::Cucumber::VERSION}.zip"
|
158
|
+
puts "Did not find calabash.framework. I'll download it...'"
|
159
|
+
puts "http://cloud.github.com/downloads/calabash/calabash-ios/#{zip_file}"
|
148
160
|
require 'uri'
|
149
|
-
require 'net/https'
|
150
161
|
|
151
|
-
uri = URI.parse "
|
162
|
+
uri = URI.parse "http://cloud.github.com/downloads/calabash/calabash-ios/#{zip_file}"
|
152
163
|
|
153
|
-
Net::HTTP.start(uri.host, uri.port
|
154
|
-
:use_ssl => uri.scheme == 'https') do |http|
|
164
|
+
Net::HTTP.start(uri.host, uri.port) do |http|
|
155
165
|
request = Net::HTTP::Get.new uri.request_uri
|
156
166
|
|
157
167
|
http.request request do |response|
|
@@ -211,7 +221,7 @@ def setup_project(project_name, project_path, path)
|
|
211
221
|
pbx.sections['PBXFrameworksBuildPhase'][0].files << build_phase_entry
|
212
222
|
|
213
223
|
|
214
|
-
|
224
|
+
|
215
225
|
cfnet = pbx.find_item :name => "CFNetwork.framework", :type => PBXProject::PBXTypes::PBXFileReference
|
216
226
|
|
217
227
|
unless cfnet
|
@@ -285,6 +295,26 @@ def setup_project(project_name, project_path, path)
|
|
285
295
|
|
286
296
|
|
287
297
|
ld_flags = cal_build_settings['OTHER_LDFLAGS'] || []
|
298
|
+
|
299
|
+
if not ld_flags.is_a?Array
|
300
|
+
ld_flags = [ld_flags]
|
301
|
+
end
|
302
|
+
danger = ld_flags.find_all {|f| /-ObjC/i.match(f.value) || /-all_load/i.match(f.value)}
|
303
|
+
|
304
|
+
if not danger.empty?
|
305
|
+
msg("Error") do
|
306
|
+
puts "Detected Other Linker Flag: #{(danger.map {|d| d.value}).join(", ")}"
|
307
|
+
puts "calabash-ios setup does not yet support this scenario"
|
308
|
+
puts "(why? karl@lesspainful.com)"
|
309
|
+
puts "You must manually setup ios see:"
|
310
|
+
puts "https://github.com/calabash/calabash-ios"
|
311
|
+
end
|
312
|
+
exit 1
|
313
|
+
end
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
|
288
318
|
ld_flags << PBXProject::PBXTypes::BasicValue.new(:value => '"-force_load"')
|
289
319
|
ld_flags << PBXProject::PBXTypes::BasicValue.new(:value => '"$(SRCROOT)/calabash.framework/calabash"')
|
290
320
|
ld_flags << PBXProject::PBXTypes::BasicValue.new(:value => '"-lstdc++"')
|
@@ -314,8 +344,7 @@ def setup_project(project_name, project_path, path)
|
|
314
344
|
sp = [sp]
|
315
345
|
end
|
316
346
|
inherit = sp.find { |x| x.value == '"$(inherited)"' }
|
317
|
-
srcroot = sp.find { |x|
|
318
|
-
p srcroot
|
347
|
+
srcroot = sp.find { |x| x.value == "\"$(SRCROOT)\""}
|
319
348
|
sp << PBXProject::PBXTypes::BasicValue.new(:value => '"$(inherited)"') unless inherit
|
320
349
|
sp << PBXProject::PBXTypes::BasicValue.new(:value => "\"$(SRCROOT)\"") unless srcroot
|
321
350
|
bc.buildSettings["FRAMEWORK_SEARCH_PATHS"] = sp
|
@@ -326,3 +355,120 @@ def setup_project(project_name, project_path, path)
|
|
326
355
|
end
|
327
356
|
|
328
357
|
|
358
|
+
|
359
|
+
require 'calabash-cucumber/launch/simulator_helper'
|
360
|
+
def validate_setup(args)
|
361
|
+
if args.length > 0
|
362
|
+
if args[0].end_with?(".ipa")
|
363
|
+
validate_ipa(args[0])
|
364
|
+
elsif args[0].end_with?(".app")
|
365
|
+
validate_app(args[0])
|
366
|
+
end
|
367
|
+
else
|
368
|
+
dd_dir = Calabash::Cucumber::SimulatorHelper.derived_data_dir_for_project
|
369
|
+
if not dd_dir
|
370
|
+
puts "Unable to find iOS project."
|
371
|
+
puts "You should run this command from an iOS project directory."
|
372
|
+
exit 1
|
373
|
+
end
|
374
|
+
app_bundles = Dir.glob(File.join(dd_dir, "Build", "Products", "*", "*.app"))
|
375
|
+
sim_dirs = Dir.glob(File.join(dd_dir, "Build", "Products", "Debug-iphonesimulator", "*.app"))
|
376
|
+
sim_dirs = sim_dirs.concat(Dir.glob(File.join(dd_dir, "Build", "Products", "Calabash-iphonesimulator", "*.app")))
|
377
|
+
if sim_dirs.empty?
|
378
|
+
msg = ["Have you built your app for simulator?"]
|
379
|
+
msg << "You should build the -cal scheme and your normal scheme"
|
380
|
+
msg << "(with configuration Debug)."
|
381
|
+
msg << "Searched dir: #{dd_dir}/Build/Products"
|
382
|
+
msg("Error") do
|
383
|
+
puts msg.join("\n")
|
384
|
+
end
|
385
|
+
exit 1
|
386
|
+
elsif sim_dirs.count != 2
|
387
|
+
msg = ["Have you built your app for simulator?"]
|
388
|
+
msg << "You should build the -cal scheme and your normal scheme"
|
389
|
+
msg << "(with configuration Debug)."
|
390
|
+
msg << "Searched dir: #{dd_dir}/Build/Products"
|
391
|
+
msg("Error") do
|
392
|
+
puts msg.join("\n")
|
393
|
+
end
|
394
|
+
exit 1
|
395
|
+
end
|
396
|
+
out_debug = `otool #{sim_dirs[0]}/* -o 2> /dev/null | grep CalabashServer`
|
397
|
+
out_cal = `otool #{sim_dirs[1]}/* -o 2> /dev/null | grep CalabashServer 2> /dev/null`
|
398
|
+
ok = (not /CalabashServer/.match(out_debug)) and /CalabashServer/.match(out_cal)
|
399
|
+
if ok
|
400
|
+
msg("OK") do
|
401
|
+
puts "Your configuration seems ok."
|
402
|
+
puts "app in directory:"
|
403
|
+
puts sim_dirs[0]
|
404
|
+
puts "does not have calabash.framework linked in."
|
405
|
+
puts "directory:"
|
406
|
+
puts sim_dirs[1]
|
407
|
+
puts "does."
|
408
|
+
end
|
409
|
+
else
|
410
|
+
msg("Fail") do
|
411
|
+
puts "Your configuration looks bad."
|
412
|
+
if (not /CalabashServer/.match(out_debug))
|
413
|
+
puts "WARNING: You Debug build seems to be linking with Calabash."
|
414
|
+
puts "You should restore your xcodeproject file from backup."
|
415
|
+
else
|
416
|
+
puts "app in directory"
|
417
|
+
puts sim_dirs[1]
|
418
|
+
puts "does not have calabash.framework linked in."
|
419
|
+
end
|
420
|
+
end
|
421
|
+
end
|
422
|
+
end
|
423
|
+
|
424
|
+
|
425
|
+
end
|
426
|
+
|
427
|
+
def validate_ipa(ipa)
|
428
|
+
require 'tmpdir'
|
429
|
+
fail = false
|
430
|
+
Dir.mktmpdir do |dir|
|
431
|
+
if not system("unzip -C -K -o -q -d #{dir} #{ipa}")
|
432
|
+
msg("Error") do
|
433
|
+
puts "Unable to unzip ipa: #{ipa}"
|
434
|
+
end
|
435
|
+
Dir
|
436
|
+
fail = true
|
437
|
+
end
|
438
|
+
|
439
|
+
app_dir = Dir.foreach("#{dir}/Payload").find {|d| /\.app$/.match(d)}
|
440
|
+
app = app_dir.split(".")[0]
|
441
|
+
res = `otool #{dir}/Payload/#{app_dir}/#{app} -o 2> /dev/null | grep CalabashServer`
|
442
|
+
msg("Info") do
|
443
|
+
if /CalabashServer/.match(res)
|
444
|
+
puts "Ipa: #{ipa} *contains* calabash.framework"
|
445
|
+
else
|
446
|
+
puts "Ipa: #{ipa} *does not contain* calabash.framework"
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
end
|
451
|
+
if fail
|
452
|
+
exit(1)
|
453
|
+
end
|
454
|
+
|
455
|
+
end
|
456
|
+
|
457
|
+
def validate_app(app)
|
458
|
+
if not Dir.exists?app
|
459
|
+
msg("Error") do
|
460
|
+
puts "Path: #{app} is not a directory."
|
461
|
+
end
|
462
|
+
exit 1
|
463
|
+
end
|
464
|
+
out = `otool #{app}/* -o 2> /dev/null | grep CalabashServer`
|
465
|
+
|
466
|
+
msg("Info") do
|
467
|
+
if /CalabashServer/.match(out)
|
468
|
+
puts "App: #{app} *contains* calabash.framework"
|
469
|
+
else
|
470
|
+
puts "App: #{app} *does not contain* calabash.framework"
|
471
|
+
end
|
472
|
+
end
|
473
|
+
|
474
|
+
end
|
data/doc/calabash-ios-help.txt
CHANGED
@@ -33,6 +33,14 @@ Usage: calabash-ios <command-name> [parameters]
|
|
33
33
|
If something goes wrong. Close Xcode and copy project.pbxproj.bak
|
34
34
|
to project.pbxproj inside your .xcodeproj folder.
|
35
35
|
|
36
|
+
check (EXPERIMENTAL) [.app or .ipa]?
|
37
|
+
check whether an app or ipa is linked with calabash.framework
|
38
|
+
if called without parameter [.app or .ipa] then pwd should be
|
39
|
+
a directory containing an xcodeproj. In this case we'll check
|
40
|
+
the default Xcode simulator build path for a Debug and Calabash
|
41
|
+
build configurations. We check that Debug doesn't link with
|
42
|
+
calabash.framework but Calabash does.
|
43
|
+
|
36
44
|
sim locale [lang] [regional]? Changes the regional settings
|
37
45
|
for the iOS Simulators. You must ensure the correct format
|
38
46
|
for the optional regional parameter, for example,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calabash-cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.20
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-03-01 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|
16
|
-
requirement: &
|
16
|
+
requirement: &70182882346360 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70182882346360
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70182882345940 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70182882345940
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: CFPropertyList
|
38
|
-
requirement: &
|
38
|
+
requirement: &70182882345520 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70182882345520
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sim_launcher
|
49
|
-
requirement: &
|
49
|
+
requirement: &70182882345080 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70182882345080
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: slowhandcuke
|
60
|
-
requirement: &
|
60
|
+
requirement: &70182882344640 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70182882344640
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: net-http-persistent
|
71
|
-
requirement: &
|
71
|
+
requirement: &70182882344220 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70182882344220
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: pbxproject
|
82
|
-
requirement: &
|
82
|
+
requirement: &70182882343800 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70182882343800
|
91
91
|
description: calabash-cucumber drives tests for native iOS apps. You must link your
|
92
92
|
app with calabash-ios-server framework to execute tests.
|
93
93
|
email:
|