slather 2.4.2 → 2.4.3
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 +8 -1
- data/lib/slather.rb +1 -0
- data/lib/slather/command/coverage_command.rb +3 -0
- data/lib/slather/coverage_service/json_output.rb +38 -0
- data/lib/slather/project.rb +27 -4
- data/lib/slather/version.rb +1 -1
- data/slather.gemspec +19 -19
- data/spec/fixtures/report.json +1 -0
- data/spec/slather/coverage_service/gutter_json_spec.rb +1 -1
- data/spec/slather/coverage_service/json_spec.rb +43 -0
- data/spec/spec_helper.rb +2 -1
- metadata +15 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4792a1ef157980aebe454c8f2f66ba615afce74
|
4
|
+
data.tar.gz: 20c3278d981f6b6989d59ea446a5e102f2cc1119
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76515b90aa82cad8d98ee37d31b8204e28053a987c1207d60a07e3f843bab9579faef26ef9e2ce4129a171a323a86bc98d376fe23ee21b030fc8c367032b39bb
|
7
|
+
data.tar.gz: 0bf97e2d021ceb10ac033fe93a45c4eed0b17be60c23e05ba6ee0c554c3260da0d21982104be9a58e34486330c7a72b3860a3a0c1264ee13f0ea349353da2bea
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
-
##
|
3
|
+
## v2.4.3
|
4
|
+
|
5
|
+
* Initial Xcode 9 support
|
6
|
+
[ksuther](https://github.com/ksuther) [#339](https://github.com/SlatherOrg/slather/pull/339), [ivanbrunel](https://github.com/ivanbruel) [#321](https://github.com/SlatherOrg/slather/pull/321), [FDREAL](https://github.com/FDREAL) [#338](https://github.com/SlatherOrg/slather/pull/338)
|
7
|
+
|
8
|
+
* Add `--json` output option for basic JSON format not specific to any particular service.
|
9
|
+
[ileitch](https://github.com/ileitch)
|
10
|
+
[#318](https://github.com/SlatherOrg/slather/pull/318)
|
4
11
|
|
5
12
|
## v2.4.2
|
6
13
|
|
data/lib/slather.rb
CHANGED
@@ -10,6 +10,7 @@ require 'slather/coverage_service/hardcover'
|
|
10
10
|
require 'slather/coverage_service/gutter_json_output'
|
11
11
|
require 'slather/coverage_service/simple_output'
|
12
12
|
require 'slather/coverage_service/html_output'
|
13
|
+
require 'slather/coverage_service/json_output'
|
13
14
|
require 'cfpropertylist'
|
14
15
|
|
15
16
|
module Slather
|
@@ -13,6 +13,7 @@ class CoverageCommand < Clamp::Command
|
|
13
13
|
option ["--simple-output", "-s"], :flag, "Output coverage results to the terminal"
|
14
14
|
option ["--gutter-json", "-g"], :flag, "Output coverage results as Gutter JSON format"
|
15
15
|
option ["--cobertura-xml", "-x"], :flag, "Output coverage results as Cobertura XML format"
|
16
|
+
option ["--json"], :flag, "Output coverage results as simple JSON"
|
16
17
|
option ["--html"], :flag, "Output coverage results as static html pages"
|
17
18
|
option ["--show"], :flag, "Indicate that the static html pages will open automatically"
|
18
19
|
|
@@ -116,6 +117,8 @@ class CoverageCommand < Clamp::Command
|
|
116
117
|
elsif html?
|
117
118
|
project.coverage_service = :html
|
118
119
|
project.show_html = show?
|
120
|
+
elsif json?
|
121
|
+
project.coverage_service = :json
|
119
122
|
end
|
120
123
|
end
|
121
124
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
module Slather
|
5
|
+
module CoverageService
|
6
|
+
module JsonOutput
|
7
|
+
|
8
|
+
def coverage_file_class
|
9
|
+
if input_format == "profdata"
|
10
|
+
Slather::ProfdataCoverageFile
|
11
|
+
else
|
12
|
+
Slather::CoverageFile
|
13
|
+
end
|
14
|
+
end
|
15
|
+
private :coverage_file_class
|
16
|
+
|
17
|
+
def post
|
18
|
+
report = coverage_files.map do |file|
|
19
|
+
{
|
20
|
+
file: file.source_file_pathname_relative_to_repo_root,
|
21
|
+
coverage: file.line_coverage_data
|
22
|
+
}
|
23
|
+
end.to_json
|
24
|
+
|
25
|
+
store_report(report)
|
26
|
+
end
|
27
|
+
|
28
|
+
def store_report(report)
|
29
|
+
output_file = 'report.json'
|
30
|
+
if output_directory
|
31
|
+
FileUtils.mkdir_p(output_directory)
|
32
|
+
output_file = File.join(output_directory, output_file)
|
33
|
+
end
|
34
|
+
File.write(output_file, report.to_s)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/slather/project.rb
CHANGED
@@ -158,14 +158,29 @@ module Slather
|
|
158
158
|
raise StandardError, "The specified build directory (#{self.build_directory}) does not exist" unless File.exists?(self.build_directory)
|
159
159
|
dir = nil
|
160
160
|
if self.scheme
|
161
|
-
dir = Dir[File.join(
|
161
|
+
dir = Dir[File.join(build_directory,"/**/CodeCoverage/#{self.scheme}")].first
|
162
162
|
else
|
163
|
-
dir = Dir[File.join(
|
163
|
+
dir = Dir[File.join(build_directory,"/**/#{first_product_name}")].first
|
164
164
|
end
|
165
165
|
|
166
166
|
if dir == nil
|
167
167
|
# Xcode 7.3 moved the location of Coverage.profdata
|
168
|
-
dir = Dir[File.join(
|
168
|
+
dir = Dir[File.join(build_directory,"/**/CodeCoverage")].first
|
169
|
+
end
|
170
|
+
|
171
|
+
if dir == nil && Slather.xcode_version[0] >= 9
|
172
|
+
# Xcode 9 moved the location of Coverage.profdata
|
173
|
+
coverage_files = Dir[File.join(build_directory, "/**/ProfileData/*/Coverage.profdata")]
|
174
|
+
|
175
|
+
if coverage_files.count == 0
|
176
|
+
# Look up one directory
|
177
|
+
# The ProfileData directory is next to Intermediates.noindex (in previous versions of Xcode the coverage was inside Intermediates)
|
178
|
+
coverage_files = Dir[File.join(build_directory, "../**/ProfileData/*/Coverage.profdata")]
|
179
|
+
end
|
180
|
+
|
181
|
+
if coverage_files != nil
|
182
|
+
dir = Pathname.new(coverage_files.first).parent()
|
183
|
+
end
|
169
184
|
end
|
170
185
|
|
171
186
|
raise StandardError, "No coverage directory found." unless dir != nil
|
@@ -339,6 +354,8 @@ module Slather
|
|
339
354
|
extend(Slather::CoverageService::CoberturaXmlOutput)
|
340
355
|
when :html
|
341
356
|
extend(Slather::CoverageService::HtmlOutput)
|
357
|
+
when :json
|
358
|
+
extend(Slather::CoverageService::JsonOutput)
|
342
359
|
else
|
343
360
|
raise ArgumentError, "`#{coverage_service}` is not a valid coverage service. Try `terminal`, `coveralls`, `gutter_json`, `cobertura_xml` or `html`"
|
344
361
|
end
|
@@ -404,9 +421,15 @@ module Slather
|
|
404
421
|
end
|
405
422
|
|
406
423
|
search_list = binary_basename || find_buildable_names(xcscheme)
|
424
|
+
search_dir = profdata_coverage_dir
|
425
|
+
|
426
|
+
if Slather.xcode_version[0] >= 9
|
427
|
+
# Go from the directory containing Coverage.profdata back to the directory containing Products (back out of ProfileData/UUID-dir)
|
428
|
+
search_dir = File.join(search_dir, '../..')
|
429
|
+
end
|
407
430
|
|
408
431
|
search_list.each do |search_for|
|
409
|
-
found_product = Dir["#{
|
432
|
+
found_product = Dir["#{search_dir}/Products/#{configuration}*/#{search_for}*"].sort { |x, y|
|
410
433
|
# Sort the matches without the file extension to ensure better matches when there are multiple candidates
|
411
434
|
# For example, if the binary_basename is Test then we want Test.app to be matched before Test Helper.app
|
412
435
|
File.basename(x, File.extname(x)) <=> File.basename(y, File.extname(y))
|
data/lib/slather/version.rb
CHANGED
data/slather.gemspec
CHANGED
@@ -4,33 +4,33 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'slather/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'slather'
|
8
8
|
spec.version = Slather::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Mark Larsen']
|
10
|
+
spec.email = ['mark@venmo.com']
|
11
11
|
spec.summary = %q{Test coverage reports for Xcode projects}
|
12
|
-
spec.homepage =
|
13
|
-
spec.license =
|
12
|
+
spec.homepage = 'https://github.com/SlatherOrg/slather'
|
13
|
+
spec.license = 'MIT'
|
14
14
|
|
15
15
|
spec.files = `git ls-files -z`.split("\x0")
|
16
16
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
-
spec.require_paths = [
|
18
|
+
spec.require_paths = ['lib']
|
19
19
|
|
20
|
-
spec.add_development_dependency
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
20
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
21
|
+
spec.add_development_dependency 'coveralls'
|
22
|
+
spec.add_development_dependency 'simplecov'
|
23
|
+
spec.add_development_dependency 'rake', '~> 10.4'
|
24
|
+
spec.add_development_dependency 'rspec', '~> 3.4'
|
25
|
+
spec.add_development_dependency 'pry', '~> 0.9'
|
26
|
+
spec.add_development_dependency 'cocoapods', '~> 1.2'
|
27
|
+
spec.add_development_dependency 'json_spec', '~> 1.1.4'
|
28
|
+
spec.add_development_dependency 'equivalent-xml', '~> 0.5.1'
|
29
29
|
|
30
|
-
spec.add_dependency
|
31
|
-
spec.add_dependency
|
32
|
-
spec.add_dependency
|
33
|
-
spec.add_dependency
|
30
|
+
spec.add_dependency 'clamp', '~> 0.6'
|
31
|
+
spec.add_dependency 'xcodeproj', '~> 1.4'
|
32
|
+
spec.add_dependency 'nokogiri', '>= 1.6', '< 1.7'
|
33
|
+
spec.add_dependency 'CFPropertyList', '~> 2.2'
|
34
34
|
|
35
35
|
## Version 5 needs Ruby 2.2, so we specify an upper bound to stay compatible with system ruby
|
36
36
|
spec.add_runtime_dependency 'activesupport', '>= 4.0.2', '< 5'
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"file":"spec/fixtures/fixtures/fixtures.m","coverage":[null,null,null,null,null,null,null,null,null,null,null,null,null,1,1,1,null,null,0,0,0,null,null]},{"file":"spec/fixtures/fixtures/more_files/Branches.m","coverage":[null,null,null,null,null,null,null,null,null,null,null,null,null,2,2,1,1,1,0,0,1,1,1,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,null,null]},{"file":"spec/fixtures/fixturesTests/BranchesTests.m","coverage":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,2,2,2,2,null,2,2,2,2,null,1,1,1,1,null,1,1,1,1,null,null]},{"file":"spec/fixtures/fixturesTests/fixturesTests.m","coverage":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,2,2,2,2,null,null,2,2,2,2,null,null,1,1,1,1,null,null,1,1,1,1,1,null,null]},{"file":"spec/fixtures/fixturesTests/peekaviewTests💣.m","coverage":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,1,1,1,null,null,1,1,1,1,null,null,1,1,1,null,null]},{"file":"spec/fixtures/fixturesTwo/fixturesTwo.m","coverage":[null,null,null,null,null,null,null,null,null,null,null,null,null,1,1,1,1,1,1,null,null]}]
|
@@ -22,7 +22,7 @@ describe Slather::CoverageService::GutterJsonOutput do
|
|
22
22
|
it "should print out the coverage for each file, and then total coverage" do
|
23
23
|
fixtures_project.post
|
24
24
|
|
25
|
-
fixture_json = File.read(
|
25
|
+
fixture_json = File.read(FIXTURES_GUTTER_JSON_PATH)
|
26
26
|
current_json = File.read('.gutter.json')
|
27
27
|
|
28
28
|
expect(current_json).to be_json_eql(fixture_json)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
describe Slather::CoverageService::JsonOutput do
|
5
|
+
|
6
|
+
let(:fixtures_project) do
|
7
|
+
proj = Slather::Project.open(FIXTURES_PROJECT_PATH)
|
8
|
+
proj.build_directory = TEMP_DERIVED_DATA_PATH
|
9
|
+
proj.binary_basename = ["fixturesTests", "libfixturesTwo"]
|
10
|
+
proj.input_format = "profdata"
|
11
|
+
proj.coverage_service = "json"
|
12
|
+
proj.configure
|
13
|
+
proj
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#coverage_file_class' do
|
17
|
+
it "should return ProfdataCoverageFile" do
|
18
|
+
expect(fixtures_project.send(:coverage_file_class)).to eq(Slather::ProfdataCoverageFile)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#post' do
|
23
|
+
it "should create an JSON report spanning all coverage files" do
|
24
|
+
fixtures_project.post
|
25
|
+
|
26
|
+
output_json = JSON.parse(File.read('report.json'))
|
27
|
+
fixture_json = JSON.parse(File.read(FIXTURES_JSON_PATH))
|
28
|
+
|
29
|
+
expect(output_json).to eq(fixture_json)
|
30
|
+
FileUtils.rm('report.json')
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should create an JSON report in the given output directory" do
|
34
|
+
fixtures_project.output_directory = "./output"
|
35
|
+
fixtures_project.post
|
36
|
+
|
37
|
+
filepath = "#{fixtures_project.output_directory}/report.json"
|
38
|
+
expect(File.exists?(filepath)).to be_truthy
|
39
|
+
|
40
|
+
FileUtils.rm_rf(fixtures_project.output_directory)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -13,7 +13,8 @@ require 'equivalent-xml'
|
|
13
13
|
|
14
14
|
|
15
15
|
FIXTURES_XML_PATH = File.join(File.dirname(__FILE__), 'fixtures/cobertura.xml')
|
16
|
-
FIXTURES_JSON_PATH = File.join(File.dirname(__FILE__), 'fixtures/
|
16
|
+
FIXTURES_JSON_PATH = File.join(File.dirname(__FILE__), 'fixtures/report.json')
|
17
|
+
FIXTURES_GUTTER_JSON_PATH = File.join(File.dirname(__FILE__), 'fixtures/gutter.json')
|
17
18
|
FIXTURES_HTML_FOLDER_PATH = File.join(File.dirname(__FILE__), 'fixtures/fixtures_html')
|
18
19
|
FIXTURES_PROJECT_PATH = File.join(File.dirname(__FILE__), 'fixtures/fixtures.xcodeproj')
|
19
20
|
FIXTURES_WORKSPACE_PATH = File.join(File.dirname(__FILE__), 'fixtures/fixtures.xcworkspace')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slather
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Larsen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -168,16 +168,22 @@ dependencies:
|
|
168
168
|
name: nokogiri
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- - "
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '1.6'
|
174
|
+
- - "<"
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '1.7'
|
174
177
|
type: :runtime
|
175
178
|
prerelease: false
|
176
179
|
version_requirements: !ruby/object:Gem::Requirement
|
177
180
|
requirements:
|
178
|
-
- - "
|
181
|
+
- - ">="
|
179
182
|
- !ruby/object:Gem::Version
|
180
183
|
version: '1.6'
|
184
|
+
- - "<"
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '1.7'
|
181
187
|
- !ruby/object:Gem::Dependency
|
182
188
|
name: CFPropertyList
|
183
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -246,6 +252,7 @@ files:
|
|
246
252
|
- lib/slather/coverage_service/gutter_json_output.rb
|
247
253
|
- lib/slather/coverage_service/hardcover.rb
|
248
254
|
- lib/slather/coverage_service/html_output.rb
|
255
|
+
- lib/slather/coverage_service/json_output.rb
|
249
256
|
- lib/slather/coverage_service/simple_output.rb
|
250
257
|
- lib/slather/coveralls_coverage.rb
|
251
258
|
- lib/slather/profdata_coverage_file.rb
|
@@ -294,6 +301,7 @@ files:
|
|
294
301
|
- spec/fixtures/fixtures_html/index.html
|
295
302
|
- "spec/fixtures/fixtures_html/peekaviewTests\U0001F4A3.m.html"
|
296
303
|
- spec/fixtures/gutter.json
|
304
|
+
- spec/fixtures/report.json
|
297
305
|
- spec/slather/cocoapods_plugin_spec.rb
|
298
306
|
- spec/slather/coverage_file_spec.rb
|
299
307
|
- spec/slather/coverage_service/cobertura_xml_spec.rb
|
@@ -301,6 +309,7 @@ files:
|
|
301
309
|
- spec/slather/coverage_service/gutter_json_spec.rb
|
302
310
|
- spec/slather/coverage_service/hardcover_spec.rb
|
303
311
|
- spec/slather/coverage_service/html_output_spec.rb
|
312
|
+
- spec/slather/coverage_service/json_spec.rb
|
304
313
|
- spec/slather/coverage_service/simple_output_spec.rb
|
305
314
|
- spec/slather/fixtures.gcno
|
306
315
|
- spec/slather/profdata_coverage_spec.rb
|
@@ -373,6 +382,7 @@ test_files:
|
|
373
382
|
- spec/fixtures/fixtures_html/index.html
|
374
383
|
- "spec/fixtures/fixtures_html/peekaviewTests\U0001F4A3.m.html"
|
375
384
|
- spec/fixtures/gutter.json
|
385
|
+
- spec/fixtures/report.json
|
376
386
|
- spec/slather/cocoapods_plugin_spec.rb
|
377
387
|
- spec/slather/coverage_file_spec.rb
|
378
388
|
- spec/slather/coverage_service/cobertura_xml_spec.rb
|
@@ -380,6 +390,7 @@ test_files:
|
|
380
390
|
- spec/slather/coverage_service/gutter_json_spec.rb
|
381
391
|
- spec/slather/coverage_service/hardcover_spec.rb
|
382
392
|
- spec/slather/coverage_service/html_output_spec.rb
|
393
|
+
- spec/slather/coverage_service/json_spec.rb
|
383
394
|
- spec/slather/coverage_service/simple_output_spec.rb
|
384
395
|
- spec/slather/fixtures.gcno
|
385
396
|
- spec/slather/profdata_coverage_spec.rb
|