simplecov 0.14.1 → 0.15.0

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
- SHA1:
3
- metadata.gz: bda7293a0b718da578a1e9b6897393d21d955fbf
4
- data.tar.gz: d81ac2993a335e716a47a19dd648fe635cc4a635
2
+ SHA256:
3
+ metadata.gz: 316080f1732d39e050a8c0310aa1527717c2216ac5ab7b570dca4076e358a041
4
+ data.tar.gz: 1417f8a0e41fab72d8b2d86b583dec9c5b47adde77f26dce84ee3646985b0a43
5
5
  SHA512:
6
- metadata.gz: 6e25b2151aec02177f9a6dd1f14366d44ad1ab2158d8502c65bbf2db4e2672a1926eaba1107580f4a642ad99d79f57d421d54759bed341099ec4a1a4cb9a3a04
7
- data.tar.gz: 34fe7bc261f7e105b230652e5b8ceed4e4b179bf7f36e5424c51cf7767e14ae91173a01b9da2e89707bd147ab212f85367e28791cfa1bbfcac3d055660e2ca43
6
+ metadata.gz: 3d58eee98ca6d7da2412747c6972560cdb835f110d37041a84816d44b8d433deb9d2b0bf20ce29012f90d2f2978afed2ae1bfdde3540b4d078a69adb2a64623e
7
+ data.tar.gz: cbbf89810a47ffec5328846f0135e98fac7fc0827d5cda4db59c8b761ce7c307e73f8cdc4e15e8db8e192e28b5c0eed8c15399f52bedacca4517cc76ef0556e5
@@ -3,6 +3,7 @@ AllCops:
3
3
  - 'spec/fixtures/iso-8859.rb'
4
4
  - 'tmp/**/*'
5
5
  - 'vendor/bundle/**/*'
6
+ TargetRubyVersion: 1.9
6
7
 
7
8
  Bundler/OrderedGems:
8
9
  Enabled: false
@@ -35,7 +36,7 @@ Metrics/ParameterLists:
35
36
  Max: 4
36
37
  CountKeywordArgs: true
37
38
 
38
- Style/AccessModifierIndentation:
39
+ Layout/AccessModifierIndentation:
39
40
  EnforcedStyle: outdent
40
41
 
41
42
  Style/CollectionMethods:
@@ -54,10 +55,13 @@ Style/DoubleNegation:
54
55
  Style/HashSyntax:
55
56
  EnforcedStyle: hash_rockets
56
57
 
58
+ Layout/IndentHeredoc:
59
+ Enabled: false
60
+
57
61
  Style/RegexpLiteral:
58
62
  Enabled: false
59
63
 
60
- Style/SpaceInsideHashLiteralBraces:
64
+ Layout/SpaceInsideHashLiteralBraces:
61
65
  EnforcedStyle: no_space
62
66
 
63
67
  Style/SpecialGlobalVars:
@@ -15,12 +15,12 @@ rvm:
15
15
  - 1.9.3
16
16
  - 2.0.0
17
17
  - 2.1.10
18
- - 2.2.6
19
- - 2.3.3
20
- - 2.4.0
18
+ - 2.2.7
19
+ - 2.3.4
20
+ - 2.4.1
21
+ - jruby-9.1.12.0
21
22
  - ruby-head
22
23
  - jruby-head
23
- - jruby-9.1.8.0
24
24
 
25
25
  matrix:
26
26
  allow_failures:
@@ -1,3 +1,18 @@
1
+ 0.15.0 (2017-08-14) ([changes](https://github.com/colszowka/simplecov/compare/v0.14.1...v0.15.0))
2
+ =======
3
+
4
+ ## Enhancements
5
+
6
+ * Ability to use regex filters for removing files from the output. See [#589](https://github.com/colszowka/simplecov/pull/589) (thanks @jsteel)
7
+
8
+ ## Bugfixes
9
+
10
+ * Fix merging race condition when running tests in parallel and merging them. See [#570](https://github.com/colszowka/simplecov/pull/570) (thanks @jenseng)
11
+ * Fix relevant lines for unloaded files - comments, skipped code etc. are correctly classigied as irrelevant. See [#605](https://github.com/colszowka/simplecov/pull/605) (thanks @odlp)
12
+ * Allow using simplecov with frozen-string-literals enabled. See [#590](https://github.com/colszowka/simplecov/pull/590) (thanks @pat)
13
+ * Make sure Array Filter can use all other filter types. See [#589](https://github.com/colszowka/simplecov/pull/589) (thanks @jsteel)
14
+ * Make sure file names use `Simplecov.root` as base avoiding using full absolute project paths. See [#589](https://github.com/colszowka/simplecov/pull/589) (thanks @jsteel)
15
+
1
16
  0.14.1 2017-03-18 ([changes](https://github.com/colszowka/simplecov/compare/v0.14.0...v0.14.1))
2
17
  ========
3
18
 
data/Gemfile CHANGED
@@ -23,13 +23,13 @@ group :test do
23
23
  gem "rack", "~> 1.6"
24
24
  end
25
25
  platforms :jruby, :ruby_19, :ruby_20, :ruby_21, :ruby_22, :ruby_23, :ruby_24, :ruby_25 do
26
- gem "aruba", "~> 0.7.4"
26
+ gem "aruba", "~> 0.14"
27
27
  gem "capybara"
28
28
  gem "nokogiri", RUBY_VERSION < "2.1" ? "~> 1.6.0" : ">= 1.7"
29
29
  gem "cucumber"
30
30
  gem "phantomjs", "~> 2.1"
31
31
  gem "poltergeist"
32
- gem "rubocop" unless RUBY_VERSION.start_with?("1.")
32
+ gem "rubocop", "0.49.1" unless RUBY_VERSION.start_with?("1.")
33
33
  gem "test-unit"
34
34
  end
35
35
  gem "json", RUBY_VERSION.start_with?("1.") ? "~> 1.8" : "~> 2.0"
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2015 Christoph Olszowka
1
+ Copyright (c) 2010-2017 Christoph Olszowka
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -40,7 +40,7 @@ automatically when you launch SimpleCov. If you're curious, you can find it [on
40
40
 
41
41
  *Questions, Problems, Suggestions, etc.*
42
42
 
43
- * [Mailing List]: https://groups.google.com/forum/#!forum/simplecov "Open mailing list for discussion and announcements on Google Groups"
43
+ * [Mailing List](https://groups.google.com/forum/#!forum/simplecov) "Open mailing list for discussion and announcements on Google Groups"
44
44
 
45
45
  Getting started
46
46
  ---------------
@@ -133,6 +133,17 @@ to use SimpleCov with them. Here's an overview of the known ones:
133
133
 
134
134
  <table>
135
135
  <tr><th>Framework</th><th>Notes</th><th>Issue</th></tr>
136
+ <tr>
137
+ <th>
138
+ bootsnap
139
+ </th>
140
+ <td>
141
+ <a href="#want-to-use-bootsnap-with-simplecov">See section below.</a>
142
+ </td>
143
+ <td>
144
+ <a href="https://github.com/Shopify/bootsnap/issues/35">Shopify/bootsnap#35</a>
145
+ </td>
146
+ </tr>
136
147
  <tr>
137
148
  <th>
138
149
  parallel_tests
@@ -262,7 +273,7 @@ report.
262
273
 
263
274
  ### Defining custom filters
264
275
 
265
- You can currently define a filter using either a String (that will then be Regexp-matched against each source file's path),
276
+ You can currently define a filter using either a String or Regexp (that will then be Regexp-matched against each source file's path),
266
277
  a block or by passing in your own Filter class.
267
278
 
268
279
  #### String filter
@@ -275,6 +286,16 @@ end
275
286
 
276
287
  This simple string filter will remove all files that match "/test/" in their path.
277
288
 
289
+ #### Regex filter
290
+
291
+ ```ruby
292
+ SimpleCov.start do
293
+ add_filter %r{^/test/}
294
+ end
295
+ ```
296
+
297
+ This simple regex filter will remove all files that start with /test/ in their path.
298
+
278
299
  #### Block filter
279
300
 
280
301
  ```ruby
@@ -305,6 +326,17 @@ Defining your own filters is pretty easy: Just inherit from SimpleCov::Filter an
305
326
  the filter, a true return value from this method will result in the removal of the given source_file. The filter_argument method
306
327
  is being set in the SimpleCov::Filter initialize method and thus is set to 5 in this example.
307
328
 
329
+ #### Array filter
330
+
331
+ ```ruby
332
+ SimpleCov.start do
333
+ proc = Proc.new { |source_file| false }
334
+ add_filter ["string", /regex/, proc, LineFilter.new(5)]
335
+ end
336
+ ```
337
+
338
+ You can pass in an array containing any of the other filter types.
339
+
308
340
  #### Ignoring/skipping code
309
341
 
310
342
  You can exclude code from the coverage report by wrapping it in `# :nocov:`.
@@ -570,10 +602,10 @@ being an instance of SimpleCov::Result. Do whatever your wish with that!
570
602
  As of SimpleCov 0.9, you can specify multiple result formats:
571
603
 
572
604
  ```ruby
573
- SimpleCov.formatters = [
605
+ SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new([
574
606
  SimpleCov::Formatter::HTMLFormatter,
575
607
  SimpleCov::Formatter::CSVFormatter,
576
- ]
608
+ ])
577
609
  ```
578
610
 
579
611
  ## Available formatters, editor integrations and hosted services
@@ -624,6 +656,20 @@ If you're using [Spring](https://github.com/rails/spring) to speed up test suite
624
656
  ```
625
657
  3. Run `spring rspec <path>` as normal. Remember to run `spring stop` after
626
658
  making important changes to your app or its specs!
659
+
660
+ ## Want to use bootsnap with SimpleCov?
661
+
662
+ As mentioned in [this issue](https://github.com/Shopify/bootsnap/issues/35) iseq
663
+ loading/dumping doesn't work with coverage. Hence you need to deactivate it when
664
+ you run coverage so for instance when you use the environment `COVERAGE=true` to
665
+ decide that you want to gather coverage you can do:
666
+
667
+ ```ruby
668
+ Bootsnap.setup(
669
+ compile_cache_iseq: !ENV["COVERAGE"], # Compile Ruby code into ISeq cache, breaks coverage reporting.
670
+ # all those other options
671
+ )
672
+ ```
627
673
 
628
674
  ## Contributing
629
675
 
@@ -635,4 +681,4 @@ Thanks to Aaron Patterson for the original idea for this!
635
681
 
636
682
  ## Copyright
637
683
 
638
- Copyright (c) 2010-2015 Christoph Olszowka. See MIT-LICENSE for details.
684
+ Copyright (c) 2010-2017 Christoph Olszowka. See MIT-LICENSE for details.
@@ -7,7 +7,12 @@ Some editors have a graphical integration for the simplecov gem.
7
7
 
8
8
  Adds an overview of your current test coverage to Atom.
9
9
 
10
+ #### [Sublime Editor: Simple​Cov](https://packagecontrol.io/packages/SimpleCov)
11
+ *by sentience*
12
+
13
+ Adds in editor live coverage highlighting, status bar coverage information, and summary coverage information.
14
+
10
15
  #### [cadre](https://github.com/nyarly/cadre)
11
16
  *by Judson Lester*
12
17
 
13
- Includes a formatter for Simplecov that emits a Vim script to mark up code files with coverage information.
18
+ Includes a formatter for Simplecov that emits a Vim script to mark up code files with coverage information.
@@ -16,7 +16,7 @@ Feature:
16
16
  When I open the coverage report generated with `bundle exec rake test`
17
17
  Then I should see the groups:
18
18
  | name | coverage | files |
19
- | All Files | 76.81% | 7 |
19
+ | All Files | 77.94% | 7 |
20
20
 
21
21
  And I should see the source files:
22
22
  | name | coverage |
@@ -0,0 +1,31 @@
1
+ @rspec
2
+ Feature:
3
+
4
+ Using the setting `tracked_files` should classify whether lines
5
+ are relevant or not (such as whitespace or comments).
6
+
7
+ Scenario:
8
+ Given SimpleCov for RSpec is configured with:
9
+ """
10
+ require 'simplecov'
11
+ SimpleCov.start do
12
+ track_files "lib/**/*.rb"
13
+ end
14
+ """
15
+ Given a file named "lib/not_loaded.rb" with:
16
+ """
17
+ # A comment line. Plus a whitespace line below:
18
+
19
+ # :nocov:
20
+ def ignore_me
21
+ end
22
+ # :nocov:
23
+
24
+ def this_is_relevant
25
+ puts "still relevant"
26
+ end
27
+ """
28
+
29
+ When I open the coverage report generated with `bundle exec rspec spec`
30
+ Then I follow "lib/not_loaded.rb"
31
+ Then I should see "3 relevant lines" within ".highlighted"
@@ -8,6 +8,6 @@
8
8
  #
9
9
  Transform "bundle exec rspec spec" do |_|
10
10
  files = nil # Avoid shadowing
11
- in_current_directory { files = Dir["spec/**/*_spec.rb"] }
11
+ cd(".") { files = Dir["spec/**/*_spec.rb"] }
12
12
  "bundle exec rspec #{files.sort.join(' ')}"
13
13
  end
@@ -0,0 +1,53 @@
1
+ # Freedom patch because of not working absolute directories, see: https://github.com/cucumber/aruba/issues/478
2
+ # code taken directly from aruba 0.14.2 - roughly here: https://github.com/cucumber/aruba/blob/master/lib/aruba/api/core.rb#L122-L159
3
+ # rubocop:disable all
4
+ module Aruba
5
+ module Api
6
+ module Core
7
+ def expand_path(file_name, dir_string = nil)
8
+ # only line added, don't ask why but I couldn't get alias_method to work...
9
+ return file_name if absolute?(file_name)
10
+ check_for_deprecated_variables if Aruba::VERSION < '1'
11
+
12
+ message = %(Filename "#{file_name}" needs to be a string. It cannot be nil or empty either. Please use `expand_path('.')` if you want the current directory to be expanded.)
13
+
14
+ fail ArgumentError, message unless file_name.is_a?(String) && !file_name.empty?
15
+
16
+ aruba.logger.warn %(`aruba`'s working directory does not exist. Maybe you forgot to run `setup_aruba` before using it's API. This warning will be an error from 1.0.0) unless Aruba.platform.directory? File.join(aruba.config.root_directory, aruba.config.working_directory)
17
+
18
+ if RUBY_VERSION < '1.9'
19
+ prefix = file_name.chars.to_a[0].to_s
20
+ rest = if file_name.chars.to_a[2..-1].nil?
21
+ nil
22
+ else
23
+ file_name.chars.to_a[2..-1].join
24
+ end
25
+ else
26
+ prefix = file_name[0]
27
+ rest = file_name[2..-1]
28
+ end
29
+
30
+ if aruba.config.fixtures_path_prefix == prefix
31
+ path = File.join(*[aruba.fixtures_directory, rest].compact)
32
+
33
+ fail ArgumentError, %(Fixture "#{rest}" does not exist in fixtures directory "#{aruba.fixtures_directory}". This was the one we found first on your system from all possible candidates: #{aruba.config.fixtures_directories.map { |p| format('"%s"', p) }.join(', ')}.) unless Aruba.platform.exist? path
34
+
35
+ path
36
+ elsif '~' == prefix
37
+ path = with_environment do
38
+ ArubaPath.new(File.expand_path(file_name))
39
+ end
40
+
41
+ fail ArgumentError, 'Expanding "~/" to "/" is not allowed' if path.to_s == '/'
42
+ fail ArgumentError, %(Expanding "~/" to a relative path "#{path}" is not allowed) unless path.absolute?
43
+
44
+ path.to_s
45
+ else
46
+ directory = File.join(aruba.root_directory, aruba.current_directory)
47
+ ArubaPath.new(File.join(*[directory, dir_string, file_name].compact)).expand_path.to_s
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ # rubocop:enable all
@@ -6,7 +6,8 @@ end
6
6
  require "bundler"
7
7
  Bundler.setup
8
8
  require "aruba/cucumber"
9
- require "aruba/jruby" if RUBY_ENGINE == "jruby"
9
+ require "aruba/config/jruby" if RUBY_ENGINE == "jruby"
10
+ require_relative "aruba_freedom_patch"
10
11
  require "capybara/cucumber"
11
12
  require "phantomjs/poltergeist"
12
13
 
@@ -34,7 +35,7 @@ Before do
34
35
  this_dir = File.dirname(__FILE__)
35
36
 
36
37
  # Clean up and create blank state for fake project
37
- in_current_directory do
38
+ cd(".") do
38
39
  FileUtils.rm_rf "project"
39
40
  FileUtils.cp_r File.join(this_dir, "../../spec/faked_project/"), "project"
40
41
  end
@@ -44,7 +45,6 @@ end
44
45
 
45
46
  # Workaround for https://github.com/cucumber/aruba/pull/125
46
47
  Aruba.configure do |config|
47
- config.before_cmd do
48
- set_env("JRUBY_OPTS", "--dev --debug")
49
- end
48
+ config.exit_timeout = RUBY_ENGINE == "jruby" ? 60 : 20
49
+ config.command_runtime_environment = {"JRUBY_OPTS" => "--dev --debug"}
50
50
  end
@@ -55,7 +55,7 @@ module SimpleCov
55
55
 
56
56
  #
57
57
  # Finds files that were to be tracked but were not loaded and initializes
58
- # their coverage to zero.
58
+ # the line-by-line coverage to zero (if relevant) or nil (comments / whitespace etc).
59
59
  #
60
60
  def add_not_loaded_files(result)
61
61
  if tracked_files
@@ -63,7 +63,7 @@ module SimpleCov
63
63
  Dir[tracked_files].each do |file|
64
64
  absolute = File.expand_path(file)
65
65
 
66
- result[absolute] ||= [0] * File.foreach(absolute).count
66
+ result[absolute] ||= LinesClassifier.new.classify(File.foreach(absolute))
67
67
  end
68
68
  end
69
69
 
@@ -75,23 +75,21 @@ module SimpleCov
75
75
  # from cache using SimpleCov::ResultMerger if use_merging is activated (default)
76
76
  #
77
77
  def result
78
- # Ensure the variable is defined to avoid ruby warnings
79
- @result = nil unless defined?(@result)
78
+ return @result if result?
80
79
 
81
80
  # Collect our coverage result
82
- if running && !result?
81
+ if running
83
82
  @result = SimpleCov::Result.new add_not_loaded_files(Coverage.result)
84
83
  end
85
84
 
86
85
  # If we're using merging of results, store the current result
87
- # first, then merge the results and return those
86
+ # first (if there is one), then merge the results and return those
88
87
  if use_merging
89
88
  SimpleCov::ResultMerger.store_result(@result) if result?
90
-
91
- SimpleCov::ResultMerger.merged_result
92
- else
93
- @result
89
+ @result = SimpleCov::ResultMerger.merged_result
94
90
  end
91
+
92
+ @result
95
93
  ensure
96
94
  self.running = false
97
95
  end
@@ -158,6 +156,13 @@ module SimpleCov
158
156
  false
159
157
  end
160
158
  end
159
+
160
+ #
161
+ # Clear out the previously cached .result. Primarily useful in testing
162
+ #
163
+ def clear_result
164
+ @result = nil
165
+ end
161
166
  end
162
167
  end
163
168
 
@@ -172,6 +177,7 @@ require "simplecov/result"
172
177
  require "simplecov/filter"
173
178
  require "simplecov/formatter"
174
179
  require "simplecov/last_run"
180
+ require "simplecov/lines_classifier"
175
181
  require "simplecov/raw_coverage"
176
182
  require "simplecov/result_merger"
177
183
  require "simplecov/command_guesser"
@@ -291,16 +291,12 @@ module SimpleCov
291
291
  # The actual filter processor. Not meant for direct use
292
292
  #
293
293
  def parse_filter(filter_argument = nil, &filter_proc)
294
- if filter_argument.is_a?(SimpleCov::Filter)
295
- filter_argument
296
- elsif filter_argument.is_a?(String)
297
- SimpleCov::StringFilter.new(filter_argument)
298
- elsif filter_proc
299
- SimpleCov::BlockFilter.new(filter_proc)
300
- elsif filter_argument.is_a?(Array)
301
- SimpleCov::ArrayFilter.new(filter_argument)
294
+ filter = filter_argument || filter_proc
295
+
296
+ if filter
297
+ SimpleCov::Filter.build_filter(filter)
302
298
  else
303
- raise ArgumentError, "Please specify either a string or a block to filter with"
299
+ raise ArgumentError, "Please specify either a filter or a block to filter with"
304
300
  end
305
301
  end
306
302
  end