xcov 0.5 → 0.6
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/README.md +32 -7
- data/assets/stylesheets/main.css +10 -1
- data/lib/xcov.rb +4 -5
- data/lib/xcov/commands_generator.rb +3 -7
- data/lib/xcov/ignore_handler.rb +19 -0
- data/lib/xcov/manager.rb +13 -1
- data/lib/xcov/model/base.rb +4 -0
- data/lib/xcov/model/source.rb +6 -0
- data/lib/xcov/model/target.rb +11 -1
- data/lib/xcov/options.rb +5 -0
- data/lib/xcov/runner.rb +1 -1
- data/lib/xcov/slack_poster.rb +1 -1
- data/lib/xcov/version.rb +2 -2
- data/views/file.erb +4 -0
- data/views/report.erb +3 -3
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e2fbf38638743436f19f20c895047c07af963e5
|
4
|
+
data.tar.gz: 611fa1e2c51729ae7a96f40c92bf259609cc1a90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57198ae9212ebdead54ddad4217af75e2f2e8a64211ec937cda182c685b2881e9fe96ee416c381983f7bac6c6a26f9f7e1958ea241fcb926a5226cc39f431ed1
|
7
|
+
data.tar.gz: d68831b7fcf3b8b08b48f93ff8ba4656da14f10e05abbd1146dc7b08abd03dd936a43f56894dc3a80f43962e7c9e07795d78adc5f819a503a2b524ebda3d667a
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
[](http://rubygems.org/gems/xcov)
|
6
6
|
[](http://rubygems.org/gems/xcov)
|
7
7
|
|
8
|
-
**
|
8
|
+
**xcov** is a friendly visualizer for Xcode's code coverage files.
|
9
9
|
|
10
10
|
## Installation
|
11
11
|
```
|
@@ -14,7 +14,9 @@ sudo gem install xcov
|
|
14
14
|
|
15
15
|
## Features
|
16
16
|
* Built on top of [Fastlane](https://fastlane.tools), you can easily plug it on to your CI environment.
|
17
|
-
*
|
17
|
+
* Blacklisting of those files which coverage you want to ignore.
|
18
|
+
* Minimum acceptable coverage percentage.
|
19
|
+
* Nice HTML reports.
|
18
20
|
|
19
21
|

|
20
22
|
|
@@ -23,7 +25,7 @@ sudo gem install xcov
|
|
23
25
|

|
24
26
|
|
25
27
|
## Requirements
|
26
|
-
In order to make *
|
28
|
+
In order to make *xcov* run you must:
|
27
29
|
* Use Xcode 7.
|
28
30
|
* Have the latest version of Xcode command line tools.
|
29
31
|
* Set your project scheme as **shared**.
|
@@ -32,7 +34,7 @@ In order to make *xCov* run you must:
|
|
32
34
|

|
33
35
|
|
34
36
|
## Usage
|
35
|
-
*
|
37
|
+
*xcov* analyzes the `.xccoverage` files created after running your tests therefore, before executing xcov, you need to run your tests with either `Xcode`, `xcodebuild` or [scan](https://github.com/fastlane/scan). Once completed, obtain your coverage report by providing a few parameters:
|
36
38
|
```
|
37
39
|
xcov -w LystSDK.xcworkspace -s LystSDK -o xcov_output
|
38
40
|
```
|
@@ -43,14 +45,34 @@ xcov -w LystSDK.xcworkspace -s LystSDK -o xcov_output
|
|
43
45
|
* `--scheme` `-s`: Scheme of the project to analyze.
|
44
46
|
* `--output_directory` `-o`: Path for the output folder where the report files will be saved.
|
45
47
|
* `--derived_data_path` `-j`: Path of your project `Derived Data` folder (optional).
|
46
|
-
* `--minimum_coverage_percentage` `-m`: Raise exception if overall coverage percentage is under this value (ie. 75)
|
47
|
-
* `--include_test_targets`: Enables coverage reports for `.xctest` targets
|
48
|
+
* `--minimum_coverage_percentage` `-m`: Raise exception if overall coverage percentage is under this value (ie. 75).
|
49
|
+
* `--include_test_targets`: Enables coverage reports for `.xctest` targets.
|
50
|
+
* `--ignore_file_path` `-x`: Relative or absolute path to the file containing the list of ignored files.
|
48
51
|
* `--slack_url` `-i`: Incoming WebHook for your Slack group to post results (optional).
|
49
52
|
* `--slack_channel` `-e`: Slack channel where the results will be posted (optional).
|
50
53
|
* `--skip_slack`: Add this flag to avoid publishing results on Slack (optional).
|
51
54
|
|
55
|
+
### Ignoring files
|
56
|
+
You can easily ignore the coverage for a specified set of files by adding their filenames to the *ignore file* specified with the `--ignore_file_path` parameter (this file is `.xcovignore` by default).
|
57
|
+
|
58
|
+
Each one of the filenames you would like to ignore must be prefixed by the dash symbol `-`. In addition you can comment lines by prefixing them by `#`. Example:
|
59
|
+
|
60
|
+
```yaml
|
61
|
+
# Api files
|
62
|
+
- LSTSessionApi.swift
|
63
|
+
- LSTComponentsApi.swift
|
64
|
+
- LSTNotificationsApi.swift
|
65
|
+
|
66
|
+
# Managers
|
67
|
+
- LSTRequestManager.m
|
68
|
+
- LSTCookiesManager.m
|
69
|
+
|
70
|
+
# Utils
|
71
|
+
- LSTStateMachine.swift
|
72
|
+
```
|
73
|
+
|
52
74
|
### [Fastlane](https://github.com/fastlane/fastlane/blob/master/docs/Actions.md)
|
53
|
-
*Fastlane 1.61.0* includes *
|
75
|
+
*Fastlane 1.61.0* includes *xcov* as a custom action. You can easily create your coverage reports as follows:
|
54
76
|
```ruby
|
55
77
|
xcov(
|
56
78
|
workspace: "YourWorkspace.xcworkspace",
|
@@ -61,6 +83,9 @@ xcov(
|
|
61
83
|
|
62
84
|
## Changelog
|
63
85
|
|
86
|
+
### v.0.6
|
87
|
+
* Ignored coverage for a specified list of files
|
88
|
+
|
64
89
|
### v.0.5
|
65
90
|
* Fixed bug using the `derived_data_path` option
|
66
91
|
* Fixed bug sorting multiple `.xccoverage` files by datetime
|
data/assets/stylesheets/main.css
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
|
2
|
+
xcov - Xcode code coverage without hassle
|
3
3
|
A tool developed by Carlos Vidal @carlostify
|
4
4
|
*/
|
5
5
|
|
@@ -140,6 +140,15 @@ html, body, .full-height {
|
|
140
140
|
cursor: pointer;
|
141
141
|
}
|
142
142
|
|
143
|
+
.file-ignored-row {
|
144
|
+
color: #838383;
|
145
|
+
padding-top: 5px;
|
146
|
+
padding-bottom: 5px;
|
147
|
+
border-style: solid;
|
148
|
+
border-color: #202020;
|
149
|
+
border-width: 0px 0px 1px 0px;
|
150
|
+
}
|
151
|
+
|
143
152
|
.target-files {
|
144
153
|
background-color: #363636;
|
145
154
|
padding-top: 10px;
|
data/lib/xcov.rb
CHANGED
@@ -3,6 +3,7 @@ require 'xcov/version'
|
|
3
3
|
require 'xcov/manager'
|
4
4
|
require 'xcov/options'
|
5
5
|
require 'xcov/runner'
|
6
|
+
require 'xcov/ignore_handler'
|
6
7
|
require 'xcov/error_handler'
|
7
8
|
require 'xcov/slack_poster'
|
8
9
|
require 'xcov/model/base'
|
@@ -16,13 +17,11 @@ module Xcov
|
|
16
17
|
class << self
|
17
18
|
|
18
19
|
attr_accessor :config
|
20
|
+
attr_accessor :ignore_list
|
19
21
|
attr_accessor :project
|
20
22
|
|
21
|
-
def
|
22
|
-
@
|
23
|
-
|
24
|
-
FastlaneCore::Project.detect_projects(value)
|
25
|
-
@project = FastlaneCore::Project.new(config)
|
23
|
+
def project=(value)
|
24
|
+
@project = value
|
26
25
|
@project.select_scheme
|
27
26
|
end
|
28
27
|
|
@@ -11,16 +11,13 @@ module Xcov
|
|
11
11
|
FastlaneCore::CommanderGenerator.new.generate(Xcov::Options.available_options)
|
12
12
|
|
13
13
|
def self.start
|
14
|
-
FastlaneCore::UpdateChecker.start_looking_for_update("xcov")
|
15
14
|
new.run
|
16
|
-
ensure
|
17
|
-
FastlaneCore::UpdateChecker.show_update_status("xcov", Xcov::VERSION)
|
18
15
|
end
|
19
16
|
|
20
17
|
def convert_options(options)
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
converted_options = options.__hash__.dup
|
19
|
+
converted_options.delete(:verbose)
|
20
|
+
converted_options
|
24
21
|
end
|
25
22
|
|
26
23
|
def run
|
@@ -43,7 +40,6 @@ module Xcov
|
|
43
40
|
end
|
44
41
|
|
45
42
|
default_command :report
|
46
|
-
|
47
43
|
run!
|
48
44
|
end
|
49
45
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
module Xcov
|
3
|
+
class IgnoreHandler
|
4
|
+
|
5
|
+
def read_ignore_file
|
6
|
+
require "yaml"
|
7
|
+
ignore_file_path = Xcov.config[:ignore_file_path]
|
8
|
+
ignore_list = []
|
9
|
+
begin
|
10
|
+
ignore_list = YAML.load_file(ignore_file_path)
|
11
|
+
rescue
|
12
|
+
Helper.log.info "Skipping file blacklisting as no ignore file was found at path #{ignore_file_path}".yellow
|
13
|
+
end
|
14
|
+
|
15
|
+
ignore_list
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
data/lib/xcov/manager.rb
CHANGED
@@ -4,8 +4,20 @@ module Xcov
|
|
4
4
|
class Manager
|
5
5
|
|
6
6
|
def work(options)
|
7
|
+
# Set command options
|
7
8
|
Xcov.config = options
|
8
|
-
|
9
|
+
|
10
|
+
# Set project options
|
11
|
+
FastlaneCore::Project.detect_projects(options)
|
12
|
+
Xcov.project = FastlaneCore::Project.new(options)
|
13
|
+
|
14
|
+
# Set ignored files list
|
15
|
+
Xcov.ignore_list = IgnoreHandler.new.read_ignore_file
|
16
|
+
|
17
|
+
# Print summary
|
18
|
+
FastlaneCore::PrintTable.print_values(config: options, hide_keys: [:slack_url], title: "Summary for xcov #{Xcov::VERSION}")
|
19
|
+
|
20
|
+
# Run xcov
|
9
21
|
Runner.new.run
|
10
22
|
end
|
11
23
|
|
data/lib/xcov/model/base.rb
CHANGED
@@ -11,10 +11,14 @@ module Xcov
|
|
11
11
|
attr_accessor :id
|
12
12
|
|
13
13
|
def create_displayable_coverage
|
14
|
+
return "" if @ignored
|
15
|
+
|
14
16
|
"%.0f%%" % [(@coverage*100)]
|
15
17
|
end
|
16
18
|
|
17
19
|
def create_coverage_color
|
20
|
+
return "#363636" if @ignored
|
21
|
+
|
18
22
|
if @coverage > 0.8
|
19
23
|
return "#1FCB32"
|
20
24
|
elsif @coverage > 0.65
|
data/lib/xcov/model/source.rb
CHANGED
@@ -5,6 +5,7 @@ module Xcov
|
|
5
5
|
|
6
6
|
attr_accessor :name
|
7
7
|
attr_accessor :type
|
8
|
+
attr_accessor :ignored
|
8
9
|
attr_accessor :coverage
|
9
10
|
attr_accessor :functions
|
10
11
|
attr_accessor :function_templates
|
@@ -13,10 +14,15 @@ module Xcov
|
|
13
14
|
@name = CGI::escapeHTML(name)
|
14
15
|
@coverage = coverage
|
15
16
|
@functions = functions
|
17
|
+
@ignored = Xcov.ignore_list.include?(name)
|
16
18
|
@displayable_coverage = self.create_displayable_coverage
|
17
19
|
@coverage_color = self.create_coverage_color
|
18
20
|
@id = Source.create_id(name)
|
19
21
|
@type = Source.type(name)
|
22
|
+
|
23
|
+
if @ignored
|
24
|
+
Helper.log.info "Ignoring #{name} coverage".yellow
|
25
|
+
end
|
20
26
|
end
|
21
27
|
|
22
28
|
def print_description
|
data/lib/xcov/model/target.rb
CHANGED
@@ -37,12 +37,22 @@ module Xcov
|
|
37
37
|
|
38
38
|
def self.map (dictionary)
|
39
39
|
name = dictionary["name"]
|
40
|
-
coverage = dictionary["coverage"]
|
41
40
|
files = dictionary["files"].map { |file| Source.map(file)}
|
42
41
|
files = files.sort! { |lhs, rhs| lhs.coverage <=> rhs.coverage }
|
42
|
+
.sort! { |lhs, rhs| (lhs.ignored ? 1:0) <=> (rhs.ignored ? 1:0) }
|
43
|
+
coverage = Target.calculate_coverage(files)
|
43
44
|
|
44
45
|
Target.new(name, coverage, files)
|
45
46
|
end
|
46
47
|
|
48
|
+
def self.calculate_coverage (files)
|
49
|
+
coverage = 0
|
50
|
+
non_ignored_files = files.select { |file| !file.ignored }
|
51
|
+
non_ignored_files.each { |file| coverage += file.coverage }
|
52
|
+
coverage = coverage / non_ignored_files.count unless non_ignored_files.empty?
|
53
|
+
|
54
|
+
coverage
|
55
|
+
end
|
56
|
+
|
47
57
|
end
|
48
58
|
end
|
data/lib/xcov/options.rb
CHANGED
@@ -51,6 +51,11 @@ module Xcov
|
|
51
51
|
description: "Raise exception if overall coverage percentage is under this value (ie. 75)",
|
52
52
|
type: Float,
|
53
53
|
default_value: 0),
|
54
|
+
FastlaneCore::ConfigItem.new(key: :ignore_file_path,
|
55
|
+
short_option: "-x",
|
56
|
+
env_name: "XCOV_IGNORE_FILE_PATH",
|
57
|
+
description: "Relative or absolute path to the file containing the list of ignored files",
|
58
|
+
default_value: File.join(containing, ".xcovignore")),
|
54
59
|
FastlaneCore::ConfigItem.new(key: :include_test_targets,
|
55
60
|
env_name: "XCOV_INCLUDE_TEST_TARGETS",
|
56
61
|
description: "Enables coverage reports for .xctest targets",
|
data/lib/xcov/runner.rb
CHANGED
data/lib/xcov/slack_poster.rb
CHANGED
data/lib/xcov/version.rb
CHANGED
data/views/file.erb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
<!-- Single file starts here -->
|
2
|
+
<% if @ignored %>
|
3
|
+
<div class="row file-ignored-row">
|
4
|
+
<% else %>
|
2
5
|
<div class="row file-row" file-id="<%= @id %>">
|
6
|
+
<% end %>
|
3
7
|
<div class="col-xs-10 col-md-10 col-lg-10">
|
4
8
|
<span><img class="file-icon" src="resources/file_<%= @type %>.png"/></span>
|
5
9
|
<%= @name %>
|
data/views/report.erb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<!--
|
3
|
-
|
3
|
+
xcov - Xcode code coverage without hassle
|
4
4
|
A tool developed by Carlos Vidal @carlostify
|
5
5
|
-->
|
6
6
|
<html>
|
@@ -8,7 +8,7 @@ A tool developed by Carlos Vidal @carlostify
|
|
8
8
|
<meta charset="utf-8">
|
9
9
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
10
10
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
11
|
-
<title>
|
11
|
+
<title>xcov - Code coverage report</title>
|
12
12
|
<link rel="stylesheet" media="screen" href="resources/bootstrap.min.css" />
|
13
13
|
<link rel="stylesheet" media="screen" href="resources/opensans.css" />
|
14
14
|
<link rel="stylesheet" media="all" href="resources/main.css" />
|
@@ -52,7 +52,7 @@ A tool developed by Carlos Vidal @carlostify
|
|
52
52
|
<!-- Footer starts here -->
|
53
53
|
<div class="row footer">
|
54
54
|
<div class="col-xs-12 col-md-offset-1 col-md-10 col-lg-offset-2 col-lg-8 text-center">
|
55
|
-
|
55
|
+
xcov - Xcode coverage reports without hassle - A tool developed by
|
56
56
|
<a href="https://github.com/nakiostudio" target="_blank">Carlos Vidal</a> -
|
57
57
|
<a href="https://twitter.com/carlostify" target="_blank">@carlostify</a>
|
58
58
|
</div>
|
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: '0.
|
4
|
+
version: '0.6'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carlos Vidal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastlane_core
|
@@ -184,7 +184,7 @@ dependencies:
|
|
184
184
|
- - ">="
|
185
185
|
- !ruby/object:Gem::Version
|
186
186
|
version: '0'
|
187
|
-
description:
|
187
|
+
description: xcov is a friendly visualizer for Xcode's code coverage files
|
188
188
|
email:
|
189
189
|
- nakioparkour@gmail.com
|
190
190
|
executables:
|
@@ -213,6 +213,7 @@ files:
|
|
213
213
|
- lib/xcov.rb
|
214
214
|
- lib/xcov/commands_generator.rb
|
215
215
|
- lib/xcov/error_handler.rb
|
216
|
+
- lib/xcov/ignore_handler.rb
|
216
217
|
- lib/xcov/manager.rb
|
217
218
|
- lib/xcov/model/base.rb
|
218
219
|
- lib/xcov/model/function.rb
|
@@ -250,6 +251,6 @@ rubyforge_project:
|
|
250
251
|
rubygems_version: 2.4.8
|
251
252
|
signing_key:
|
252
253
|
specification_version: 4
|
253
|
-
summary:
|
254
|
+
summary: xcov is a friendly visualizer for Xcode's code coverage files
|
254
255
|
test_files: []
|
255
256
|
has_rdoc:
|