Sha256: 6fda91bb62a13e78655766a107e215abf42f7ad376462f9d2a1c62d7f028d14c

Contents?: true

Size: 1.99 KB

Versions: 6

Compression:

Stored size: 1.99 KB

Contents

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

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mutant-0.6.6 spec/unit/mutant/warning_expectation.rb
mutant-0.6.5 spec/unit/mutant/warning_expectation.rb
mutant-0.6.4 spec/unit/mutant/warning_expectation.rb
mutant-0.6.3 spec/unit/mutant/warning_expectation.rb
mutant-0.6.2 spec/unit/mutant/warning_expectation.rb
mutant-0.6.0 spec/unit/mutant/warning_expectation.rb