slather 2.4.8 → 2.7.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.travis.yml +4 -2
- data/CHANGELOG.md +100 -0
- data/README.md +26 -3
- data/assets/slather.css +2 -1
- data/lib/slather/command/coverage_command.rb +9 -1
- data/lib/slather/coverage_file.rb +14 -9
- data/lib/slather/coverage_service/coveralls.rb +129 -5
- data/lib/slather/coverage_service/html_output.rb +62 -6
- data/lib/slather/coverage_service/sonarqube_xml_output.rb +61 -0
- data/lib/slather/profdata_coverage_file.rb +42 -2
- data/lib/slather/project.rb +41 -7
- data/lib/slather/version.rb +1 -1
- data/lib/slather.rb +1 -0
- data/slather.gemspec +5 -5
- data/spec/fixtures/FixtureFramework/FixtureFramework.h +19 -0
- data/spec/fixtures/FixtureFramework/FlashExperiment.swift +7 -0
- data/spec/fixtures/FixtureFramework/Info.plist +24 -0
- data/spec/fixtures/FixtureFrameworkTests/FixtureFrameworkTests.swift +34 -0
- data/spec/fixtures/FixtureFrameworkTests/FlashExperimentTests.swift +9 -0
- data/spec/fixtures/FixtureFrameworkTests/Info.plist +22 -0
- data/spec/fixtures/cobertura.xml +157 -37
- data/spec/fixtures/fixtures.xcodeproj/project.pbxproj +222 -0
- data/spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixtures.xcscheme +21 -5
- data/spec/fixtures/fixtures.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/spec/fixtures/sonarqube-generic-coverage.xml +93 -0
- data/spec/slather/coverage_service/cobertura_xml_spec.rb +1 -1
- data/spec/slather/coverage_service/coveralls_spec.rb +20 -0
- data/spec/slather/coverage_service/html_output_spec.rb +2 -2
- data/spec/slather/coverage_service/json_spec.rb +1 -1
- data/spec/slather/coverage_service/llvm_cov_spec.rb +1 -1
- data/spec/slather/coverage_service/sonarqube_xml_spec.rb +46 -0
- data/spec/slather/profdata_coverage_spec.rb +16 -0
- data/spec/slather/project_spec.rb +12 -8
- data/spec/spec_helper.rb +1 -0
- metadata +38 -25
@@ -8,7 +8,7 @@ module Slather
|
|
8
8
|
include CoverageInfo
|
9
9
|
include CoverallsCoverage
|
10
10
|
|
11
|
-
attr_accessor :project, :source, :line_numbers_first, :line_data
|
11
|
+
attr_accessor :project, :source, :segments, :line_numbers_first, :line_data
|
12
12
|
|
13
13
|
def initialize(project, source, line_numbers_first)
|
14
14
|
self.project = project
|
@@ -188,7 +188,47 @@ module Slather
|
|
188
188
|
|
189
189
|
def branch_coverage_data
|
190
190
|
@branch_coverage_data ||= begin
|
191
|
-
Hash.new
|
191
|
+
branch_coverage_data = Hash.new
|
192
|
+
|
193
|
+
self.segments.each do |segment|
|
194
|
+
line, col, hits, has_count, *rest = segment
|
195
|
+
next if !has_count
|
196
|
+
if branch_coverage_data.key?(line)
|
197
|
+
branch_coverage_data[line] = branch_coverage_data[line] + [hits]
|
198
|
+
else
|
199
|
+
branch_coverage_data[line] = [hits]
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
branch_coverage_data
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def branch_region_data
|
208
|
+
@branch_region_data ||= begin
|
209
|
+
branch_region_data = Hash.new
|
210
|
+
region_start = nil
|
211
|
+
current_line = 0
|
212
|
+
@segments ||= []
|
213
|
+
@segments.each do |segment|
|
214
|
+
line, col, hits, has_count, *rest = segment
|
215
|
+
# Make column 0 based index
|
216
|
+
col = col - 1
|
217
|
+
if hits == 0 && has_count
|
218
|
+
current_line = line
|
219
|
+
region_start = col
|
220
|
+
elsif region_start != nil && hits > 0 && has_count
|
221
|
+
# if the region wrapped to a new line before ending, put nil to indicate it didnt end on this line
|
222
|
+
region_end = line == current_line ? col - region_start : nil
|
223
|
+
if branch_region_data.key?(current_line)
|
224
|
+
branch_region_data[current_line] << [region_start, region_end]
|
225
|
+
else
|
226
|
+
branch_region_data[current_line] = [[region_start, region_end]]
|
227
|
+
end
|
228
|
+
region_start = nil
|
229
|
+
end
|
230
|
+
end
|
231
|
+
branch_region_data
|
192
232
|
end
|
193
233
|
end
|
194
234
|
|
data/lib/slather/project.rb
CHANGED
@@ -44,7 +44,7 @@ module Slather
|
|
44
44
|
class Project < Xcodeproj::Project
|
45
45
|
|
46
46
|
attr_accessor :build_directory, :ignore_list, :ci_service, :coverage_service, :coverage_access_token, :source_directory,
|
47
|
-
:output_directory, :xcodeproj, :show_html, :verbose_mode, :input_format, :scheme, :workspace, :binary_file, :binary_basename, :arch, :source_files,
|
47
|
+
:output_directory, :xcodeproj, :show_html, :cdn_assets, :verbose_mode, :input_format, :scheme, :workspace, :binary_file, :binary_basename, :arch, :source_files,
|
48
48
|
:decimals, :llvm_version, :configuration
|
49
49
|
|
50
50
|
alias_method :setup_for_coverage, :slather_setup_for_coverage
|
@@ -135,7 +135,12 @@ module Slather
|
|
135
135
|
coverage_json = JSON.parse(coverage_json_string)
|
136
136
|
coverage_json["data"].reduce([]) do |result, chunk|
|
137
137
|
result.concat(chunk["files"].map do |file|
|
138
|
-
|
138
|
+
filename = file["filename"]
|
139
|
+
path = Pathname(filename)
|
140
|
+
# Don't crash if the file doesn't exist on disk.
|
141
|
+
# This may happen for autogenerated files that have been deleted.
|
142
|
+
filename = path.exist? ? path.realpath : filename
|
143
|
+
{"filename" => filename, "segments" => file["segments"]}
|
139
144
|
end)
|
140
145
|
end
|
141
146
|
end
|
@@ -162,13 +167,24 @@ module Slather
|
|
162
167
|
end
|
163
168
|
private :create_coverage_files_for_binary
|
164
169
|
|
165
|
-
def create_coverage_files(binary_path,
|
170
|
+
def create_coverage_files(binary_path, path_objects)
|
166
171
|
line_numbers_first = Gem::Version.new(self.llvm_version) >= Gem::Version.new('8.1.0')
|
172
|
+
# get just file names from the path objects
|
173
|
+
pathnames = path_objects.map { |path_obj| path_obj["filename"] }.compact
|
174
|
+
# Map of path name => segment array
|
175
|
+
paths_to_segments = path_objects.reduce(Hash.new) do |hash, path_obj|
|
176
|
+
hash[path_obj["filename"]] = path_obj["segments"]
|
177
|
+
hash
|
178
|
+
end
|
167
179
|
files = create_profdata(binary_path, pathnames)
|
168
180
|
files.map do |source|
|
169
181
|
coverage_file = coverage_file_class.new(self, source, line_numbers_first)
|
170
182
|
# If a single source file is used, the resulting output does not contain the file name.
|
171
183
|
coverage_file.source_file_pathname = pathnames.first if pathnames.count == 1
|
184
|
+
# if there is segment data for the given path, add it to the coverage_file
|
185
|
+
if paths_to_segments.key?(coverage_file.source_file_pathname)
|
186
|
+
coverage_file.segments = paths_to_segments[coverage_file.source_file_pathname]
|
187
|
+
end
|
172
188
|
!coverage_file.ignored? ? coverage_file : nil
|
173
189
|
end.compact
|
174
190
|
end
|
@@ -192,7 +208,7 @@ module Slather
|
|
192
208
|
|
193
209
|
def profdata_coverage_dir
|
194
210
|
@profdata_coverage_dir ||= begin
|
195
|
-
raise StandardError, "The specified build directory (#{self.build_directory}) does not exist" unless File.
|
211
|
+
raise StandardError, "The specified build directory (#{self.build_directory}) does not exist" unless File.exist?(self.build_directory)
|
196
212
|
dir = nil
|
197
213
|
if self.scheme
|
198
214
|
dir = Dir[File.join(build_directory,"/**/CodeCoverage/#{self.scheme}")].first
|
@@ -277,7 +293,10 @@ module Slather
|
|
277
293
|
if self.arch
|
278
294
|
llvm_cov_args << "--arch" << self.arch
|
279
295
|
end
|
280
|
-
|
296
|
+
|
297
|
+
# POSIX systems have an ARG_MAX for the maximum total length of the command line, so the command may fail with an error message of "Argument list too long".
|
298
|
+
# Using the xargs command we can break the list of source_files into sublists small enough to be acceptable.
|
299
|
+
`printf '%s\\0' #{source_files.shelljoin} | xargs -0 xcrun llvm-cov #{llvm_cov_args.shelljoin}`
|
281
300
|
end
|
282
301
|
private :unsafe_profdata_llvm_cov_output
|
283
302
|
|
@@ -356,7 +375,7 @@ module Slather
|
|
356
375
|
end
|
357
376
|
|
358
377
|
def configure_ci_service
|
359
|
-
self.ci_service ||= (self.class.yml["ci_service"] || :
|
378
|
+
self.ci_service ||= (ENV["CI_SERVICE"] || self.class.yml["ci_service"] || :other)
|
360
379
|
end
|
361
380
|
|
362
381
|
def configure_input_format
|
@@ -424,6 +443,8 @@ module Slather
|
|
424
443
|
extend(Slather::CoverageService::HtmlOutput)
|
425
444
|
when :json
|
426
445
|
extend(Slather::CoverageService::JsonOutput)
|
446
|
+
when :sonarqube_xml
|
447
|
+
extend(Slather::CoverageService::SonarqubeXmlOutput)
|
427
448
|
else
|
428
449
|
raise ArgumentError, "`#{coverage_service}` is not a valid coverage service. Try `terminal`, `coveralls`, `gutter_json`, `cobertura_xml` or `html`"
|
429
450
|
end
|
@@ -482,7 +503,7 @@ module Slather
|
|
482
503
|
end
|
483
504
|
end
|
484
505
|
|
485
|
-
raise StandardError, "No scheme named '#{self.scheme}' found in #{self.path}" unless File.
|
506
|
+
raise StandardError, "No scheme named '#{self.scheme}' found in #{self.path}" unless File.exist? xcscheme_path
|
486
507
|
|
487
508
|
xcscheme = Xcodeproj::XCScheme.new(xcscheme_path)
|
488
509
|
|
@@ -566,6 +587,19 @@ module Slather
|
|
566
587
|
def find_buildable_names(xcscheme)
|
567
588
|
found_buildable_names = []
|
568
589
|
|
590
|
+
# enumerate code coverage targets
|
591
|
+
begin
|
592
|
+
code_coverage_targets = xcscheme.test_action.xml_element.elements['CodeCoverageTargets']
|
593
|
+
targets = code_coverage_targets.map do |node|
|
594
|
+
Xcodeproj::XCScheme::BuildableReference.new(node) if node.is_a?(REXML::Element)
|
595
|
+
end.compact
|
596
|
+
buildable_names = targets.each do |target|
|
597
|
+
found_buildable_names.push(target.buildable_name)
|
598
|
+
end
|
599
|
+
rescue
|
600
|
+
# just in case if there are no entries in the test action
|
601
|
+
end
|
602
|
+
|
569
603
|
# enumerate build action entries
|
570
604
|
begin
|
571
605
|
xcscheme.build_action.entries.each do |entry|
|
data/lib/slather/version.rb
CHANGED
data/lib/slather.rb
CHANGED
@@ -12,6 +12,7 @@ require 'slather/coverage_service/simple_output'
|
|
12
12
|
require 'slather/coverage_service/html_output'
|
13
13
|
require 'slather/coverage_service/json_output'
|
14
14
|
require 'slather/coverage_service/llvm_cov_output'
|
15
|
+
require 'slather/coverage_service/sonarqube_xml_output'
|
15
16
|
require 'cfpropertylist'
|
16
17
|
|
17
18
|
module Slather
|
data/slather.gemspec
CHANGED
@@ -17,20 +17,20 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
|
-
spec.add_development_dependency 'bundler', '~>
|
20
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
21
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'
|
25
25
|
spec.add_development_dependency 'pry', '~> 0.12'
|
26
|
-
spec.add_development_dependency 'cocoapods', '~> 1.
|
26
|
+
spec.add_development_dependency 'cocoapods', '~> 1.10.beta.1'
|
27
27
|
spec.add_development_dependency 'json_spec', '~> 1.1'
|
28
28
|
spec.add_development_dependency 'equivalent-xml', '~> 0.6'
|
29
29
|
|
30
30
|
spec.add_dependency 'clamp', '~> 1.3'
|
31
|
-
spec.add_dependency 'xcodeproj', '~> 1.
|
32
|
-
spec.add_dependency 'nokogiri', '
|
31
|
+
spec.add_dependency 'xcodeproj', '~> 1.21'
|
32
|
+
spec.add_dependency 'nokogiri', '>= 1.14.3'
|
33
33
|
spec.add_dependency 'CFPropertyList', '>= 2.2', '< 4'
|
34
34
|
|
35
|
-
spec.add_runtime_dependency 'activesupport'
|
35
|
+
spec.add_runtime_dependency 'activesupport'
|
36
36
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
//
|
2
|
+
// FixtureFramework.h
|
3
|
+
// FixtureFramework
|
4
|
+
//
|
5
|
+
// Created by Stephen Williams on 11/03/21.
|
6
|
+
// Copyright © 2021 marklarr. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
#import <Foundation/Foundation.h>
|
10
|
+
|
11
|
+
//! Project version number for FixtureFramework.
|
12
|
+
FOUNDATION_EXPORT double FixtureFrameworkVersionNumber;
|
13
|
+
|
14
|
+
//! Project version string for FixtureFramework.
|
15
|
+
FOUNDATION_EXPORT const unsigned char FixtureFrameworkVersionString[];
|
16
|
+
|
17
|
+
// In this header, you should import all the public headers of your framework using statements like #import <FixtureFramework/PublicHeader.h>
|
18
|
+
|
19
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>CFBundleDevelopmentRegion</key>
|
6
|
+
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
7
|
+
<key>CFBundleExecutable</key>
|
8
|
+
<string>$(EXECUTABLE_NAME)</string>
|
9
|
+
<key>CFBundleIdentifier</key>
|
10
|
+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
11
|
+
<key>CFBundleInfoDictionaryVersion</key>
|
12
|
+
<string>6.0</string>
|
13
|
+
<key>CFBundleName</key>
|
14
|
+
<string>$(PRODUCT_NAME)</string>
|
15
|
+
<key>CFBundlePackageType</key>
|
16
|
+
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
17
|
+
<key>CFBundleShortVersionString</key>
|
18
|
+
<string>1.0</string>
|
19
|
+
<key>CFBundleVersion</key>
|
20
|
+
<string>$(CURRENT_PROJECT_VERSION)</string>
|
21
|
+
<key>NSHumanReadableCopyright</key>
|
22
|
+
<string>Copyright © 2021 marklarr. All rights reserved.</string>
|
23
|
+
</dict>
|
24
|
+
</plist>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
//
|
2
|
+
// FixtureFrameworkTests.swift
|
3
|
+
// FixtureFrameworkTests
|
4
|
+
//
|
5
|
+
// Created by Stephen Williams on 11/03/21.
|
6
|
+
// Copyright © 2021 marklarr. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import XCTest
|
10
|
+
@testable import FixtureFramework
|
11
|
+
|
12
|
+
class FixtureFrameworkTests: XCTestCase {
|
13
|
+
|
14
|
+
override func setUpWithError() throws {
|
15
|
+
// Put setup code here. This method is called before the invocation of each test method in the class.
|
16
|
+
}
|
17
|
+
|
18
|
+
override func tearDownWithError() throws {
|
19
|
+
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
20
|
+
}
|
21
|
+
|
22
|
+
func testExample() throws {
|
23
|
+
// This is an example of a functional test case.
|
24
|
+
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
25
|
+
}
|
26
|
+
|
27
|
+
func testPerformanceExample() throws {
|
28
|
+
// This is an example of a performance test case.
|
29
|
+
self.measure {
|
30
|
+
// Put the code you want to measure the time of here.
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>CFBundleDevelopmentRegion</key>
|
6
|
+
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
7
|
+
<key>CFBundleExecutable</key>
|
8
|
+
<string>$(EXECUTABLE_NAME)</string>
|
9
|
+
<key>CFBundleIdentifier</key>
|
10
|
+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
11
|
+
<key>CFBundleInfoDictionaryVersion</key>
|
12
|
+
<string>6.0</string>
|
13
|
+
<key>CFBundleName</key>
|
14
|
+
<string>$(PRODUCT_NAME)</string>
|
15
|
+
<key>CFBundlePackageType</key>
|
16
|
+
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
17
|
+
<key>CFBundleShortVersionString</key>
|
18
|
+
<string>1.0</string>
|
19
|
+
<key>CFBundleVersion</key>
|
20
|
+
<string>1</string>
|
21
|
+
</dict>
|
22
|
+
</plist>
|
data/spec/fixtures/cobertura.xml
CHANGED
@@ -1,58 +1,134 @@
|
|
1
1
|
<?xml version="1.0"?>
|
2
2
|
<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">
|
3
|
-
<coverage line-rate="0.7500000000000000" branch-rate="
|
3
|
+
<coverage line-rate="0.7500000000000000" branch-rate="0.6410256410256411" lines-covered="60" lines-valid="80" branches-covered="25" branches-valid="39" complexity="0.0" timestamp="1614041230" version="Slather 2.6.1">
|
4
4
|
<sources>
|
5
|
-
<source>/Users/
|
5
|
+
<source>/Users/hborawski/sandbox/slather</source>
|
6
6
|
</sources>
|
7
7
|
<packages>
|
8
|
-
<package name="spec.fixtures.fixtures" line-rate="0.5000000000000000" branch-rate="
|
8
|
+
<package name="spec.fixtures.fixtures" line-rate="0.5000000000000000" branch-rate="0.5000000000000000" complexity="0.0">
|
9
9
|
<classes>
|
10
|
-
<class name="fixtures.m" filename="spec/fixtures/fixtures/fixtures.m" line-rate="0.5000000000000000" branch-rate="
|
10
|
+
<class name="fixtures.m" filename="spec/fixtures/fixtures/fixtures.m" line-rate="0.5000000000000000" branch-rate="0.5000000000000000" complexity="0.0">
|
11
11
|
<methods/>
|
12
12
|
<lines>
|
13
|
-
<line number="14" branch="
|
13
|
+
<line number="14" branch="true" hits="1" condition-coverage="100% (1/1)">
|
14
|
+
<conditions>
|
15
|
+
<condition number="0" type="jump" coverage="100%"/>
|
16
|
+
</conditions>
|
17
|
+
</line>
|
14
18
|
<line number="15" branch="false" hits="1"/>
|
15
19
|
<line number="16" branch="false" hits="1"/>
|
16
|
-
<line number="19" branch="
|
20
|
+
<line number="19" branch="true" hits="0" condition-coverage="0% (0/1)">
|
21
|
+
<conditions>
|
22
|
+
<condition number="0" type="jump" coverage="0%"/>
|
23
|
+
</conditions>
|
24
|
+
</line>
|
17
25
|
<line number="20" branch="false" hits="0"/>
|
18
26
|
<line number="21" branch="false" hits="0"/>
|
19
27
|
</lines>
|
20
28
|
</class>
|
21
29
|
</classes>
|
22
30
|
</package>
|
23
|
-
<package name="spec.fixtures.fixtures.more_files" line-rate="0.4333333333333333" branch-rate="
|
31
|
+
<package name="spec.fixtures.fixtures.more_files" line-rate="0.4333333333333333" branch-rate="0.5000000000000000" complexity="0.0">
|
24
32
|
<classes>
|
25
|
-
<class name="Branches.m" filename="spec/fixtures/fixtures/more_files/Branches.m" line-rate="0.4333333333333333" branch-rate="
|
33
|
+
<class name="Branches.m" filename="spec/fixtures/fixtures/more_files/Branches.m" line-rate="0.4333333333333333" branch-rate="0.5000000000000000" complexity="0.0">
|
26
34
|
<methods/>
|
27
35
|
<lines>
|
28
|
-
<line number="14" branch="
|
29
|
-
|
36
|
+
<line number="14" branch="true" hits="2" condition-coverage="100% (1/1)">
|
37
|
+
<conditions>
|
38
|
+
<condition number="0" type="jump" coverage="100%"/>
|
39
|
+
</conditions>
|
40
|
+
</line>
|
41
|
+
<line number="15" branch="true" hits="2" condition-coverage="100% (4/4)">
|
42
|
+
<conditions>
|
43
|
+
<condition number="0" type="jump" coverage="100%"/>
|
44
|
+
</conditions>
|
45
|
+
</line>
|
30
46
|
<line number="16" branch="false" hits="1"/>
|
31
47
|
<line number="17" branch="false" hits="1"/>
|
32
|
-
<line number="18" branch="
|
48
|
+
<line number="18" branch="true" hits="1" condition-coverage="50% (2/4)">
|
49
|
+
<conditions>
|
50
|
+
<condition number="0" type="jump" coverage="50%"/>
|
51
|
+
</conditions>
|
52
|
+
</line>
|
33
53
|
<line number="19" branch="false" hits="0"/>
|
34
|
-
<line number="20" branch="
|
35
|
-
|
54
|
+
<line number="20" branch="true" hits="0" condition-coverage="100% (1/1)">
|
55
|
+
<conditions>
|
56
|
+
<condition number="0" type="jump" coverage="100%"/>
|
57
|
+
</conditions>
|
58
|
+
</line>
|
59
|
+
<line number="21" branch="true" hits="1" condition-coverage="100% (1/1)">
|
60
|
+
<conditions>
|
61
|
+
<condition number="0" type="jump" coverage="100%"/>
|
62
|
+
</conditions>
|
63
|
+
</line>
|
36
64
|
<line number="22" branch="false" hits="1"/>
|
37
|
-
<line number="23" branch="
|
65
|
+
<line number="23" branch="true" hits="1" condition-coverage="100% (1/1)">
|
66
|
+
<conditions>
|
67
|
+
<condition number="0" type="jump" coverage="100%"/>
|
68
|
+
</conditions>
|
69
|
+
</line>
|
38
70
|
<line number="24" branch="false" hits="2"/>
|
39
71
|
<line number="25" branch="false" hits="2"/>
|
40
|
-
<line number="26" branch="
|
72
|
+
<line number="26" branch="true" hits="2" condition-coverage="100% (3/3)">
|
73
|
+
<conditions>
|
74
|
+
<condition number="0" type="jump" coverage="100%"/>
|
75
|
+
</conditions>
|
76
|
+
</line>
|
41
77
|
<line number="27" branch="false" hits="2"/>
|
42
|
-
<line number="28" branch="
|
43
|
-
|
44
|
-
|
78
|
+
<line number="28" branch="true" hits="2" condition-coverage="0% (0/1)">
|
79
|
+
<conditions>
|
80
|
+
<condition number="0" type="jump" coverage="0%"/>
|
81
|
+
</conditions>
|
82
|
+
</line>
|
83
|
+
<line number="29" branch="true" hits="0" condition-coverage="0% (0/2)">
|
84
|
+
<conditions>
|
85
|
+
<condition number="0" type="jump" coverage="0%"/>
|
86
|
+
</conditions>
|
87
|
+
</line>
|
88
|
+
<line number="30" branch="true" hits="0" condition-coverage="0% (0/1)">
|
89
|
+
<conditions>
|
90
|
+
<condition number="0" type="jump" coverage="0%"/>
|
91
|
+
</conditions>
|
92
|
+
</line>
|
45
93
|
<line number="31" branch="false" hits="0"/>
|
46
|
-
<line number="32" branch="
|
94
|
+
<line number="32" branch="true" hits="0" condition-coverage="0% (0/1)">
|
95
|
+
<conditions>
|
96
|
+
<condition number="0" type="jump" coverage="0%"/>
|
97
|
+
</conditions>
|
98
|
+
</line>
|
47
99
|
<line number="33" branch="false" hits="0"/>
|
48
|
-
<line number="34" branch="
|
100
|
+
<line number="34" branch="true" hits="0" condition-coverage="0% (0/1)">
|
101
|
+
<conditions>
|
102
|
+
<condition number="0" type="jump" coverage="0%"/>
|
103
|
+
</conditions>
|
104
|
+
</line>
|
49
105
|
<line number="35" branch="false" hits="0"/>
|
50
|
-
<line number="36" branch="
|
51
|
-
|
106
|
+
<line number="36" branch="true" hits="0" condition-coverage="0% (0/1)">
|
107
|
+
<conditions>
|
108
|
+
<condition number="0" type="jump" coverage="0%"/>
|
109
|
+
</conditions>
|
110
|
+
</line>
|
111
|
+
<line number="37" branch="true" hits="0" condition-coverage="0% (0/1)">
|
112
|
+
<conditions>
|
113
|
+
<condition number="0" type="jump" coverage="0%"/>
|
114
|
+
</conditions>
|
115
|
+
</line>
|
52
116
|
<line number="38" branch="false" hits="0"/>
|
53
|
-
<line number="39" branch="
|
54
|
-
|
55
|
-
|
117
|
+
<line number="39" branch="true" hits="0" condition-coverage="0% (0/1)">
|
118
|
+
<conditions>
|
119
|
+
<condition number="0" type="jump" coverage="0%"/>
|
120
|
+
</conditions>
|
121
|
+
</line>
|
122
|
+
<line number="40" branch="true" hits="0" condition-coverage="0% (0/1)">
|
123
|
+
<conditions>
|
124
|
+
<condition number="0" type="jump" coverage="0%"/>
|
125
|
+
</conditions>
|
126
|
+
</line>
|
127
|
+
<line number="41" branch="true" hits="0" condition-coverage="0% (0/1)">
|
128
|
+
<conditions>
|
129
|
+
<condition number="0" type="jump" coverage="0%"/>
|
130
|
+
</conditions>
|
131
|
+
</line>
|
56
132
|
<line number="42" branch="false" hits="0"/>
|
57
133
|
<line number="43" branch="false" hits="0"/>
|
58
134
|
</lines>
|
@@ -64,19 +140,35 @@
|
|
64
140
|
<class name="BranchesTests.m" filename="spec/fixtures/fixturesTests/BranchesTests.m" line-rate="1.0000000000000000" branch-rate="1.0000000000000000" complexity="0.0">
|
65
141
|
<methods/>
|
66
142
|
<lines>
|
67
|
-
<line number="18" branch="
|
143
|
+
<line number="18" branch="true" hits="2" condition-coverage="100% (1/1)">
|
144
|
+
<conditions>
|
145
|
+
<condition number="0" type="jump" coverage="100%"/>
|
146
|
+
</conditions>
|
147
|
+
</line>
|
68
148
|
<line number="19" branch="false" hits="2"/>
|
69
149
|
<line number="20" branch="false" hits="2"/>
|
70
150
|
<line number="21" branch="false" hits="2"/>
|
71
|
-
<line number="23" branch="
|
151
|
+
<line number="23" branch="true" hits="2" condition-coverage="100% (1/1)">
|
152
|
+
<conditions>
|
153
|
+
<condition number="0" type="jump" coverage="100%"/>
|
154
|
+
</conditions>
|
155
|
+
</line>
|
72
156
|
<line number="24" branch="false" hits="2"/>
|
73
157
|
<line number="25" branch="false" hits="2"/>
|
74
158
|
<line number="26" branch="false" hits="2"/>
|
75
|
-
<line number="28" branch="
|
159
|
+
<line number="28" branch="true" hits="1" condition-coverage="100% (1/1)">
|
160
|
+
<conditions>
|
161
|
+
<condition number="0" type="jump" coverage="100%"/>
|
162
|
+
</conditions>
|
163
|
+
</line>
|
76
164
|
<line number="29" branch="false" hits="1"/>
|
77
165
|
<line number="30" branch="false" hits="1"/>
|
78
166
|
<line number="31" branch="false" hits="1"/>
|
79
|
-
<line number="33" branch="
|
167
|
+
<line number="33" branch="true" hits="1" condition-coverage="100% (1/1)">
|
168
|
+
<conditions>
|
169
|
+
<condition number="0" type="jump" coverage="100%"/>
|
170
|
+
</conditions>
|
171
|
+
</line>
|
80
172
|
<line number="34" branch="false" hits="1"/>
|
81
173
|
<line number="35" branch="false" hits="1"/>
|
82
174
|
<line number="36" branch="false" hits="1"/>
|
@@ -85,37 +177,65 @@
|
|
85
177
|
<class name="fixturesTests.m" filename="spec/fixtures/fixturesTests/fixturesTests.m" line-rate="1.0000000000000000" branch-rate="1.0000000000000000" complexity="0.0">
|
86
178
|
<methods/>
|
87
179
|
<lines>
|
88
|
-
<line number="20" branch="
|
180
|
+
<line number="20" branch="true" hits="2" condition-coverage="100% (1/1)">
|
181
|
+
<conditions>
|
182
|
+
<condition number="0" type="jump" coverage="100%"/>
|
183
|
+
</conditions>
|
184
|
+
</line>
|
89
185
|
<line number="21" branch="false" hits="2"/>
|
90
186
|
<line number="22" branch="false" hits="2"/>
|
91
187
|
<line number="23" branch="false" hits="2"/>
|
92
|
-
<line number="26" branch="
|
188
|
+
<line number="26" branch="true" hits="2" condition-coverage="100% (1/1)">
|
189
|
+
<conditions>
|
190
|
+
<condition number="0" type="jump" coverage="100%"/>
|
191
|
+
</conditions>
|
192
|
+
</line>
|
93
193
|
<line number="27" branch="false" hits="2"/>
|
94
194
|
<line number="28" branch="false" hits="2"/>
|
95
195
|
<line number="29" branch="false" hits="2"/>
|
96
|
-
<line number="32" branch="
|
196
|
+
<line number="32" branch="true" hits="1" condition-coverage="100% (1/1)">
|
197
|
+
<conditions>
|
198
|
+
<condition number="0" type="jump" coverage="100%"/>
|
199
|
+
</conditions>
|
200
|
+
</line>
|
97
201
|
<line number="33" branch="false" hits="1"/>
|
98
202
|
<line number="34" branch="false" hits="1"/>
|
99
203
|
<line number="35" branch="false" hits="1"/>
|
100
|
-
<line number="38" branch="
|
204
|
+
<line number="38" branch="true" hits="1" condition-coverage="100% (1/1)">
|
205
|
+
<conditions>
|
206
|
+
<condition number="0" type="jump" coverage="100%"/>
|
207
|
+
</conditions>
|
208
|
+
</line>
|
101
209
|
<line number="39" branch="false" hits="1"/>
|
102
210
|
<line number="40" branch="false" hits="1"/>
|
103
211
|
<line number="41" branch="false" hits="1"/>
|
104
212
|
<line number="42" branch="false" hits="1"/>
|
105
213
|
</lines>
|
106
214
|
</class>
|
107
|
-
<class name="peekaviewTests
|
215
|
+
<class name="peekaviewTests💣.m" filename="spec/fixtures/fixturesTests/peekaviewTests💣.m" line-rate="1.0000000000000000" branch-rate="1.0000000000000000" complexity="0.0">
|
108
216
|
<methods/>
|
109
217
|
<lines>
|
110
|
-
<line number="18" branch="
|
218
|
+
<line number="18" branch="true" hits="1" condition-coverage="100% (1/1)">
|
219
|
+
<conditions>
|
220
|
+
<condition number="0" type="jump" coverage="100%"/>
|
221
|
+
</conditions>
|
222
|
+
</line>
|
111
223
|
<line number="19" branch="false" hits="1"/>
|
112
224
|
<line number="20" branch="false" hits="1"/>
|
113
225
|
<line number="21" branch="false" hits="1"/>
|
114
|
-
<line number="24" branch="
|
226
|
+
<line number="24" branch="true" hits="1" condition-coverage="100% (1/1)">
|
227
|
+
<conditions>
|
228
|
+
<condition number="0" type="jump" coverage="100%"/>
|
229
|
+
</conditions>
|
230
|
+
</line>
|
115
231
|
<line number="25" branch="false" hits="1"/>
|
116
232
|
<line number="26" branch="false" hits="1"/>
|
117
233
|
<line number="27" branch="false" hits="1"/>
|
118
|
-
<line number="30" branch="
|
234
|
+
<line number="30" branch="true" hits="1" condition-coverage="100% (1/1)">
|
235
|
+
<conditions>
|
236
|
+
<condition number="0" type="jump" coverage="100%"/>
|
237
|
+
</conditions>
|
238
|
+
</line>
|
119
239
|
<line number="31" branch="false" hits="1"/>
|
120
240
|
<line number="32" branch="false" hits="1"/>
|
121
241
|
</lines>
|