simplecov 0.14.1 → 0.15.0

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 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