csl 1.4.5 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +10 -30
- data/Rakefile +1 -1
- data/csl.gemspec +10 -13
- data/lib/csl/locale/term.rb +1 -1
- data/lib/csl/version.rb +1 -1
- metadata +11 -88
- data/.rspec +0 -3
- data/.simplecov +0 -4
- data/Guardfile +0 -15
- data/features/locales/loading.feature +0 -57
- data/features/locales/ordinalize.feature +0 -713
- data/features/parser/choose.feature +0 -16
- data/features/parser/info.feature +0 -27
- data/features/parser/localized_dates.feature +0 -35
- data/features/parser/terms.feature +0 -28
- data/features/step_definitions/locale_steps.rb +0 -36
- data/features/step_definitions/parser_steps.rb +0 -40
- data/features/step_definitions/style_steps.rb +0 -16
- data/features/style/loading.feature +0 -53
- data/features/support/env.rb +0 -24
- data/spec/csl/info_spec.rb +0 -278
- data/spec/csl/locale/date_spec.rb +0 -63
- data/spec/csl/locale/style_options_spec.rb +0 -19
- data/spec/csl/locale/term_spec.rb +0 -255
- data/spec/csl/locale_spec.rb +0 -245
- data/spec/csl/node_spec.rb +0 -273
- data/spec/csl/parser_spec.rb +0 -112
- data/spec/csl/schema_spec.rb +0 -112
- data/spec/csl/style/bibliography_spec.rb +0 -7
- data/spec/csl/style/choose_spec.rb +0 -66
- data/spec/csl/style/citation_spec.rb +0 -7
- data/spec/csl/style/date_spec.rb +0 -21
- data/spec/csl/style/group_spec.rb +0 -7
- data/spec/csl/style/label_spec.rb +0 -44
- data/spec/csl/style/layout_spec.rb +0 -7
- data/spec/csl/style/macro_spec.rb +0 -7
- data/spec/csl/style/names_spec.rb +0 -36
- data/spec/csl/style/number_spec.rb +0 -85
- data/spec/csl/style/sort_spec.rb +0 -11
- data/spec/csl/style/text_spec.rb +0 -7
- data/spec/csl/style_spec.rb +0 -137
- data/spec/csl/treelike_spec.rb +0 -151
- data/spec/fixtures/locales/locales-de-DE.xml +0 -298
- data/spec/fixtures/locales/locales-en-GB.xml +0 -304
- data/spec/fixtures/locales/locales-en-US.xml +0 -304
- data/spec/fixtures/styles/apa.csl +0 -443
- data/spec/spec_helper.rb +0 -57
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module CSL
|
4
|
-
|
5
|
-
describe Locale::Date do
|
6
|
-
|
7
|
-
let(:date) { Locale::Date.new }
|
8
|
-
|
9
|
-
it { is_expected.not_to be_nil }
|
10
|
-
|
11
|
-
it { is_expected.to be_text }
|
12
|
-
it { is_expected.not_to be_numeric }
|
13
|
-
|
14
|
-
describe '#parts' do
|
15
|
-
|
16
|
-
it 'returns nil by default' do
|
17
|
-
expect(date.parts).to be_empty
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
describe '#to_xml' do
|
23
|
-
|
24
|
-
it 'returns <date/> by default' do
|
25
|
-
expect(Locale::Date.new.to_xml).to eq('<date/>')
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'returns <date form="numeric"/> for an empty numeric date' do
|
29
|
-
expect(Locale::Date.new(:form => 'numeric').to_xml).to eq('<date form="numeric"/>')
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
describe Locale::DatePart do
|
37
|
-
|
38
|
-
it { is_expected.not_to be_nil }
|
39
|
-
|
40
|
-
it { is_expected.not_to be_day }
|
41
|
-
it { is_expected.not_to be_month }
|
42
|
-
it { is_expected.not_to be_year }
|
43
|
-
|
44
|
-
describe '#to_xml' do
|
45
|
-
|
46
|
-
it 'returns <date-part/> by default' do
|
47
|
-
expect(Locale::DatePart.new.to_xml).to eq("<date-part/>")
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'returns <date-part name="year"/> when the name is "year"' do
|
51
|
-
expect(Locale::DatePart.new(:name => 'year').to_xml).to eq('<date-part name="year"/>')
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'returns <date-part name="month" form="numeric" prefix="-"/> for a numeric month with prefix "-"' do
|
55
|
-
expect(Locale::DatePart.new(:name => 'month', :form => 'numeric', :prefix => '-').to_xml).to match(/(\s(name|form|prefix)="[^"]+"){3}/)
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module CSL
|
4
|
-
describe Locale::StyleOptions do
|
5
|
-
|
6
|
-
it { is_expected.not_to be nil }
|
7
|
-
|
8
|
-
it 'punctuation-in-quote is false by default' do
|
9
|
-
expect(subject[:'punctuation-in-quote']).to be false
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '#to_xml' do
|
13
|
-
it 'returns <style-options punctuation-in-quote="false"/> by default' do
|
14
|
-
expect(subject.to_xml).to match(/<style-options\/>/)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
@@ -1,255 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
module CSL
|
5
|
-
describe Locale::Terms do
|
6
|
-
|
7
|
-
it { is_expected.not_to be nil }
|
8
|
-
|
9
|
-
describe '#to_xml' do
|
10
|
-
it 'returns <terms/> by default' do
|
11
|
-
expect(subject.to_xml).to eq('<terms/>')
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '.specialize' do
|
16
|
-
it 'filters the passed in hash to contain only match-able entries' do
|
17
|
-
expect(Locale::Term.specialize({ :form => 'short', :foo => 'bar' })).to eq({ :form => 'short' })
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe '#ordinalize' do
|
22
|
-
|
23
|
-
describe "given standard English terms" do
|
24
|
-
let(:en) do
|
25
|
-
Locale::Terms.parse <<-EOS
|
26
|
-
<terms>
|
27
|
-
<term name="ordinal">th</term>
|
28
|
-
<term name="ordinal-01">st</term>
|
29
|
-
<term name="ordinal-02">nd</term>
|
30
|
-
<term name="ordinal-03">rd</term>
|
31
|
-
<term name="ordinal-11">th</term>
|
32
|
-
<term name="ordinal-12">th</term>
|
33
|
-
<term name="ordinal-13">th</term>
|
34
|
-
</terms>
|
35
|
-
EOS
|
36
|
-
end
|
37
|
-
|
38
|
-
%w{
|
39
|
-
ordinal ordinal-01 ordinal-02 ordinal-03 ordinal
|
40
|
-
}.each_with_index do |ordinal, number|
|
41
|
-
it "returns #{ordinal.inspect} for #{number}" do
|
42
|
-
expect(en.ordinalize(number)[:name]).to eq(ordinal)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
describe '#lookup' do
|
50
|
-
|
51
|
-
describe "given standard English terms" do
|
52
|
-
let(:en) do
|
53
|
-
Locale::Terms.parse <<-EOS
|
54
|
-
<terms>
|
55
|
-
<term name="page" form="short">
|
56
|
-
<single>p.</single>
|
57
|
-
<multiple>pp.</multiple>
|
58
|
-
</term>
|
59
|
-
<term name="page">
|
60
|
-
<single>page</single>
|
61
|
-
<multiple>pages</multiple>
|
62
|
-
</term>
|
63
|
-
<term name="section">
|
64
|
-
<single>section</single>
|
65
|
-
<multiple>sections</multiple>
|
66
|
-
</term>
|
67
|
-
<term name="section" form="short">sec.</term>
|
68
|
-
<term name="section" form="symbol">
|
69
|
-
<single>§</single>
|
70
|
-
<multiple>§§</multiple>
|
71
|
-
</term>
|
72
|
-
<term name="editor">
|
73
|
-
<single>editor</single>
|
74
|
-
<multiple>editors</multiple>
|
75
|
-
</term>
|
76
|
-
<term name="editor" form="short">
|
77
|
-
<single>ed.</single>
|
78
|
-
<multiple>eds.</multiple>
|
79
|
-
</term>
|
80
|
-
<term name="editor" form="verb">edited by</term>
|
81
|
-
<term name="editor" form="verb-short">ed.</term>
|
82
|
-
</terms>
|
83
|
-
EOS
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'returns nil if there is no matching term' do
|
87
|
-
expect(en.lookup(:foo)).to be_nil
|
88
|
-
end
|
89
|
-
|
90
|
-
it 'returns the long form by default' do
|
91
|
-
expect(en.lookup(:page)).to be_long
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'returns the term in the passed-in form if available' do
|
95
|
-
expect(en.lookup(:section, :form => 'long')).to be_long
|
96
|
-
expect(en.lookup(:section, :form => 'short')).to be_short
|
97
|
-
expect(en.lookup(:section, :form => 'symbol')).to be_symbol
|
98
|
-
|
99
|
-
expect(en.lookup(:editor)).to be_long
|
100
|
-
expect(en.lookup(:editor, :form => 'long')).to be_long
|
101
|
-
expect(en.lookup(:editor, :form => 'verb')).to be_verb
|
102
|
-
expect(en.lookup(:editor, :form => 'verb-short')).to be_verb_short
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'returns the right fallback form if the passed-in form is not available' do
|
106
|
-
expect(en.lookup(:page, :form => 'verb')).to be_long
|
107
|
-
expect(en.lookup(:page, :form => 'verb-short')).to be_long
|
108
|
-
expect(en.lookup(:page, :form => 'symbol')).to be_short
|
109
|
-
end
|
110
|
-
|
111
|
-
it 'ignores irrelevant options' do
|
112
|
-
expect(en.lookup(:page, :plural => true)).not_to be_nil
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
describe Locale::Term do
|
120
|
-
|
121
|
-
it { is_expected.not_to be_nil }
|
122
|
-
|
123
|
-
it { is_expected.not_to be_gendered }
|
124
|
-
it { is_expected.to be_neutral }
|
125
|
-
|
126
|
-
it { is_expected.to be_long }
|
127
|
-
|
128
|
-
it { is_expected.not_to be_ordinal }
|
129
|
-
it { is_expected.not_to be_short_ordinal }
|
130
|
-
it { is_expected.not_to be_long_ordinal }
|
131
|
-
|
132
|
-
it 'is not a textnode by default' do
|
133
|
-
expect(subject).not_to be_textnode
|
134
|
-
end
|
135
|
-
|
136
|
-
it 'is a textnode when the text is "foo"' do
|
137
|
-
expect(Locale::Term.new { |t| t.text = 'foo' }).to be_textnode
|
138
|
-
end
|
139
|
-
|
140
|
-
describe 'gender attribute is set' do
|
141
|
-
let(:m) { Locale::Term.new(:name => 'month-05') { |t| t.masculine!; t.text = 'Mai' } }
|
142
|
-
let(:f) { Locale::Term.new(:name => 'edition') { |t| t.feminine!; t.text = 'Ausgabe' } }
|
143
|
-
|
144
|
-
it 'is gendered' do
|
145
|
-
expect(m).to be_gendered
|
146
|
-
expect(f).to be_gendered
|
147
|
-
end
|
148
|
-
|
149
|
-
it 'is feminine or masculine' do
|
150
|
-
expect(m).to be_masculine
|
151
|
-
expect(f).to be_feminine
|
152
|
-
end
|
153
|
-
|
154
|
-
it 'is not neutral' do
|
155
|
-
expect(m).not_to be_neutral
|
156
|
-
expect(f).not_to be_neutral
|
157
|
-
end
|
158
|
-
|
159
|
-
describe '#to_xml' do
|
160
|
-
it 'contains the correct gender' do
|
161
|
-
expect(m.to_xml).to match(/gender="masculine"/)
|
162
|
-
expect(f.to_xml).to match(/gender="feminine"/)
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
describe '#match?' do
|
167
|
-
it 'matches the name when passed a string' do
|
168
|
-
expect(m).to be_match(:name => 'month-05')
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'matches the name when passed a pattern' do
|
172
|
-
expect(m).to be_match(:name => /month-\d\d/)
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'matches when passed a matching hash without gender' do
|
176
|
-
expect(f).to be_match(:name => 'edition')
|
177
|
-
end
|
178
|
-
|
179
|
-
it 'does not match when passed a matching hash with wrong gender' do
|
180
|
-
expect(f.matches?(:name => 'edition', :gender => 'masculine')).not_to be_truthy
|
181
|
-
end
|
182
|
-
|
183
|
-
it 'matches when passed a matching hash with matching gender' do
|
184
|
-
expect(f.matches?(:name => 'edition', :gender => 'feminine')).to be_truthy
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
describe '#exact_match?' do
|
189
|
-
it 'does not match when passed a matching hash without gender' do
|
190
|
-
expect(f).not_to be_exact_match(:name => 'edition')
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
describe 'attributes#to_a' do
|
195
|
-
it 'returns an array of all attribute values of underlying struct' do
|
196
|
-
expect(f.attributes.to_a).to eq(['edition', 'long', 'feminine', nil, nil])
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
describe '#to_s' do
|
202
|
-
it 'returns an empty string by default' do
|
203
|
-
expect(Locale::Term.new.to_s).to eq('')
|
204
|
-
end
|
205
|
-
|
206
|
-
describe 'given a simple term' do
|
207
|
-
let(:node) { Locale::Term.new { |t| t.text = 'foo' } }
|
208
|
-
|
209
|
-
it "returns the term's text" do
|
210
|
-
expect(node.to_s).to eq(node.text)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
describe 'given a compound term' do
|
215
|
-
let(:node) { Locale::Term.new { |t| t.single = 'shoe'; t.multiple = 'shoes' } }
|
216
|
-
|
217
|
-
it "returns the term's singular form by default" do
|
218
|
-
expect(node.to_s).to eq(node.singularize)
|
219
|
-
end
|
220
|
-
|
221
|
-
it "returns the term's plural form when passed :number => :plural" do
|
222
|
-
expect(node.to_s(:number => :plural)).to eq(node.pluralize)
|
223
|
-
end
|
224
|
-
|
225
|
-
it "returns the term's plural form when passed :number => 2" do
|
226
|
-
expect(node.to_s(:number => 2)).to eq(node.pluralize)
|
227
|
-
end
|
228
|
-
|
229
|
-
it "returns the term's singular form when passed :number => 1" do
|
230
|
-
expect(node.to_s(:number => 1)).to eq(node.singularize)
|
231
|
-
end
|
232
|
-
|
233
|
-
it "returns the term's plural form when passed :plural => true" do
|
234
|
-
expect(node.to_s(:plural => true)).to eq(node.pluralize)
|
235
|
-
end
|
236
|
-
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
describe '#to_xml' do
|
241
|
-
it 'returns <term/> by default' do
|
242
|
-
expect(subject.to_xml).to eq('<term/>')
|
243
|
-
end
|
244
|
-
|
245
|
-
it 'returns <term>foo</term> when the text is "foo"' do
|
246
|
-
expect(Locale::Term.new { |t| t.text = 'foo' }.to_xml).to eq('<term>foo</term>')
|
247
|
-
end
|
248
|
-
|
249
|
-
it 'returns <term><multiple>foo</multiple></term> when multiple is "foo"' do
|
250
|
-
expect(Locale::Term.new { |t| t.multiple = 'foo' }.to_xml).to eq('<term><multiple>foo</multiple></term>')
|
251
|
-
end
|
252
|
-
|
253
|
-
end
|
254
|
-
end
|
255
|
-
end
|
data/spec/csl/locale_spec.rb
DELETED
@@ -1,245 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
module CSL
|
6
|
-
|
7
|
-
describe Locale do
|
8
|
-
|
9
|
-
let(:locale) { Locale.new }
|
10
|
-
|
11
|
-
let(:en) { Locale.new('en-US') }
|
12
|
-
let(:gb) { Locale.new('en-GB') }
|
13
|
-
let(:de) { Locale.new('de-DE') }
|
14
|
-
|
15
|
-
describe '.regions' do
|
16
|
-
|
17
|
-
it 'returns the default region when passed a language symbol' do
|
18
|
-
expect(Locale.regions[:en]).to eq(:US)
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '.languages' do
|
24
|
-
|
25
|
-
describe 'the language hash' do
|
26
|
-
it 'returns the default language when passed a region string' do
|
27
|
-
%w{ US en GB en AT de DE de }.map(&:to_sym).each_slice(2) do |region, language|
|
28
|
-
expect(Locale.languages[region]).to eq(language)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
describe '.normalize' do
|
36
|
-
{
|
37
|
-
'en' => 'en-US',
|
38
|
-
'-GB' => 'en-GB',
|
39
|
-
'-BR' => 'pt-BR',
|
40
|
-
'de-AT' => 'de-AT'
|
41
|
-
}.each_pair do |tag, expected|
|
42
|
-
it "converts #{tag.inspect} to #{expected.inspect}" do
|
43
|
-
expect(Locale.normalize(tag)).to eq(expected)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe '.new' do
|
49
|
-
it { is_expected.not_to be_nil }
|
50
|
-
|
51
|
-
it 'has no language' do
|
52
|
-
expect(Locale.new.language).to be_nil
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'has no region' do
|
56
|
-
expect(Locale.new.region).to be_nil
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'contains no dates by default' do
|
60
|
-
expect(Locale.new.dates).to be_nil
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'contains no terms by default' do
|
64
|
-
expect(Locale.new.terms).to be_nil
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
describe '.load' do
|
70
|
-
|
71
|
-
describe 'when called with "en-GB" ' do
|
72
|
-
let(:locale) { Locale.load('en-GB') }
|
73
|
-
|
74
|
-
it 'the returned locale has the correct IETF tag' do
|
75
|
-
expect(locale.to_s).to eq('en-GB')
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'the locale has language :en' do
|
79
|
-
expect(locale.language).to eq(:en)
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'the locale has region :GB' do
|
83
|
-
expect(locale.region).to eq(:GB)
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
describe '.parse' do
|
91
|
-
it 'does not set a default language' do
|
92
|
-
expect(Locale.parse('<locale/>').language).to be_nil
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe '#set' do
|
97
|
-
|
98
|
-
it 'when passed "en-GB" sets language to :en and region to :GB' do
|
99
|
-
locale.set('en-GB')
|
100
|
-
expect([locale.language, locale.region]).to eq([:en, :GB])
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'when passed "de" sets language to :de and region to :DE' do
|
104
|
-
locale.set('de')
|
105
|
-
expect([locale.language, locale.region]).to eq([:de, :DE])
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'when passed "-AT" sets language to :de and region to :AT' do
|
109
|
-
locale.set('-AT')
|
110
|
-
expect([locale.language, locale.region]).to eq([:de, :AT])
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
114
|
-
|
115
|
-
describe '#merge!' do
|
116
|
-
let(:locale_with_options) { Locale.new('en', :foo => 'bar') }
|
117
|
-
|
118
|
-
describe 'style options' do
|
119
|
-
it 'does not change the options if none are set on either locale' do
|
120
|
-
expect { locale.merge!(en) }.not_to change { locale.options }
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'creates a duplicate option element if the first locale has no options' do
|
124
|
-
expect(locale).not_to have_options
|
125
|
-
locale.merge!(locale_with_options)
|
126
|
-
expect(locale).to have_options
|
127
|
-
expect(locale.options[:foo]).to eq('bar')
|
128
|
-
expect(locale.options).not_to equal(locale_with_options.options)
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'merges the options if both locales have options' do
|
132
|
-
locale << Locale::StyleOptions.new(:bar => 'foo')
|
133
|
-
|
134
|
-
expect { locale.merge!(locale_with_options) }.not_to change { locale.options.object_id }
|
135
|
-
|
136
|
-
expect(locale.options[:foo]).to eq('bar')
|
137
|
-
expect(locale.options[:bar]).to eq('foo')
|
138
|
-
end
|
139
|
-
|
140
|
-
it 'overrides the options with those in the other locale' do
|
141
|
-
locale << Locale::StyleOptions.new(:bar => 'foo', :foo => 'foo')
|
142
|
-
locale.merge!(locale_with_options)
|
143
|
-
expect(locale.options[:foo]).to eq('bar')
|
144
|
-
expect(locale.options[:bar]).to eq('foo')
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
describe 'dates' do
|
149
|
-
it 'does not change the dates if none are set on either locale' do
|
150
|
-
expect { locale.merge!(en) }.not_to change { locale.dates }
|
151
|
-
end
|
152
|
-
|
153
|
-
it 'creates duplicate date elements if the first locale has no options' do
|
154
|
-
locale.merge!(Locale.load('en-US'))
|
155
|
-
expect(locale).to have_dates
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'merges dates of both locales' do
|
159
|
-
locale << Locale::Date.new(:form => 'numeric')
|
160
|
-
|
161
|
-
other = Locale.load('en-US')
|
162
|
-
locale.merge! other
|
163
|
-
|
164
|
-
expect(locale.dates.length).to eq(other.dates.length)
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
describe 'terms' do
|
169
|
-
let(:us) { Locale.load('en-US') }
|
170
|
-
|
171
|
-
it 'does not change the terms if none are set on either locale' do
|
172
|
-
expect { locale.merge!(Locale.new) }.not_to change { locale.terms.to_s }
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'overrides terms with those of the other locale' do
|
176
|
-
expect(locale).not_to have_terms
|
177
|
-
|
178
|
-
locale.merge! us
|
179
|
-
expect(locale).to have_terms
|
180
|
-
end
|
181
|
-
|
182
|
-
it 'makes copies of the terms' do
|
183
|
-
locale.merge! us
|
184
|
-
expect(locale).to have_terms
|
185
|
-
|
186
|
-
expect(locale.terms.first).to eq(us.terms.first)
|
187
|
-
expect(locale.terms.first).not_to be(us.terms.first)
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
describe '#legacy?' do
|
193
|
-
it 'returns false by default' do
|
194
|
-
expect(locale).not_to be_legacy
|
195
|
-
end
|
196
|
-
|
197
|
-
it 'returns true if the version is less than 1.0.1' do
|
198
|
-
locale.version = '0.8'
|
199
|
-
expect(locale).to be_legacy
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
describe '#quote' do
|
204
|
-
|
205
|
-
it 'quotes the passed-in string' do
|
206
|
-
locale.store 'open-quote', '»'
|
207
|
-
locale.store 'close-quote', '«'
|
208
|
-
|
209
|
-
expect(locale.quote('foo')).to eq('»foo«')
|
210
|
-
end
|
211
|
-
|
212
|
-
it 'does not alter the string if there are no quotes in the locale' do
|
213
|
-
expect(locale.quote('foo')).to eq('foo')
|
214
|
-
end
|
215
|
-
|
216
|
-
it 'adds quotes inside final punctuation if punctuation-in-quote option is set' do
|
217
|
-
locale.store 'open-quote', '»'
|
218
|
-
locale.store 'close-quote', '«'
|
219
|
-
|
220
|
-
expect(locale.quote('foo.')).to eq('»foo«.')
|
221
|
-
expect(locale.quote('foo,')).to eq('»foo«,')
|
222
|
-
|
223
|
-
expect(locale.quote('foo!')).to eq('»foo!«')
|
224
|
-
expect(locale.quote('foo?')).to eq('»foo?«')
|
225
|
-
|
226
|
-
locale.punctuation_in_quotes!
|
227
|
-
|
228
|
-
expect(locale.quote('foo.')).to eq('»foo.«')
|
229
|
-
expect(locale.quote('foo,')).to eq('»foo,«')
|
230
|
-
|
231
|
-
expect(locale.quote('foo!')).to eq('»foo!«')
|
232
|
-
expect(locale.quote('foo?')).to eq('»foo?«')
|
233
|
-
end
|
234
|
-
|
235
|
-
it 'replaces existing quotes with inner quotes' do
|
236
|
-
locale.store 'open-quote', '“'
|
237
|
-
locale.store 'close-quote', '”'
|
238
|
-
locale.store 'open-inner-quote', '‘'
|
239
|
-
locale.store 'close-inner-quote', '’'
|
240
|
-
|
241
|
-
expect(locale.quote('“foo”')).to eq('“‘foo’”')
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|