simplecov 0.9.2 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +7 -7
  2. data/.gitignore +0 -1
  3. data/.rubocop.yml +69 -0
  4. data/CHANGELOG.md +39 -22
  5. data/Gemfile +16 -15
  6. data/MIT-LICENSE +1 -1
  7. data/README.md +183 -178
  8. data/Rakefile +16 -7
  9. data/doc/alternate-formatters.md +36 -0
  10. data/doc/commercial-services.md +20 -0
  11. data/doc/editor-integration.md +13 -0
  12. data/features/rspec_basic.feature +3 -2
  13. data/features/rspec_groups_and_filters_complex.feature +2 -0
  14. data/features/rspec_groups_using_filter_class.feature +3 -2
  15. data/features/step_definitions/html_steps.rb +6 -7
  16. data/features/step_definitions/simplecov_steps.rb +18 -16
  17. data/features/step_definitions/transformers.rb +2 -2
  18. data/features/step_definitions/web_steps.rb +4 -4
  19. data/features/support/env.rb +17 -15
  20. data/lib/simplecov.rb +35 -24
  21. data/lib/simplecov/command_guesser.rb +33 -34
  22. data/lib/simplecov/configuration.rb +238 -234
  23. data/lib/simplecov/defaults.rb +37 -36
  24. data/lib/simplecov/exit_codes.rb +7 -5
  25. data/lib/simplecov/file_list.rb +38 -36
  26. data/lib/simplecov/filter.rb +12 -2
  27. data/lib/simplecov/formatter.rb +2 -2
  28. data/lib/simplecov/formatter/simple_formatter.rb +1 -1
  29. data/lib/simplecov/jruby_fix.rb +4 -4
  30. data/lib/simplecov/last_run.rb +15 -13
  31. data/lib/simplecov/merge_helpers.rb +26 -27
  32. data/lib/simplecov/no_defaults.rb +2 -2
  33. data/lib/simplecov/profiles.rb +21 -19
  34. data/lib/simplecov/railtie.rb +1 -1
  35. data/lib/simplecov/railties/tasks.rake +7 -7
  36. data/lib/simplecov/result.rb +5 -5
  37. data/lib/simplecov/result_merger.rb +65 -62
  38. data/lib/simplecov/source_file.rb +23 -24
  39. data/lib/simplecov/version.rb +20 -1
  40. data/simplecov.gemspec +14 -12
  41. data/test/faked_project/Gemfile +5 -5
  42. data/test/faked_project/Rakefile +4 -4
  43. data/test/faked_project/features/step_definitions/my_steps.rb +3 -4
  44. data/test/faked_project/features/support/env.rb +5 -5
  45. data/test/faked_project/lib/faked_project.rb +1 -1
  46. data/test/faked_project/lib/faked_project/some_class.rb +3 -4
  47. data/test/faked_project/spec/faked_spec.rb +2 -2
  48. data/test/faked_project/spec/forking_spec.rb +7 -0
  49. data/test/faked_project/spec/meta_magic_spec.rb +1 -1
  50. data/test/faked_project/spec/some_class_spec.rb +3 -3
  51. data/test/faked_project/spec/spec_helper.rb +4 -8
  52. data/test/faked_project/test/faked_test.rb +2 -2
  53. data/test/faked_project/test/meta_magic_test.rb +1 -1
  54. data/test/faked_project/test/some_class_test.rb +3 -3
  55. data/test/faked_project/test/test_helper.rb +5 -9
  56. data/test/fixtures/app/controllers/sample_controller.rb +1 -1
  57. data/test/fixtures/app/models/user.rb +1 -1
  58. data/test/fixtures/deleted_source_sample.rb +3 -3
  59. data/test/fixtures/frameworks/rspec_bad.rb +4 -4
  60. data/test/fixtures/frameworks/rspec_good.rb +4 -4
  61. data/test/fixtures/frameworks/testunit_bad.rb +3 -3
  62. data/test/fixtures/frameworks/testunit_good.rb +3 -3
  63. data/test/fixtures/resultset2.rb +0 -1
  64. data/test/fixtures/sample.rb +1 -1
  65. data/test/fixtures/utf-8.rb +1 -1
  66. data/test/helper.rb +8 -8
  67. data/test/test_1_8_fallbacks.rb +6 -6
  68. data/test/test_command_guesser.rb +7 -7
  69. data/test/test_deleted_source.rb +2 -2
  70. data/test/test_file_list.rb +8 -6
  71. data/test/test_filters.rb +29 -13
  72. data/test/test_merge_helpers.rb +26 -23
  73. data/test/test_result.rb +32 -23
  74. data/test/test_return_codes.rb +3 -3
  75. data/test/test_source_file.rb +4 -4
  76. data/test/test_source_file_line.rb +13 -13
  77. metadata +145 -63
  78. data/lib/simplecov/json.rb +0 -27
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
 
3
- require 'rubygems'
4
- require 'bundler/setup'
3
+ require "rubygems"
4
+ require "bundler/setup"
5
5
  Bundler::GemHelper.install_tasks
6
6
 
7
7
  # See https://github.com/colszowka/simplecov/issues/171
@@ -12,19 +12,28 @@ end
12
12
  # Enforce proper permissions on each build
13
13
  Rake::Task[:build].prerequisites.unshift :fix_permissions
14
14
 
15
- require 'rake/testtask'
15
+ require "rake/testtask"
16
16
  Rake::TestTask.new(:test) do |test|
17
- test.libs << 'lib' << 'test'
18
- test.test_files = FileList['test/test_*.rb']
17
+ test.libs << "lib" << "test"
18
+ test.test_files = FileList["test/test_*.rb"]
19
19
  test.verbose = true
20
20
  test.warning = true
21
21
  end
22
22
 
23
+ begin
24
+ require "rubocop/rake_task"
25
+ RuboCop::RakeTask.new
26
+ rescue LoadError
27
+ task :rubocop do
28
+ $stderr.puts "Rubocop is disabled"
29
+ end
30
+ end
31
+
23
32
  # Cucumber integration test suite is for impls that work with simplecov only - a.k.a. 1.9+
24
33
  if RUBY_VERSION >= "1.9"
25
- require 'cucumber/rake/task'
34
+ require "cucumber/rake/task"
26
35
  Cucumber::Rake::Task.new
27
- task :default => [:test, :cucumber]
36
+ task :default => [:test, :cucumber, :rubocop]
28
37
  else
29
38
  task :default => [:test]
30
39
  end
@@ -0,0 +1,36 @@
1
+ ## Alternate coverage report formatters
2
+
3
+ The community around simplecov provides a whole bunch of alternate formatters beyond the official
4
+ [simplecov-html](https://github.com/colszowka/simplecov-html) gem.
5
+
6
+ If you have built or found one that is missing here, please send a Pull Request for this document!
7
+
8
+ #### [simplecov-badge](https://github.com/matthew342/simplecov-badge)
9
+ *by Matt Hale*
10
+
11
+ A formatter that generates a coverage badge for use in your project's readme using ImageMagick.
12
+
13
+ #### [simplecov-cobertura](https://github.com/dashingrocket/simplecov-cobertura)
14
+ *by Jesse Bowes*
15
+
16
+ A formatter that generates Cobertura XML.
17
+
18
+ #### [simplecov-csv](https://github.com/fguillen/simplecov-csv)
19
+ *by Fernando Guillen*
20
+
21
+ CSV formatter for SimpleCov
22
+
23
+ #### [simplecov-json](https://github.com/vicentllongo/simplecov-json)
24
+ *by Vicent Llongo*
25
+
26
+ JSON formatter for SimpleCov
27
+
28
+ #### [simplecov-rcov](https://github.com/fguillen/simplecov-rcov)
29
+ *by Fernando Guillen*
30
+
31
+ "The target of this formatter is to cheat on Hudson so I can use the Ruby metrics plugin with SimpleCov."
32
+
33
+ #### [simplecov-single_file_reporter](https://github.com/grosser/simplecov-single_file_reporter)
34
+ *by [Michael Grosser](http://grosser.it)*
35
+
36
+ A formatter that prints the coverage of the file under test when you run a single test file.
@@ -0,0 +1,20 @@
1
+ ## Commercial Services with SimpleCov integration
2
+
3
+ There is a bunch of services that offer integration with your existing CI pipeline and SimpleCov coverage
4
+ reports. Please note these are not associated with the SimpleCov project itself, so please report problems with
5
+ these integrations with their respective owners.
6
+
7
+ #### [codeclimate](https://github.com/codeclimate/ruby-test-reporter)
8
+ *by [Code Climate](https://codeclimate.com/)*
9
+
10
+ Upload coverage reports to [codeclimate.com](https://codeclimate.com/), a hosted software quality analysis and that also includes coverage reporting.
11
+
12
+ #### [codecov](https://github.com/codecov/codecov-ruby)
13
+ *by [Codecov](https://codecov.io/)*
14
+
15
+ Upload coverage reports to [codecov.io](https://codecov.io/), a hosted coverage reporting solution.
16
+
17
+ #### [coveralls](https://github.com/lemurheavy/coveralls-ruby)
18
+ *by [Coveralls](https://coveralls.io/)*
19
+
20
+ Upload coverage reports to [coveralls.io](https://coveralls.io/), a hosted coverage reporting solution.
@@ -0,0 +1,13 @@
1
+ ## Editor integration
2
+
3
+ Some editors have a graphical integration for the simplecov gem.
4
+
5
+ #### [Atom Editor: coverage](https://atom.io/packages/coverage)
6
+ *by Philip Giuliani*
7
+
8
+ Adds an overview of your current test coverage to Atom.
9
+
10
+ #### [cadre](https://github.com/nyarly/cadre)
11
+ *by Judson Lester*
12
+
13
+ Includes a formatter for Simplecov that emits a Vim script to mark up code files with coverage information.
@@ -14,14 +14,15 @@ Feature:
14
14
  When I open the coverage report generated with `bundle exec rspec spec`
15
15
  Then I should see the groups:
16
16
  | name | coverage | files |
17
- | All Files | 91.23% | 6 |
17
+ | All Files | 91.8% | 7 |
18
18
 
19
19
  And I should see the source files:
20
20
  | name | coverage |
21
21
  | lib/faked_project.rb | 100.0 % |
22
- | lib/faked_project/some_class.rb | 80.0 % |
22
+ | lib/faked_project/some_class.rb | 80.0 % |
23
23
  | lib/faked_project/framework_specific.rb | 75.0 % |
24
24
  | lib/faked_project/meta_magic.rb | 100.0 % |
25
+ | spec/forking_spec.rb | 100.0 % |
25
26
  | spec/meta_magic_spec.rb | 100.0 % |
26
27
  | spec/some_class_spec.rb | 100.0 % |
27
28
 
@@ -15,6 +15,7 @@ Feature: Sophisticated grouping and filtering on RSpec
15
15
  src_file.filename =~ /MaGiC/i
16
16
  end
17
17
  add_group 'By string', 'project/meta_magic'
18
+ add_group 'By array', ['project/meta_magic']
18
19
 
19
20
  add_filter 'faked_project.rb'
20
21
  # Remove all files that include "describe" in their source
@@ -29,6 +30,7 @@ Feature: Sophisticated grouping and filtering on RSpec
29
30
  | All Files | 100.0% | 1 |
30
31
  | By block | 100.0% | 1 |
31
32
  | By string | 100.0% | 1 |
33
+ | By array | 100.0% | 1 |
32
34
 
33
35
  And I should see the source files:
34
36
  | name | coverage |
@@ -24,10 +24,10 @@ Feature: Grouping on RSpec using a custom filter class
24
24
  When I open the coverage report generated with `bundle exec rspec spec`
25
25
  Then I should see the groups:
26
26
  | name | coverage | files |
27
- | All Files | 91.23% | 6 |
27
+ | All Files | 91.8% | 7 |
28
28
  | By filter class | 78.26% | 2 |
29
29
  | By string | 100.0% | 1 |
30
- | Ungrouped | 100.0% | 3 |
30
+ | Ungrouped | 100.0% | 4 |
31
31
 
32
32
  And I should see the source files:
33
33
  | name | coverage |
@@ -35,6 +35,7 @@ Feature: Grouping on RSpec using a custom filter class
35
35
  | lib/faked_project/some_class.rb | 80.0 % |
36
36
  | lib/faked_project.rb | 100.0 % |
37
37
  | lib/faked_project/meta_magic.rb | 100.0 % |
38
+ | spec/forking_spec.rb | 100.0 % |
38
39
  | spec/meta_magic_spec.rb | 100.0 % |
39
40
  | spec/some_class_spec.rb | 100.0 % |
40
41
 
@@ -1,15 +1,14 @@
1
1
  module GroupHelpers
2
2
  def available_groups
3
- all('#content .file_list_container')
3
+ all("#content .file_list_container")
4
4
  end
5
5
 
6
6
  def available_source_files
7
- all('.source_files .source_table')
7
+ all(".source_files .source_table")
8
8
  end
9
9
  end
10
10
  World(GroupHelpers)
11
11
 
12
-
13
12
  Then /^I should see the groups:$/ do |table|
14
13
  expected_groups = table.hashes
15
14
  # Given group names should be the same number than those rendered in report
@@ -18,8 +17,8 @@ Then /^I should see the groups:$/ do |table|
18
17
  # Verify each of the expected groups has a file list container and corresponding title and coverage number
19
18
  # as well as the correct number of links to files.
20
19
  expected_groups.each do |group|
21
- with_scope "#content ##{group["name"].gsub(/[^a-z]/i, '')}.file_list_container" do
22
- file_count_in_group = page.all('a.src_link').count
20
+ with_scope "#content ##{group['name'].gsub(/[^a-z]/i, '')}.file_list_container" do
21
+ file_count_in_group = page.all("a.src_link").count
23
22
  expect(file_count_in_group).to eq(group["files"].to_i)
24
23
 
25
24
  with_scope "h2" do
@@ -35,9 +34,9 @@ Then /^I should see the source files:$/ do |table|
35
34
  expect(expected_files.length).to eq(available_source_files.count)
36
35
 
37
36
  # Find all filenames and their coverage present in coverage report
38
- files = available_source_files.map {|f| {"name" => f.find('h3').text, "coverage" => f.find('h4 > span').text} }
37
+ files = available_source_files.map { |f| {"name" => f.find("h3").text, "coverage" => f.find("h4 > span").text} }
39
38
 
40
- expect(files.sort_by {|hsh| hsh["name"] }).to eq(expected_files.sort_by {|hsh| hsh["name"] })
39
+ expect(files.sort_by { |hsh| hsh["name"] }).to eq(expected_files.sort_by { |hsh| hsh["name"] })
41
40
  end
42
41
 
43
42
  Then /^there should be (\d+) skipped lines in the source files$/ do |expected_count|
@@ -2,7 +2,8 @@
2
2
  # The test project is using separate config files to avoid specifying all of
3
3
  # test/spec_helper in the features every time.
4
4
  Given /^SimpleCov for (.*) is configured with:$/ do |framework, config_body|
5
- framework_dir = case framework
5
+ framework_dir = begin
6
+ case framework
6
7
  when /RSpec/i
7
8
  "spec"
8
9
  when /Test\/Unit/i
@@ -10,53 +11,54 @@ Given /^SimpleCov for (.*) is configured with:$/ do |framework, config_body|
10
11
  when /Cucumber/i
11
12
  "features/support"
12
13
  else
13
- raise ArgumentError, "Could not identify test framework #{framework}!"
14
+ fail ArgumentError, "Could not identify test framework #{framework}!"
15
+ end
14
16
  end
15
17
 
16
- steps %Q{
18
+ steps %(
17
19
  Given a file named "#{framework_dir}/simplecov_config.rb" with:
18
20
  """
19
21
  #{config_body}
20
22
  """
21
- }
23
+ )
22
24
  end
23
25
 
24
26
  When /^I open the coverage report generated with `([^`]+)`$/ do |command|
25
- steps %Q{
27
+ steps %(
26
28
  When I successfully run `#{command}`
27
29
  Then a coverage report should have been generated
28
30
  When I open the coverage report
29
- }
31
+ )
30
32
  end
31
33
 
32
34
  Then /^a coverage report should have been generated(?: in "([^"]*)")?$/ do |coverage_dir|
33
- coverage_dir ||= 'coverage'
34
- steps %Q{
35
+ coverage_dir ||= "coverage"
36
+ steps %(
35
37
  Then the output should contain "Coverage report generated"
36
38
  And a directory named "#{coverage_dir}" should exist
37
39
  And the following files should exist:
38
40
  | #{coverage_dir}/index.html |
39
41
  | #{coverage_dir}/.resultset.json |
40
- }
42
+ )
41
43
  end
42
44
 
43
45
  Then /^no coverage report should have been generated(?: in "([^"]*)")?$/ do |coverage_dir|
44
- coverage_dir ||= 'coverage'
45
- steps %Q{
46
+ coverage_dir ||= "coverage"
47
+ steps %(
46
48
  Then the output should not contain "Coverage report generated"
47
49
  And a directory named "#{coverage_dir}" should not exist
48
50
  And the following files should not exist:
49
51
  | #{coverage_dir}/index.html |
50
52
  | #{coverage_dir}/.resultset.json |
51
- }
53
+ )
52
54
  end
53
55
 
54
56
  Then /^the report should be based upon:$/ do |table|
55
57
  frameworks = table.raw.flatten
56
- steps %Q{
57
- Then the output should contain "Coverage report generated for #{frameworks.join(", ")}"
58
- And I should see "using #{frameworks.join(", ")}" within "#footer"
59
- }
58
+ steps %(
59
+ Then the output should contain "Coverage report generated for #{frameworks.join(', ')}"
60
+ And I should see "using #{frameworks.join(', ')}" within "#footer"
61
+ )
60
62
  end
61
63
 
62
64
  # This is neccessary to ensure timing-dependant tests like the merge timeout
@@ -6,8 +6,8 @@
6
6
  # This is due to the fact that coverage will not include the first loaded spec/test file.
7
7
  # To get predictable coverage results, we need to know which one that is...
8
8
  #
9
- Transform "bundle exec rspec spec" do |t|
9
+ Transform "bundle exec rspec spec" do |_|
10
10
  files = nil # Avoid shadowing
11
- in_current_dir { files = Dir['spec/**/*_spec.rb'] }
11
+ in_current_dir { files = Dir["spec/**/*_spec.rb"] }
12
12
  "bundle exec rspec #{files.sort.join(' ')}"
13
13
  end
@@ -6,7 +6,7 @@ end
6
6
  World(WithinHelpers)
7
7
 
8
8
  When /^I open the coverage report$/ do
9
- visit '/'
9
+ visit "/"
10
10
  end
11
11
 
12
12
  Given /^(?:|I )am on (.+)$/ do |path|
@@ -38,7 +38,7 @@ end
38
38
  Then /^(?:|I )should see \/([^\/]*)\/(?: within "([^"]*)")?$/ do |regexp, selector|
39
39
  regexp = Regexp.new(regexp)
40
40
  with_scope(selector) do
41
- expect(page).to have_xpath('//*', :text => regexp)
41
+ expect(page).to have_xpath("//*", :text => regexp)
42
42
  end
43
43
  end
44
44
 
@@ -51,12 +51,12 @@ end
51
51
  Then /^(?:|I )should not see \/([^\/]*)\/(?: within "([^"]*)")?$/ do |regexp, selector|
52
52
  regexp = Regexp.new(regexp)
53
53
  with_scope(selector) do
54
- expect(page).to have_no_xpath('//*', :text => regexp)
54
+ expect(page).to have_no_xpath("//*", :text => regexp)
55
55
  end
56
56
  end
57
57
 
58
58
  Then /^show me the page$/ do
59
- save_and_open_page
59
+ save_and_open_page # rubocop:disable Lint/Debugger
60
60
  end
61
61
 
62
62
  Then /^print the page$/ do
@@ -3,35 +3,37 @@ if RUBY_VERSION < "1.9"
3
3
  exit 0
4
4
  end
5
5
 
6
- require 'bundler'
6
+ require "bundler"
7
7
  Bundler.setup
8
- require 'aruba/cucumber'
9
- require 'aruba/jruby' if RUBY_ENGINE == 'jruby'
10
- require 'capybara/cucumber'
11
- require 'minitest/autorun'
12
- require 'phantomjs/poltergeist'
8
+ require "aruba/cucumber"
9
+ require "aruba/jruby" if RUBY_ENGINE == "jruby"
10
+ require "capybara/cucumber"
11
+ require "minitest/autorun"
12
+ require "phantomjs/poltergeist"
13
13
 
14
14
  # Fake rack app for capybara that just returns the latest coverage report from aruba temp project dir
15
15
  Capybara.app = lambda { |env|
16
- request_path = env['REQUEST_PATH'] || '/'
17
- request_path = '/index.html' if request_path == '/'
18
-
19
- [200, {'Content-Type' => 'text/html'},
20
- [File.read(File.join(File.dirname(__FILE__), '../../tmp/aruba/project/coverage', request_path))]]
16
+ request_path = env["REQUEST_PATH"] || "/"
17
+ request_path = "/index.html" if request_path == "/"
18
+ [
19
+ 200,
20
+ {"Content-Type" => "text/html"},
21
+ [File.read(File.join(File.dirname(__FILE__), "../../tmp/aruba/project/coverage", request_path))],
22
+ ]
21
23
  }
22
24
 
23
25
  Capybara.default_driver = Capybara.javascript_driver = :poltergeist
24
26
 
25
27
  Before do
26
28
  # JRuby takes it's time... See https://github.com/cucumber/aruba/issues/134
27
- @aruba_timeout_seconds = RUBY_ENGINE == 'jruby' ? 60 : 20
29
+ @aruba_timeout_seconds = RUBY_ENGINE == "jruby" ? 60 : 20
28
30
 
29
31
  this_dir = File.dirname(__FILE__)
30
32
 
31
33
  # Clean up and create blank state for fake project
32
34
  in_current_dir do
33
- FileUtils.rm_rf 'project'
34
- FileUtils.cp_r File.join(this_dir, '../../test/faked_project/'), 'project'
35
+ FileUtils.rm_rf "project"
36
+ FileUtils.cp_r File.join(this_dir, "../../test/faked_project/"), "project"
35
37
  end
36
38
 
37
39
  step 'I cd to "project"'
@@ -40,6 +42,6 @@ end
40
42
  # Workaround for https://github.com/cucumber/aruba/pull/125
41
43
  Aruba.configure do |config|
42
44
  config.before_cmd do
43
- set_env('JRUBY_OPTS', '-X-C --1.9')
45
+ set_env("JRUBY_OPTS", "-X-C --1.9")
44
46
  end
45
47
  end
@@ -1,9 +1,20 @@
1
1
  #
2
2
  # Code coverage for ruby 1.9. Please check out README for a full introduction.
3
3
  #
4
+ # Coverage may be inaccurate under JRUBY.
5
+ if defined?(JRUBY_VERSION)
6
+ if ENV["JRUBY_OPTS"].to_s !~ /-Xcli.debug=true/
7
+ warn "Coverage may be inaccurate; Try setting JRUBY_OPTS=\"-Xcli.debug=true --debug\""
8
+ # see https://github.com/metricfu/metric_fu/pull/226
9
+ # https://github.com/jruby/jruby/issues/1196
10
+ # https://jira.codehaus.org/browse/JRUBY-6106
11
+ # https://github.com/colszowka/simplecov/issues/86
12
+ end
13
+ end
4
14
  module SimpleCov
5
15
  class << self
6
16
  attr_accessor :running
17
+ attr_accessor :pid
7
18
 
8
19
  #
9
20
  # Sets up SimpleCov to run against your project.
@@ -22,12 +33,13 @@ module SimpleCov
22
33
  #
23
34
  # Please check out the RDoc for SimpleCov::Configuration to find about available config options
24
35
  #
25
- def start(profile=nil, &block)
36
+ def start(profile = nil, &block)
26
37
  if SimpleCov.usable?
27
38
  load_profile(profile) if profile
28
39
  configure(&block) if block_given?
29
40
  @result = nil
30
41
  self.running = true
42
+ self.pid = Process.pid
31
43
  Coverage.start
32
44
  else
33
45
  warn "WARNING: SimpleCov is activated, but you're not running Ruby 1.9+ - no coverage analysis will happen"
@@ -59,7 +71,7 @@ module SimpleCov
59
71
  # Otherwise, returns the result
60
72
  #
61
73
  def result?
62
- defined? @result and @result
74
+ defined?(@result) && @result
63
75
  end
64
76
 
65
77
  #
@@ -68,7 +80,7 @@ module SimpleCov
68
80
  def filtered(files)
69
81
  result = files.clone
70
82
  filters.each do |filter|
71
- result = result.reject {|source_file| filter.matches?(source_file) }
83
+ result = result.reject { |source_file| filter.matches?(source_file) }
72
84
  end
73
85
  SimpleCov::FileList.new result
74
86
  end
@@ -80,10 +92,10 @@ module SimpleCov
80
92
  grouped = {}
81
93
  grouped_files = []
82
94
  groups.each do |name, filter|
83
- grouped[name] = SimpleCov::FileList.new(files.select {|source_file| filter.matches?(source_file)})
95
+ grouped[name] = SimpleCov::FileList.new(files.select { |source_file| filter.matches?(source_file) })
84
96
  grouped_files += grouped[name]
85
97
  end
86
- if groups.length > 0 and (other_files = files.reject {|source_file| grouped_files.include?(source_file)}).length > 0
98
+ if groups.length > 0 && (other_files = files.reject { |source_file| grouped_files.include?(source_file) }).length > 0
87
99
  grouped["Ungrouped"] = SimpleCov::FileList.new(other_files)
88
100
  end
89
101
  grouped
@@ -106,11 +118,11 @@ module SimpleCov
106
118
  # provides coverage support
107
119
  #
108
120
  def usable?
109
- return @usable if defined? @usable and !@usable.nil?
121
+ return @usable if defined?(@usable) && !@usable.nil?
110
122
 
111
123
  @usable = begin
112
- require 'coverage'
113
- require 'simplecov/jruby_fix'
124
+ require "coverage"
125
+ require "simplecov/jruby_fix"
114
126
  true
115
127
  rescue LoadError
116
128
  false
@@ -120,24 +132,23 @@ module SimpleCov
120
132
  end
121
133
 
122
134
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__)))
123
- require 'simplecov/configuration'
135
+ require "simplecov/configuration"
124
136
  SimpleCov.send :extend, SimpleCov::Configuration
125
- require 'simplecov/exit_codes'
126
- require 'simplecov/json'
127
- require 'simplecov/profiles'
128
- require 'simplecov/source_file'
129
- require 'simplecov/file_list'
130
- require 'simplecov/result'
131
- require 'simplecov/filter'
132
- require 'simplecov/formatter'
133
- require 'simplecov/last_run'
134
- require 'simplecov/merge_helpers'
135
- require 'simplecov/result_merger'
136
- require 'simplecov/command_guesser'
137
- require 'simplecov/version'
137
+ require "simplecov/exit_codes"
138
+ require "simplecov/profiles"
139
+ require "simplecov/source_file"
140
+ require "simplecov/file_list"
141
+ require "simplecov/result"
142
+ require "simplecov/filter"
143
+ require "simplecov/formatter"
144
+ require "simplecov/last_run"
145
+ require "simplecov/merge_helpers"
146
+ require "simplecov/result_merger"
147
+ require "simplecov/command_guesser"
148
+ require "simplecov/version"
138
149
 
139
150
  # Load default config
140
- require 'simplecov/defaults' unless ENV['SIMPLECOV_NO_DEFAULTS']
151
+ require "simplecov/defaults" unless ENV["SIMPLECOV_NO_DEFAULTS"]
141
152
 
142
153
  # Load Rails integration (only for Rails 3, see #113)
143
- require 'simplecov/railtie' if defined? Rails::Railtie
154
+ require "simplecov/railtie" if defined? Rails::Railtie