gimei 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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