1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
require_relative '../spec_helper'
describe DeviceDetector::MemoryCache do
let(:subject) { DeviceDetector::MemoryCache.new(config) }
let(:config) { {} }
describe '#set' do
describe 'string key' do
let(:key) { 'string' }
it 'sets the value under the key' do
subject.set(key, 'value')
subject.data[key].must_equal 'value'
end
end
describe 'array key' do
let(:key) { ['string1', 'string2'] }
it 'sets the value under the key' do
subject.set(key, 'value')
subject.data[String(key)].must_equal 'value'
end
end
end
describe '#get' do
describe 'string key' do
let(:key) { 'string' }
it 'gets the value for the key' do
subject.data[key] = 'value'
subject.get(key).must_equal 'value'
end
end
describe 'array key' do
let(:key) { ['string1', 'string2'] }
it 'gets the value for the key' do
subject.data[String(key)] = 'value'
subject.get(key).must_equal 'value'
end
end
end
describe '#get_or_set' do
let(:key) { 'string' }
describe 'value already present' do
it 'gets the value for the key from cache' do
subject.data[key] = 'value'
block_called = false
value = subject.get_or_set(key) do
block_called = true
end
value.must_equal 'value'
block_called.must_equal false
end
end
describe 'value not yet present' do
it 'evaluates the block and sets the result' do
block_called = false
subject.get_or_set(key) do
block_called = true
end
block_called.must_equal true
subject.data[key].must_equal true
end
end
end
describe 'cache purging' do
let(:config) { { max_cache_keys: 3 } }
it 'purges the cache when key size arrives at max' do
subject.set('1', 'foo')
subject.set('2', 'bar')
subject.set('3', 'baz')
subject.set('4', 'boz')
subject.data.keys.size.must_equal 3
end
end
end
|