xcov 1.7.0 → 1.7.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0b96135c42bcad3bc99bd0a7bd8a703311df3455e99c8c3b303bc20b7b43d1fe
4
- data.tar.gz: af66a0c17ae43ced2ddce57187c7baf9764e48d90f2c9836f01e371a11265adb
3
+ metadata.gz: ad78b9f52d699c7e6bf5dcc683bc4667554fc69195715a82421e94857c8d423b
4
+ data.tar.gz: d7bd573a388548e5c4a5db7dae2ccadb15f2af07f8320d1306501bee2060075e
5
5
  SHA512:
6
- metadata.gz: 2ecbcbdd82fd7abaef6c34c2f7631ca88af1482d77c85074e2a6e7c07bce6fab54dc25bddaf7c676794e8203bf4fe8937b4ee03449577926eb03d11a96f422da
7
- data.tar.gz: b185daa8cb390aab36b322bb8b127668f036a0ebba509d43aa43c1ae8228845e54e69a18e6fa1bd207470c2e9a0f5d39c52005982404b2ace02364a85d3564d6
6
+ metadata.gz: 6b85d2d86d36d973ea3c5c1955d65f52f49025e69ad3fa9f9cdd9ad04f448a7fbd51fab37be40d1d80c8ec11a08dede70e9283b3807917d8f2551685463173c0
7
+ data.tar.gz: 7a7cbc59f9f5294e1ecdf0e897b42dc8cadcf21766c117f0b0063a6a7bcbc6e2eaa3c160c8007510bb69fd8193add232adbbf62c9fe22d5eb41e31839297c694
Binary file
@@ -35,6 +35,8 @@ module Xcov
35
35
  submit_to_coveralls(report)
36
36
  tmp_dir = File.join(Xcov.config[:output_directory], 'tmp')
37
37
  FileUtils.rm_rf(tmp_dir) if File.directory?(tmp_dir)
38
+
39
+ json_report
38
40
  end
39
41
 
40
42
  def parse_xccoverage
@@ -47,11 +49,13 @@ module Xcov
47
49
  # If no xccov direct path, use the old derived data path method
48
50
  if xccov_file_direct_paths.nil?
49
51
  extension = Xcov.config[:legacy_support] ? "xccoverage" : "xccovreport"
52
+
50
53
  test_logs_path = derived_data_path + "Logs/Test/"
51
- xccoverage_files = Dir["#{test_logs_path}*.#{extension}", "#{test_logs_path}*.xcresult/*/action.#{extension}"].sort_by { |filename| File.mtime(filename) }.reverse
52
-
54
+ UI.important("Derived content from #{Dir["#{test_logs_path}/*"]}")
55
+
56
+ xccoverage_files = Dir["#{test_logs_path}*.#{extension}", "#{test_logs_path}*.xcresult/*/action.#{extension}"]
53
57
  if xccoverage_files.empty?
54
- xcresult_paths = Dir["#{test_logs_path}*.xcresult"].sort_by { |filename| File.mtime(filename) }.reverse
58
+ xcresult_paths = Dir["#{test_logs_path}*.xcresult"]
55
59
  xcresult_paths.each do |xcresult_path|
56
60
  xcresults_to_parse_and_export << xcresult_path
57
61
  end
@@ -75,6 +79,7 @@ module Xcov
75
79
  # Iterates over xcresults
76
80
  # Exports .xccovarchives
77
81
  # Exports .xccovreports and collects the paths
82
+ # Merge .xccovreports if multiple exists and return merged report
78
83
  unless xcresults_to_parse_and_export.empty?
79
84
  xccoverage_files = process_xcresults!(xcresults_to_parse_and_export)
80
85
  end
@@ -86,6 +91,7 @@ module Xcov
86
91
 
87
92
  # Convert .xccoverage file to json
88
93
  ide_foundation_path = Xcov.config[:legacy_support] ? nil : Xcov.config[:ideFoundationPath]
94
+ xccoverage_files = xccoverage_files.sort_by {|filename| File.mtime(filename)}.reverse
89
95
  json_report = Xcov::Core::Parser.parse(xccoverage_files.first, Xcov.config[:output_directory], ide_foundation_path)
90
96
  ErrorHandler.handle_error("UnableToParseXccoverageFile") if json_report.nil?
91
97
 
@@ -202,30 +208,66 @@ module Xcov
202
208
  def process_xcresults!(xcresult_paths)
203
209
  output_path = Xcov.config[:output_directory]
204
210
  FileUtils.mkdir_p(output_path)
205
-
206
- return xcresult_paths.flat_map do |xcresult_path|
211
+
212
+ result_path = ""
213
+ index = 0
214
+
215
+ xcresult_paths.flat_map do |xcresult_path|
207
216
  begin
208
217
  parser = XCResult::Parser.new(path: xcresult_path)
209
-
218
+
210
219
  # Exporting to same directory as xcresult
211
- archive_paths = parser.export_xccovarchives(destination: output_path)
212
- report_paths = parser.export_xccovreports(destination: output_path)
213
-
214
- # Informating user of export paths
215
- archive_paths.each do |path|
216
- UI.important("Copying .xccovarchive to #{path}")
220
+ tmp_archive_paths = parser.export_xccovarchives(destination: output_path)
221
+ tmp_report_paths = parser.export_xccovreports(destination: output_path)
222
+
223
+ # Rename each file with global index
224
+ tmp_report_paths.each_with_index do |item, i|
225
+ File.rename(tmp_archive_paths[i], "#{output_path}/xccovarchive-#{index + i}.xccovarchive")
226
+ File.rename(item, "#{output_path}/xccovreport-#{index + i}.xccovreport")
227
+ index += 1
217
228
  end
218
- report_paths.each do |path|
219
- UI.important("Copying .xccovreport to #{path}")
220
- end
221
-
222
- report_paths
223
229
  rescue
224
230
  UI.error("Error occured while exporting xccovreport from xcresult '#{xcresult_path}'")
225
231
  UI.error("Make sure you have both Xcode 11 selected and pointing to the correct xcresult file")
226
232
  UI.crash!("Failed to export xccovreport from xcresult'")
227
233
  end
228
234
  end
235
+
236
+ # Grab paths from the directory instead of parser
237
+ report_paths = Dir["#{output_path}/*.xccovreport"]
238
+ archive_paths = Dir["#{output_path}/*.xccovarchive"]
239
+
240
+ # Merge coverage reports
241
+ if report_paths.length > 1 then
242
+ # Creating array of paths for merging
243
+ paths = ""
244
+ for i in 0..report_paths.length
245
+ paths += " #{report_paths[i]} #{archive_paths[i]}"
246
+ end
247
+
248
+ UI.important("Merging multiple coverage reports with #{paths}")
249
+ if system ( "xcrun xccov merge --outReport #{output_path}/out.xccovreport --outArchive #{output_path}/out.xccovarchive #{paths}" ) then
250
+ result_path = "#{output_path}/out.xccovreport"
251
+ else
252
+ UI.error("Error occured during merging multiple coverage reports")
253
+ end
254
+ end
255
+
256
+ if result_path == "" then
257
+ # Informating user of export paths
258
+ archive_paths.each do |path|
259
+ UI.important("Copying .xccovarchive to #{path}")
260
+ end
261
+ report_paths.each do |path|
262
+ UI.important("Copying .xccovreport to #{path}")
263
+ end
264
+
265
+ # Return array of report_paths if coverage reports were not merged
266
+ return report_paths
267
+ else
268
+ # Return merged xccovreport
269
+ return [result_path]
270
+ end
229
271
  end
230
272
  end
231
273
  end
@@ -8,14 +8,18 @@ module Xcov
8
8
  attr_accessor :type
9
9
  attr_accessor :ignored
10
10
  attr_accessor :coverage
11
+ attr_accessor :coveredLines
12
+ attr_accessor :executableLines
11
13
  attr_accessor :functions
12
14
  attr_accessor :function_templates
13
15
  attr_accessor :lines
14
16
 
15
- def initialize(name, location, coverage, functions, lines = nil)
17
+ def initialize(name, location, coverage, coveredLines, executableLines, functions, lines = nil)
16
18
  @name = CGI::escapeHTML(name)
17
19
  @location = CGI::escapeHTML(location)
18
20
  @coverage = coverage
21
+ @coveredLines = coveredLines
22
+ @executableLines = executableLines
19
23
  @functions = functions
20
24
  @ignored = Xcov.ignore_handler.should_ignore_file_at_path(location)
21
25
  @displayable_coverage = self.create_displayable_coverage
@@ -52,6 +56,7 @@ module Xcov
52
56
  def json_value
53
57
  value = {
54
58
  "name" => @name,
59
+ "path" => @location,
55
60
  "coverage" => @coverage,
56
61
  "type" => @type,
57
62
  "functions" => @functions ? @functions.map{ |function| function.json_value } : []
@@ -68,9 +73,11 @@ module Xcov
68
73
  name = dictionary["name"]
69
74
  location = dictionary["location"]
70
75
  coverage = dictionary["coverage"]
76
+ coveredLines = dictionary["coveredLines"]
77
+ executableLines = dictionary["executableLines"]
71
78
  functions = dictionary["functions"].map { |function| Function.map(function)}
72
79
  lines = map_lines(dictionary["lines"])
73
- Source.new(name, location, coverage, functions, lines)
80
+ Source.new(name, location, coverage, coveredLines, executableLines, functions, lines)
74
81
  end
75
82
 
76
83
  def self.map_lines(dictionaries)
@@ -7,10 +7,12 @@ module Xcov
7
7
  attr_accessor :files
8
8
  attr_accessor :file_templates
9
9
 
10
- def initialize(name, coverage, files)
10
+ def initialize(name, files)
11
11
  @name = CGI::escapeHTML(name)
12
12
  @files = files
13
- @coverage = coverage
13
+ totalCoveredLines = files.reduce(0) { |acc, file| acc + file.coveredLines }
14
+ totalExecutableLines = files.reduce(0) { |acc, file| acc + file.executableLines }
15
+ @coverage = files.count == 0 || totalExecutableLines == 0 ? 0.0 : totalCoveredLines.to_f / totalExecutableLines.to_f
14
16
  @displayable_coverage = self.create_displayable_coverage
15
17
  @coverage_color = self.create_coverage_color
16
18
  @id = Target.create_id(name)
@@ -53,12 +55,11 @@ module Xcov
53
55
 
54
56
  def self.map(dictionary)
55
57
  name = dictionary["name"]
56
- coverage = dictionary["coverage"]
57
58
  files = dictionary["files"].map { |file| Source.map(file)}
58
59
  files = files.sort &by_coverage_with_ignored_at_the_end
59
60
  non_ignored_files = Target.select_non_ignored_files(files)
60
61
 
61
- Target.new(name, coverage, non_ignored_files)
62
+ Target.new(name, non_ignored_files)
62
63
  end
63
64
 
64
65
  def self.by_coverage_with_ignored_at_the_end
@@ -93,6 +93,14 @@ module Xcov
93
93
  default_value: File.join(containing, "xcov_report"),
94
94
  default_value_dynamic: true
95
95
  ),
96
+ FastlaneCore::ConfigItem.new(
97
+ key: :cloned_source_packages_path,
98
+ short_option: "-C",
99
+ env_name: "XCOV_CLONED_SOURCE_PACKAGES_PATH",
100
+ description: "Sets a custom path for Swift Package Manager dependencies",
101
+ type: String,
102
+ optional: true
103
+ ),
96
104
 
97
105
  # Report options
98
106
  FastlaneCore::ConfigItem.new(
@@ -1,6 +1,6 @@
1
1
  module Xcov
2
2
 
3
- VERSION = "1.7.0"
3
+ VERSION = "1.7.5"
4
4
  DESCRIPTION = "xcov is a friendly visualizer for Xcode's code coverage files"
5
5
 
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcov
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Vidal
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-30 00:00:00.000000000 Z
11
+ date: 2020-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastlane
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.82.0
19
+ version: 2.141.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: 3.0.0
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 2.82.0
29
+ version: 2.141.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 3.0.0
@@ -194,7 +194,7 @@ homepage: https://github.com/fastlane-community/xcov
194
194
  licenses:
195
195
  - MIT
196
196
  metadata: {}
197
- post_install_message:
197
+ post_install_message:
198
198
  rdoc_options: []
199
199
  require_paths:
200
200
  - lib
@@ -209,9 +209,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
209
  - !ruby/object:Gem::Version
210
210
  version: '0'
211
211
  requirements: []
212
- rubyforge_project:
213
- rubygems_version: 2.7.6
214
- signing_key:
212
+ rubygems_version: 3.0.3
213
+ signing_key:
215
214
  specification_version: 4
216
215
  summary: xcov is a friendly visualizer for Xcode's code coverage files
217
216
  test_files: []