spec/transforms/transform_id_spec.rb (124 lines of code) (raw):
# encoding: UTF-8
# Copyright 2012 Twitter, Inc
# http://www.apache.org/licenses/LICENSE-2.0
require 'spec_helper'
describe TwitterCldr::Transforms::TransformId do
describe '.find' do
it 'finds a transformer when given two locales' do
id = described_class.find('cs', 'ja')
expect(id.source).to eq('cs')
expect(id.target).to eq('ja')
expect(id.to_s).to eq('cs-ja')
end
it 'finds a script-based transformer when given two locales' do
id = described_class.find('ar', 'en')
expect(id.source).to eq('Arabic')
expect(id.target).to eq('Latin')
expect(id.to_s).to eq('Arabic-Latin')
end
it 'finds a transformer when given two scripts' do
id = described_class.find('Cyrillic', 'Latin')
expect(id.source).to eq('Cyrillic')
expect(id.target).to eq('Latin')
expect(id.to_s).to eq('Cyrillic-Latin')
end
it 'finds a transformer when given one script and one locale' do
id = described_class.find('Cyrillic', 'en')
expect(id.source).to eq('Cyrillic')
expect(id.target).to eq('Latin')
expect(id.to_s).to eq('Cyrillic-Latin')
id = described_class.find('ru', 'Latin')
expect(id.source).to eq('Cyrillic')
expect(id.target).to eq('Latin')
expect(id.to_s).to eq('Cyrillic-Latin')
end
it 'handles abbreviated scripts' do
id = described_class.find('Cyrl', 'Latn')
expect(id.source).to eq('Cyrillic')
expect(id.target).to eq('Latin')
expect(id.to_s).to eq('Cyrillic-Latin')
end
it 'returns nil when no transformer can be found' do
expect(described_class.find('foo', 'bar')).to be_nil
end
end
describe '.parse' do
it 'normalizes and parses the given id string' do
id = described_class.parse('Bengali-Telugu')
expect(id.source).to eq('Bengali')
expect(id.target).to eq('Telugu')
expect(id.variant).to be_nil
expect(id.to_s).to eq('Bengali-Telugu')
end
it 'works with variants' do
id = described_class.parse('Bulgarian-Latin/BGN')
expect(id.source).to eq('Bulgarian')
expect(id.target).to eq('Latin')
expect(id.variant).to eq('BGN')
expect(id.to_s).to eq('Bulgarian-Latin/BGN')
end
it 'allows looking up IDs by their aliases' do
id = described_class.parse('Bulgarian-Latin/BGN')
aliass = described_class.parse('bg-bg_Latn-bgn')
expect(aliass.file_name).to eq(id.file_name)
end
it 'raises an error if no transformer can be found' do
expect { described_class.parse('foo-bar') }.to(
raise_error(TwitterCldr::Transforms::InvalidTransformIdError)
)
end
end
describe '.split' do
it 'splits the given string into source, target, and variant' do
expect(described_class.split('foo-bar/baz')).to eq(
%w(foo bar baz)
)
end
end
describe '.join' do
it 'joins the given source, target, and variant' do
expect(described_class.join('foo', 'bar', 'baz')).to eq('foo-bar/baz')
end
end
describe '#has_variant?' do
it 'returns true if the transform id contains a variant' do
id = described_class.new('source', 'target', 'variant')
expect(id.variant).to eq('variant')
expect(id).to have_variant
end
it 'returns false if the transform id does not contain a variant' do
id = described_class.new('source', 'target')
expect(id).to_not have_variant
end
end
describe '#reverse' do
it 'reverses the transform id' do
id = described_class.new('source', 'target').reverse
expect(id.source).to eq('target')
expect(id.target).to eq('source')
end
it 'keeps the variant' do
id = described_class.new('source', 'target', 'variant').reverse
expect(id.source).to eq('target')
expect(id.target).to eq('source')
expect(id.variant).to eq('variant')
end
end
describe '#file_name' do
it 'finds the resource file name' do
id = described_class.new('Katakana', 'Latin', 'BGN')
expect(id.file_name).to eq('Katakana-Latin-BGN')
end
it 'finds no file name if no resource exists' do
id = described_class.new('source', 'target')
expect(id.file_name).to eq(nil)
end
end
describe '#to_s' do
it 'stringifies the source and target' do
id = described_class.new('source', 'target')
expect(id.to_s).to eq('source-target')
end
it 'stringifies the source, target, and variant' do
id = described_class.new('source', 'target', 'variant')
expect(id.to_s).to eq('source-target/variant')
end
end
end