spec/csl/locale_spec.rb in csl-1.0.2 vs spec/csl/locale_spec.rb in csl-1.1.0
- old
+ new
@@ -2,71 +2,71 @@
require 'spec_helper'
module CSL
- describe Locale do
+ describe Locale do
- let(:locale) { Locale.new }
+ let(:locale) { Locale.new }
- let(:en) { Locale.new('en-US') }
- let(:gb) { Locale.new('en-GB') }
- let(:de) { Locale.new('de-DE') }
+ let(:en) { Locale.new('en-US') }
+ let(:gb) { Locale.new('en-GB') }
+ let(:de) { Locale.new('de-DE') }
- describe '.regions' do
+ describe '.regions' do
- it 'returns the default region when passed a language symbol' do
- Locale.regions[:en].should == :US
- end
+ it 'returns the default region when passed a language symbol' do
+ Locale.regions[:en].should == :US
+ end
- end
+ end
- describe '.languages' do
+ describe '.languages' do
- describe 'the language hash' do
- it 'returns the default language when passed a region string' do
- %w{ US en GB en AT de DE de }.map(&:to_sym).each_slice(2) do |region, language|
- Locale.languages[region].should == language
- end
- end
- end
+ describe 'the language hash' do
+ it 'returns the default language when passed a region string' do
+ %w{ US en GB en AT de DE de }.map(&:to_sym).each_slice(2) do |region, language|
+ Locale.languages[region].should == language
+ end
+ end
+ end
- end
+ end
- describe '.normalize' do
+ describe '.normalize' do
{
'en' => 'en-US',
'-GB' => 'en-GB',
'-BR' => 'pt-BR',
'de-AT' => 'de-AT'
}.each_pair do |tag, expected|
it "converts #{tag.inspect} to #{expected.inspect}" do
Locale.normalize(tag).should == expected
end
end
- end
+ end
- describe '.new' do
- it { should_not be_nil }
+ describe '.new' do
+ it { should_not be_nil }
- it 'defaults to default language' do
- Locale.new.language.should == Locale.default.split(/-/)[0].to_sym
- end
+ it 'defaults to default language' do
+ Locale.new.language.should == Locale.default.split(/-/)[0].to_sym
+ end
- it 'defaults to default region' do
- Locale.new.region.should == Locale.default.split(/-/)[1].to_sym
- end
+ it 'defaults to default region' do
+ Locale.new.region.should == Locale.default.split(/-/)[1].to_sym
+ end
it 'contains no dates by default' do
Locale.new.dates.should be_nil
end
it 'contains no terms by default' do
Locale.new.terms.should be_nil
end
- end
+ end
describe '.load' do
describe 'when called with "en-GB" ' do
let(:locale) { Locale.load('en-GB') }
@@ -85,82 +85,123 @@
end
end
- describe '#set' do
+ describe '#set' do
- it 'when passed "en-GB" sets language to :en and region to :GB' do
- locale.set('en-GB')
- [locale.language, locale.region].should == [:en, :GB]
- end
+ it 'when passed "en-GB" sets language to :en and region to :GB' do
+ locale.set('en-GB')
+ [locale.language, locale.region].should == [:en, :GB]
+ end
- it 'when passed "de" sets language to :de and region to :DE' do
- locale.set('de')
- [locale.language, locale.region].should == [:de, :DE]
- end
+ it 'when passed "de" sets language to :de and region to :DE' do
+ locale.set('de')
+ [locale.language, locale.region].should == [:de, :DE]
+ end
- it 'when passed "-AT" sets language to :de and region to :AT' do
- locale.set('-AT')
- [locale.language, locale.region].should == [:de, :AT]
- end
+ it 'when passed "-AT" sets language to :de and region to :AT' do
+ locale.set('-AT')
+ [locale.language, locale.region].should == [:de, :AT]
+ end
- end
+ end
- describe '#merge!' do
- let(:locale_with_options) { Locale.new('en', :foo => 'bar') }
+ describe '#merge!' do
+ let(:locale_with_options) { Locale.new('en', :foo => 'bar') }
- describe 'style options' do
- it 'does not change the options if none are set on either locale' do
- expect { locale.merge!(en) }.not_to change { locale.options }
- end
+ describe 'style options' do
+ it 'does not change the options if none are set on either locale' do
+ expect { locale.merge!(en) }.not_to change { locale.options }
+ end
- it 'creates a duplicate option element if the first locale has no options' do
- locale.should_not have_options
- locale.merge!(locale_with_options)
- locale.should have_options
- locale.options[:foo].should == 'bar'
+ it 'creates a duplicate option element if the first locale has no options' do
+ locale.should_not have_options
+ locale.merge!(locale_with_options)
+ locale.should have_options
+ locale.options[:foo].should == 'bar'
locale.options.should_not equal(locale_with_options.options)
- end
+ end
- it 'merges the options if both locales have options' do
- locale << Locale::StyleOptions.new(:bar => 'foo')
-
- expect { locale.merge!(locale_with_options) }.not_to change { locale.options.object_id }
-
- locale.options[:foo].should == 'bar'
- locale.options[:bar].should == 'foo'
- end
+ it 'merges the options if both locales have options' do
+ locale << Locale::StyleOptions.new(:bar => 'foo')
- it 'overrides the options with those in the other locale' do
- locale << Locale::StyleOptions.new(:bar => 'foo', :foo => 'foo')
- locale.merge!(locale_with_options)
- locale.options[:foo].should == 'bar'
- locale.options[:bar].should == 'foo'
- end
- end
-
- describe 'dates' do
- it 'does not change the dates if none are set on either locale' do
- expect { locale.merge!(en) }.not_to change { locale.dates }
- end
-
- it 'creates duplicate date elements if the first locale has no options' do
- locale.merge!(Locale.load('en-US'))
- locale.should have_dates
- end
- end
- end
+ expect { locale.merge!(locale_with_options) }.not_to change { locale.options.object_id }
- describe '#legacy?' do
- it 'returns false by default' do
- locale.should_not be_legacy
- end
+ locale.options[:foo].should == 'bar'
+ locale.options[:bar].should == 'foo'
+ end
- it 'returns true if the version is less than 1.0.1' do
- locale.version = '0.8'
- locale.should be_legacy
- end
- end
+ it 'overrides the options with those in the other locale' do
+ locale << Locale::StyleOptions.new(:bar => 'foo', :foo => 'foo')
+ locale.merge!(locale_with_options)
+ locale.options[:foo].should == 'bar'
+ locale.options[:bar].should == 'foo'
+ end
+ end
- end
-end
\ No newline at end of file
+ describe 'dates' do
+ it 'does not change the dates if none are set on either locale' do
+ expect { locale.merge!(en) }.not_to change { locale.dates }
+ end
+
+ it 'creates duplicate date elements if the first locale has no options' do
+ locale.merge!(Locale.load('en-US'))
+ locale.should have_dates
+ end
+ end
+ end
+
+ describe '#legacy?' do
+ it 'returns false by default' do
+ locale.should_not be_legacy
+ end
+
+ it 'returns true if the version is less than 1.0.1' do
+ locale.version = '0.8'
+ locale.should be_legacy
+ end
+ end
+
+ describe '#quote' do
+
+ it 'quotes the passed-in string' do
+ locale.store 'open-quote', '»'
+ locale.store 'close-quote', '«'
+
+ locale.quote('foo').should == '»foo«'
+ end
+
+ it 'does not alter the string if there are no quotes in the locale' do
+ locale.quote('foo').should == 'foo'
+ end
+
+ it 'adds quotes inside final punctuation if punctuation-in-quote option is set' do
+ locale.store 'open-quote', '»'
+ locale.store 'close-quote', '«'
+
+ locale.quote('foo.').should == '»foo«.'
+ locale.quote('foo,').should == '»foo«,'
+
+ locale.quote('foo!').should == '»foo!«'
+ locale.quote('foo?').should == '»foo?«'
+
+ locale.punctuation_in_quotes!
+
+ locale.quote('foo.').should == '»foo.«'
+ locale.quote('foo,').should == '»foo,«'
+
+ locale.quote('foo!').should == '»foo!«'
+ locale.quote('foo?').should == '»foo?«'
+ end
+
+ it 'replaces existing quotes with inner quotes' do
+ locale.store 'open-quote', '“'
+ locale.store 'close-quote', '”'
+ locale.store 'open-inner-quote', '‘'
+ locale.store 'close-inner-quote', '’'
+
+ locale.quote('“foo”').should == '“‘foo’”'
+ end
+ end
+ end
+end