spec/utils/file_system_trie_spec.rb (73 lines of code) (raw):
# encoding: UTF-8
# Copyright 2012 Twitter, Inc
# http://www.apache.org/licenses/LICENSE-2.0
require 'spec_helper'
require 'fileutils'
require 'securerandom'
require 'tmpdir'
describe TwitterCldr::Utils::FileSystemTrie do
let(:tmp_dir) do
File.join(Dir.tmpdir, SecureRandom.hex)
end
let(:trie) { described_class.new(tmp_dir) }
before(:each) do
FileUtils.mkdir_p(tmp_dir)
end
after(:each) do
FileUtils.rm_rf(tmp_dir)
end
describe '#empty?' do
it 'returns true if the trie is empty' do
expect(trie).to be_empty
end
it 'returns false if the trie is not empty' do
trie.add(%w(foo bar), 'baz')
expect(trie).to_not be_empty
end
end
describe '#add' do
it 'creates a nested folder structure' do
trie.add(%w(foo bar baz), 'boo')
path = Pathname(tmp_dir)
.join('foo/bar/baz')
.join(described_class::VALUE_FILE)
expect(path).to exist
end
it 'adds the entry to the trie' do
key = %w(foo bar baz)
trie.add(key, 'boo')
expect(trie.get(key)).to eq('boo')
end
end
describe '#set' do
it "adds an entry to the trie if the key doesn't exist" do
key = %w(foo bar baz)
trie.set(key, 'boo')
expect(trie.get(key)).to eq('boo')
end
it 'updates the entry in the trie if the key already exists' do
key = %w(foo bar baz)
trie.add(key, 'boo')
expect(trie.get(key)).to eq('boo')
trie.set(key, 'blarg')
expect(trie.get(key)).to eq('blarg')
end
end
describe '#get' do
let(:key) { %w(foo bar baz) }
before(:each) do
trie.add(key, 'boo')
end
it 'retrieves the value at the given key' do
expect(trie.get(key)).to eq('boo')
end
end
describe '#get_node' do
let(:key) { %w(foo bar baz) }
before(:each) do
trie.add(key, 'boo')
end
it 'retrieves the trie node at the given path' do
node = trie.get_node(key)
expect(node).to be_a(described_class::Node)
expect(node.value).to eq('boo')
end
end
end