simplecov-patched 0.14.2

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 (126) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +31 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +88 -0
  5. data/.travis.yml +29 -0
  6. data/.yardopts +1 -0
  7. data/CHANGELOG.md +435 -0
  8. data/CONTRIBUTING.md +48 -0
  9. data/Gemfile +38 -0
  10. data/MIT-LICENSE +20 -0
  11. data/README.md +646 -0
  12. data/Rakefile +41 -0
  13. data/cucumber.yml +13 -0
  14. data/doc/alternate-formatters.md +36 -0
  15. data/doc/commercial-services.md +20 -0
  16. data/doc/editor-integration.md +13 -0
  17. data/features/config_autoload.feature +46 -0
  18. data/features/config_command_name.feature +45 -0
  19. data/features/config_coverage_dir.feature +33 -0
  20. data/features/config_deactivate_merging.feature +42 -0
  21. data/features/config_formatters.feature +77 -0
  22. data/features/config_merge_timeout.feature +39 -0
  23. data/features/config_nocov_token.feature +79 -0
  24. data/features/config_profiles.feature +44 -0
  25. data/features/config_project_name.feature +27 -0
  26. data/features/config_styles.feature +121 -0
  27. data/features/config_tracked_files.feature +29 -0
  28. data/features/cucumber_basic.feature +29 -0
  29. data/features/maximum_coverage_drop.feature +89 -0
  30. data/features/merging_test_unit_and_rspec.feature +44 -0
  31. data/features/minimum_coverage.feature +59 -0
  32. data/features/refuse_coverage_drop.feature +95 -0
  33. data/features/rspec_basic.feature +32 -0
  34. data/features/rspec_fails_on_initialization.feature +14 -0
  35. data/features/rspec_groups_and_filters_basic.feature +29 -0
  36. data/features/rspec_groups_and_filters_complex.feature +37 -0
  37. data/features/rspec_groups_using_filter_class.feature +41 -0
  38. data/features/rspec_without_simplecov.feature +20 -0
  39. data/features/skipping_code_blocks_manually.feature +70 -0
  40. data/features/step_definitions/html_steps.rb +44 -0
  41. data/features/step_definitions/simplecov_steps.rb +68 -0
  42. data/features/step_definitions/transformers.rb +13 -0
  43. data/features/step_definitions/web_steps.rb +64 -0
  44. data/features/support/env.rb +50 -0
  45. data/features/test_unit_basic.feature +34 -0
  46. data/features/test_unit_groups_and_filters_basic.feature +29 -0
  47. data/features/test_unit_groups_and_filters_complex.feature +35 -0
  48. data/features/test_unit_groups_using_filter_class.feature +40 -0
  49. data/features/test_unit_without_simplecov.feature +20 -0
  50. data/features/unicode_compatiblity.feature +67 -0
  51. data/lib/simplecov.rb +189 -0
  52. data/lib/simplecov/command_guesser.rb +59 -0
  53. data/lib/simplecov/configuration.rb +307 -0
  54. data/lib/simplecov/defaults.rb +121 -0
  55. data/lib/simplecov/exit_codes.rb +8 -0
  56. data/lib/simplecov/file_list.rb +59 -0
  57. data/lib/simplecov/filter.rb +54 -0
  58. data/lib/simplecov/formatter.rb +8 -0
  59. data/lib/simplecov/formatter/multi_formatter.rb +32 -0
  60. data/lib/simplecov/formatter/simple_formatter.rb +23 -0
  61. data/lib/simplecov/jruby_fix.rb +42 -0
  62. data/lib/simplecov/last_run.rb +24 -0
  63. data/lib/simplecov/load_global_config.rb +6 -0
  64. data/lib/simplecov/no_defaults.rb +2 -0
  65. data/lib/simplecov/profiles.rb +31 -0
  66. data/lib/simplecov/railtie.rb +7 -0
  67. data/lib/simplecov/railties/tasks.rake +11 -0
  68. data/lib/simplecov/raw_coverage.rb +39 -0
  69. data/lib/simplecov/result.rb +86 -0
  70. data/lib/simplecov/result_merger.rb +95 -0
  71. data/lib/simplecov/source_file.rb +196 -0
  72. data/lib/simplecov/version.rb +25 -0
  73. data/spec/1_8_fallbacks_spec.rb +31 -0
  74. data/spec/command_guesser_spec.rb +48 -0
  75. data/spec/config_loader_spec.rb +14 -0
  76. data/spec/configuration_spec.rb +35 -0
  77. data/spec/deleted_source_spec.rb +12 -0
  78. data/spec/faked_project/Gemfile +6 -0
  79. data/spec/faked_project/Rakefile +8 -0
  80. data/spec/faked_project/cucumber.yml +13 -0
  81. data/spec/faked_project/features/step_definitions/my_steps.rb +22 -0
  82. data/spec/faked_project/features/support/env.rb +12 -0
  83. data/spec/faked_project/features/test_stuff.feature +6 -0
  84. data/spec/faked_project/lib/faked_project.rb +11 -0
  85. data/spec/faked_project/lib/faked_project/framework_specific.rb +18 -0
  86. data/spec/faked_project/lib/faked_project/meta_magic.rb +24 -0
  87. data/spec/faked_project/lib/faked_project/some_class.rb +28 -0
  88. data/spec/faked_project/lib/faked_project/untested_class.rb +11 -0
  89. data/spec/faked_project/spec/faked_spec.rb +11 -0
  90. data/spec/faked_project/spec/forking_spec.rb +8 -0
  91. data/spec/faked_project/spec/meta_magic_spec.rb +15 -0
  92. data/spec/faked_project/spec/some_class_spec.rb +13 -0
  93. data/spec/faked_project/spec/spec_helper.rb +11 -0
  94. data/spec/faked_project/test/faked_test.rb +11 -0
  95. data/spec/faked_project/test/meta_magic_test.rb +13 -0
  96. data/spec/faked_project/test/some_class_test.rb +15 -0
  97. data/spec/faked_project/test/test_helper.rb +12 -0
  98. data/spec/file_list_spec.rb +50 -0
  99. data/spec/filters_spec.rb +98 -0
  100. data/spec/fixtures/app/controllers/sample_controller.rb +10 -0
  101. data/spec/fixtures/app/models/user.rb +10 -0
  102. data/spec/fixtures/deleted_source_sample.rb +15 -0
  103. data/spec/fixtures/frameworks/rspec_bad.rb +9 -0
  104. data/spec/fixtures/frameworks/rspec_good.rb +9 -0
  105. data/spec/fixtures/frameworks/testunit_bad.rb +9 -0
  106. data/spec/fixtures/frameworks/testunit_good.rb +9 -0
  107. data/spec/fixtures/iso-8859.rb +3 -0
  108. data/spec/fixtures/never.rb +2 -0
  109. data/spec/fixtures/resultset1.rb +4 -0
  110. data/spec/fixtures/resultset2.rb +4 -0
  111. data/spec/fixtures/sample.rb +16 -0
  112. data/spec/fixtures/skipped.rb +4 -0
  113. data/spec/fixtures/skipped_and_executed.rb +8 -0
  114. data/spec/fixtures/utf-8.rb +3 -0
  115. data/spec/helper.rb +26 -0
  116. data/spec/last_run_spec.rb +48 -0
  117. data/spec/multi_formatter_spec.rb +20 -0
  118. data/spec/raw_coverage_spec.rb +92 -0
  119. data/spec/result_merger_spec.rb +96 -0
  120. data/spec/result_spec.rb +209 -0
  121. data/spec/return_codes_spec.rb +34 -0
  122. data/spec/simplecov_spec.rb +110 -0
  123. data/spec/source_file_line_spec.rb +155 -0
  124. data/spec/source_file_spec.rb +141 -0
  125. data/spec/support/fail_rspec_on_ruby_warning.rb +75 -0
  126. metadata +320 -0
@@ -0,0 +1,34 @@
1
+ require "helper"
2
+
3
+ # Make sure that exit codes of tests are propagated properly
4
+ # See https://github.com/colszowka/simplecov/issues/5
5
+ describe "return codes" do
6
+ context "inside fixtures/frameworks" do
7
+ around do |test|
8
+ Dir.chdir(File.join(File.dirname(__FILE__), "fixtures", "frameworks")) do
9
+ FileUtils.rm_rf("./coverage")
10
+ test.call
11
+ end
12
+ end
13
+
14
+ it "has return code 0 when running testunit_good.rb" do
15
+ `ruby testunit_good.rb`
16
+ expect($?.exitstatus).to be_zero
17
+ end
18
+
19
+ it "has return code 0 when running rspec_good.rb" do
20
+ `rspec rspec_good.rb`
21
+ expect($?.exitstatus).to be_zero
22
+ end
23
+
24
+ it "has non-0 return code when running testunit_bad.rb" do
25
+ `ruby testunit_bad.rb`
26
+ expect($?.exitstatus).not_to be_zero
27
+ end
28
+
29
+ it "has return code 1 when running rspec_bad.rb" do
30
+ `rspec rspec_bad.rb`
31
+ expect($?.exitstatus).not_to be_zero
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,110 @@
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
+ allow(SimpleCov).to receive(:add_not_loaded_files).once.and_return({})
10
+ end
11
+
12
+ context "with merging disabled" do
13
+ before do
14
+ allow(SimpleCov).to receive(:use_merging).once.and_return(false)
15
+ end
16
+
17
+ context "when not running" do
18
+ before do
19
+ allow(SimpleCov).to receive(:running).and_return(false)
20
+ end
21
+
22
+ it "returns nil" do
23
+ expect(SimpleCov.result).to be_nil
24
+ end
25
+ end
26
+
27
+ context "when running" do
28
+ before do
29
+ allow(SimpleCov).to receive(:running).and_return(true, false)
30
+ end
31
+
32
+ it "uses the result from Coverage" do
33
+ expect(Coverage).to receive(:result).once.and_return({})
34
+ SimpleCov.result
35
+ end
36
+
37
+ it "adds not-loaded-files" do
38
+ expect(SimpleCov).to receive(:add_not_loaded_files).once.and_return({})
39
+ SimpleCov.result
40
+ end
41
+
42
+ it "doesn't store the current coverage" do
43
+ expect(SimpleCov::ResultMerger).to receive(:store_result).never
44
+ SimpleCov.result
45
+ end
46
+
47
+ it "doesn't merge the result" do
48
+ expect(SimpleCov::ResultMerger).to receive(:merged_result).never
49
+ SimpleCov.result
50
+ end
51
+
52
+ it "caches its result" do
53
+ result = SimpleCov.result
54
+ expect(SimpleCov.result).to equal(result)
55
+ end
56
+ end
57
+ end
58
+
59
+ context "with merging enabled" do
60
+ let(:the_merged_result) { double }
61
+
62
+ before do
63
+ allow(SimpleCov).to receive(:use_merging).once.and_return(true)
64
+ allow(SimpleCov::ResultMerger).to receive(:store_result).once
65
+ allow(SimpleCov::ResultMerger).to receive(:merged_result).once.and_return(the_merged_result)
66
+ end
67
+
68
+ context "when not running" do
69
+ before do
70
+ allow(SimpleCov).to receive(:running).and_return(false)
71
+ end
72
+
73
+ it "merges the result" do
74
+ expect(SimpleCov.result).to equal(the_merged_result)
75
+ end
76
+ end
77
+
78
+ context "when running" do
79
+ before do
80
+ allow(SimpleCov).to receive(:running).and_return(true, false)
81
+ end
82
+
83
+ it "uses the result from Coverage" do
84
+ expect(Coverage).to receive(:result).once.and_return({})
85
+ SimpleCov.result
86
+ end
87
+
88
+ it "adds not-loaded-files" do
89
+ expect(SimpleCov).to receive(:add_not_loaded_files).once.and_return({})
90
+ SimpleCov.result
91
+ end
92
+
93
+ it "stores the current coverage" do
94
+ expect(SimpleCov::ResultMerger).to receive(:store_result).once
95
+ SimpleCov.result
96
+ end
97
+
98
+ it "merges the result" do
99
+ expect(SimpleCov.result).to equal(the_merged_result)
100
+ end
101
+
102
+ it "caches its result" do
103
+ result = SimpleCov.result
104
+ expect(SimpleCov.result).to equal(result)
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,155 @@
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
@@ -0,0 +1,141 @@
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 source_lines equal to lines" do
20
+ expect(subject.lines).to eq(subject.source_lines)
21
+ end
22
+
23
+ it "has 16 source lines" do
24
+ expect(subject.lines.count).to eq(16)
25
+ end
26
+
27
+ it "has all source lines of type SimpleCov::SourceFile::Line" do
28
+ subject.lines.each do |line|
29
+ expect(line).to be_a SimpleCov::SourceFile::Line
30
+ end
31
+ end
32
+
33
+ it "has 'class Foo' as line(2).source" do
34
+ expect(subject.line(2).source).to eq("class Foo\n")
35
+ end
36
+
37
+ it "returns lines number 2, 3, 4, 7 for covered_lines" do
38
+ expect(subject.covered_lines.map(&:line)).to eq([2, 3, 4, 7])
39
+ end
40
+
41
+ it "returns lines number 8 for missed_lines" do
42
+ expect(subject.missed_lines.map(&:line)).to eq([8])
43
+ end
44
+
45
+ it "returns lines number 1, 5, 6, 9, 10, 16 for never_lines" do
46
+ expect(subject.never_lines.map(&:line)).to eq([1, 5, 6, 9, 10, 16])
47
+ end
48
+
49
+ it "returns line numbers 11, 12, 13, 14, 15 for skipped_lines" do
50
+ expect(subject.skipped_lines.map(&:line)).to eq([11, 12, 13, 14, 15])
51
+ end
52
+
53
+ it "has 80% covered_percent" do
54
+ expect(subject.covered_percent).to eq(80.0)
55
+ end
56
+ end
57
+
58
+ context "simulating potential Ruby 1.9 defect -- see Issue #56" do
59
+ subject do
60
+ SimpleCov::SourceFile.new(source_fixture("sample.rb"), COVERAGE_FOR_SAMPLE_RB + [nil])
61
+ end
62
+
63
+ it "has 16 source lines regardless of extra data in coverage array" do
64
+ # Do not litter test output with known warning
65
+ capture_stderr { expect(subject.lines.count).to eq(16) }
66
+ end
67
+
68
+ it "prints a warning to stderr if coverage array contains more data than lines in the file" do
69
+ captured_output = capture_stderr do
70
+ subject.lines
71
+ end
72
+
73
+ expect(captured_output).to match(/^Warning: coverage data provided/)
74
+ end
75
+ end
76
+
77
+ context "a file that is never relevant" do
78
+ COVERAGE_FOR_NEVER_RB = [nil, nil].freeze
79
+
80
+ subject do
81
+ SimpleCov::SourceFile.new(source_fixture("never.rb"), COVERAGE_FOR_NEVER_RB)
82
+ end
83
+
84
+ it "has 0.0 covered_strength" do
85
+ expect(subject.covered_strength).to eq 0.0
86
+ end
87
+
88
+ it "has 0.0 covered_percent" do
89
+ expect(subject.covered_percent).to eq 100.0
90
+ end
91
+ end
92
+
93
+ context "a file where nothing is ever executed mixed with skipping #563" do
94
+ COVERAGE_FOR_SKIPPED_RB = [nil, nil, nil, nil].freeze
95
+
96
+ subject do
97
+ SimpleCov::SourceFile.new(source_fixture("skipped.rb"), COVERAGE_FOR_SKIPPED_RB)
98
+ end
99
+
100
+ it "has 0.0 covered_strength" do
101
+ expect(subject.covered_strength).to eq 0.0
102
+ end
103
+
104
+ it "has 0.0 covered_percent" do
105
+ expect(subject.covered_percent).to eq 0.0
106
+ end
107
+ end
108
+
109
+ context "a file where everything is skipped and missed #563" do
110
+ COVERAGE_FOR_SKIPPED_RB_2 = [nil, nil, 0, nil].freeze
111
+
112
+ subject do
113
+ SimpleCov::SourceFile.new(source_fixture("skipped.rb"), COVERAGE_FOR_SKIPPED_RB_2)
114
+ end
115
+
116
+ it "has 0.0 covered_strength" do
117
+ expect(subject.covered_strength).to eq 0.0
118
+ end
119
+
120
+ it "has 0.0 covered_percent" do
121
+ expect(subject.covered_percent).to eq 0.0
122
+ end
123
+ end
124
+
125
+ context "a file where everything is skipped/irrelevamt but executed #563" do
126
+ COVERAGE_FOR_SKIPPED_AND_EXECUTED_RB = [nil, nil, 1, 1, 0, nil, nil, nil].freeze
127
+
128
+ subject do
129
+ SimpleCov::SourceFile.new(source_fixture("skipped_and_executed.rb"), COVERAGE_FOR_SKIPPED_AND_EXECUTED_RB)
130
+ end
131
+
132
+ it "has 0.0 covered_strength" do
133
+ expect(subject.covered_strength).to eq 0.0
134
+ end
135
+
136
+ it "has 0.0 covered_percent" do
137
+ expect(subject.covered_percent).to eq 0.0
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,75 @@
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