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