coveralls_reborn 0.27.0 → 0.28.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.
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Coveralls::Output do
6
- it 'defaults the IO to $stdout' do
7
- expect { described_class.puts 'this is a test' }.to output("this is a test\n").to_stdout
8
- end
9
-
10
- it 'accepts an IO injection' do
11
- out = StringIO.new
12
- allow(described_class).to receive(:output).and_return(out)
13
- described_class.puts 'this is a test'
14
-
15
- expect(out.string).to eq "this is a test\n"
16
- end
17
-
18
- describe '.puts' do
19
- it 'accepts an IO injection' do
20
- out = StringIO.new
21
- described_class.puts 'this is a test', output: out
22
-
23
- expect(out.string).to eq "this is a test\n"
24
- end
25
- end
26
-
27
- describe '.print' do
28
- it 'accepts an IO injection' do
29
- out = StringIO.new
30
- described_class.print 'this is a test', output: out
31
-
32
- expect(out.string).to eq 'this is a test'
33
- end
34
- end
35
-
36
- describe 'when silenced' do
37
- before { described_class.silent = true }
38
-
39
- it 'does not put' do
40
- expect { described_class.puts 'foo' }.not_to output("foo\n").to_stdout
41
- end
42
-
43
- it 'does not print' do
44
- expect { described_class.print 'foo' }.not_to output('foo').to_stdout
45
- end
46
- end
47
-
48
- describe '.format' do
49
- it 'accepts a color argument' do
50
- require 'term/ansicolor'
51
- string = 'Hello'
52
- ansi_color_string = Term::ANSIColor.red(string)
53
- expect(described_class.format(string, color: 'red')).to eq(ansi_color_string)
54
- end
55
-
56
- it 'accepts no color arguments' do
57
- unformatted_string = 'Hi Doggie!'
58
- expect(described_class.format(unformatted_string)).to eq(unformatted_string)
59
- end
60
-
61
- it 'rejects formats unrecognized by Term::ANSIColor' do
62
- string = 'Hi dog!'
63
- expect(described_class.format(string, color: 'not_a_real_color')).to eq(string)
64
- end
65
-
66
- it 'accepts more than 1 color argument' do
67
- string = 'Hi dog!'
68
- multi_formatted_string = Term::ANSIColor.red { Term::ANSIColor.underline(string) }
69
- expect(described_class.format(string, color: 'red underline')).to eq(multi_formatted_string)
70
- end
71
-
72
- context 'without color' do
73
- before { described_class.no_color = true }
74
-
75
- it 'does not add color to string' do
76
- unformatted_string = 'Hi Doggie!'
77
- expect(described_class.format(unformatted_string, color: 'red')).to eq(unformatted_string)
78
- end
79
- end
80
- end
81
- end
@@ -1,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Coveralls::SimpleCov::Formatter do
6
- before do
7
- stub_api_post
8
- end
9
-
10
- def source_fixture(filename)
11
- File.expand_path(File.join(File.dirname(__FILE__), '..', 'fixtures', filename))
12
- end
13
-
14
- let(:result) do
15
- options = {
16
- source_fixture('app/controllers/sample.rb') => { lines: [nil, 1, 1, 1, nil, 0, 1, 1, nil, nil] },
17
- source_fixture('app/models/airplane.rb') => { lines: [0, 0, 0, 0, 0] },
18
- source_fixture('app/models/dog.rb') => { lines: [1, 1, 1, 1, 1] },
19
- source_fixture('app/models/house.rb') => { lines: [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] },
20
- source_fixture('app/models/robot.rb') => { lines: [1, 1, 1, 1, nil, nil, 1, 0, nil, nil] },
21
- source_fixture('app/models/user.rb') => {
22
- lines: [nil, 1, 1, 0, nil, nil, 1, 0, nil, nil, 1, 0, 0, nil, nil, nil],
23
- 'branches' => {
24
- '[:if, 0, 12, 4, 14, 7]' => {
25
- '[:then, 1, 13, 6, 13, 11]' => 1,
26
- '[:else, 2, 12, 4, 14, 7]' => 0
27
- }
28
- }
29
- },
30
- source_fixture('sample.rb') => { lines: [nil, 1, 1, 1, nil, 0, 1, 1, nil, nil] }
31
- }
32
-
33
- SimpleCov::Result.new(options)
34
- end
35
-
36
- describe '#format' do
37
- context 'when should run' do
38
- before do
39
- Coveralls.testing = true
40
- Coveralls.noisy = false
41
- end
42
-
43
- it 'posts json' do
44
- expect(result.files).not_to be_empty
45
- silence do
46
- expect(described_class.new.format(result)).to be_truthy
47
- end
48
- end
49
- end
50
-
51
- context 'when should not run, noisy' do
52
- it 'only displays result' do
53
- silence do
54
- expect(described_class.new.display_result(result)).to be_truthy
55
- end
56
- end
57
- end
58
-
59
- context 'without files' do
60
- let(:result) { SimpleCov::Result.new({}) }
61
-
62
- it 'shows note that no files have been covered' do
63
- Coveralls.noisy = true
64
- Coveralls.testing = false
65
-
66
- silence do
67
- expect do
68
- described_class.new.format(result)
69
- end.not_to raise_error
70
- end
71
- end
72
- end
73
-
74
- context 'with api error' do
75
- it 'rescues' do
76
- e = SocketError.new
77
-
78
- silence do
79
- expect(described_class.new.display_error(e)).to be_falsy
80
- end
81
- end
82
- end
83
-
84
- describe '#get_source_files' do
85
- let(:source_files) { instance.get_source_files(result) }
86
- let(:instance) do
87
- described_class.new.tap do |ins|
88
- allow(ins).to receive(:branches)
89
- end
90
- end
91
-
92
- it 'nils the skipped lines' do
93
- source_file = source_files.first
94
- expect(source_file[:coverage]).to eq [nil, 1, 1, 1, nil, 0, 1, 1, nil, nil, nil, nil, nil]
95
- end
96
-
97
- it 'calls #branches when branch coverage is present' do
98
- source_files
99
- expect(instance).to have_received(:branches).once
100
- end
101
- end
102
-
103
- describe '#branches' do
104
- let(:branch_coverage_parsed) { described_class.new.branches(simplecov_branches_results) }
105
- let(:simplecov_branches_results) do
106
- {
107
- '[:if, 0, 12, 4, 14, 7]' => {
108
- '[:then, 1, 13, 6, 13, 11]' => 1,
109
- '[:else, 2, 12, 4, 14, 7]' => 0
110
- }
111
- }
112
- end
113
-
114
- it 'return coveralls required structure' do
115
- expect(branch_coverage_parsed).to eq [12, 0, 1, 1, 12, 0, 2, 0]
116
- end
117
- end
118
-
119
- describe '#short_filename' do
120
- subject { described_class.new.short_filename(filename) }
121
-
122
- let(:filename) { '/app/app/controllers/application_controller.rb' }
123
-
124
- before do
125
- allow(SimpleCov).to receive(:root).and_return(root_path)
126
- end
127
-
128
- context 'with nil root path' do
129
- let(:root_path) { nil }
130
-
131
- it { is_expected.to eql filename }
132
- end
133
-
134
- context 'with multiple matches of root path' do
135
- let(:root_path) { '/app' }
136
-
137
- it { is_expected.to eql 'app/controllers/application_controller.rb' }
138
- end
139
- end
140
- end
141
- end
data/spec/spec_helper.rb DELETED
@@ -1,83 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'simplecov'
4
- require 'webmock'
5
- require 'vcr'
6
-
7
- class InceptionFormatter
8
- def format(result)
9
- Coveralls::SimpleCov::Formatter.new.format(result)
10
- end
11
- end
12
-
13
- def setup_formatter
14
- if ENV['GITHUB_ACTIONS']
15
- require 'simplecov-lcov'
16
-
17
- SimpleCov::Formatter::LcovFormatter.config do |c|
18
- c.report_with_single_file = true
19
- c.single_report_path = 'coverage/lcov.info'
20
- end
21
- end
22
-
23
- SimpleCov.formatter =
24
- if ENV['CI'] || ENV['COVERALLS_REPO_TOKEN']
25
- if ENV['GITHUB_ACTIONS']
26
- SimpleCov::Formatter::MultiFormatter.new([InceptionFormatter, SimpleCov::Formatter::LcovFormatter])
27
- else
28
- InceptionFormatter
29
- end
30
- else
31
- SimpleCov::Formatter::HTMLFormatter
32
- end
33
- end
34
-
35
- setup_formatter
36
-
37
- SimpleCov.start do
38
- add_filter do |source_file|
39
- source_file.filename.include?('spec') && !source_file.filename.include?('fixture')
40
- end
41
- add_filter %r{/.bundle/}
42
- end
43
-
44
- # Leave this require after SimpleCov.start
45
- require 'coveralls'
46
-
47
- VCR.configure do |c|
48
- c.cassette_library_dir = 'fixtures/vcr_cassettes'
49
- c.hook_into :webmock
50
- end
51
-
52
- RSpec.configure do |config|
53
- config.run_all_when_everything_filtered = true
54
- config.filter_run :focus
55
- config.include WebMock::API
56
-
57
- config.after(:suite) do
58
- setup_formatter
59
- WebMock.disable!
60
- end
61
- end
62
-
63
- def stub_api_post
64
- body = '{"message":"","url":""}'
65
- stub_request(:post, "#{Coveralls::API::API_BASE}/jobs")
66
- .to_return(status: 200, body: body, headers: {})
67
- end
68
-
69
- def silence(&block)
70
- return yield if ENV['silence'] == 'false'
71
-
72
- silence_stream($stdout, &block)
73
- end
74
-
75
- def silence_stream(stream)
76
- old_stream = stream.dup
77
- stream.reopen(IO::NULL)
78
- stream.sync = true
79
- yield
80
- ensure
81
- stream.reopen(old_stream)
82
- old_stream.close
83
- end