Sha256: 10fa82126c24023cc1935e67defce130f30672c81fafa257851516c081884aa8

Contents?: true

Size: 1.93 KB

Versions: 3

Compression:

Stored size: 1.93 KB

Contents

require 'spec_helper'

describe SonJay::ObjectModel::ContentData do

  it "provides value access by name symbol or string" do
    subject[ :aaa  ] = 1
    subject[ 'bbb' ] = 2
    expect( subject[ 'aaa' ] ).to eq( 1 )
    expect( subject[ :bbb  ] ).to eq( 2 )
  end

  it "merges with a hash, returning a hash" do
    subject[ :aa  ] = 1
    subject[ :bb  ] = 2

    actual = subject.hash_merge(
      "bb" => 22,
      "cc" => 33
    )

    expect( actual ).to eq(
      'aa' => 1,
      'bb' => 22,
      'cc' => 33
    )
  end

  it "indicates when it is empty" do
    expect( subject ).to be_empty
  end

  it "indicates when it is not empty" do
    subject[:a] = 'a'
    expect( subject ).not_to be_empty
  end

  describe '#freeze' do
    it "causes the instance to behave as frozen" do
      subject.freeze
      expect{ subject['a'] = 1 }.to raise_exception( RuntimeError )
    end
  end

  describe '#dup' do
    it "makes a shallow copy" do
      subject[ 'aa' ] = 'A'
      subject[ 'bb' ] = 'B'
      actual_dup = subject.dup
      expect( actual_dup.keys ).to match_array( ['aa', 'bb'] )
      expect( actual_dup['aa'] ).to equal( subject['aa'] )
      actual_dup['bb'] = 'BBB'
      expect( subject['bb'] ).to eq( 'B' )
    end

    it "returns a thawed copy of a frozen instance" do
      subject.freeze
      actual_dup = subject.dup
      expect( actual_dup ).not_to be_frozen
      actual_dup['aa'] = 1
      expect( actual_dup['aa'] ).to eq( 1 )
    end
  end

  describe '#clone' do
    it "makes a shallow copy" do
      subject[ 'aa' ] = 'A'
      subject[ 'bb' ] = 'B'
      actual_clone = subject.clone
      expect( actual_clone.keys ).to match_array( ['aa', 'bb'] )
      expect( actual_clone['aa'] ).to equal( subject['aa'] )
      actual_clone['bb'] = 'BBB'
      expect( subject['bb'] ).to eq( 'B' )
    end

    it "returns a frozen copy of a frozen instance" do
      subject.freeze
      expect( subject.clone ).to be_frozen
    end
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
son_jay-0.5.2 spec/object_model/content_data_spec.rb
son_jay-0.5.1 spec/object_model/content_data_spec.rb
son_jay-0.5.0 spec/object_model/content_data_spec.rb