xctasks 0.4.1 → 0.5.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/xctasks/test_task.rb +18 -10
- data/lib/xctasks/version.rb +1 -1
- data/spec/test_task_spec.rb +75 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8def5c8a26145c94427549a366caab5948f7b9ea
|
4
|
+
data.tar.gz: 2c7b17dbe330e73a1dd968fd2849bf20007a19fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14f9d086b5cd23e8f9d1c9860b805e88fdd8775d1ece4276a76cb8c8e226a70d0e5a9b7cf9b7b41cbb285ac7780f672b8b04946eaac705b5503454815103d876
|
7
|
+
data.tar.gz: 9c04c2b49bdf955958b479c8ea1f9b732963c1016d28180508254a38c01263aca0f80bc1a7f71534d3ac3b33c9c3444aa9b9e427897b753090b078fe419ec977
|
data/CHANGELOG.md
CHANGED
data/lib/xctasks/test_task.rb
CHANGED
@@ -100,7 +100,8 @@ module XCTasks
|
|
100
100
|
class Configuration
|
101
101
|
SETTINGS = [:workspace, :schemes_dir, :sdk, :runner, :xctool_path,
|
102
102
|
:xcodebuild_path, :settings, :destinations, :actions,
|
103
|
-
:scheme, :ios_versions, :output_log, :env, :redirect_stderr
|
103
|
+
:scheme, :ios_versions, :output_log, :env, :redirect_stderr,
|
104
|
+
:project]
|
104
105
|
HELPERS = [:destination, :xctool?, :xcpretty?, :xcodebuild?]
|
105
106
|
|
106
107
|
# Configures delegations to pass through configuration accessor when extended
|
@@ -235,19 +236,21 @@ module XCTasks
|
|
235
236
|
end
|
236
237
|
|
237
238
|
def run_tests(options = {})
|
238
|
-
ios_version = options[:ios_version]
|
239
|
+
ios_version = options[:ios_version]
|
239
240
|
XCTasks::Command.run(%q{killall "iPhone Simulator"}, false) if sdk == :iphonesimulator
|
240
241
|
|
242
|
+
target = workspace ? "-workspace #{workspace}" : "-project #{project}"
|
243
|
+
|
241
244
|
output_log_command = output_log ? "| tee -a #{output_log}" : nil
|
242
245
|
redirect_suffix = redirect_stderr ? "2> #{redirect_stderr}" : nil
|
243
246
|
success = if xctool?
|
244
247
|
actions_arg << " -freshSimulator" if ios_version
|
245
|
-
Command.run(["#{xctool_path}
|
248
|
+
Command.run(["#{xctool_path} #{target} -scheme '#{scheme}' -sdk #{sdk}#{ios_version}", destination_arg, actions_arg, settings_arg, redirect_suffix, output_log_command].grep(String).join(' '))
|
246
249
|
elsif xcodebuild?
|
247
|
-
Command.run(["#{xcodebuild_path}
|
250
|
+
Command.run(["#{xcodebuild_path} #{target} -scheme '#{scheme}' -sdk #{sdk}#{ios_version}", destination_arg, actions_arg, settings_arg, redirect_suffix, output_log_command].grep(String).join(' '))
|
248
251
|
elsif xcpretty?
|
249
252
|
xcpretty_bin = runner.is_a?(String) ? runner : "xcpretty -c"
|
250
|
-
Command.run(["#{xcodebuild_path}
|
253
|
+
Command.run(["#{xcodebuild_path} #{target} -scheme '#{scheme}' -sdk #{sdk}#{ios_version}", destination_arg, actions_arg, settings_arg, redirect_suffix, output_log_command, "| #{xcpretty_bin} ; exit ${PIPESTATUS[0]}"].grep(String).join(' '))
|
251
254
|
end
|
252
255
|
|
253
256
|
XCTasks::TestReport.instance.add_result(self, options, success)
|
@@ -275,7 +278,7 @@ module XCTasks
|
|
275
278
|
|
276
279
|
def write_environment_variables_to_scheme
|
277
280
|
if env.any?
|
278
|
-
path = "#{workspace}/xcshareddata/xcschemes/#{scheme}.xcscheme"
|
281
|
+
path = "#{workspace || project}/xcshareddata/xcschemes/#{scheme}.xcscheme"
|
279
282
|
doc = Nokogiri::XML(File.read(path))
|
280
283
|
testable_node = doc.at('TestAction')
|
281
284
|
env_variables_node = Nokogiri::XML::Node.new "EnvironmentVariables", doc
|
@@ -305,7 +308,7 @@ module XCTasks
|
|
305
308
|
@prepare_dependency = namespace_name.kind_of?(Hash) ? namespace_name.values.first : nil
|
306
309
|
|
307
310
|
yield self if block_given?
|
308
|
-
raise ConfigurationError, "A workspace must be configured" unless workspace
|
311
|
+
raise ConfigurationError, "A workspace or project must be configured" unless workspace || project
|
309
312
|
raise ConfigurationError, "At least one subtask must be configured" if subtasks.empty?
|
310
313
|
define_rake_tasks
|
311
314
|
end
|
@@ -327,12 +330,17 @@ module XCTasks
|
|
327
330
|
def define_rake_tasks
|
328
331
|
namespace self.namespace_name do
|
329
332
|
task (prepare_dependency ? { prepare: prepare_dependency} : :prepare ) do
|
330
|
-
|
333
|
+
if workspace
|
334
|
+
fail "No such workspace: #{workspace}" unless File.exists?(workspace)
|
335
|
+
else
|
336
|
+
fail "No such project: #{project}" unless File.exists?(project)
|
337
|
+
end
|
338
|
+
|
331
339
|
fail "Invalid schemes directory: #{schemes_dir}" unless schemes_dir.nil? || File.exists?(schemes_dir)
|
332
340
|
File.truncate(output_log, 0) if output_log && File.exists?(output_log)
|
333
341
|
if schemes_dir
|
334
|
-
FileUtils::Verbose.mkdir_p "#{workspace}/xcshareddata/xcschemes"
|
335
|
-
FileUtils::Verbose.cp Dir.glob("#{schemes_dir}/*.xcscheme"), "#{workspace}/xcshareddata/xcschemes"
|
342
|
+
FileUtils::Verbose.mkdir_p "#{workspace || project}/xcshareddata/xcschemes"
|
343
|
+
FileUtils::Verbose.cp Dir.glob("#{schemes_dir}/*.xcscheme"), "#{workspace || project}/xcshareddata/xcschemes"
|
336
344
|
end
|
337
345
|
subtasks.each { |subtask| subtask.prepare }
|
338
346
|
end
|
data/lib/xctasks/version.rb
CHANGED
data/spec/test_task_spec.rb
CHANGED
@@ -19,6 +19,7 @@ describe XCTasks::TestTask do
|
|
19
19
|
|
20
20
|
Dir.mktmpdir.tap do |path|
|
21
21
|
FileUtils.mkdir_p(path + '/LayerKit.xcworkspace/xcshareddata/xcschemes')
|
22
|
+
FileUtils.mkdir_p(path + '/LayerKit.xcodeproj/xcshareddata/xcschemes')
|
22
23
|
FileUtils.mkdir_p(path + '/Tests/Schemes')
|
23
24
|
Dir.chdir(path)
|
24
25
|
end
|
@@ -44,6 +45,21 @@ describe XCTasks::TestTask do
|
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
48
|
+
context "when the given project does not exist" do
|
49
|
+
let!(:task) do
|
50
|
+
XCTasks::TestTask.new do |t|
|
51
|
+
t.project = 'Invalid.xcodeproj'
|
52
|
+
t.schemes_dir = 'Tests/Schemes'
|
53
|
+
t.runner = :xcpretty
|
54
|
+
t.subtasks = { unit: 'Unit Tests', functional: 'Functional Tests' }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "fails" do
|
59
|
+
expect { subject.invoke }.to raise_error(RuntimeError, "No such project: Invalid.xcodeproj")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
47
63
|
context "when the given schemes_dir is nil" do
|
48
64
|
let!(:task) do
|
49
65
|
XCTasks::TestTask.new do |t|
|
@@ -75,7 +91,37 @@ describe XCTasks::TestTask do
|
|
75
91
|
end
|
76
92
|
end
|
77
93
|
|
78
|
-
describe 'simple task' do
|
94
|
+
describe 'simple task with a project' do
|
95
|
+
let!(:task) do
|
96
|
+
XCTasks::TestTask.new do |t|
|
97
|
+
t.project = 'LayerKit.xcodeproj'
|
98
|
+
t.schemes_dir = 'Tests/Schemes'
|
99
|
+
t.runner = :xcpretty
|
100
|
+
t.redirect_stderr = true
|
101
|
+
t.subtasks = { unit: 'Unit Tests' }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
it "configures the project" do
|
106
|
+
task.project.should == 'LayerKit.xcodeproj'
|
107
|
+
end
|
108
|
+
|
109
|
+
describe 'tasks' do
|
110
|
+
describe 'spec:unit' do
|
111
|
+
subject { Rake.application['test:unit'] }
|
112
|
+
|
113
|
+
it "executes the appropriate commands" do
|
114
|
+
subject.invoke
|
115
|
+
@commands.should == ["mkdir -p LayerKit.xcodeproj/xcshareddata/xcschemes",
|
116
|
+
"cp [] LayerKit.xcodeproj/xcshareddata/xcschemes",
|
117
|
+
"killall \"iPhone Simulator\"",
|
118
|
+
"/usr/bin/xcodebuild -project LayerKit.xcodeproj -scheme 'Unit Tests' -sdk iphonesimulator clean build test 2> /dev/null | xcpretty -c ; exit ${PIPESTATUS[0]}"]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe 'simple task with a workspace' do
|
79
125
|
let!(:task) do
|
80
126
|
XCTasks::TestTask.new do |t|
|
81
127
|
t.workspace = 'LayerKit.xcworkspace'
|
@@ -197,6 +243,31 @@ describe XCTasks::TestTask do
|
|
197
243
|
end
|
198
244
|
end
|
199
245
|
|
246
|
+
describe 'task with a project with environment variables' do
|
247
|
+
let!(:task) do
|
248
|
+
XCTasks::TestTask.new do |t|
|
249
|
+
t.project = 'LayerKit.xcodeproj'
|
250
|
+
t.schemes_dir = 'Tests/Schemes'
|
251
|
+
t.runner = 'xcpretty -s'
|
252
|
+
t.output_log = 'output.log'
|
253
|
+
t.env["LAYER_TEST_HOST"] = "10.66.0.35"
|
254
|
+
t.subtasks = { unit: 'Unit Tests' }
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
subject { Rake.application['test:unit'] }
|
259
|
+
|
260
|
+
it "writes the environment variables into the scheme" do
|
261
|
+
FileUtils.cp File.dirname(__FILE__) + '/Unit Tests.xcscheme', "LayerKit.xcodeproj/xcshareddata/xcschemes/"
|
262
|
+
subject.invoke
|
263
|
+
doc = Nokogiri::XML File.read("LayerKit.xcodeproj/xcshareddata/xcschemes/Unit Tests.xcscheme")
|
264
|
+
node = doc.at('TestAction/EnvironmentVariables/EnvironmentVariable')
|
265
|
+
expect(node).not_to be_nil
|
266
|
+
attributes = node.attributes.inject({}) { |hash, pair| hash[pair[0]] = pair[1].to_s; hash }
|
267
|
+
attributes.should == {"key"=>"LAYER_TEST_HOST", "value"=>"10.66.0.35", "isEnabled"=>"YES"}
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
200
271
|
describe 'advanced task' do
|
201
272
|
let!(:task) do
|
202
273
|
XCTasks::TestTask.new do |t|
|
@@ -345,13 +416,14 @@ describe XCTasks::TestTask do
|
|
345
416
|
end
|
346
417
|
end
|
347
418
|
|
348
|
-
context "when a workspace is not configured" do
|
419
|
+
context "when a workspace or project is not configured" do
|
349
420
|
it "raises an exception" do
|
350
421
|
expect do
|
351
422
|
XCTasks::TestTask.new do |t|
|
352
423
|
t.workspace = nil
|
424
|
+
t.project = nil
|
353
425
|
end
|
354
|
-
end.to raise_error(XCTasks::TestTask::ConfigurationError, "A workspace must be configured")
|
426
|
+
end.to raise_error(XCTasks::TestTask::ConfigurationError, "A workspace or project must be configured")
|
355
427
|
end
|
356
428
|
end
|
357
429
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xctasks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Watters
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|