spec/shared/hyphenator_spec.rb (87 lines of code) (raw):
# encoding: UTF-8
# Copyright 2012 Twitter, Inc
# http://www.apache.org/licenses/LICENSE-2.0
require 'spec_helper'
describe TwitterCldr::Shared::Hyphenator do
describe '.get' do
it 'retrieves the hyphenator for the given locale' do
hyphenator = described_class.get('en-US')
expect(hyphenator.locale).to eq('en-US')
expect(hyphenator.hyphenate('absolute', '-')).to eq('ab-so-lute')
end
it "finds a hyphenator if the given locale isn't directly supported" do
hyphenator = described_class.get(:en)
expect(hyphenator.locale).to eq('en-US')
expect(hyphenator.hyphenate('absolute', '-')).to eq('ab-so-lute')
end
it "finds locales using script subtags where appropriate" do
hyphenator = described_class.get('sr-Latn')
expect(hyphenator.locale).to eq('sr-Latn')
end
it "raises an error if the locale isn't supported" do
expect { described_class.get('ja') }.to(
raise_error(described_class::UnsupportedLocaleError)
)
end
end
describe '.supported_locale?' do
it 'returns true if the locale is supported' do
expect(described_class.supported_locale?(:en)).to eq(true)
end
it "returns false if the locale isn't supported" do
expect(described_class.supported_locale?(:ko)).to eq(false)
end
end
describe '.supported_locales' do
it 'gathers a list of all supported locales' do
%w(af-ZA de-CH en-US es el-GR hu-HU sr-Latn sr zu-ZA).each do |locale|
expect(described_class.supported_locales).to include(locale)
end
end
end
describe '#hyphenate' do
let(:options) do
{ lefthyphenmin: 0, righthyphenmin: 0 }
end
it 'hyphenates at break points with odd values' do
rules = %w(abc1def)
h = described_class.new(rules, 'en', options)
result = h.hyphenate('abcdef', '-')
expect(result).to eq('abc-def')
end
it 'does not hyphenate at break points with even values' do
rules = %w(abc2def)
h = described_class.new(rules, 'en', options)
result = h.hyphenate('abcdef', '-')
expect(result).to eq('abcdef')
end
it 'demonstrates that the highest break value wins' do
rules = %w(abc1def c2def)
h = described_class.new(rules, 'en', options)
result = h.hyphenate('abcdef', '-')
expect(result).to eq('abcdef')
end
it "does not modify text that can't be hyphenated" do
hyphenator = described_class.get(:en)
expect(hyphenator.hyphenate(' ')).to eq(' ')
expect(hyphenator.hyphenate(' ')).to eq(' ')
end
described_class.supported_locales.each do |locale|
word = 'antidisastablishmentarianism'
it "does not error for #{locale}" do
expect { described_class.get(locale).hyphenate(word) }.to_not raise_error
end
end
context 'hunspell tests' do
let(:options) do
{ left_hyphen_min: 2, right_hyphen_min: 3, no_hyphen: "-'’" }
end
it 'passes all hunspell tests' do
hyphenations = File.read(File.expand_path('../hunspell/base.hyph', __FILE__)).split("\n")
words = File.read(File.expand_path('../hunspell/base.word', __FILE__)).split("\n")
rules = File.read(File.expand_path('../hunspell/base.pat', __FILE__)).split("\n")
h = described_class.new(rules, 'en', options)
words.each_with_index do |word, idx|
expect(h.hyphenate(word, '=')).to eq(hyphenations[idx])
end
end
end
end
end