gimei 0.2.0 → 1.0.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.
data/spec/name_spec.rb CHANGED
@@ -6,11 +6,15 @@ describe Gimei::Name do
6
6
  before { @name = Gimei::Name.male }
7
7
 
8
8
  it 'Gimei::Name オブジェクトが返ること' do
9
- @name.must_be_instance_of Gimei::Name
9
+ _(@name).must_be_instance_of Gimei::Name
10
+ end
11
+
12
+ it '#gender が :male を返すこと' do
13
+ _(@name.gender).must_equal :male
10
14
  end
11
15
 
12
16
  it '#male? が true を返すこと' do
13
- @name.male?.must_equal true
17
+ _(@name.male?).must_equal true
14
18
  end
15
19
  end
16
20
 
@@ -18,59 +22,82 @@ describe Gimei::Name do
18
22
  before { @name = Gimei::Name.female }
19
23
 
20
24
  it 'Gimei::Name オブジェクトが返ること' do
21
- @name.must_be_instance_of Gimei::Name
25
+ _(@name).must_be_instance_of Gimei::Name
26
+ end
27
+
28
+ it '#gender が :female を返すこと' do
29
+ _(@name.gender).must_equal :female
22
30
  end
23
31
 
24
32
  it '#female? が true を返すこと' do
25
- @name.female?.must_equal true
33
+ _(@name.female?).must_equal true
26
34
  end
27
35
  end
28
36
 
29
37
  describe '.kanji' do
30
38
  it '全角文字とスペースが返ること' do
31
- Gimei::Name.kanji.must_match /\A[#{Moji.zen}\s]+\z/
39
+ _(Gimei::Name.kanji).must_match(/\A#{zenkaku_or_space_regexp}+\z/)
32
40
  end
33
41
  end
34
42
 
35
43
  describe '.hiragana' do
36
44
  it 'ひらがなとスペースが返ること' do
37
- Gimei::Name.hiragana.must_match /\A[\p{hiragana}\s]+\z/
45
+ _(Gimei::Name.hiragana).must_match(/\A[\p{hiragana}\s]+\z/)
38
46
  end
39
47
  end
40
48
 
41
49
  describe '.katakana' do
42
50
  it 'カタカナとスペースが返ること' do
43
- Gimei::Name.katakana.must_match /\A[\p{katakana}\s]+\z/
51
+ _(Gimei::Name.katakana).must_match(/\A[\p{katakana}\s]+\z/)
52
+ end
53
+ end
54
+
55
+ describe '.romaji' do
56
+ it 'ローマ字とスペースが返ること' do
57
+ _(Gimei::Name.romaji).must_match(/\A[a-zA-Z\s]+\z/)
58
+ end
59
+ end
60
+
61
+ describe '#gender' do
62
+ it ':male または :female が返ること' do
63
+ _(Gimei::Name.new.gender).must_be_instance_of(Symbol)
64
+ _(Gimei::Name.new.gender.to_s).must_match(/\A(?:male|female)\Z/)
44
65
  end
45
66
  end
46
67
 
47
68
  describe '#kanji' do
48
69
  it '全角文字とスペースが返ること' do
49
- Gimei::Name.new.kanji.must_match /\A[#{Moji.zen}\s]+\z/
70
+ _(Gimei::Name.new.kanji).must_match(/\A#{zenkaku_or_space_regexp}+\z/)
50
71
  end
51
72
  end
52
73
 
53
74
  describe '#hiragana' do
54
75
  it 'ひらがなとスペースが返ること' do
55
- Gimei::Name.new.hiragana.must_match /\A[\p{hiragana}\s]+\z/
76
+ _(Gimei::Name.new.hiragana).must_match(/\A[\p{hiragana}\s]+\z/)
56
77
  end
57
78
  end
58
79
 
59
80
  describe '#katakana' do
60
81
  it 'カタカナとスペースが返ること' do
61
- Gimei::Name.new.katakana.must_match /\A[\p{katakana}\s]+\z/
82
+ _(Gimei::Name.new.katakana).must_match(/\A[\p{katakana}\s]+\z/)
62
83
  end
63
84
  end
64
85
 
65
86
  describe '#first' do
66
87
  it 'Gimei::Name::First オブジェクトが返ること' do
67
- Gimei::Name.new.first.must_be_instance_of Gimei::Name::First
88
+ _(Gimei::Name.new.first).must_be_instance_of Gimei::Name::First
68
89
  end
69
90
  end
70
91
 
71
92
  describe '#last' do
72
93
  it 'Gimei::Name::Last オブジェクトが返ること' do
73
- Gimei::Name.new.last.must_be_instance_of Gimei::Name::Last
94
+ _(Gimei::Name.new.last).must_be_instance_of Gimei::Name::Last
95
+ end
96
+ end
97
+
98
+ describe '.romaji' do
99
+ it 'ローマ字とスペースが返ること' do
100
+ _(Gimei::Name.new.romaji).must_match(/\A[a-zA-Z\s]+\z/)
74
101
  end
75
102
  end
76
103
  end
@@ -80,11 +107,11 @@ describe Gimei::Name::First do
80
107
  before { @name = Gimei::Name::First.male }
81
108
 
82
109
  it 'Gimei::Name::First オブジェクトが返ること' do
83
- @name.must_be_instance_of Gimei::Name::First
110
+ _(@name).must_be_instance_of Gimei::Name::First
84
111
  end
85
112
 
86
113
  it '#male? が true を返すこと' do
87
- @name.male?.must_equal true
114
+ _(@name.male?).must_equal true
88
115
  end
89
116
  end
90
117
 
@@ -92,35 +119,41 @@ describe Gimei::Name::First do
92
119
  before { @name = Gimei::Name::First.female }
93
120
 
94
121
  it 'Gimei::Name::First オブジェクトが返ること' do
95
- @name.must_be_instance_of Gimei::Name::First
122
+ _(@name).must_be_instance_of Gimei::Name::First
96
123
  end
97
124
 
98
125
  it '#female? が true を返すこと' do
99
- @name.female?.must_equal true
126
+ _(@name.female?).must_equal true
100
127
  end
101
128
  end
102
129
 
103
130
  describe '#kanji' do
104
131
  it '全角文字が返ること' do
105
- Gimei::Name::First.new.kanji.must_match /\A#{Moji.zen}+\z/
132
+ _(Gimei::Name::First.new.kanji).must_match(/\A#{zenkaku_regexp}+\z/)
106
133
  end
107
134
  end
108
135
 
109
136
  describe '#hiragana' do
110
137
  it 'ひらがなが返ること' do
111
- Gimei::Name::First.new.hiragana.must_match /\A\p{hiragana}+\z/
138
+ _(Gimei::Name::First.new.hiragana).must_match(/\A\p{hiragana}+\z/)
112
139
  end
113
140
  end
114
141
 
115
142
  describe '#katakana' do
116
143
  it 'カタカナが返ること' do
117
- Gimei::Name::First.new.katakana.must_match /\A\p{katakana}+\z/
144
+ _(Gimei::Name::First.new.katakana).must_match(/\A\p{katakana}+\z/)
118
145
  end
119
146
  end
120
147
 
121
148
  describe '#to_s' do
122
149
  it '全角文字が返ること' do
123
- Gimei::Name::First.new.to_s.must_match /\A#{Moji.zen}+\z/
150
+ _(Gimei::Name::First.new.to_s).must_match(/\A#{zenkaku_regexp}+\z/)
151
+ end
152
+ end
153
+
154
+ describe '#romaji' do
155
+ it 'アルファベットで返ること' do
156
+ _(Gimei::Name::First.new.romaji).must_match(/\A[a-zA-Z]+\z/)
124
157
  end
125
158
  end
126
159
  end
@@ -130,25 +163,31 @@ describe Gimei::Name::Last do
130
163
 
131
164
  describe '#kanji' do
132
165
  it '全角文字が返ること' do
133
- @name.kanji.must_match /\A#{Moji.zen}+\z/
166
+ _(@name.kanji).must_match(/\A#{zenkaku_regexp}+\z/)
134
167
  end
135
168
  end
136
169
 
137
170
  describe '#hiragana' do
138
171
  it 'ひらがなが返ること' do
139
- @name.hiragana.must_match /\A\p{hiragana}+\z/
172
+ _(@name.hiragana).must_match(/\A\p{hiragana}+\z/)
140
173
  end
141
174
  end
142
175
 
143
176
  describe '#katakana' do
144
177
  it 'カタカナが返ること' do
145
- @name.katakana.must_match /\A\p{katakana}+\z/
178
+ _(@name.katakana).must_match(/\A\p{katakana}+\z/)
146
179
  end
147
180
  end
148
181
 
149
182
  describe '#to_s' do
150
183
  it '全角文字が返ること' do
151
- @name.to_s.must_match /\A#{Moji.zen}+\z/
184
+ _(@name.to_s).must_match(/\A#{zenkaku_regexp}+\z/)
185
+ end
186
+ end
187
+
188
+ describe '#romaji' do
189
+ it 'アルファベットで返ること' do
190
+ _(Gimei::Name::First.new.romaji).must_match(/\A[a-z|A-Z]+\z/)
152
191
  end
153
192
  end
154
193
  end
data/spec/spec_helper.rb CHANGED
@@ -8,4 +8,12 @@ Coveralls.wear!
8
8
 
9
9
  require 'gimei'
10
10
  require 'minitest/autorun'
11
- require 'moji'
11
+
12
+ def zenkaku_regexp
13
+ /\p{Hiragana}|\p{Katakana}|[一-龠々]/
14
+ end
15
+
16
+ def zenkaku_or_space_regexp
17
+ /\p{Hiragana}|\p{Katakana}|[一-龠々]|\s/
18
+ end
19
+
@@ -0,0 +1,399 @@
1
+ # coding: utf-8
2
+ require_relative 'spec_helper'
3
+
4
+ describe 'Gimei.unique' do
5
+ before do
6
+ Gimei.unique.clear
7
+ end
8
+
9
+ describe '#clear' do
10
+ describe '名前が枯渇してからclearを実行し、再度名前を取得しようとしたとき' do
11
+ it 'Gimei::RetryLimitExceededed例外が発生しないこと' do
12
+ Gimei.stub(:names, {
13
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
14
+ 'last_name' => [%w[前島 まえしま マエシマ]]
15
+ }) do
16
+ Gimei.unique.male
17
+ Gimei.unique.clear
18
+ Gimei.unique.male
19
+ end
20
+ end
21
+ end
22
+
23
+ describe '名前が枯渇してからclear(:name)を実行し再度名前を取得しようとしたとき' do
24
+ it 'Gimei::RetryLimitExceededed例外が発生しないこと' do
25
+ Gimei.stub(:names, {
26
+ 'first_name' => {'male' => [%w[真一 しんいち シンイチ]]},
27
+ 'last_name' => [%w[前島 まえしま マエシマ]]
28
+ }) do
29
+ Gimei.unique.male
30
+ Gimei.unique.clear(:name)
31
+ Gimei.unique.male
32
+ end
33
+ end
34
+ end
35
+
36
+ describe '名前が枯渇してからclear(:address)を実行し再度名前を取得しようとしたとき' do
37
+ it 'Gimei::RetryLimitExceededed例外が発生すること' do
38
+ Gimei.stub(:names, {
39
+ 'first_name' => {'male' => [%w[真一 しんいち シンイチ]]},
40
+ 'last_name' => [%w[前島 まえしま マエシマ]]
41
+ }) do
42
+ assert_raises Gimei::RetryLimitExceeded do
43
+ Gimei.unique.male
44
+ Gimei.unique.clear(:address)
45
+ Gimei.unique.male
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ describe '#male' do
53
+ describe '名前が枯渇していないとき' do
54
+ it '一意な名前(フルネームの漢字単位)が返ること' do
55
+ Gimei.stub(:names, {
56
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
57
+ 'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
58
+ }) do
59
+ _([Gimei.unique.male.kanji, Gimei.unique.male.kanji].sort).must_equal ['前島 真一', '神谷 真一']
60
+ end
61
+ end
62
+ end
63
+
64
+ describe '名前が枯渇したとき' do
65
+ it 'Gimei::RetryLimitExceededed例外が発生すること' do
66
+ Gimei.stub(:names, {
67
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
68
+ 'last_name' => [%w[前島 まえしま マエシマ]]
69
+ }) do
70
+ assert_raises Gimei::RetryLimitExceeded do
71
+ Gimei.unique.male
72
+ Gimei.unique.male
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ describe '#female' do
80
+ describe '名前が枯渇していないとき' do
81
+ it '一意な名前(フルネームの漢字単位)が返ること' do
82
+ Gimei.stub(:names, {
83
+ 'first_name' => { 'female' => [%w[花子 はなこ ハナコ]] },
84
+ 'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
85
+ }) do
86
+ _([Gimei.unique.female.kanji, Gimei.unique.female.kanji].sort).must_equal ['前島 花子', '神谷 花子']
87
+ end
88
+ end
89
+ end
90
+
91
+ describe '名前が枯渇したとき' do
92
+ it 'Gimei::RetryLimitExceededed例外が発生すること' do
93
+ Gimei.stub(:names, {
94
+ 'first_name' => { 'female' => [%w[花子 はなこ ハナコ]] },
95
+ 'last_name' => [%w[前島 まえしま マエシマ]]
96
+ }) do
97
+ assert_raises Gimei::RetryLimitExceeded do
98
+ Gimei.unique.female
99
+ Gimei.unique.female
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ describe '#first' do
107
+ describe '名が枯渇していないとき' do
108
+ it '一意な名(漢字単位)が返ること' do
109
+ Gimei.stub(:names, {
110
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ], %w[真二 しんじ シンジ]] },
111
+ 'last_name' => %w[]
112
+ }) do
113
+ _([Gimei.unique.first(:male).kanji, Gimei.unique.first(:male).kanji].sort).must_equal %w[真一 真二]
114
+ end
115
+ end
116
+ end
117
+
118
+ describe '名が枯渇したとき' do
119
+ it 'Gimei::RetryLimitExceeded例外が発生すること' do
120
+ Gimei.stub(:names, {
121
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
122
+ 'last_name' => []
123
+ }) do
124
+ assert_raises Gimei::RetryLimitExceeded do
125
+ Gimei.unique.first(:male)
126
+ Gimei.unique.first(:male)
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+
133
+ describe '#last' do
134
+ describe '姓が枯渇していないとき' do
135
+ it '一意な姓(漢字単位)が返ること' do
136
+ Gimei.stub(:names, {
137
+ 'first_name' => { 'male' => [], 'female' => [] },
138
+ 'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
139
+ }) do
140
+ _([Gimei.unique.last.kanji, Gimei.unique.last.kanji].sort).must_equal %w[前島 神谷]
141
+ end
142
+ end
143
+ end
144
+
145
+ describe '姓が枯渇したとき' do
146
+ it 'Gimei::RetryLimitExceeded例外が発生すること' do
147
+ Gimei.stub(:names, {
148
+ 'first_name' => { 'male' => [], 'female' => [] },
149
+ 'last_name' => [%w[前島 まえしま マエシマ]]
150
+ }) do
151
+ assert_raises Gimei::RetryLimitExceeded do
152
+ Gimei.unique.last
153
+ Gimei.unique.last
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
159
+
160
+ describe '#kanji' do
161
+ describe '名前が枯渇していないとき' do
162
+ it '一意な名前(フルネームの漢字単位)が返ること' do
163
+ Gimei.stub(:names, {
164
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
165
+ 'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
166
+ }) do
167
+ _([Gimei.unique.kanji(:male), Gimei.unique.kanji(:male)].sort).must_equal ['前島 真一', '神谷 真一']
168
+ end
169
+ end
170
+ end
171
+
172
+ describe '名前が枯渇したとき' do
173
+ it 'Gimei::RetryLimitExceededed例外が発生すること' do
174
+ Gimei.stub(:names, {
175
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
176
+ 'last_name' => [%w[前島 まえしま マエシマ]]
177
+ }) do
178
+ assert_raises Gimei::RetryLimitExceeded do
179
+ Gimei.unique.kanji(:male)
180
+ Gimei.unique.kanji(:male)
181
+ end
182
+ end
183
+ end
184
+ end
185
+ end
186
+
187
+ describe '#hiragana' do
188
+ describe '名前が枯渇していないとき' do
189
+ it '一意な名前(フルネームの漢字単位)が返ること' do
190
+ Gimei.stub(:names, {
191
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
192
+ 'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
193
+ }) do
194
+ _([Gimei.unique.hiragana(:male), Gimei.unique.hiragana(:male)].sort).must_equal ['かみや しんいち', 'まえしま しんいち']
195
+ end
196
+ end
197
+ end
198
+
199
+ describe '名前が枯渇したとき' do
200
+ it 'Gimei::RetryLimitExceededed例外が発生すること' do
201
+ Gimei.stub(:names, {
202
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
203
+ 'last_name' => [%w[前島 まえしま マエシマ]]
204
+ }) do
205
+ assert_raises Gimei::RetryLimitExceeded do
206
+ Gimei.unique.hiragana(:male)
207
+ Gimei.unique.hiragana(:male)
208
+ end
209
+ end
210
+ end
211
+ end
212
+ end
213
+
214
+ describe '#katakana' do
215
+ describe '名前が枯渇していないとき' do
216
+ it '一意な名前(フルネームの漢字単位)が返ること' do
217
+ Gimei.stub(:names, {
218
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
219
+ 'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
220
+ }) do
221
+ _([Gimei.unique.katakana(:male), Gimei.unique.katakana(:male)].sort).must_equal ['カミヤ シンイチ', 'マエシマ シンイチ']
222
+ end
223
+ end
224
+ end
225
+
226
+ describe '名前が枯渇したとき' do
227
+ it 'Gimei::RetryLimitExceededed例外が発生すること' do
228
+ Gimei.stub(:names, {
229
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
230
+ 'last_name' => [%w[前島 まえしま マエシマ]]
231
+ }) do
232
+ assert_raises Gimei::RetryLimitExceeded do
233
+ Gimei.unique.katakana(:male)
234
+ Gimei.unique.katakana(:male)
235
+ end
236
+ end
237
+ end
238
+ end
239
+ end
240
+
241
+ describe '#romaji' do
242
+ describe '名前が枯渇していないとき' do
243
+ it '一意な名前(フルネームの漢字単位)が返ること' do
244
+ Gimei.stub(:names, {
245
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
246
+ 'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
247
+ }) do
248
+ _([Gimei.unique.romaji(:male), Gimei.unique.romaji(:male)].sort).must_equal ['Shinichi Kamiya', 'Shinichi Maeshima']
249
+ end
250
+ end
251
+ end
252
+
253
+ describe '名前が枯渇したとき' do
254
+ it 'Gimei::RetryLimitExceededed例外が発生すること' do
255
+ Gimei.stub(:names, {
256
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
257
+ 'last_name' => [%w[前島 まえしま マエシマ]]
258
+ }) do
259
+ assert_raises Gimei::RetryLimitExceeded do
260
+ Gimei.unique.romaji(:male)
261
+ Gimei.unique.romaji(:male)
262
+ end
263
+ end
264
+ end
265
+ end
266
+ end
267
+
268
+ describe '#address' do
269
+ describe '住所が枯渇していないとき' do
270
+ it '一意な住所(漢字単位)が返ること' do
271
+ Gimei.stub(:addresses, {
272
+ 'addresses' => {
273
+ 'prefecture' => [%w[東京都 とうきょうと トウキョウト]],
274
+ 'city' => [%w[渋谷区 しぶやく シブヤク]],
275
+ 'town' => [%w[恵比寿 えびす エビス], %w[蛭子 えびす エビス]]
276
+ }
277
+ }) do
278
+ _([Gimei.unique.address.kanji, Gimei.unique.address.kanji].sort).must_equal %w[東京都渋谷区恵比寿 東京都渋谷区蛭子]
279
+ end
280
+ end
281
+ end
282
+
283
+ describe '住所が枯渇したとき' do
284
+ it 'Gimei::RetryLimitExceeded例外が発生すること' do
285
+ Gimei.stub(:addresses, {
286
+ 'addresses' => {
287
+ 'prefecture' => [%w[東京都 とうきょうと トウキョウト]],
288
+ 'city' => [%w[渋谷区 しぶやく シブヤク]],
289
+ 'town' => [%w[恵比寿 えびす エビス]]
290
+ }
291
+ }) do
292
+ assert_raises Gimei::RetryLimitExceeded do
293
+ Gimei.unique.address
294
+ Gimei.unique.address
295
+ end
296
+ end
297
+ end
298
+ end
299
+ end
300
+
301
+ describe '#prefecture' do
302
+ describe '県が枯渇していないとき' do
303
+ it '一意な県が返ること' do
304
+ Gimei.stub(:addresses, {
305
+ 'addresses' => {
306
+ 'prefecture' => [%w[東京都 とうきょうと トウキョウト], %w[静岡県 しずおかけん シズオカケン]],
307
+ 'city' => [],
308
+ 'town' => []
309
+ }
310
+ }) do
311
+ _([Gimei.unique.prefecture.kanji, Gimei.unique.prefecture.kanji].sort).must_equal %w[東京都 静岡県]
312
+ end
313
+ end
314
+ end
315
+
316
+ describe '県が枯渇したとき' do
317
+ it 'Gimei::RetryLimitExceeded例外が発生すること' do
318
+ Gimei.stub(:addresses, {
319
+ 'addresses' => {
320
+ 'prefecture' => [%w[東京都 とうきょうと トウキョウト]],
321
+ 'city' => [],
322
+ 'town' => []
323
+ }
324
+ }) do
325
+ assert_raises Gimei::RetryLimitExceeded do
326
+ Gimei.unique.prefecture
327
+ Gimei.unique.prefecture
328
+ end
329
+ end
330
+ end
331
+ end
332
+ end
333
+
334
+ describe '#city' do
335
+ describe '市区町村が枯渇していないとき' do
336
+ it '一意な市区町村が返ること' do
337
+ Gimei.stub(:addresses, {
338
+ 'addresses' => {
339
+ 'prefecture' => [],
340
+ 'city' => [%w[渋谷区 しぶやく シブヤク], %w[新宿区 しんじゅくく シンジュクク]],
341
+ 'town' => []
342
+ }
343
+ }) do
344
+ _([Gimei.unique.city.kanji, Gimei.unique.city.kanji].sort).must_equal %w[新宿区 渋谷区]
345
+ end
346
+ end
347
+ end
348
+
349
+ describe '市区町村が枯渇したとき' do
350
+ it 'Gimei::RetryLimitExceeded例外が発生すること' do
351
+ Gimei.stub(:addresses, {
352
+ 'addresses' => {
353
+ 'prefecture' => [],
354
+ 'city' => [%w[渋谷区 しぶやく シブヤク]],
355
+ 'town' => []
356
+ }
357
+ }) do
358
+ assert_raises Gimei::RetryLimitExceeded do
359
+ Gimei.unique.city
360
+ Gimei.unique.city
361
+ end
362
+ end
363
+ end
364
+ end
365
+ end
366
+
367
+ describe '#town' do
368
+ describe 'その他住所が枯渇していないとき' do
369
+ it '一意なその他住所が返ること' do
370
+ Gimei.stub(:addresses, {
371
+ 'addresses' => {
372
+ 'prefecture' => [],
373
+ 'city' => [],
374
+ 'town' => [%w[恵比寿 えびす エビス], %w[蛭子 えびす エビス]]
375
+ }
376
+ }) do
377
+ _([Gimei.unique.town.kanji, Gimei.unique.town.kanji].sort).must_equal %w[恵比寿 蛭子]
378
+ end
379
+ end
380
+ end
381
+
382
+ describe 'その他住所が枯渇したとき' do
383
+ it 'Gimei::RetryLimitExceeded例外が発生すること' do
384
+ Gimei.stub(:addresses, {
385
+ 'addresses' => {
386
+ 'prefecture' => [],
387
+ 'city' => [],
388
+ 'town' => [%w[恵比寿 えびす エビス]]
389
+ }
390
+ }) do
391
+ assert_raises Gimei::RetryLimitExceeded do
392
+ Gimei.unique.town
393
+ Gimei.unique.town
394
+ end
395
+ end
396
+ end
397
+ end
398
+ end
399
+ end