simplecov 0.15.0 → 0.16.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.
Files changed (134) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +26 -2
  3. data/CONTRIBUTING.md +12 -9
  4. data/ISSUE_TEMPLATE.md +23 -0
  5. data/README.md +42 -16
  6. data/doc/alternate-formatters.md +16 -1
  7. data/lib/simplecov/command_guesser.rb +2 -0
  8. data/lib/simplecov/configuration.rb +2 -0
  9. data/lib/simplecov/defaults.rb +9 -80
  10. data/lib/simplecov/exit_codes.rb +2 -0
  11. data/lib/simplecov/file_list.rb +2 -0
  12. data/lib/simplecov/filter.rb +3 -1
  13. data/lib/simplecov/formatter/multi_formatter.rb +2 -0
  14. data/lib/simplecov/formatter/simple_formatter.rb +2 -0
  15. data/lib/simplecov/formatter.rb +2 -0
  16. data/lib/simplecov/jruby_fix.rb +2 -0
  17. data/lib/simplecov/last_run.rb +2 -0
  18. data/lib/simplecov/lines_classifier.rb +19 -3
  19. data/lib/simplecov/load_global_config.rb +2 -0
  20. data/lib/simplecov/no_defaults.rb +2 -0
  21. data/lib/simplecov/profiles/bundler_filter.rb +5 -0
  22. data/lib/simplecov/profiles/rails.rb +18 -0
  23. data/lib/simplecov/profiles/root_filter.rb +10 -0
  24. data/lib/simplecov/profiles/test_frameworks.rb +8 -0
  25. data/lib/simplecov/profiles.rb +2 -0
  26. data/lib/simplecov/railtie.rb +2 -0
  27. data/lib/simplecov/railties/tasks.rake +2 -0
  28. data/lib/simplecov/raw_coverage.rb +2 -0
  29. data/lib/simplecov/result.rb +2 -0
  30. data/lib/simplecov/result_merger.rb +2 -0
  31. data/lib/simplecov/source_file.rb +3 -1
  32. data/lib/simplecov/version.rb +3 -1
  33. data/lib/simplecov.rb +91 -0
  34. metadata +22 -117
  35. data/.gitignore +0 -31
  36. data/.rspec +0 -3
  37. data/.rubocop.yml +0 -88
  38. data/.travis.yml +0 -29
  39. data/.yardopts +0 -1
  40. data/Gemfile +0 -38
  41. data/MIT-LICENSE +0 -20
  42. data/Rakefile +0 -41
  43. data/cucumber.yml +0 -13
  44. data/features/config_autoload.feature +0 -46
  45. data/features/config_command_name.feature +0 -45
  46. data/features/config_coverage_dir.feature +0 -33
  47. data/features/config_deactivate_merging.feature +0 -42
  48. data/features/config_formatters.feature +0 -77
  49. data/features/config_merge_timeout.feature +0 -39
  50. data/features/config_nocov_token.feature +0 -79
  51. data/features/config_profiles.feature +0 -44
  52. data/features/config_project_name.feature +0 -27
  53. data/features/config_styles.feature +0 -121
  54. data/features/config_tracked_files.feature +0 -29
  55. data/features/config_tracked_files_relevant_lines.feature +0 -31
  56. data/features/cucumber_basic.feature +0 -29
  57. data/features/maximum_coverage_drop.feature +0 -89
  58. data/features/merging_test_unit_and_rspec.feature +0 -44
  59. data/features/minimum_coverage.feature +0 -59
  60. data/features/refuse_coverage_drop.feature +0 -95
  61. data/features/rspec_basic.feature +0 -32
  62. data/features/rspec_fails_on_initialization.feature +0 -14
  63. data/features/rspec_groups_and_filters_basic.feature +0 -29
  64. data/features/rspec_groups_and_filters_complex.feature +0 -37
  65. data/features/rspec_groups_using_filter_class.feature +0 -41
  66. data/features/rspec_without_simplecov.feature +0 -20
  67. data/features/skipping_code_blocks_manually.feature +0 -70
  68. data/features/step_definitions/html_steps.rb +0 -44
  69. data/features/step_definitions/simplecov_steps.rb +0 -68
  70. data/features/step_definitions/transformers.rb +0 -13
  71. data/features/step_definitions/web_steps.rb +0 -64
  72. data/features/support/aruba_freedom_patch.rb +0 -53
  73. data/features/support/env.rb +0 -50
  74. data/features/test_unit_basic.feature +0 -34
  75. data/features/test_unit_groups_and_filters_basic.feature +0 -29
  76. data/features/test_unit_groups_and_filters_complex.feature +0 -35
  77. data/features/test_unit_groups_using_filter_class.feature +0 -40
  78. data/features/test_unit_without_simplecov.feature +0 -20
  79. data/features/unicode_compatiblity.feature +0 -67
  80. data/simplecov.gemspec +0 -27
  81. data/spec/1_8_fallbacks_spec.rb +0 -31
  82. data/spec/command_guesser_spec.rb +0 -48
  83. data/spec/config_loader_spec.rb +0 -14
  84. data/spec/configuration_spec.rb +0 -35
  85. data/spec/deleted_source_spec.rb +0 -12
  86. data/spec/faked_project/Gemfile +0 -6
  87. data/spec/faked_project/Rakefile +0 -8
  88. data/spec/faked_project/cucumber.yml +0 -13
  89. data/spec/faked_project/features/step_definitions/my_steps.rb +0 -22
  90. data/spec/faked_project/features/support/env.rb +0 -12
  91. data/spec/faked_project/features/test_stuff.feature +0 -6
  92. data/spec/faked_project/lib/faked_project/framework_specific.rb +0 -18
  93. data/spec/faked_project/lib/faked_project/meta_magic.rb +0 -24
  94. data/spec/faked_project/lib/faked_project/some_class.rb +0 -28
  95. data/spec/faked_project/lib/faked_project/untested_class.rb +0 -11
  96. data/spec/faked_project/lib/faked_project.rb +0 -11
  97. data/spec/faked_project/spec/faked_spec.rb +0 -11
  98. data/spec/faked_project/spec/forking_spec.rb +0 -8
  99. data/spec/faked_project/spec/meta_magic_spec.rb +0 -15
  100. data/spec/faked_project/spec/some_class_spec.rb +0 -13
  101. data/spec/faked_project/spec/spec_helper.rb +0 -11
  102. data/spec/faked_project/test/faked_test.rb +0 -11
  103. data/spec/faked_project/test/meta_magic_test.rb +0 -13
  104. data/spec/faked_project/test/some_class_test.rb +0 -15
  105. data/spec/faked_project/test/test_helper.rb +0 -12
  106. data/spec/file_list_spec.rb +0 -50
  107. data/spec/filters_spec.rb +0 -172
  108. data/spec/fixtures/app/controllers/sample_controller.rb +0 -10
  109. data/spec/fixtures/app/models/user.rb +0 -10
  110. data/spec/fixtures/deleted_source_sample.rb +0 -15
  111. data/spec/fixtures/frameworks/rspec_bad.rb +0 -9
  112. data/spec/fixtures/frameworks/rspec_good.rb +0 -9
  113. data/spec/fixtures/frameworks/testunit_bad.rb +0 -9
  114. data/spec/fixtures/frameworks/testunit_good.rb +0 -9
  115. data/spec/fixtures/iso-8859.rb +0 -3
  116. data/spec/fixtures/never.rb +0 -2
  117. data/spec/fixtures/resultset1.rb +0 -4
  118. data/spec/fixtures/resultset2.rb +0 -4
  119. data/spec/fixtures/sample.rb +0 -16
  120. data/spec/fixtures/skipped.rb +0 -4
  121. data/spec/fixtures/skipped_and_executed.rb +0 -8
  122. data/spec/fixtures/utf-8.rb +0 -3
  123. data/spec/helper.rb +0 -26
  124. data/spec/last_run_spec.rb +0 -48
  125. data/spec/lines_classifier_spec.rb +0 -103
  126. data/spec/multi_formatter_spec.rb +0 -20
  127. data/spec/raw_coverage_spec.rb +0 -92
  128. data/spec/result_merger_spec.rb +0 -171
  129. data/spec/result_spec.rb +0 -209
  130. data/spec/return_codes_spec.rb +0 -34
  131. data/spec/simplecov_spec.rb +0 -109
  132. data/spec/source_file_line_spec.rb +0 -155
  133. data/spec/source_file_spec.rb +0 -145
  134. data/spec/support/fail_rspec_on_ruby_warning.rb +0 -75
@@ -1,109 +0,0 @@
1
- require "helper"
2
-
3
- if SimpleCov.usable?
4
- describe SimpleCov do
5
- describe ".result" do
6
- before do
7
- SimpleCov.clear_result
8
- allow(Coverage).to receive(:result).once.and_return({})
9
- end
10
-
11
- context "with merging disabled" do
12
- before do
13
- allow(SimpleCov).to receive(:use_merging).once.and_return(false)
14
- end
15
-
16
- context "when not running" do
17
- before do
18
- allow(SimpleCov).to receive(:running).and_return(false)
19
- end
20
-
21
- it "returns nil" do
22
- expect(SimpleCov.result).to be_nil
23
- end
24
- end
25
-
26
- context "when running" do
27
- before do
28
- allow(SimpleCov).to receive(:running).and_return(true, false)
29
- end
30
-
31
- it "uses the result from Coverage" do
32
- expect(Coverage).to receive(:result).once.and_return(__FILE__ => [0, 1])
33
- expect(SimpleCov.result.filenames).to eq [__FILE__]
34
- end
35
-
36
- it "adds not-loaded-files" do
37
- expect(SimpleCov).to receive(:add_not_loaded_files).once.and_return({})
38
- SimpleCov.result
39
- end
40
-
41
- it "doesn't store the current coverage" do
42
- expect(SimpleCov::ResultMerger).not_to receive(:store_result)
43
- SimpleCov.result
44
- end
45
-
46
- it "doesn't merge the result" do
47
- expect(SimpleCov::ResultMerger).not_to receive(:merged_result)
48
- SimpleCov.result
49
- end
50
-
51
- it "caches its result" do
52
- result = SimpleCov.result
53
- expect(SimpleCov.result).to be(result)
54
- end
55
- end
56
- end
57
-
58
- context "with merging enabled" do
59
- let(:the_merged_result) { double }
60
-
61
- before do
62
- allow(SimpleCov).to receive(:use_merging).once.and_return(true)
63
- allow(SimpleCov::ResultMerger).to receive(:store_result).once
64
- allow(SimpleCov::ResultMerger).to receive(:merged_result).once.and_return(the_merged_result)
65
- end
66
-
67
- context "when not running" do
68
- before do
69
- allow(SimpleCov).to receive(:running).and_return(false)
70
- end
71
-
72
- it "merges the result" do
73
- expect(SimpleCov.result).to be(the_merged_result)
74
- end
75
- end
76
-
77
- context "when running" do
78
- before do
79
- allow(SimpleCov).to receive(:running).and_return(true, false)
80
- end
81
-
82
- it "uses the result from Coverage" do
83
- expect(Coverage).to receive(:result).once.and_return({})
84
- SimpleCov.result
85
- end
86
-
87
- it "adds not-loaded-files" do
88
- expect(SimpleCov).to receive(:add_not_loaded_files).once.and_return({})
89
- SimpleCov.result
90
- end
91
-
92
- it "stores the current coverage" do
93
- expect(SimpleCov::ResultMerger).to receive(:store_result).once
94
- SimpleCov.result
95
- end
96
-
97
- it "merges the result" do
98
- expect(SimpleCov.result).to be(the_merged_result)
99
- end
100
-
101
- it "caches its result" do
102
- result = SimpleCov.result
103
- expect(SimpleCov.result).to be(result)
104
- end
105
- end
106
- end
107
- end
108
- end
109
- end
@@ -1,155 +0,0 @@
1
- require "helper"
2
-
3
- if SimpleCov.usable?
4
- describe SimpleCov::SourceFile::Line do
5
- context "a source line" do
6
- subject do
7
- SimpleCov::SourceFile::Line.new("# the ruby source", 5, 3)
8
- end
9
-
10
- it 'returns "# the ruby source" as src' do
11
- expect(subject.src).to eq("# the ruby source")
12
- end
13
-
14
- it "returns the same for source as for src" do
15
- expect(subject.src).to eq(subject.source)
16
- end
17
-
18
- it "has line number 5" do
19
- expect(subject.line_number).to eq(5)
20
- end
21
-
22
- it "has equal line_number, line and number" do
23
- expect(subject.line).to eq(subject.line_number)
24
- expect(subject.number).to eq(subject.line_number)
25
- end
26
-
27
- context "flagged as skipped!" do
28
- before do
29
- subject.skipped!
30
- end
31
- it "is not covered" do
32
- expect(subject).not_to be_covered
33
- end
34
-
35
- it "is skipped" do
36
- expect(subject).to be_skipped
37
- end
38
-
39
- it "is not missed" do
40
- expect(subject).not_to be_missed
41
- end
42
-
43
- it "is not never" do
44
- expect(subject).not_to be_never
45
- end
46
-
47
- it "status is skipped" do
48
- expect(subject.status).to eq("skipped")
49
- end
50
- end
51
- end
52
-
53
- context "A source line with coverage" do
54
- subject do
55
- SimpleCov::SourceFile::Line.new("# the ruby source", 5, 3)
56
- end
57
-
58
- it "has coverage of 3" do
59
- expect(subject.coverage).to eq(3)
60
- end
61
-
62
- it "is covered" do
63
- expect(subject).to be_covered
64
- end
65
-
66
- it "is not skipped" do
67
- expect(subject).not_to be_skipped
68
- end
69
-
70
- it "is not missed" do
71
- expect(subject).not_to be_missed
72
- end
73
-
74
- it "is not never" do
75
- expect(subject).not_to be_never
76
- end
77
-
78
- it "status is covered" do
79
- expect(subject.status).to eq("covered")
80
- end
81
- end
82
-
83
- context "A source line without coverage" do
84
- subject do
85
- SimpleCov::SourceFile::Line.new("# the ruby source", 5, 0)
86
- end
87
-
88
- it "has coverage of 0" do
89
- expect(subject.coverage).to be_zero
90
- end
91
-
92
- it "is not covered" do
93
- expect(subject).not_to be_covered
94
- end
95
-
96
- it "is not skipped" do
97
- expect(subject).not_to be_skipped
98
- end
99
-
100
- it "is missed" do
101
- expect(subject).to be_missed
102
- end
103
-
104
- it "is not never" do
105
- expect(subject).not_to be_never
106
- end
107
-
108
- it "status is missed" do
109
- expect(subject.status).to eq("missed")
110
- end
111
- end
112
-
113
- context "A source line with no code" do
114
- subject do
115
- SimpleCov::SourceFile::Line.new("# the ruby source", 5, nil)
116
- end
117
-
118
- it "has nil coverage" do
119
- expect(subject.coverage).to be_nil
120
- end
121
-
122
- it "is not covered" do
123
- expect(subject).not_to be_covered
124
- end
125
-
126
- it "is not skipped" do
127
- expect(subject).not_to be_skipped
128
- end
129
-
130
- it "is not missed" do
131
- expect(subject).not_to be_missed
132
- end
133
-
134
- it "is never" do
135
- expect(subject).to be_never
136
- end
137
-
138
- it "status is never" do
139
- expect(subject.status).to eq("never")
140
- end
141
- end
142
-
143
- it "raises ArgumentError when initialized with invalid src" do
144
- expect { SimpleCov::SourceFile::Line.new(:symbol, 5, 3) }.to raise_error(ArgumentError)
145
- end
146
-
147
- it "raises ArgumentError when initialized with invalid line_number" do
148
- expect { SimpleCov::SourceFile::Line.new("some source", "five", 3) }.to raise_error(ArgumentError)
149
- end
150
-
151
- it "raises ArgumentError when initialized with invalid coverage" do
152
- expect { SimpleCov::SourceFile::Line.new("some source", 5, "three") }.to raise_error(ArgumentError)
153
- end
154
- end
155
- end
@@ -1,145 +0,0 @@
1
- require "helper"
2
-
3
- if SimpleCov.usable?
4
- describe SimpleCov::SourceFile do
5
- COVERAGE_FOR_SAMPLE_RB = [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil, nil, nil, nil, nil, nil, nil].freeze
6
- context "a source file initialized with some coverage data" do
7
- subject do
8
- SimpleCov::SourceFile.new(source_fixture("sample.rb"), COVERAGE_FOR_SAMPLE_RB)
9
- end
10
-
11
- it "has a filename" do
12
- expect(subject.filename).not_to be_nil
13
- end
14
-
15
- it "has source equal to src" do
16
- expect(subject.src).to eq(subject.source)
17
- end
18
-
19
- it "has a project filename which removes the project directory" do
20
- expect(subject.project_filename).to eq("/spec/fixtures/sample.rb")
21
- end
22
-
23
- it "has source_lines equal to lines" do
24
- expect(subject.lines).to eq(subject.source_lines)
25
- end
26
-
27
- it "has 16 source lines" do
28
- expect(subject.lines.count).to eq(16)
29
- end
30
-
31
- it "has all source lines of type SimpleCov::SourceFile::Line" do
32
- subject.lines.each do |line|
33
- expect(line).to be_a SimpleCov::SourceFile::Line
34
- end
35
- end
36
-
37
- it "has 'class Foo' as line(2).source" do
38
- expect(subject.line(2).source).to eq("class Foo\n")
39
- end
40
-
41
- it "returns lines number 2, 3, 4, 7 for covered_lines" do
42
- expect(subject.covered_lines.map(&:line)).to eq([2, 3, 4, 7])
43
- end
44
-
45
- it "returns lines number 8 for missed_lines" do
46
- expect(subject.missed_lines.map(&:line)).to eq([8])
47
- end
48
-
49
- it "returns lines number 1, 5, 6, 9, 10, 16 for never_lines" do
50
- expect(subject.never_lines.map(&:line)).to eq([1, 5, 6, 9, 10, 16])
51
- end
52
-
53
- it "returns line numbers 11, 12, 13, 14, 15 for skipped_lines" do
54
- expect(subject.skipped_lines.map(&:line)).to eq([11, 12, 13, 14, 15])
55
- end
56
-
57
- it "has 80% covered_percent" do
58
- expect(subject.covered_percent).to eq(80.0)
59
- end
60
- end
61
-
62
- context "simulating potential Ruby 1.9 defect -- see Issue #56" do
63
- subject do
64
- SimpleCov::SourceFile.new(source_fixture("sample.rb"), COVERAGE_FOR_SAMPLE_RB + [nil])
65
- end
66
-
67
- it "has 16 source lines regardless of extra data in coverage array" do
68
- # Do not litter test output with known warning
69
- capture_stderr { expect(subject.lines.count).to eq(16) }
70
- end
71
-
72
- it "prints a warning to stderr if coverage array contains more data than lines in the file" do
73
- captured_output = capture_stderr do
74
- subject.lines
75
- end
76
-
77
- expect(captured_output).to match(/^Warning: coverage data provided/)
78
- end
79
- end
80
-
81
- context "a file that is never relevant" do
82
- COVERAGE_FOR_NEVER_RB = [nil, nil].freeze
83
-
84
- subject do
85
- SimpleCov::SourceFile.new(source_fixture("never.rb"), COVERAGE_FOR_NEVER_RB)
86
- end
87
-
88
- it "has 0.0 covered_strength" do
89
- expect(subject.covered_strength).to eq 0.0
90
- end
91
-
92
- it "has 0.0 covered_percent" do
93
- expect(subject.covered_percent).to eq 100.0
94
- end
95
- end
96
-
97
- context "a file where nothing is ever executed mixed with skipping #563" do
98
- COVERAGE_FOR_SKIPPED_RB = [nil, nil, nil, nil].freeze
99
-
100
- subject do
101
- SimpleCov::SourceFile.new(source_fixture("skipped.rb"), COVERAGE_FOR_SKIPPED_RB)
102
- end
103
-
104
- it "has 0.0 covered_strength" do
105
- expect(subject.covered_strength).to eq 0.0
106
- end
107
-
108
- it "has 0.0 covered_percent" do
109
- expect(subject.covered_percent).to eq 0.0
110
- end
111
- end
112
-
113
- context "a file where everything is skipped and missed #563" do
114
- COVERAGE_FOR_SKIPPED_RB_2 = [nil, nil, 0, nil].freeze
115
-
116
- subject do
117
- SimpleCov::SourceFile.new(source_fixture("skipped.rb"), COVERAGE_FOR_SKIPPED_RB_2)
118
- end
119
-
120
- it "has 0.0 covered_strength" do
121
- expect(subject.covered_strength).to eq 0.0
122
- end
123
-
124
- it "has 0.0 covered_percent" do
125
- expect(subject.covered_percent).to eq 0.0
126
- end
127
- end
128
-
129
- context "a file where everything is skipped/irrelevamt but executed #563" do
130
- COVERAGE_FOR_SKIPPED_AND_EXECUTED_RB = [nil, nil, 1, 1, 0, nil, nil, nil].freeze
131
-
132
- subject do
133
- SimpleCov::SourceFile.new(source_fixture("skipped_and_executed.rb"), COVERAGE_FOR_SKIPPED_AND_EXECUTED_RB)
134
- end
135
-
136
- it "has 0.0 covered_strength" do
137
- expect(subject.covered_strength).to eq 0.0
138
- end
139
-
140
- it "has 0.0 covered_percent" do
141
- expect(subject.covered_percent).to eq 0.0
142
- end
143
- end
144
- end
145
- end
@@ -1,75 +0,0 @@
1
- # Borrowed and heavily adjusted from:
2
- # https://github.com/metricfu/metric_fu/blob/master/spec/capture_warnings.rb
3
- require "fileutils"
4
-
5
- class FailOnWarnings
6
- def initialize
7
- @stderr_stream = StringIO.new
8
- @app_root = Dir.pwd
9
- end
10
-
11
- def collect_warnings
12
- $stderr = @stderr_stream
13
- $VERBOSE = true
14
- end
15
-
16
- def process_warnings
17
- lines = close_stream
18
- app_warnings, other_warnings = split_lines(lines)
19
-
20
- print_own_warnings(app_warnings) if app_warnings.any?
21
- write_other_warnings_to_tmp(other_warnings) if other_warnings.any?
22
- fail_script(app_warnings) if app_warnings.any?
23
- end
24
-
25
- private
26
-
27
- def close_stream
28
- $stderr = STDERR
29
-
30
- @stderr_stream.rewind
31
- lines = @stderr_stream.read.split("\n")
32
- lines.uniq!
33
- @stderr_stream.close
34
- lines
35
- end
36
-
37
- def split_lines(lines)
38
- lines.partition { |line| line.include?(@app_root) }
39
- end
40
-
41
- def print_own_warnings(app_warnings)
42
- puts ""
43
- puts ""
44
- puts <<-WARNINGS
45
- #{'-' * 30} app warnings: #{'-' * 30}
46
- #{app_warnings.join("\n")}
47
- #{'-' * 75}
48
- WARNINGS
49
- end
50
-
51
- def write_other_warnings_to_tmp(other_warnings)
52
- output_dir = File.join(@app_root, "tmp")
53
- FileUtils.mkdir_p(output_dir)
54
- output_file = File.join(output_dir, "warnings.txt")
55
- File.open(output_file, "w") do |file|
56
- file.write(other_warnings.join("\n") << "\n")
57
- end
58
- puts
59
- puts "Non-app warnings written to tmp/warnings.txt"
60
- puts
61
- end
62
-
63
- def fail_script(app_warnings)
64
- abort "Failing build due to app warnings: #{app_warnings.inspect}"
65
- end
66
- end
67
-
68
- warning_collector = FailOnWarnings.new
69
- warning_collector.collect_warnings
70
-
71
- RSpec.configure do |config|
72
- config.after(:suite) do
73
- warning_collector.process_warnings
74
- end
75
- end