xcov 0.11.3 → 0.12
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 +8 -0
- data/lib/xcov-core.rb +1 -1
- data/lib/xcov-core/bin/xcov-core +0 -0
- data/lib/xcov-core/version.rb +1 -1
- data/lib/xcov/ignore_handler.rb +26 -0
- data/lib/xcov/model/report.rb +27 -2
- data/lib/xcov/model/source.rb +6 -3
- data/lib/xcov/options.rb +24 -2
- data/lib/xcov/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c02009c2981afaac60ecbddd456a99e69a921862
|
4
|
+
data.tar.gz: f991f7a721295624e74205c55b1b703c8d912c96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a97f422cca8e295b7965303670f0ee281a510c355ccd31665c8c0bd732c7be1c9244bb91b8ad54ea5e5187afd353b775b15a740f5476445727a7cccc13842f4
|
7
|
+
data.tar.gz: a922d3a9d26b0b485b63fa35b2720bed5f4f6d29c084d9a972baee33dec87033c939d99240b365d86459d9b1442c3ab5246450d0490410bf901c6078d6bb978f
|
data/README.md
CHANGED
@@ -44,11 +44,13 @@ xcov -w LystSDK.xcworkspace -s LystSDK -o xcov_output
|
|
44
44
|
* `--project` `-p`: Path of your `xcodeproj` file (optional).
|
45
45
|
* `--scheme` `-s`: Scheme of the project to analyze.
|
46
46
|
* `--output_directory` `-o`: Path for the output folder where the report files will be saved.
|
47
|
+
* `--source_directory` `-r`: The path to project's root directory.
|
47
48
|
* `--derived_data_path` `-j`: Path of your project `Derived Data` folder (optional).
|
48
49
|
* `--minimum_coverage_percentage` `-m`: Raise exception if overall coverage percentage is under this value (ie. 75).
|
49
50
|
* `--include_test_targets`: Enables coverage reports for `.xctest` targets.
|
50
51
|
* `--ignore_file_path` `-x`: Relative or absolute path to the file containing the list of ignored files.
|
51
52
|
* `--exclude_targets`: Comma separated list of targets to exclude from coverage report.
|
53
|
+
* `--include_targets`: Comma separated list of targets to include in coverage report.
|
52
54
|
* `--slack_url` `-i`: Incoming WebHook for your Slack group to post results (optional).
|
53
55
|
* `--slack_channel` `-e`: Slack channel where the results will be posted (optional).
|
54
56
|
* `--html_report`: Enables the creation of a html report. Enabled by default (optional).
|
@@ -61,6 +63,8 @@ _**Note:** All paths you provide should be absolute and unescaped_
|
|
61
63
|
### Ignoring files
|
62
64
|
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). You can also specify a wildcard expression for matching a group of files.
|
63
65
|
|
66
|
+
If you want to ignore all the files from a directory (folder), specify directory's relative path in *ignore file*. Also, specify `source_directory` if that differs from working directory (which is the default value).
|
67
|
+
|
64
68
|
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:
|
65
69
|
|
66
70
|
```yaml
|
@@ -78,6 +82,10 @@ Each one of the filenames you would like to ignore must be prefixed by the dash
|
|
78
82
|
|
79
83
|
# Exclude all files ending by "View.swift"
|
80
84
|
- .*View.swift
|
85
|
+
|
86
|
+
# Exclude all dependencies
|
87
|
+
- Pods
|
88
|
+
- Carthage/Checkouts
|
81
89
|
```
|
82
90
|
|
83
91
|
### [Fastlane](https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md)
|
data/lib/xcov-core.rb
CHANGED
@@ -13,7 +13,7 @@ module Xcov
|
|
13
13
|
|
14
14
|
def self.parse(file)
|
15
15
|
report_output = Tempfile.new("report.json")
|
16
|
-
command = "#{ENV['XCOV_CORE_LIBRARY_PATH'].shellescape} -s #{file.shellescape} -o #{report_output.path.shellescape}"
|
16
|
+
command = "#{ENV['XCOV_CORE_LIBRARY_PATH'].shellescape} -s #{file.shellescape} -o #{report_output.path.shellescape} --add-location"
|
17
17
|
description = [{ prefix: "Parsing .xccoverage file: " }]
|
18
18
|
execute_command(command, description)
|
19
19
|
output_file = File.read(report_output.path)
|
data/lib/xcov-core/bin/xcov-core
CHANGED
Binary file
|
data/lib/xcov-core/version.rb
CHANGED
data/lib/xcov/ignore_handler.rb
CHANGED
@@ -16,6 +16,16 @@ module Xcov
|
|
16
16
|
return @list.any? { |pattern| filename =~ Regexp.new("#{pattern}$") }
|
17
17
|
end
|
18
18
|
|
19
|
+
def should_ignore_file_at_path path
|
20
|
+
# Ignore specific files
|
21
|
+
filename = File.basename(path)
|
22
|
+
return true if should_ignore_file(filename)
|
23
|
+
|
24
|
+
# Also ignore the files from ignored folders
|
25
|
+
relative = relative_path(path)
|
26
|
+
return @list.any? { |ignored_path| relative_path(path).start_with? ignored_path }
|
27
|
+
end
|
28
|
+
|
19
29
|
# Static methods
|
20
30
|
|
21
31
|
def self.read_ignore_file
|
@@ -31,5 +41,21 @@ module Xcov
|
|
31
41
|
return ignore_list
|
32
42
|
end
|
33
43
|
|
44
|
+
# Auxiliary methods
|
45
|
+
|
46
|
+
# Returns a relative path against `source_directory`.
|
47
|
+
def relative_path path
|
48
|
+
require 'pathname'
|
49
|
+
|
50
|
+
full_path = Pathname.new(path).realpath # /full/path/to/project/where/is/file.extension
|
51
|
+
base_path = Pathname.new(source_directory).realpath # /full/path/to/project/
|
52
|
+
|
53
|
+
full_path.relative_path_from(base_path).to_s # where/is/file.extension
|
54
|
+
end
|
55
|
+
|
56
|
+
def source_directory
|
57
|
+
Xcov.config[:source_directory]
|
58
|
+
end
|
59
|
+
|
34
60
|
end
|
35
61
|
end
|
data/lib/xcov/model/report.rb
CHANGED
@@ -66,7 +66,14 @@ module Xcov
|
|
66
66
|
def self.filter_targets targets
|
67
67
|
filtered_targets = Array.new(targets)
|
68
68
|
filtered_targets = filtered_targets.select { |target| !target["name"].include?(".xctest") } if !Xcov.config[:include_test_targets]
|
69
|
-
|
69
|
+
|
70
|
+
if Xcov.config[:exclude_targets]
|
71
|
+
filtered_targets = filtered_targets.select { |target| !self.excluded_targets.include?(target["name"])}
|
72
|
+
end
|
73
|
+
|
74
|
+
if Xcov.config[:include_targets]
|
75
|
+
filtered_targets = filtered_targets.select { |target| self.included_targets.include?(target["name"])}
|
76
|
+
end
|
70
77
|
|
71
78
|
filtered_targets
|
72
79
|
end
|
@@ -75,11 +82,29 @@ module Xcov
|
|
75
82
|
excluded_targets = Array.new()
|
76
83
|
|
77
84
|
if Xcov.config[:exclude_targets]
|
78
|
-
|
85
|
+
if Xcov.config[:exclude_targets].is_a?(Array)
|
86
|
+
excluded_targets = Xcov.config[:exclude_targets]
|
87
|
+
else
|
88
|
+
excluded_targets = Xcov.config[:exclude_targets].split(/\s*,\s*/)
|
89
|
+
end
|
79
90
|
end
|
80
91
|
|
81
92
|
excluded_targets
|
82
93
|
end
|
83
94
|
|
95
|
+
def self.included_targets
|
96
|
+
included_targets = Array.new()
|
97
|
+
|
98
|
+
if Xcov.config[:include_targets]
|
99
|
+
if Xcov.config[:include_targets].is_a?(Array)
|
100
|
+
included_targets = Xcov.config[:include_targets]
|
101
|
+
else
|
102
|
+
included_targets = Xcov.config[:include_targets].split(/\s*,\s*/)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
included_targets
|
107
|
+
end
|
108
|
+
|
84
109
|
end
|
85
110
|
end
|
data/lib/xcov/model/source.rb
CHANGED
@@ -4,17 +4,19 @@ module Xcov
|
|
4
4
|
class Source < Xcov::Base
|
5
5
|
|
6
6
|
attr_accessor :name
|
7
|
+
attr_accessor :location
|
7
8
|
attr_accessor :type
|
8
9
|
attr_accessor :ignored
|
9
10
|
attr_accessor :coverage
|
10
11
|
attr_accessor :functions
|
11
12
|
attr_accessor :function_templates
|
12
13
|
|
13
|
-
def initialize (name, coverage, functions)
|
14
|
+
def initialize (name, location, coverage, functions)
|
14
15
|
@name = CGI::escapeHTML(name)
|
16
|
+
@location = CGI::escapeHTML(location)
|
15
17
|
@coverage = coverage
|
16
18
|
@functions = functions
|
17
|
-
@ignored = Xcov.ignore_handler.
|
19
|
+
@ignored = Xcov.ignore_handler.should_ignore_file_at_path(location)
|
18
20
|
@displayable_coverage = self.create_displayable_coverage
|
19
21
|
@coverage_color = self.create_coverage_color
|
20
22
|
@id = Source.create_id(name)
|
@@ -63,10 +65,11 @@ module Xcov
|
|
63
65
|
|
64
66
|
def self.map (dictionary)
|
65
67
|
name = dictionary["name"]
|
68
|
+
location = dictionary["location"]
|
66
69
|
coverage = dictionary["coverage"]
|
67
70
|
functions = dictionary["functions"].map { |function| Function.map(function)}
|
68
71
|
|
69
|
-
Source.new(name, coverage, functions)
|
72
|
+
Source.new(name, location, coverage, functions)
|
70
73
|
end
|
71
74
|
|
72
75
|
def self.type (name)
|
data/lib/xcov/options.rb
CHANGED
@@ -35,11 +35,28 @@ module Xcov
|
|
35
35
|
optional: true,
|
36
36
|
env_name: "XCOV_SCHEME",
|
37
37
|
description: "The project's scheme. Make sure it's marked as `Shared`"),
|
38
|
+
FastlaneCore::ConfigItem.new(key: :source_directory,
|
39
|
+
short_option: "-r",
|
40
|
+
optional: true,
|
41
|
+
env_name: "XCOV_SOURCE_DIRECTORY",
|
42
|
+
description: "The path to project's root directory",
|
43
|
+
default_value: Dir.pwd,
|
44
|
+
verify_block: proc do |value|
|
45
|
+
v = File.expand_path(value.to_s)
|
46
|
+
raise "Specified source directory does not exist".red unless File.exist?(v)
|
47
|
+
raise "Invalid source directory path, it must point to a directory".red unless File.directory?(v)
|
48
|
+
end
|
49
|
+
),
|
38
50
|
FastlaneCore::ConfigItem.new(key: :derived_data_path,
|
39
51
|
short_option: "-j",
|
40
52
|
env_name: "XCOV_DERIVED_DATA_PATH",
|
41
53
|
description: "The directory where build products and other derived data will go",
|
42
|
-
optional: true
|
54
|
+
optional: true,
|
55
|
+
verify_block: proc do |value|
|
56
|
+
v = File.expand_path(value.to_s)
|
57
|
+
raise "Specified derived data directory does not exist".red unless File.exist?(v)
|
58
|
+
raise "Invalid derived data path, it must point to a directory".red unless File.directory?(v)
|
59
|
+
end),
|
43
60
|
FastlaneCore::ConfigItem.new(key: :output_directory,
|
44
61
|
short_option: "-o",
|
45
62
|
env_name: "XCOV_OUTPUT_DIRECTORY",
|
@@ -98,7 +115,12 @@ module Xcov
|
|
98
115
|
default_value: false),
|
99
116
|
FastlaneCore::ConfigItem.new(key: :exclude_targets,
|
100
117
|
optional: true,
|
101
|
-
|
118
|
+
conflicting_options: [:include_targets],
|
119
|
+
description: "Comma separated list of targets to exclude from coverage report"),
|
120
|
+
FastlaneCore::ConfigItem.new(key: :include_targets,
|
121
|
+
optional: true,
|
122
|
+
conflicting_options: [:exclude_targets],
|
123
|
+
description: "Comma separated list of targets to include in coverage report. If specified then exlude_targets will be ignored")
|
102
124
|
]
|
103
125
|
end
|
104
126
|
|
data/lib/xcov/version.rb
CHANGED
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.12'
|
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-
|
11
|
+
date: 2016-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastlane_core
|