free_mutant/spec/unit/mutant/warning_expectation.rb
Markus Schirp 6df5811a87 Use RSpec as receiver for rspec DSL methods
* I dislike the global infection RSpec does. This commit is a first step
  to get a rid of it.
* Also remove the need for `require 'spec_helper` in each spec file with
  adjusting `.rspec`.
2014-08-10 21:04:07 +00:00

72 lines
2 KiB
Ruby

RSpec.describe Mutant::WarningExpectation do
let(:object) { described_class.new(expected_warnings) }
let(:expected_warnings) { [] }
let(:actual_warnings) { [] }
let(:warning_a) { "foo.rb:10: warning: We have a problem!\n" }
let(:warning_b) { "bar.rb:10: warning: We have an other problem!\n" }
describe '#execute' do
subject { object.execute(&block) }
before do
@called = false
end
let(:block) do
lambda do
@called = true
actual_warnings.each(&Kernel.method(:warn))
end
end
it 'executes block' do
expect { subject }.to change { @called }.from(false).to(true)
end
context 'when no warnings occur during block execution' do
context 'and no warnings are expected' do
it_should_behave_like 'a command method'
end
context 'and warnings are expected' do
let(:expected_warnings) { [warning_a] }
before do
expect($stderr).to receive(:puts).with("Expected but missing warnings: #{expected_warnings}")
end
it_should_behave_like 'a command method'
end
end
context 'when warnings occur during block execution' do
let(:actual_warnings) { [warning_a, warning_b] }
context 'and only some no warnings are expected' do
let(:expected_warnings) { [warning_a] }
it 'raises an expectation error' do
expect { subject }.to raise_error(Mutant::WarningExpectation::ExpectationError.new(expected_warnings))
end
end
context 'and all warnings are expected' do
let(:expected_warnings) { [warning_a, warning_b] }
it_should_behave_like 'a command method'
end
context 'and there is an expected warning missing' do
let(:expected_warnings) { [warning_a] }
let(:actual_warnings) { [warning_b] }
it 'raises an expectation error' do
expect { subject }.to raise_error(Mutant::WarningExpectation::ExpectationError.new([warning_b]))
end
end
end
end
end