slather 2.4.7 → 2.4.8

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: b96a2924692977293e43094ff06f13424436d3e52c4703d7827753164043d65b
4
- data.tar.gz: 813bb754172204b270f51b2e8548506163a7d38eddd8c8f69899bf0b5b6c789e
3
+ metadata.gz: 24ee530494c9f131751a85dba16a4bc09292c187d045be17b1212d9cf4038378
4
+ data.tar.gz: 4c5dabc3de752ebb88998ca29d87d6f072e4477a909926d4237078a2a9f73bc2
5
5
  SHA512:
6
- metadata.gz: 11206bb710d0fbcdc70970113c18c250e94c009ee99b85d8b8fbc655dcd10f1d88d42c7fa29a67cad3e9b07a09ebb4b1866af70f21b54944aeeb898ddc52ffca
7
- data.tar.gz: 7f0b18beaacafa3e38eaded6df28747619570f6d0a67a4546465485bfcddfcb152543185782703cd32814cd38b86dfb3f68c49876a13a9642eb02f7ae96cb224
6
+ metadata.gz: b7d4a1db210237adec6b9c03634774991a209c4aa64c10dea0a73208642298082b9a76f9c0e979b68a4601c6c9ff37f92d6f05bfd3c8a35429bd78cc8ac9549c
7
+ data.tar.gz: 9bf87cccabbd4b243e8ba9c519d491818a38924125694ca8701b3b34764a8c9ae167919b764638fa0af27b137dbbf10d9188b3e6297f93f3d1673ec07566d817
data/.gitignore CHANGED
@@ -46,4 +46,8 @@ html
46
46
  *.gcno
47
47
 
48
48
  # JetBrains IDE
49
- .idea/
49
+ .idea/
50
+
51
+ # Test output
52
+ report.llcov
53
+ report.json
@@ -1,5 +1,19 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v2.4.8
4
+
5
+ * Optimize performance for many binaries
6
+ [cltnschlosser](https://github.com/cltnschlosser)
7
+ [#455](https://github.com/SlatherOrg/slather/pull/455)
8
+
9
+ * Don't generate line 0 in profdata_coverage_file.rb from line with error
10
+ [tthbalazs](https://github.com/tthbalazs)
11
+ [#449](https://github.com/SlatherOrg/slather/pull/449)
12
+
13
+ * coveralls dependency update
14
+ [GRiMe2D](https://github.com/GRiMe2D)
15
+ [#448](https://github.com/SlatherOrg/slather/pull/448)
16
+
3
17
  ## v2.4.7
4
18
 
5
19
  * Update dependencies
data/README.md CHANGED
@@ -67,6 +67,20 @@ If your configuration produces a universal binary you need to specify a specific
67
67
  $ slather coverage -s --arch x86_64 --scheme YourXcodeSchemeName --configuration YourBuildConfigurationName path/to/project.xcodeproj
68
68
  ```
69
69
 
70
+ ### For multiple modules
71
+
72
+ If you want to run some modules, but not all (like modules created by CocoaPods) you can do it like this:
73
+
74
+ ```sh
75
+ $ slather coverage --binary-basename module1 --binary-basename module2 path/to/project.xcodeproj
76
+ ```
77
+ You can also add it to the `.slather.yml` file as an array:
78
+ ```yml
79
+ binary_basename:
80
+ - module1
81
+ - module2
82
+ ```
83
+
70
84
  ### Setup for Xcode 5 and 6
71
85
 
72
86
  Run this command to enable the `Generate Test Coverage` and `Instrument Program Flow` flags for your project:
@@ -18,7 +18,6 @@ module Slather
18
18
  end
19
19
 
20
20
  def create_line_data
21
- all_lines = source_code_lines
22
21
  line_data = Hash.new
23
22
  all_lines.each { |line| line_data[line_number_in_line(line, self.line_numbers_first)] = line }
24
23
  self.line_data = line_data
@@ -26,14 +25,20 @@ module Slather
26
25
  private :create_line_data
27
26
 
28
27
  def path_on_first_line?
29
- path = self.source.split("\n")[0].sub ":", ""
30
- !path.lstrip.start_with?("1|")
28
+ !source.lstrip.start_with?("1|")
31
29
  end
32
30
 
33
31
  def source_file_pathname
34
32
  @source_file_pathname ||= begin
35
33
  if path_on_first_line?
36
- path = self.source.split("\n")[0].sub ":", ""
34
+ end_index = self.source.index(/:?\n/)
35
+ if end_index != nil
36
+ end_index -= 1
37
+ path = self.source[0..end_index]
38
+ else
39
+ # Empty file, output just contains path
40
+ path = self.source.sub ":", ""
41
+ end
37
42
  path &&= Pathname(path)
38
43
  else
39
44
  # llvm-cov was run with just one matching source file
@@ -64,7 +69,16 @@ module Slather
64
69
  end
65
70
 
66
71
  def source_code_lines
67
- self.source.split("\n")[(path_on_first_line? ? 1 : 0)..-1]
72
+ lines = self.source.split("\n")[(path_on_first_line? ? 1 : 0)..-1]
73
+ ignore_error_lines(lines)
74
+ end
75
+
76
+ def ignore_error_lines(lines, line_numbers_first = self.line_numbers_first)
77
+ if line_numbers_first
78
+ lines.reject { |line| line.lstrip.start_with?('|', '--') }
79
+ else
80
+ lines
81
+ end
68
82
  end
69
83
 
70
84
  def source_data
@@ -72,10 +86,7 @@ module Slather
72
86
  end
73
87
 
74
88
  def all_lines
75
- if @all_lines == nil
76
- @all_lines = source_code_lines
77
- end
78
- @all_lines
89
+ @all_lines ||= source_code_lines
79
90
  end
80
91
 
81
92
  def raw_source
@@ -94,6 +105,9 @@ module Slather
94
105
 
95
106
  def line_number_in_line(line, line_numbers_first = self.line_numbers_first)
96
107
  if line_numbers_first
108
+ # Skip regex if the number is the first thing in the line
109
+ fastpath_number = line.to_i
110
+ return fastpath_number if fastpath_number != 0
97
111
  line =~ /^(\s*)(\d*)/
98
112
  group = $2
99
113
  else
@@ -123,7 +137,7 @@ module Slather
123
137
  end
124
138
 
125
139
  def line_coverage_data
126
- source_code_lines.map do |line|
140
+ all_lines.map do |line|
127
141
  coverage_for_line(line, self.line_numbers_first)
128
142
  end
129
143
  end
@@ -191,36 +191,38 @@ module Slather
191
191
  end
192
192
 
193
193
  def profdata_coverage_dir
194
- raise StandardError, "The specified build directory (#{self.build_directory}) does not exist" unless File.exists?(self.build_directory)
195
- dir = nil
196
- if self.scheme
197
- dir = Dir[File.join(build_directory,"/**/CodeCoverage/#{self.scheme}")].first
198
- else
199
- dir = Dir[File.join(build_directory,"/**/#{first_product_name}")].first
200
- end
194
+ @profdata_coverage_dir ||= begin
195
+ raise StandardError, "The specified build directory (#{self.build_directory}) does not exist" unless File.exists?(self.build_directory)
196
+ dir = nil
197
+ if self.scheme
198
+ dir = Dir[File.join(build_directory,"/**/CodeCoverage/#{self.scheme}")].first
199
+ else
200
+ dir = Dir[File.join(build_directory,"/**/#{first_product_name}")].first
201
+ end
201
202
 
202
- if dir == nil
203
- # Xcode 7.3 moved the location of Coverage.profdata
204
- dir = Dir[File.join(build_directory,"/**/CodeCoverage")].first
205
- end
203
+ if dir == nil
204
+ # Xcode 7.3 moved the location of Coverage.profdata
205
+ dir = Dir[File.join(build_directory,"/**/CodeCoverage")].first
206
+ end
206
207
 
207
- if dir == nil && Slather.xcode_version[0] >= 9
208
- # Xcode 9 moved the location of Coverage.profdata
209
- coverage_files = Dir[File.join(build_directory, "/**/ProfileData/*/Coverage.profdata")]
208
+ if dir == nil && Slather.xcode_version[0] >= 9
209
+ # Xcode 9 moved the location of Coverage.profdata
210
+ coverage_files = Dir[File.join(build_directory, "/**/ProfileData/*/Coverage.profdata")]
210
211
 
211
- if coverage_files.count == 0
212
- # Look up one directory
213
- # The ProfileData directory is next to Intermediates.noindex (in previous versions of Xcode the coverage was inside Intermediates)
214
- coverage_files = Dir[File.join(build_directory, "../**/ProfileData/*/Coverage.profdata")]
215
- end
212
+ if coverage_files.count == 0
213
+ # Look up one directory
214
+ # The ProfileData directory is next to Intermediates.noindex (in previous versions of Xcode the coverage was inside Intermediates)
215
+ coverage_files = Dir[File.join(build_directory, "../**/ProfileData/*/Coverage.profdata")]
216
+ end
216
217
 
217
- if coverage_files != nil && coverage_files.count != 0
218
- dir = Pathname.new(coverage_files.first).parent()
218
+ if coverage_files != nil && coverage_files.count != 0
219
+ dir = Pathname.new(coverage_files.first).parent()
220
+ end
219
221
  end
220
- end
221
222
 
222
- raise StandardError, "No coverage directory found." unless dir != nil
223
- dir
223
+ raise StandardError, "No coverage directory found." unless dir != nil
224
+ dir
225
+ end
224
226
  end
225
227
 
226
228
  def profdata_file
@@ -1,3 +1,3 @@
1
1
  module Slather
2
- VERSION = '2.4.7' unless defined?(Slather::VERSION)
2
+ VERSION = '2.4.8' unless defined?(Slather::VERSION)
3
3
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ['lib']
19
19
 
20
20
  spec.add_development_dependency 'bundler', '~> 1.17'
21
- spec.add_development_dependency 'coveralls', '~> 0'
21
+ spec.add_development_dependency 'coveralls', '~> 0.8'
22
22
  spec.add_development_dependency 'simplecov', '~> 0'
23
23
  spec.add_development_dependency 'rake', '~> 12.3'
24
24
  spec.add_development_dependency 'rspec', '~> 3.8'
@@ -13,7 +13,7 @@ describe Slather do
13
13
  # Execute the post_install hook via CocoaPods
14
14
  sandbox_root = 'Pods'
15
15
  sandbox = Pod::Sandbox.new(sandbox_root)
16
- context = Pod::Installer::PostInstallHooksContext.generate(sandbox, [])
16
+ context = Pod::Installer::PostInstallHooksContext.generate(sandbox, mock_project, [])
17
17
  Pod::HooksManager.run(:post_install, context, {'slather' => nil})
18
18
  end
19
19
  end
@@ -90,6 +90,23 @@ describe Slather::ProfdataCoverageFile do
90
90
  end
91
91
  end
92
92
 
93
+ describe '#ignore_error_lines' do
94
+ it 'should ignore lines starting with - when line_numbers_first is true' do
95
+ expect(profdata_coverage_file.ignore_error_lines(['--------'], true)).to eq([])
96
+ expect(profdata_coverage_file.ignore_error_lines(['--------', 'not ignored'], true)).to eq(['not ignored'])
97
+ end
98
+
99
+ it 'should ignore lines starting with | when line_numbers_first is true' do
100
+ expect(profdata_coverage_file.ignore_error_lines(['| Unexecuted instantiation'], true)).to eq([])
101
+ expect(profdata_coverage_file.ignore_error_lines(['| Unexecuted instantiation', 'not ignored'], true)).to eq(['not ignored'])
102
+ end
103
+
104
+ it 'should not ignore any lines when line_numbers_first is false' do
105
+ lines = ['| Unexecuted instantiation', '------']
106
+ expect(profdata_coverage_file.ignore_error_lines(lines, false)).to eq(lines)
107
+ end
108
+ end
109
+
93
110
  describe "#coverage_for_line" do
94
111
  it "should return the number of hits for the line" do
95
112
  expect(profdata_coverage_file.coverage_for_line(" 10| 40| func applicationWillTerminate(application: UIApplication) {", false)).to eq(10)
@@ -116,6 +133,10 @@ describe Slather::ProfdataCoverageFile do
116
133
  expect(profdata_coverage_file.coverage_for_line(" 18| 11.8k| return a + b;", true)).to eq(11800)
117
134
  expect(profdata_coverage_file.coverage_for_line(" 18| 2.58M| return a + b;", true)).to eq(2580000)
118
135
  end
136
+
137
+ it 'should ignore errors in profdata' do
138
+ expect(profdata_coverage_file.coverage_for_line('------------------', true)).to eq(nil)
139
+ end
119
140
  end
120
141
 
121
142
  describe "#num_lines_tested" do
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.7
4
+ version: 2.4.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Larsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-14 00:00:00.000000000 Z
11
+ date: 2020-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '0.8'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '0.8'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: simplecov
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -337,8 +337,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
337
337
  - !ruby/object:Gem::Version
338
338
  version: '0'
339
339
  requirements: []
340
- rubyforge_project:
341
- rubygems_version: 2.7.6
340
+ rubygems_version: 3.1.2
342
341
  signing_key:
343
342
  specification_version: 4
344
343
  summary: Test coverage reports for Xcode projects