slather 2.0.2 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/README.md +29 -8
- data/lib/slather/command/coverage_command.rb +9 -0
- data/lib/slather/profdata_coverage_file.rb +20 -10
- data/lib/slather/project.rb +56 -18
- data/lib/slather/version.rb +1 -1
- data/slather.gemspec +1 -0
- data/spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixtures.xcscheme +16 -4
- data/spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixturesTests.xcscheme +56 -0
- data/spec/fixtures/fixtures.xcworkspace/contents.xcworkspacedata +7 -0
- data/spec/slather/cocoapods_plugin_spec.rb +1 -1
- data/spec/slather/profdata_coverage_spec.rb +12 -0
- data/spec/slather/project_spec.rb +36 -1
- data/spec/spec_helper.rb +10 -2
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f63502fe53f807b2802d7cd0676e199f040b311
|
4
|
+
data.tar.gz: 9516ad8c703aa3d40f22e796e1c3a64a8dc780ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ced3c9407d4dd0e50150361f9870a3c211eda077667d5a4cca1287e5d685b4327c9be2a9a23b4b774ff99e2ef4e3826ccee1f5034fe93980a88fa69c3d3fd2e
|
7
|
+
data.tar.gz: ed0d9167ca9b8f9a7001d00a09b4c53a6c7b16c18653abac0a7c41c9ce81b1ddbd3a3cedfc8ce9537497d6d99da38192c825629e7ab034065215be92842b422f
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,24 @@
|
|
3
3
|
## master
|
4
4
|
|
5
5
|
|
6
|
+
## v2.1.0
|
7
|
+
|
8
|
+
* Support for Xcode workspaces. Define `workspace` configuration in `.slather.yml` or use the `--workspace` argument if you build in a workspace.
|
9
|
+
* Improved slather error messages
|
10
|
+
[Kent Sutherland](https://github.com/ksuther)
|
11
|
+
[#178](https://github.com/SlatherOrg/slather/issues/178)
|
12
|
+
|
13
|
+
* Re-add Teamcity support
|
14
|
+
[Boris Bügling](https://github.com/neonichu)
|
15
|
+
[#180](https://github.com/SlatherOrg/slather/pull/180)
|
16
|
+
|
17
|
+
* Show lines that are hit thousands or millions of time in llvm-cov
|
18
|
+
[Kent Sutherland](https://github.com/ksuther)
|
19
|
+
[#179](https://github.com/SlatherOrg/slather/pull/179)
|
20
|
+
|
21
|
+
* Fix for setting scheme/workspace from configuration file.
|
22
|
+
[Boris Bügling](https://github.com/neonichu)
|
23
|
+
[#183](https://github.com/SlatherOrg/slather/pull/183)
|
6
24
|
|
7
25
|
## v2.0.2
|
8
26
|
|
data/README.md
CHANGED
@@ -31,28 +31,38 @@ And then execute:
|
|
31
31
|
$ bundle
|
32
32
|
```
|
33
33
|
|
34
|
+
Or install the gem:
|
35
|
+
|
36
|
+
```sh
|
37
|
+
gem install slather
|
38
|
+
```
|
39
|
+
|
34
40
|
## Usage
|
35
41
|
|
36
|
-
|
42
|
+
Enable test coverage by ticking the *"Gather coverage data"* checkbox when editing a scheme:
|
37
43
|
|
38
44
|
![](README_Images/test_scheme.png)
|
39
45
|
|
40
46
|
To verify you're ready to generate test coverage, run your test suite on your project, and then run:
|
41
47
|
|
42
48
|
```sh
|
43
|
-
$ slather coverage -s path/to/project.xcodeproj
|
49
|
+
$ slather coverage -s --scheme YourXcodeSchemeName path/to/project.xcodeproj
|
50
|
+
```
|
51
|
+
|
52
|
+
If you use a workspace in Xcode you need to specify it:
|
53
|
+
|
54
|
+
```sh
|
55
|
+
$ slather coverage -s --scheme YourXcodeSchemeName --workspace path/to/workspace.xcworkspace path/to/project.xcodeproj
|
44
56
|
```
|
45
57
|
|
46
|
-
###
|
58
|
+
### Setup for Xode 5 and 6
|
47
59
|
|
48
|
-
|
60
|
+
Run this command to enable the `Generate Test Coverage` and `Instrument Program Flow` flags for your project:
|
49
61
|
|
50
62
|
```sh
|
51
63
|
$ slather setup path/to/project.xcodeproj
|
52
64
|
```
|
53
65
|
|
54
|
-
This will enable the `Generate Test Coverage` and `Instrument Program Flow` flags for your project.
|
55
|
-
|
56
66
|
### Usage with Codecov
|
57
67
|
|
58
68
|
Login to [Codecov](https://codecov.io/) (no need to activate a repository, this happens automatically). Right now, `slather` supports Codecov via **all** supported CI providers [listed here](https://github.com/codecov/codecov-bash#ci-providers).
|
@@ -64,6 +74,7 @@ Make a `.slather.yml` file:
|
|
64
74
|
|
65
75
|
coverage_service: cobertura_xml
|
66
76
|
xcodeproj: path/to/project.xcodeproj
|
77
|
+
scheme: YourXcodeSchemeName
|
67
78
|
source_directory: path/to/sources/to/include
|
68
79
|
output_directory: path/to/xml_report
|
69
80
|
ignore:
|
@@ -105,6 +116,7 @@ Make a `.slather.yml` file:
|
|
105
116
|
|
106
117
|
coverage_service: coveralls
|
107
118
|
xcodeproj: path/to/project.xcodeproj
|
119
|
+
scheme: YourXcodeSchemeName
|
108
120
|
ignore:
|
109
121
|
- ExamplePodCode/*
|
110
122
|
- ProjectTestsGroup/*
|
@@ -151,6 +163,7 @@ To create a Cobertura XML report set `cobertura_xml` as coverage service inside
|
|
151
163
|
|
152
164
|
coverage_service: cobertura_xml
|
153
165
|
xcodeproj: path/to/project.xcodeproj
|
166
|
+
scheme: YourXcodeSchemeName
|
154
167
|
source_directory: path/to/sources/to/include
|
155
168
|
output_directory: path/to/xml_report
|
156
169
|
ignore:
|
@@ -169,7 +182,7 @@ $ slather coverage -x --output-directory path/to/xml_report
|
|
169
182
|
To create a report as static html pages, use the command line options `--html`:
|
170
183
|
|
171
184
|
```sh
|
172
|
-
$ slather coverage --html path/to/project.xcodeproj
|
185
|
+
$ slather coverage --html --scheme YourXcodeSchemeName path/to/project.xcodeproj
|
173
186
|
```
|
174
187
|
|
175
188
|
This will make a directory named `html` in your root directory (unless `--output-directory` is specified) and will generate all the reports as static html pages inside the directory. It will print out the report's path by default, but you can also specify `--show` flag to open it in your browser automatically.
|
@@ -179,7 +192,7 @@ This will make a directory named `html` in your root directory (unless `--output
|
|
179
192
|
To report the coverage statistics to TeamCity:
|
180
193
|
|
181
194
|
```sh
|
182
|
-
$ slather coverage --teamcity -s
|
195
|
+
$ slather coverage --teamcity -s --scheme YourXcodeSchemeName
|
183
196
|
```
|
184
197
|
|
185
198
|
### Coverage for code included via CocoaPods
|
@@ -204,6 +217,14 @@ source_directory: Pods/AFNetworking
|
|
204
217
|
|
205
218
|
Slather will look for the test coverage files in `DerivedData` by default. If you send build output to a custom location, like [this](https://github.com/erikdoe/ocmock/blob/7f4d22b38eedf1bb9a12ab1591ac0a5d436db61a/Tools/travis.sh#L12), then you should also set the `build_directory` property in `.slather.yml`
|
206
219
|
|
220
|
+
### Building in a workspace
|
221
|
+
|
222
|
+
Include the `--workspace` argument or add `workspace` to `.slather.yml` if you build your project in a workspace. For example:
|
223
|
+
|
224
|
+
```sh
|
225
|
+
$ slather coverage --html --scheme YourXcodeSchemeName --workspace path/to/workspace.xcworkspace path/to/project.xcodeproj
|
226
|
+
```
|
227
|
+
|
207
228
|
## Contributing
|
208
229
|
|
209
230
|
We’d love to see your ideas for improving this library! The best way to contribute is by submitting a pull request. We’ll do our best to respond to your patch as soon as possible. You can also submit a [new GitHub issue](https://github.com/SlatherOrg/slather/issues/new) if you find bugs or have questions. :octocat:
|
@@ -6,6 +6,7 @@ class CoverageCommand < Clamp::Command
|
|
6
6
|
option ["--circleci"], :flag, "Indicate that the builds are running on CircleCI"
|
7
7
|
option ["--jenkins"], :flag, "Indicate that the builds are running on Jenkins"
|
8
8
|
option ["--buildkite"], :flag, "Indicate that the builds are running on Buildkite"
|
9
|
+
option ["--teamcity"], :flag, "Indicate that the builds are running on TeamCity"
|
9
10
|
|
10
11
|
option ["--coveralls", "-c"], :flag, "Post coverage results to coveralls"
|
11
12
|
option ["--simple-output", "-s"], :flag, "Output coverage results to the terminal"
|
@@ -22,6 +23,7 @@ class CoverageCommand < Clamp::Command
|
|
22
23
|
|
23
24
|
option ["--input-format"], "INPUT_FORMAT", "Input format (gcov, profdata)"
|
24
25
|
option ["--scheme"], "SCHEME", "The scheme for which the coverage was generated"
|
26
|
+
option ["--workspace"], "WORKSPACE", "The workspace that the project was built in"
|
25
27
|
option ["--binary-file"], "BINARY_FILE", "The binary file against the which the coverage will be run"
|
26
28
|
option ["--binary-basename"], "BINARY_BASENAME", "Basename of the file against which the coverage will be run"
|
27
29
|
|
@@ -37,6 +39,7 @@ class CoverageCommand < Clamp::Command
|
|
37
39
|
setup_verbose_mode
|
38
40
|
setup_input_format
|
39
41
|
setup_scheme
|
42
|
+
setup_workspace
|
40
43
|
setup_binary_file
|
41
44
|
setup_binary_basename
|
42
45
|
|
@@ -72,6 +75,8 @@ class CoverageCommand < Clamp::Command
|
|
72
75
|
project.ci_service = :jenkins
|
73
76
|
elsif buildkite?
|
74
77
|
project.ci_service = :buildkite
|
78
|
+
elsif teamcity?
|
79
|
+
project.ci_service = :teamcity
|
75
80
|
end
|
76
81
|
end
|
77
82
|
|
@@ -117,6 +122,10 @@ class CoverageCommand < Clamp::Command
|
|
117
122
|
project.scheme = scheme
|
118
123
|
end
|
119
124
|
|
125
|
+
def setup_workspace
|
126
|
+
project.workspace = workspace
|
127
|
+
end
|
128
|
+
|
120
129
|
def setup_binary_file
|
121
130
|
project.binary_file = binary_file
|
122
131
|
end
|
@@ -76,17 +76,27 @@ module Slather
|
|
76
76
|
line =~ /^(\s*)(\d*)\|/
|
77
77
|
|
78
78
|
if $2 == nil
|
79
|
-
|
80
|
-
|
79
|
+
# Check for thousands or millions (llvm-cov outputs hit counts as 25.3k or 3.8M)
|
80
|
+
did_match = line =~ /^(\s*)(\d+\.\d+)(k|M)\|/
|
81
|
+
|
82
|
+
if did_match
|
83
|
+
count = $2.strip
|
84
|
+
units = $3 == 'k' ? 1000 : 1000000
|
81
85
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
86
|
+
count.to_f * units
|
87
|
+
else
|
88
|
+
return nil
|
89
|
+
end
|
90
|
+
else
|
91
|
+
match = $2.strip
|
92
|
+
case match
|
93
|
+
when /[0-9]+/
|
94
|
+
match.to_i
|
95
|
+
when /#+/
|
96
|
+
0
|
97
|
+
when "-"
|
98
|
+
nil
|
99
|
+
end
|
90
100
|
end
|
91
101
|
end
|
92
102
|
|
data/lib/slather/project.rb
CHANGED
@@ -51,7 +51,7 @@ module Slather
|
|
51
51
|
class Project < Xcodeproj::Project
|
52
52
|
|
53
53
|
attr_accessor :build_directory, :ignore_list, :ci_service, :coverage_service, :coverage_access_token, :source_directory,
|
54
|
-
:output_directory, :xcodeproj, :show_html, :verbose_mode, :input_format, :scheme, :binary_file, :binary_basename
|
54
|
+
:output_directory, :xcodeproj, :show_html, :verbose_mode, :input_format, :scheme, :workspace, :binary_file, :binary_basename
|
55
55
|
|
56
56
|
alias_method :setup_for_coverage, :slather_setup_for_coverage
|
57
57
|
|
@@ -61,15 +61,29 @@ module Slather
|
|
61
61
|
proj
|
62
62
|
end
|
63
63
|
|
64
|
+
def failure_help_string
|
65
|
+
"\n\tAre you sure your project is generating coverage? Make sure you enable code coverage in the Test section of your Xcode scheme.\n\tDid you specify your Xcode scheme? (--scheme or 'scheme' in .slather.yml)\n\tIf you're using a workspace, did you specify it? (--workspace or 'workspace' in .slather.yml)"
|
66
|
+
end
|
67
|
+
|
64
68
|
def derived_data_path
|
65
69
|
# Get the derived data path from xcodebuild
|
66
70
|
# Use OBJROOT when possible, as it provides regardless of whether or not the Derived Data location is customized
|
71
|
+
if self.workspace
|
72
|
+
projectOrWorkspaceArgument = "-workspace \"#{self.workspace}\""
|
73
|
+
else
|
74
|
+
projectOrWorkspaceArgument = "-project \"#{self.path}\""
|
75
|
+
end
|
76
|
+
|
67
77
|
if self.scheme
|
68
|
-
|
78
|
+
schemeArgument = "-scheme \"#{self.scheme}\""
|
79
|
+
buildAction = "test"
|
69
80
|
else
|
70
|
-
|
81
|
+
schemeArgument = nil
|
82
|
+
buildAction = nil
|
71
83
|
end
|
72
84
|
|
85
|
+
build_settings = `xcodebuild #{projectOrWorkspaceArgument} #{schemeArgument} -showBuildSettings #{buildAction}`
|
86
|
+
|
73
87
|
if build_settings
|
74
88
|
derived_data_path = build_settings.match(/ OBJROOT = (.+)/)[1]
|
75
89
|
end
|
@@ -99,7 +113,7 @@ module Slather
|
|
99
113
|
end.compact
|
100
114
|
|
101
115
|
if coverage_files.empty?
|
102
|
-
raise StandardError, "No coverage files found.
|
116
|
+
raise StandardError, "No coverage files found."
|
103
117
|
else
|
104
118
|
dedupe(coverage_files)
|
105
119
|
end
|
@@ -141,7 +155,7 @@ module Slather
|
|
141
155
|
dir = Dir[File.join("#{build_directory}","/**/CodeCoverage")].first
|
142
156
|
end
|
143
157
|
|
144
|
-
raise StandardError, "No coverage directory found.
|
158
|
+
raise StandardError, "No coverage directory found." unless dir != nil
|
145
159
|
dir
|
146
160
|
end
|
147
161
|
|
@@ -193,16 +207,24 @@ module Slather
|
|
193
207
|
end
|
194
208
|
|
195
209
|
def configure
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
210
|
+
begin
|
211
|
+
configure_scheme
|
212
|
+
configure_workspace
|
213
|
+
configure_build_directory
|
214
|
+
configure_ignore_list
|
215
|
+
configure_ci_service
|
216
|
+
configure_coverage_access_token
|
217
|
+
configure_coverage_service
|
218
|
+
configure_source_directory
|
219
|
+
configure_output_directory
|
220
|
+
configure_input_format
|
221
|
+
configure_binary_file
|
222
|
+
rescue => e
|
223
|
+
puts e.message
|
224
|
+
puts failure_help_string
|
225
|
+
puts "\n"
|
226
|
+
raise
|
227
|
+
end
|
206
228
|
|
207
229
|
if self.verbose_mode
|
208
230
|
puts "\nProcessing coverage file: #{profdata_file}"
|
@@ -250,6 +272,10 @@ module Slather
|
|
250
272
|
self.scheme ||= self.class.yml["scheme"] if self.class.yml["scheme"]
|
251
273
|
end
|
252
274
|
|
275
|
+
def configure_workspace
|
276
|
+
self.workspace ||= self.class.yml["workspace"] if self.class.yml["workspace"]
|
277
|
+
end
|
278
|
+
|
253
279
|
def ci_service=(service)
|
254
280
|
@ci_service = service && service.to_sym
|
255
281
|
end
|
@@ -301,9 +327,22 @@ module Slather
|
|
301
327
|
if self.scheme
|
302
328
|
schemes_path = Xcodeproj::XCScheme.shared_data_dir(self.path)
|
303
329
|
xcscheme_path = "#{schemes_path + self.scheme}.xcscheme"
|
330
|
+
|
331
|
+
raise StandardError, "No shared scheme named '#{self.scheme}' found in #{self.path}" unless File.exists? xcscheme_path
|
332
|
+
|
304
333
|
xcscheme = Xcodeproj::XCScheme.new(xcscheme_path)
|
305
334
|
|
306
|
-
|
335
|
+
begin
|
336
|
+
buildable_name = xcscheme.build_action.entries[0].buildable_references[0].buildable_name
|
337
|
+
rescue
|
338
|
+
# xcodeproj will raise an exception if there are no entries in the build action
|
339
|
+
end
|
340
|
+
|
341
|
+
if buildable_name == nil or buildable_name.end_with? ".a"
|
342
|
+
# Can't run code coverage on static libraries, look for an associated test bundle
|
343
|
+
buildable_name = xcscheme.test_action.testables[0].buildable_references[0].buildable_name
|
344
|
+
end
|
345
|
+
|
307
346
|
configuration = xcscheme.test_action.build_configuration
|
308
347
|
|
309
348
|
search_for = binary_basename || buildable_name
|
@@ -344,10 +383,9 @@ module Slather
|
|
344
383
|
end
|
345
384
|
end
|
346
385
|
|
347
|
-
raise StandardError, "No product binary found in #{profdata_coverage_dir}.
|
386
|
+
raise StandardError, "No product binary found in #{profdata_coverage_dir}." unless found_binary != nil
|
348
387
|
|
349
388
|
found_binary
|
350
389
|
end
|
351
|
-
|
352
390
|
end
|
353
391
|
end
|
data/lib/slather/version.rb
CHANGED
data/slather.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_development_dependency "bundler", "~> 1.6"
|
21
21
|
spec.add_development_dependency "coveralls"
|
22
|
+
spec.add_development_dependency "simplecov"
|
22
23
|
spec.add_development_dependency "rake", "~> 10.4"
|
23
24
|
spec.add_development_dependency "rspec", "~> 3.4"
|
24
25
|
spec.add_development_dependency "pry", "~> 0.9"
|
@@ -23,10 +23,10 @@
|
|
23
23
|
</BuildActionEntries>
|
24
24
|
</BuildAction>
|
25
25
|
<TestAction
|
26
|
+
buildConfiguration = "Debug"
|
26
27
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
27
28
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
28
|
-
shouldUseLaunchSchemeArgsEnv = "YES"
|
29
|
-
buildConfiguration = "Debug">
|
29
|
+
shouldUseLaunchSchemeArgsEnv = "YES">
|
30
30
|
<Testables>
|
31
31
|
<TestableReference
|
32
32
|
skipped = "NO">
|
@@ -39,24 +39,36 @@
|
|
39
39
|
</BuildableReference>
|
40
40
|
</TestableReference>
|
41
41
|
</Testables>
|
42
|
+
<AdditionalOptions>
|
43
|
+
</AdditionalOptions>
|
42
44
|
</TestAction>
|
43
45
|
<LaunchAction
|
46
|
+
buildConfiguration = "Debug"
|
44
47
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
45
48
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
46
49
|
launchStyle = "0"
|
47
50
|
useCustomWorkingDirectory = "NO"
|
48
|
-
buildConfiguration = "Debug"
|
49
51
|
ignoresPersistentStateOnLaunch = "NO"
|
50
52
|
debugDocumentVersioning = "YES"
|
53
|
+
debugServiceExtension = "internal"
|
51
54
|
allowLocationSimulation = "YES">
|
55
|
+
<MacroExpansion>
|
56
|
+
<BuildableReference
|
57
|
+
BuildableIdentifier = "primary"
|
58
|
+
BlueprintIdentifier = "8C9A202C195965F10013B6B3"
|
59
|
+
BuildableName = "libfixtures.a"
|
60
|
+
BlueprintName = "fixtures"
|
61
|
+
ReferencedContainer = "container:fixtures.xcodeproj">
|
62
|
+
</BuildableReference>
|
63
|
+
</MacroExpansion>
|
52
64
|
<AdditionalOptions>
|
53
65
|
</AdditionalOptions>
|
54
66
|
</LaunchAction>
|
55
67
|
<ProfileAction
|
68
|
+
buildConfiguration = "Release"
|
56
69
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
57
70
|
savedToolIdentifier = ""
|
58
71
|
useCustomWorkingDirectory = "NO"
|
59
|
-
buildConfiguration = "Release"
|
60
72
|
debugDocumentVersioning = "YES">
|
61
73
|
</ProfileAction>
|
62
74
|
<AnalyzeAction
|
@@ -0,0 +1,56 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Scheme
|
3
|
+
LastUpgradeVersion = "0600"
|
4
|
+
version = "1.3">
|
5
|
+
<BuildAction
|
6
|
+
parallelizeBuildables = "YES"
|
7
|
+
buildImplicitDependencies = "YES">
|
8
|
+
</BuildAction>
|
9
|
+
<TestAction
|
10
|
+
buildConfiguration = "Debug"
|
11
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
12
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
13
|
+
shouldUseLaunchSchemeArgsEnv = "YES">
|
14
|
+
<Testables>
|
15
|
+
<TestableReference
|
16
|
+
skipped = "NO">
|
17
|
+
<BuildableReference
|
18
|
+
BuildableIdentifier = "primary"
|
19
|
+
BlueprintIdentifier = "8C9A203F195965F10013B6B3"
|
20
|
+
BuildableName = "fixturesTests.xctest"
|
21
|
+
BlueprintName = "fixturesTests"
|
22
|
+
ReferencedContainer = "container:fixtures.xcodeproj">
|
23
|
+
</BuildableReference>
|
24
|
+
</TestableReference>
|
25
|
+
</Testables>
|
26
|
+
<AdditionalOptions>
|
27
|
+
</AdditionalOptions>
|
28
|
+
</TestAction>
|
29
|
+
<LaunchAction
|
30
|
+
buildConfiguration = "Debug"
|
31
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
32
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
33
|
+
launchStyle = "0"
|
34
|
+
useCustomWorkingDirectory = "NO"
|
35
|
+
ignoresPersistentStateOnLaunch = "NO"
|
36
|
+
debugDocumentVersioning = "YES"
|
37
|
+
debugServiceExtension = "internal"
|
38
|
+
allowLocationSimulation = "YES">
|
39
|
+
<AdditionalOptions>
|
40
|
+
</AdditionalOptions>
|
41
|
+
</LaunchAction>
|
42
|
+
<ProfileAction
|
43
|
+
buildConfiguration = "Release"
|
44
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
45
|
+
savedToolIdentifier = ""
|
46
|
+
useCustomWorkingDirectory = "NO"
|
47
|
+
debugDocumentVersioning = "YES">
|
48
|
+
</ProfileAction>
|
49
|
+
<AnalyzeAction
|
50
|
+
buildConfiguration = "Debug">
|
51
|
+
</AnalyzeAction>
|
52
|
+
<ArchiveAction
|
53
|
+
buildConfiguration = "Release"
|
54
|
+
revealArchiveInOrganizer = "YES">
|
55
|
+
</ArchiveAction>
|
56
|
+
</Scheme>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'cocoapods'
|
2
|
-
require File.join(File.dirname(__FILE__), '../../lib/cocoapods_plugin')
|
3
2
|
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
3
|
+
require File.join(File.dirname(__FILE__), '../../lib/cocoapods_plugin')
|
4
4
|
|
5
5
|
describe Slather do
|
6
6
|
describe 'CocoaPods Plugin' do
|
@@ -79,6 +79,18 @@ describe Slather::ProfdataCoverageFile do
|
|
79
79
|
it "should return the number of hits for the line" do
|
80
80
|
expect(profdata_coverage_file.coverage_for_line(" 10| 40| func applicationWillTerminate(application: UIApplication) {")).to eq(10)
|
81
81
|
end
|
82
|
+
|
83
|
+
it "should return the number of hits for a line in thousands" do
|
84
|
+
expect(profdata_coverage_file.coverage_for_line(" 11.8k| 49| return result;")).to eq(11800)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should return the number of hits for a line in millions" do
|
88
|
+
expect(profdata_coverage_file.coverage_for_line(" 2.58M| 49| return result;")).to eq(2580000)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should return the number of hits for an uncovered line" do
|
92
|
+
expect(profdata_coverage_file.coverage_for_line(" 0| 49| return result;")).to eq(0)
|
93
|
+
end
|
82
94
|
end
|
83
95
|
|
84
96
|
describe "#num_lines_tested" do
|
@@ -135,9 +135,25 @@ describe Slather::Project do
|
|
135
135
|
end
|
136
136
|
|
137
137
|
it "should find the product path provided a scheme" do
|
138
|
+
allow(fixtures_project).to receive(:scheme).and_return("fixtures")
|
139
|
+
fixtures_project.send(:configure_binary_file)
|
140
|
+
binary_file_location = fixtures_project.send(:binary_file)
|
141
|
+
expect(binary_file_location).to end_with("Debug/fixturesTests.xctest/Contents/MacOS/fixturesTests")
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should find the product path provided a workspace and scheme" do
|
145
|
+
allow(fixtures_project).to receive(:workspace).and_return("fixtures.xcworkspace")
|
146
|
+
allow(fixtures_project).to receive(:scheme).and_return("fixtures")
|
147
|
+
fixtures_project.send(:configure_binary_file)
|
148
|
+
binary_file_location = fixtures_project.send(:binary_file)
|
149
|
+
expect(binary_file_location).to end_with("Debug/fixturesTests.xctest/Contents/MacOS/fixturesTests")
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should find the product path for a scheme with no buildable products" do
|
153
|
+
allow(fixtures_project).to receive(:scheme).and_return("fixturesTests")
|
138
154
|
fixtures_project.send(:configure_binary_file)
|
139
155
|
binary_file_location = fixtures_project.send(:binary_file)
|
140
|
-
expect(binary_file_location).to end_with("Debug/
|
156
|
+
expect(binary_file_location).to end_with("Debug/fixturesTests.xctest/Contents/MacOS/fixturesTests")
|
141
157
|
end
|
142
158
|
|
143
159
|
let(:fixture_yaml) do
|
@@ -202,6 +218,7 @@ describe Slather::Project do
|
|
202
218
|
expect(unstubbed_project).to receive(:configure_coverage_service)
|
203
219
|
expect(unstubbed_project).to receive(:configure_input_format)
|
204
220
|
expect(unstubbed_project).to receive(:configure_scheme)
|
221
|
+
expect(unstubbed_project).to receive(:configure_workspace)
|
205
222
|
unstubbed_project.configure
|
206
223
|
end
|
207
224
|
end
|
@@ -284,6 +301,21 @@ describe Slather::Project do
|
|
284
301
|
end
|
285
302
|
end
|
286
303
|
|
304
|
+
describe "#configure_workspace" do
|
305
|
+
it "should set the workspace if it has been provided in the yml and has not already been set" do
|
306
|
+
allow(Slather::Project).to receive(:yml).and_return({"workspace" => "fixtures.xcworkspace"})
|
307
|
+
fixtures_project.configure_workspace
|
308
|
+
expect(fixtures_project.workspace).to eq("fixtures.xcworkspace")
|
309
|
+
end
|
310
|
+
|
311
|
+
it "should not set the workspace if it has already been set" do
|
312
|
+
allow(Slather::Project).to receive(:yml).and_return({"workspace" => "fixtures.xcworkspace"})
|
313
|
+
fixtures_project.workspace = "MyWorkspace.xcworkspace"
|
314
|
+
fixtures_project.configure_workspace
|
315
|
+
expect(fixtures_project.workspace).to eq("MyWorkspace.xcworkspace")
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
287
319
|
describe "#configure_ci_service" do
|
288
320
|
it "should set the ci_service if it has been provided in the yml and has not already been set" do
|
289
321
|
allow(Slather::Project).to receive(:yml).and_return({"ci_service" => "some_service"})
|
@@ -394,7 +426,10 @@ describe Slather::Project do
|
|
394
426
|
xcscheme = Xcodeproj::XCScheme.new(xcscheme_path)
|
395
427
|
expect(xcscheme.test_action.xml_element.attributes['codeCoverageEnabled']).to eq("YES")
|
396
428
|
end
|
429
|
+
end
|
397
430
|
|
431
|
+
it "should fail for unknown coverage type" do
|
432
|
+
expect { fixtures_project_setup.slather_setup_for_coverage "this should fail" }.to raise_error(StandardError)
|
398
433
|
end
|
399
434
|
end
|
400
435
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
if ENV['SIMPLECOV']
|
2
|
+
require 'simplecov'
|
3
|
+
SimpleCov.start
|
4
|
+
else
|
5
|
+
require 'coveralls'
|
6
|
+
Coveralls.wear!
|
7
|
+
end
|
3
8
|
|
4
9
|
require 'slather'
|
5
10
|
require 'pry'
|
@@ -11,9 +16,11 @@ FIXTURES_XML_PATH = File.join(File.dirname(__FILE__), 'fixtures/cobertura.xml')
|
|
11
16
|
FIXTURES_JSON_PATH = File.join(File.dirname(__FILE__), 'fixtures/gutter.json')
|
12
17
|
FIXTURES_HTML_FOLDER_PATH = File.join(File.dirname(__FILE__), 'fixtures/fixtures_html')
|
13
18
|
FIXTURES_PROJECT_PATH = File.join(File.dirname(__FILE__), 'fixtures/fixtures.xcodeproj')
|
19
|
+
FIXTURES_WORKSPACE_PATH = File.join(File.dirname(__FILE__), 'fixtures/fixtures.xcworkspace')
|
14
20
|
FIXTURES_SWIFT_FILE_PATH = File.join(File.dirname(__FILE__), 'fixtures/fixtures/Fixtures.swift')
|
15
21
|
TEMP_DERIVED_DATA_PATH = File.join(File.dirname(__FILE__), 'DerivedData')
|
16
22
|
TEMP_PROJECT_BUILD_PATH = File.join(TEMP_DERIVED_DATA_PATH, "libfixtures")
|
23
|
+
TEMP_WORKSPACE_BUILD_PATH = File.join(TEMP_DERIVED_DATA_PATH, "libfixtures")
|
17
24
|
TEMP_OBJC_GCNO_PATH = File.join(File.dirname(__FILE__), 'fixtures/ObjectiveC.gcno')
|
18
25
|
TEMP_OBJC_GCDA_PATH = File.join(File.dirname(__FILE__), 'fixtures/ObjectiveC.gcda')
|
19
26
|
|
@@ -41,6 +48,7 @@ RSpec.configure do |config|
|
|
41
48
|
FixtureHelpers.delete_derived_data
|
42
49
|
FixtureHelpers.delete_temp_gcov_files
|
43
50
|
`xcodebuild -project "#{FIXTURES_PROJECT_PATH}" -scheme fixtures -configuration Debug -derivedDataPath #{TEMP_PROJECT_BUILD_PATH} -enableCodeCoverage YES clean test`
|
51
|
+
`xcodebuild -workspace "#{FIXTURES_WORKSPACE_PATH}" -scheme fixtures -configuration Debug -derivedDataPath #{TEMP_WORKSPACE_BUILD_PATH} -enableCodeCoverage YES clean test`
|
44
52
|
end
|
45
53
|
|
46
54
|
config.after(:suite) 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.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Larsen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -219,6 +233,8 @@ files:
|
|
219
233
|
- spec/fixtures/fixtures.xcodeproj/project.pbxproj
|
220
234
|
- spec/fixtures/fixtures.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
221
235
|
- spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixtures.xcscheme
|
236
|
+
- spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixturesTests.xcscheme
|
237
|
+
- spec/fixtures/fixtures.xcworkspace/contents.xcworkspacedata
|
222
238
|
- spec/fixtures/fixtures/Fixtures.swift
|
223
239
|
- spec/fixtures/fixtures/Supporting Files/fixtures-Prefix.pch
|
224
240
|
- spec/fixtures/fixtures/fixtures.h
|
@@ -289,6 +305,8 @@ test_files:
|
|
289
305
|
- spec/fixtures/fixtures.xcodeproj/project.pbxproj
|
290
306
|
- spec/fixtures/fixtures.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
291
307
|
- spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixtures.xcscheme
|
308
|
+
- spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixturesTests.xcscheme
|
309
|
+
- spec/fixtures/fixtures.xcworkspace/contents.xcworkspacedata
|
292
310
|
- spec/fixtures/fixtures/Fixtures.swift
|
293
311
|
- spec/fixtures/fixtures/Supporting Files/fixtures-Prefix.pch
|
294
312
|
- spec/fixtures/fixtures/fixtures.h
|