xctasks 0.1.1 → 0.2.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 +25 -0
- data/Gemfile.lock +1 -1
- data/README.md +2 -1
- data/lib/xctasks/test_task.rb +16 -12
- data/lib/xctasks/version.rb +1 -1
- data/spec/test_task_spec.rb +40 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b5e17c017baddd3b1950ae2fc75dec14dcbaf16
|
4
|
+
data.tar.gz: bf2a96d113244d0e97cd637df8dcc01d361d27fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab29b2b90d38db843938ea0a153ef5be79392f9c38a4a8aa5ff3d135b4acf3d82db79b4be306035cac4f8553df918b06aed653c7cfdad2a5ea38490a4429702e
|
7
|
+
data.tar.gz: 0fea3e3734f8258131ac3901a11a39d139cd3a9e2ecdb4243aef946a10c17a5805305b9d702e9fe480e916a65e0e346887dee9c3ea52f21cbf825e456971abf3
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# XCTasks Changelog
|
2
|
+
|
3
|
+
## v0.2.0
|
4
|
+
|
5
|
+
* Further refinements to shell escaping [@tayhalla]
|
6
|
+
* Added `output_log` option.
|
7
|
+
* Added support for passing options to runner commands.
|
8
|
+
|
9
|
+
## v0.1.1
|
10
|
+
|
11
|
+
* Add explicit require of forwardable to fix load error under certain Ruby environments.
|
12
|
+
|
13
|
+
## v0.1.0
|
14
|
+
|
15
|
+
* Internal refactoring and cleanups.
|
16
|
+
|
17
|
+
## v0.0.2
|
18
|
+
|
19
|
+
* Expanded SDK configuration support.
|
20
|
+
* Improved issues with shell escaping.
|
21
|
+
|
22
|
+
## v0.0.1
|
23
|
+
|
24
|
+
* Initial public release.
|
25
|
+
* Supports execution of test suites.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -19,7 +19,8 @@ require 'xctasks/test_task'
|
|
19
19
|
XCTasks::TestTask.new(test: 'server:autostart') do |t|
|
20
20
|
t.workspace = 'LayerKit.xcworkspace'
|
21
21
|
t.schemes_dir = 'Tests/Schemes' # Location where you store your shared schemes, will copy into workspace
|
22
|
-
t.runner = :xctool # or :xcodebuild/:xcpretty
|
22
|
+
t.runner = :xctool # or :xcodebuild/:xcpretty. Can also pass options as string, i.e. 'xcpretty -s'
|
23
|
+
t.output_log = 'output.log' # Save the build log to a file. Export as Jenkins build artifact for CI build auditing
|
23
24
|
|
24
25
|
t.subtask(unit: 'LayerKit Tests') do |s|
|
25
26
|
s.ios_versions = %w{7.0 7.1}
|
data/lib/xctasks/test_task.rb
CHANGED
@@ -85,8 +85,8 @@ module XCTasks
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def to_s
|
88
|
-
keys = [:platform, :name, :arch, :id, :os].reject { |k| self[k].nil? }
|
89
|
-
keys.map { |k| "#{key_name(k)}='#{self[k].to_s
|
88
|
+
keys = [:platform, :name, :arch, :id, :os].reject { |k| self[k].nil? }
|
89
|
+
keys.map { |k| "#{key_name(k)}='#{self[k].to_s}'" }.join(',')
|
90
90
|
end
|
91
91
|
|
92
92
|
private
|
@@ -99,7 +99,7 @@ module XCTasks
|
|
99
99
|
class Configuration
|
100
100
|
SETTINGS = [:workspace, :schemes_dir, :sdk, :runner, :xctool_path,
|
101
101
|
:xcodebuild_path, :settings, :destinations, :actions,
|
102
|
-
:scheme, :ios_versions]
|
102
|
+
:scheme, :ios_versions, :output_log]
|
103
103
|
HELPERS = [:destination, :xctool?, :xcpretty?, :xcodebuild?]
|
104
104
|
|
105
105
|
# Configures delegations to pass through configuration accessor when extended
|
@@ -126,8 +126,9 @@ module XCTasks
|
|
126
126
|
end
|
127
127
|
|
128
128
|
def runner=(runner)
|
129
|
-
|
130
|
-
|
129
|
+
runner_bin = runner.to_s.split(' ')[0]
|
130
|
+
raise ConfigurationError, "Must be :xcodebuild, :xctool or :xcpretty" unless %w{xctool xcodebuild xcpretty}.include?(runner_bin)
|
131
|
+
@runner = runner
|
131
132
|
end
|
132
133
|
|
133
134
|
def sdk=(sdk)
|
@@ -153,15 +154,15 @@ module XCTasks
|
|
153
154
|
end
|
154
155
|
|
155
156
|
def xctool?
|
156
|
-
runner
|
157
|
+
runner =~ /^xctool/
|
157
158
|
end
|
158
159
|
|
159
160
|
def xcodebuild?
|
160
|
-
runner
|
161
|
+
runner =~ /^xcodebuild/
|
161
162
|
end
|
162
163
|
|
163
164
|
def xcpretty?
|
164
|
-
runner
|
165
|
+
runner =~ /^xcpretty/
|
165
166
|
end
|
166
167
|
|
167
168
|
# Deep copy any nested structures
|
@@ -221,14 +222,16 @@ module XCTasks
|
|
221
222
|
def run_tests(options = {})
|
222
223
|
ios_version = options[:ios_version]
|
223
224
|
XCTasks::Command.run(%q{killall "iPhone Simulator"}, false) if sdk == :iphonesimulator
|
224
|
-
|
225
|
+
|
226
|
+
output_log_command = output_log ? " | tee -a #{output_log} " : ' '
|
225
227
|
success = if xctool?
|
226
228
|
actions_arg << " -freshSimulator" if ios_version
|
227
|
-
Command.run("#{xctool_path} -workspace #{workspace} -scheme '#{scheme}' -sdk #{sdk}#{ios_version}#{destination_arg}#{actions_arg}#{settings_arg}".strip)
|
229
|
+
Command.run("#{xctool_path} -workspace #{workspace} -scheme '#{scheme}' -sdk #{sdk}#{ios_version}#{destination_arg}#{actions_arg}#{settings_arg}#{output_log_command}".strip)
|
228
230
|
elsif xcodebuild?
|
229
|
-
Command.run("#{xcodebuild_path} -workspace #{workspace} -scheme '#{scheme}' -sdk #{sdk}#{ios_version}#{destination_arg}#{actions_arg}#{settings_arg}".strip)
|
231
|
+
Command.run("#{xcodebuild_path} -workspace #{workspace} -scheme '#{scheme}' -sdk #{sdk}#{ios_version}#{destination_arg}#{actions_arg}#{settings_arg}#{output_log_command}".strip)
|
230
232
|
elsif xcpretty?
|
231
|
-
|
233
|
+
xcpretty_bin = runner.is_a?(String) ? runner : "xcpretty -c"
|
234
|
+
Command.run("#{xcodebuild_path} -workspace #{workspace} -scheme '#{scheme}' -sdk #{sdk}#{ios_version}#{destination_arg}#{actions_arg}#{settings_arg}#{output_log_command}| #{xcpretty_bin} ; exit ${PIPESTATUS[0]}".strip)
|
232
235
|
end
|
233
236
|
|
234
237
|
XCTasks::TestReport.instance.add_result(self, options, success)
|
@@ -290,6 +293,7 @@ module XCTasks
|
|
290
293
|
def define_rake_tasks
|
291
294
|
namespace self.namespace_name do
|
292
295
|
task (prepare_dependency ? { prepare: prepare_dependency} : :prepare ) do
|
296
|
+
File.truncate(output_log, 0) if output_log && File.exists?(output_log)
|
293
297
|
if schemes_dir
|
294
298
|
FileUtils::Verbose.mkdir_p "#{workspace}/xcshareddata/xcschemes"
|
295
299
|
FileUtils::Verbose.cp Dir.glob("#{schemes_dir}/*.xcscheme"), "#{workspace}/xcshareddata/xcschemes"
|
data/lib/xctasks/version.rb
CHANGED
data/spec/test_task_spec.rb
CHANGED
@@ -77,6 +77,44 @@ describe XCTasks::TestTask do
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
+
describe 'task with log' do
|
81
|
+
let!(:task) do
|
82
|
+
XCTasks::TestTask.new do |t|
|
83
|
+
t.workspace = 'LayerKit.xcworkspace'
|
84
|
+
t.schemes_dir = 'Tests/Schemes'
|
85
|
+
t.runner = 'xcpretty -s'
|
86
|
+
t.output_log = 'output.log'
|
87
|
+
t.subtasks = { unit: 'Unit Tests', functional: 'Functional Tests' }
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe 'tasks' do
|
92
|
+
describe 'spec:unit' do
|
93
|
+
subject { Rake.application['test:unit'] }
|
94
|
+
|
95
|
+
it "executes the appropriate commands" do
|
96
|
+
subject.invoke
|
97
|
+
@commands.should == ["mkdir -p LayerKit.xcworkspace/xcshareddata/xcschemes",
|
98
|
+
"cp [] LayerKit.xcworkspace/xcshareddata/xcschemes",
|
99
|
+
"killall \"iPhone Simulator\"",
|
100
|
+
"/usr/bin/xcodebuild -workspace LayerKit.xcworkspace -scheme 'Unit Tests' -sdk iphonesimulator clean build test | tee -a output.log | xcpretty -s ; exit ${PIPESTATUS[0]}"]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe 'spec:functional' do
|
105
|
+
subject { Rake.application['test:functional'] }
|
106
|
+
|
107
|
+
it "executes the appropriate commands" do
|
108
|
+
subject.invoke
|
109
|
+
@commands.should == ["mkdir -p LayerKit.xcworkspace/xcshareddata/xcschemes",
|
110
|
+
"cp [] LayerKit.xcworkspace/xcshareddata/xcschemes",
|
111
|
+
"killall \"iPhone Simulator\"",
|
112
|
+
"/usr/bin/xcodebuild -workspace LayerKit.xcworkspace -scheme 'Functional Tests' -sdk iphonesimulator clean build test | tee -a output.log | xcpretty -s ; exit ${PIPESTATUS[0]}"]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
80
118
|
describe 'advanced task' do
|
81
119
|
let!(:task) do
|
82
120
|
XCTasks::TestTask.new do |t|
|
@@ -150,7 +188,7 @@ describe XCTasks::TestTask do
|
|
150
188
|
s.scheme = 'Functional Tests'
|
151
189
|
s.destination do |d|
|
152
190
|
d.platform = :iossimulator
|
153
|
-
d.name = 'iPad'
|
191
|
+
d.name = 'iPad Retina'
|
154
192
|
d.os = :latest
|
155
193
|
end
|
156
194
|
s.destination('platform=iOS Simulator,OS=7.1,name=iPhone Retina (4-inch)')
|
@@ -180,7 +218,7 @@ describe XCTasks::TestTask do
|
|
180
218
|
subject.invoke
|
181
219
|
@commands.should == [
|
182
220
|
"killall \"iPhone Simulator\"",
|
183
|
-
"/usr/bin/xcodebuild -workspace LayerKit.xcworkspace -scheme 'Functional Tests' -sdk iphonesimulator -destination platform='iOS
|
221
|
+
"/usr/bin/xcodebuild -workspace LayerKit.xcworkspace -scheme 'Functional Tests' -sdk iphonesimulator -destination platform='iOS Simulator',name='iPad Retina',OS='latest' -destination platform\\=iOS\\ Simulator,OS\\=7.1,name\\=iPhone\\ Retina\\ \\(4-inch\\) -destination platform='iOS',id='437750527b43cff55a46f42ae86dbf870c7591b1' clean build test"]
|
184
222
|
end
|
185
223
|
end
|
186
224
|
end
|
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.2.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: 2014-
|
11
|
+
date: 2014-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -131,6 +131,7 @@ extra_rdoc_files: []
|
|
131
131
|
files:
|
132
132
|
- .gitignore
|
133
133
|
- .ruby-version
|
134
|
+
- CHANGELOG.md
|
134
135
|
- Gemfile
|
135
136
|
- Gemfile.lock
|
136
137
|
- LICENSE
|