Sha256: 850a00cdef95df7eba5e82e062bf1b025735f37e6e6989ee98841c9d0c7f5db7

Contents?: true

Size: 904 Bytes

Versions: 11

Compression:

Stored size: 904 Bytes

Contents

shared_examples_for 'a #freeze method' do
  let(:sample_exception) do
    begin
      object.dup.freeze.instance_variable_set(:@foo, :bar)
    rescue => exception
      exception
    end
  end

  let(:expected_exception_class) do
    # Ruby 1.8 blows up with TypeError Ruby 1.9 with RuntimeError
    sample_exception.class
  end

  let(:expected_exception_message) do
    # Ruby 1.8 blows up with a different message than Ruby 1.9
    sample_exception.message
  end

  it_should_behave_like 'an idempotent method'

  it 'returns object' do
    should be(object)
  end

  it 'prevents future modifications' do
    subject
    expectation = raise_error(expected_exception_class,expected_exception_message)
    expect { object.instance_variable_set(:@foo, :bar) }.to(expectation)
  end

  its(:frozen?) { should be(true) }

  it 'allows to access attribute' do
    subject.name.should eql('John')
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
virtus-1.0.2 spec/shared/freeze_method_behavior.rb
virtus-1.0.1 spec/shared/freeze_method_behavior.rb
virtus-1.0.0 spec/shared/freeze_method_behavior.rb
virtus-1.0.0.rc2 spec/shared/freeze_method_behavior.rb
virtus-1.0.0.rc1 spec/shared/freeze_method_behavior.rb
virtus-1.0.0.beta8 spec/shared/freeze_method_behavior.rb
virtus-1.0.0.beta7 spec/shared/freeze_method_behavior.rb
virtus-1.0.0.beta6 spec/shared/freeze_method_behavior.rb
virtus-1.0.0.beta5 spec/shared/freeze_method_behavior.rb
virtus-1.0.0.beta4 spec/shared/freeze_method_behavior.rb
virtus-1.0.0.beta3 spec/shared/freeze_method_behavior.rb