Sha256: 900bef30e9a9a91c1dd4a45cabbccedd761339c8df80c1800fdfcc3a3125591d

Contents?: true

Size: 1.21 KB

Versions: 21

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true
require 'support'
require 'mustermann/equality_map'

RSpec.describe Mustermann::EqualityMap do
  before { GC.disable }
  after { GC.enable }

  describe :fetch do
    subject { Mustermann::EqualityMap.new }
    specify 'with existing entry' do
      next if subject.is_a? Hash
      subject.fetch("foo") { "foo" }
      result = subject.fetch("foo") { "bar" }
      expect(result).to be == "foo"
    end

    specify 'with GC-removed entry' do
      next if subject.is_a? Hash
      subject.fetch(String.new('foo')) { "foo" }
      expect(subject.map).to receive(:[]).and_return(nil)
      result = subject.fetch(String.new('foo')) { "bar" }
      expect(result).to be == "bar"
    end

    specify 'allows a frozen key and value' do
      next if subject.is_a? Hash
      key = "foo".freeze
      value = "bar".freeze
      subject.fetch(key) { value }
      result = subject.fetch("foo".dup) { raise "not executed" }
      expect(result).to be == value
      expect(result).not_to equal value
    end

    specify 'allows only a single argument to be compatible with Hash#fetch' do
      expect {
        subject.fetch("foo", "bar", "baz") { "value" }
      }.to raise_error(ArgumentError)
    end
  end
end

Version data entries

21 entries across 18 versions & 4 rubygems

Version Path
mustermann-3.0.3 spec/equality_map_spec.rb
mustermann-3.0.2 spec/equality_map_spec.rb
mustermann-3.0.1 spec/equality_map_spec.rb
rubypitaya-3.12.5 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/mustermann-3.0.0/spec/equality_map_spec.rb
rubypitaya-3.12.4 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/mustermann-3.0.0/spec/equality_map_spec.rb
rubypitaya-3.12.3 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/mustermann-3.0.0/spec/equality_map_spec.rb
rubypitaya-3.12.2 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/mustermann-3.0.0/spec/equality_map_spec.rb
mustermann-3.0.0 spec/equality_map_spec.rb
mustermann-2.0.2 spec/equality_map_spec.rb
mustermann-2.0.1 spec/equality_map_spec.rb
mustermann-2.0.0 spec/equality_map_spec.rb
mustermann-1.1.2 spec/equality_map_spec.rb
devcycle-ruby-server-sdk-1.1.0 examples/sinatra/vendor/bundle/ruby/3.1.0/gems/mustermann-1.1.1/spec/equality_map_spec.rb
devcycle-ruby-server-sdk-1.1.0 examples/sinatra/vendor/bundle/ruby/2.6.0/gems/mustermann-1.1.1/spec/equality_map_spec.rb
devcycle-ruby-server-sdk-1.1.0 examples/sinatra/vendor/bundle/ruby/3.0.0/gems/mustermann-1.1.1/spec/equality_map_spec.rb
grape-extra_validators-2.0.0 vendor/bundle/ruby/2.6.0/gems/mustermann-1.1.1/spec/equality_map_spec.rb
grape-extra_validators-2.0.0 vendor/bundle/ruby/2.6.0/gems/mustermann-1.0.3/spec/equality_map_spec.rb
grape-extra_validators-1.0.0 vendor/bundle/ruby/2.4.0/gems/mustermann-1.0.3/spec/equality_map_spec.rb
mustermann-1.1.1 spec/equality_map_spec.rb
mustermann-1.1.0 spec/equality_map_spec.rb