rack-ketai 0.2.3 → 0.2.4
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/lib/rack/ketai/carrier/abstract.rb +11 -0
- data/lib/rack/ketai/carrier/android.rb +9 -0
- data/lib/rack/ketai/carrier/cidrs/au.rb +1 -12
- data/lib/rack/ketai/carrier/cidrs/docomo.rb +1 -1
- data/lib/rack/ketai/carrier/cidrs/softbank.rb +6 -4
- data/lib/rack/ketai/carrier/iphone.rb +9 -1
- data/lib/rack/ketai/carrier/mobile.rb +4 -0
- data/lib/rack/ketai/carrier/smartphone.rb +1 -1
- metadata +69 -81
- data/VERSION +0 -1
- data/rack-ketai.gemspec +0 -91
- data/spec/spec_helper.rb +0 -11
- data/spec/unit/android_spec.rb +0 -50
- data/spec/unit/au_filter_spec.rb +0 -105
- data/spec/unit/au_spec.rb +0 -248
- data/spec/unit/carrier_spec.rb +0 -30
- data/spec/unit/display_spec.rb +0 -25
- data/spec/unit/docomo_filter_spec.rb +0 -115
- data/spec/unit/docomo_spec.rb +0 -351
- data/spec/unit/emoticon_filter_spec.rb +0 -108
- data/spec/unit/filter_spec.rb +0 -38
- data/spec/unit/general_spec.rb +0 -41
- data/spec/unit/gps_spec.rb +0 -146
- data/spec/unit/iphone_spec.rb +0 -95
- data/spec/unit/middleware_spec.rb +0 -38
- data/spec/unit/position_spec.rb +0 -49
- data/spec/unit/softbank_filter_spec.rb +0 -142
- data/spec/unit/softbank_spec.rb +0 -207
- data/spec/unit/valid_addr_spec.rb +0 -116
- data/test/spec_runner.rb +0 -30
- data/tools/generate_emoji_dic.rb +0 -430
- data/tools/update_speclist.rb +0 -87
@@ -1,115 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'kconv'
|
3
|
-
require 'rack/ketai/carrier/docomo'
|
4
|
-
describe Rack::Ketai::Carrier::Docomo::Filter, "内部エンコーディングに変換する時" do
|
5
|
-
|
6
|
-
before(:each) do
|
7
|
-
@filter = Rack::Ketai::Carrier::Docomo::Filter.new
|
8
|
-
end
|
9
|
-
|
10
|
-
it "POSTデータ中のSJISバイナリの絵文字を絵文字IDに変換すること" do
|
11
|
-
Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID.should_not be_empty
|
12
|
-
Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID.each do |emoji, emojiid|
|
13
|
-
postdata = "message=" + CGI.escape("今日はいい".tosjis + emoji + "ですね。".tosjis)
|
14
|
-
postdata.force_encoding('Shift_JIS') if postdata.respond_to?(:force_encoding)
|
15
|
-
|
16
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
17
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 P903i',
|
18
|
-
:method => 'POST', # rack 1.1.0 以降ではこれがないとパーサが動かない
|
19
|
-
:input => postdata)
|
20
|
-
env = @filter.inbound(env)
|
21
|
-
request = Rack::Request.new(env)
|
22
|
-
request.params['message'].should == '今日はいい[e:'+format("%03X", emojiid)+']ですね。'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
describe Rack::Ketai::Carrier::Docomo::Filter, "外部エンコーディングに変換する時" do
|
29
|
-
|
30
|
-
before(:each) do
|
31
|
-
@filter = Rack::Ketai::Carrier::Docomo::Filter.new
|
32
|
-
end
|
33
|
-
|
34
|
-
# Rails 3.0.0+Ruby1.9.xのとき、bodyにeachの使えないStringが渡されてエラーになったので
|
35
|
-
it "bodyにStringを受け取ってもよきにはからってくれること" do
|
36
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => "text/html"}, 'String')
|
37
|
-
body.should == ['String']
|
38
|
-
end
|
39
|
-
|
40
|
-
it "データ中の絵文字IDをSJISの絵文字コードに変換すること" do
|
41
|
-
Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID.should_not be_empty
|
42
|
-
Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID.each do |emoji, emojiid|
|
43
|
-
resdata = "今日はいい".tosjis + emoji + "ですね。".tosjis
|
44
|
-
|
45
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => "text/html"}, ['今日はいい[e:'+format("%03X", emojiid)+']ですね。'])
|
46
|
-
|
47
|
-
body[0].should == resdata
|
48
|
-
end
|
49
|
-
|
50
|
-
# 複数の絵文字IDに割り当てられている絵文字
|
51
|
-
hotel = [0xF8CA].pack('n*')
|
52
|
-
harts = [0xF994].pack('n*')
|
53
|
-
[hotel, harts].each{ |e| e.force_encoding('Shift_JIS') if e.respond_to?(:force_encoding) }
|
54
|
-
resdata = "ラブホテル".tosjis + hotel + harts
|
55
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => "text/html"}, ['ラブホテル[e:4B8]'])
|
56
|
-
|
57
|
-
body[0].should == resdata
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
it "Content-typeが指定なし,text/html, application/xhtml+xml 以外の時はフィルタを適用しないこと" do
|
62
|
-
Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID.should_not be_empty
|
63
|
-
Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID.each do |emoji, emojiid|
|
64
|
-
internaldata = '今日はいい[e:'+format("%03X", emojiid)+']ですね。'
|
65
|
-
%w(text/plain text/xml text/json application/json text/javascript application/rss+xml image/jpeg application/x-shockwave-flash).each do |contenttype|
|
66
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => contenttype }, [internaldata])
|
67
|
-
body[0].should == internaldata
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
it "データ中に絵文字ID=絵文字IDだが絵文字!=絵文字IDのIDが含まれているとき、正しく逆変換できること" do
|
73
|
-
emoji = [0xF995].pack('n')
|
74
|
-
emoji.force_encoding('Shift_JIS') if emoji.respond_to?(:force_encoding)
|
75
|
-
resdata = "たとえば".tosjis+emoji+"「e-330 HAPPY FACE WITH OPEN MOUTH」とか。".tosjis
|
76
|
-
|
77
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => "text/html"}, ["たとえば[e:330]「e-330 HAPPY FACE WITH OPEN MOUTH」とか。"])
|
78
|
-
|
79
|
-
body[0].should == resdata
|
80
|
-
end
|
81
|
-
|
82
|
-
it "データ中にドコモにはない絵文字IDが存在するとき、代替文字を表示すること" do
|
83
|
-
resdata = "黒い矢印[#{[0x2190].pack('U')}]です".tosjis # 左黒矢印
|
84
|
-
|
85
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => "text/html"}, ['黒い矢印[e:AFB]です'])
|
86
|
-
|
87
|
-
body[0].should == resdata
|
88
|
-
end
|
89
|
-
|
90
|
-
it "Content-typeを適切に書き換えられること" do
|
91
|
-
[
|
92
|
-
[nil, nil],
|
93
|
-
['text/html', 'application/xhtml+xml; charset=shift_jis'],
|
94
|
-
['text/html; charset=utf-8', 'application/xhtml+xml; charset=shift_jis'],
|
95
|
-
['text/html;charset=utf-8', 'application/xhtml+xml;charset=shift_jis'],
|
96
|
-
['application/xhtml+xml', 'application/xhtml+xml; charset=shift_jis'],
|
97
|
-
['application/xhtml+xml; charset=utf-8', 'application/xhtml+xml; charset=shift_jis'],
|
98
|
-
['application/xhtml+xml;charset=utf-8', 'application/xhtml+xml;charset=shift_jis'],
|
99
|
-
['text/javascript', 'text/javascript'],
|
100
|
-
['text/json', 'text/json'],
|
101
|
-
['application/json', 'application/json'],
|
102
|
-
['text/javascript+json', 'text/javascript+json'],
|
103
|
-
['image/jpeg', 'image/jpeg'],
|
104
|
-
['application/octet-stream', 'application/octet-stream'],
|
105
|
-
].each do |content_type, valid_content_type|
|
106
|
-
orig_content_type = content_type == nil ? nil : content_type.clone
|
107
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => content_type}, ['適当な本文'])
|
108
|
-
headers['Content-Type'].should == valid_content_type
|
109
|
-
# 元の文字列に直接変更を加えない(Rails3.0でハッシュを使い回してるようだったので)
|
110
|
-
content_type.should == orig_content_type
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
end
|
115
|
-
|
data/spec/unit/docomo_spec.rb
DELETED
@@ -1,351 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'rack/ketai/carrier/docomo'
|
3
|
-
describe "Rack::Ketai::Carrier::Docomo" do
|
4
|
-
|
5
|
-
# UAの意味
|
6
|
-
# http://www.nttdocomo.co.jp/service/imode/make/content/browser/html/useragent/
|
7
|
-
|
8
|
-
before(:each) do
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "FOMA端末で" do
|
13
|
-
|
14
|
-
# http://www.nttdocomo.co.jp/service/imode/make/content/browser/html/tag/utn.html
|
15
|
-
# FOMA端末製造番号のみ、もしくはFOMAカード製造番号のみの送信はできません。
|
16
|
-
|
17
|
-
describe "iモードIDを取得できたとき" do
|
18
|
-
before(:each) do
|
19
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy?guid=ON',
|
20
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 P903i(c10;serXXXXXXXXXXXXXXX; iccxxxxxxxxxxxxxxxxxxxx)',
|
21
|
-
'HTTP_X_DCMGUID' => '0123abC')
|
22
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "#subscriberid でiモードIDを取得できること" do
|
26
|
-
@mobile.subscriberid.should == '0123abC'
|
27
|
-
end
|
28
|
-
|
29
|
-
it "#deviceid でFOMA端末個体識別子を取得できること" do
|
30
|
-
@mobile.deviceid.should == "XXXXXXXXXXXXXXX"
|
31
|
-
end
|
32
|
-
|
33
|
-
it "#ident でiモードIDを取得できること" do
|
34
|
-
@mobile.ident.should == @mobile.subscriberid
|
35
|
-
@mobile.ident.should == '0123abC'
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "iモードIDが取得できず、FOMAカード個体識別子、FOMA端末個体識別子双方を取得できたとき" do
|
41
|
-
|
42
|
-
before(:each) do
|
43
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
44
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 P903i(c10;serXXXXXXXXXXXXXXX; iccxxxxxxxxxxxxxxxxxxxx)')
|
45
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "#subscriberid でFOMAカード個体識別子を取得できること" do
|
49
|
-
@mobile.subscriberid.should == "xxxxxxxxxxxxxxxxxxxx"
|
50
|
-
end
|
51
|
-
|
52
|
-
it "#deviceid でFOMA端末個体識別子を取得できること" do
|
53
|
-
@mobile.deviceid.should == "XXXXXXXXXXXXXXX"
|
54
|
-
end
|
55
|
-
|
56
|
-
it "#ident でFOMAカード個体識別子を取得できること" do
|
57
|
-
@mobile.ident.should == @mobile.subscriberid
|
58
|
-
@mobile.ident.should == "xxxxxxxxxxxxxxxxxxxx"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe "iモードID、FOMAカード個体識別子およびFOMA端末個体識別子が取得できないとき" do
|
63
|
-
|
64
|
-
before(:each) do
|
65
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
66
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 SO903i')
|
67
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "#subscriberid は nil を返すこと" do
|
71
|
-
@mobile.subscriberid.should be_nil
|
72
|
-
end
|
73
|
-
|
74
|
-
it "#deviceid は nil を返すこと" do
|
75
|
-
@mobile.deviceid.should be_nil
|
76
|
-
end
|
77
|
-
|
78
|
-
it "#ident は nil を返すこと" do
|
79
|
-
@mobile.ident.should be_nil
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
describe "iモードIDが取得でき、FOMAカード個体識別子およびFOMA端末個体識別子が取得できないとき" do
|
84
|
-
|
85
|
-
before(:each) do
|
86
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
87
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 SO903i',
|
88
|
-
'HTTP_X_DCMGUID' => '0123abC')
|
89
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
90
|
-
end
|
91
|
-
|
92
|
-
it "#subscriberid はiモードIDを返すこと" do
|
93
|
-
@mobile.subscriberid.should == '0123abC'
|
94
|
-
end
|
95
|
-
|
96
|
-
it "#deviceid は nil を返すこと" do
|
97
|
-
@mobile.deviceid.should be_nil
|
98
|
-
end
|
99
|
-
|
100
|
-
it "#ident はiモードIDを返すこと" do
|
101
|
-
@mobile.ident.should == '0123abC'
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
it "#name で機種名を取得できること" do
|
106
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
107
|
-
'HTTP_USER_AGENT' => "DoCoMo/2.0 SH02A")
|
108
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
109
|
-
mobile.name.should == 'SH02A'
|
110
|
-
end
|
111
|
-
|
112
|
-
it "#cache_size でキャッシュサイズが取得できること" do
|
113
|
-
{
|
114
|
-
'DoCoMo/2.0 P903i' => 5 * 1000,
|
115
|
-
'DoCoMo/2.0 F900i(c100;TJ)' => 100 * 1000,
|
116
|
-
'DoCoMo/2.0 F900i(c100;TC;W22H12)' => 100 * 1000,
|
117
|
-
'DoCoMo/2.0 P903i(c100;serXXXXXXXXXXXXXXX; iccxxxxxxxxxxxxxxxxxxxx)' => 100 * 1000,
|
118
|
-
'DoCoMo/2.0 N06A3(c500;TB;W24H16)' => 500 * 1000,
|
119
|
-
'DoCoMo/2.0 XXXX(c500;TB;W24H16)' => 500 * 1000 # 未知の端末でも
|
120
|
-
}.each do |ua, cache_size|
|
121
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
122
|
-
'HTTP_USER_AGENT' => ua)
|
123
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
124
|
-
mobile.cache_size.should == cache_size
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
it 'スマートフォンではないこと' do
|
129
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
130
|
-
'HTTP_USER_AGENT' => "DoCoMo/2.0 SH02A")
|
131
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
132
|
-
mobile.should_not be_smartphone
|
133
|
-
end
|
134
|
-
|
135
|
-
describe "ディスプレイ情報を取得できること" do
|
136
|
-
|
137
|
-
it "既知の端末のとき" do
|
138
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
139
|
-
'HTTP_USER_AGENT' => "DoCoMo/2.0 SH02A(c100;TB;W30H20)")
|
140
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
141
|
-
display = @mobile.display
|
142
|
-
display.should_not be_nil
|
143
|
-
display.colors.should == 16777216
|
144
|
-
display.width.should == 240
|
145
|
-
display.height.should == 320
|
146
|
-
end
|
147
|
-
|
148
|
-
it "未知の端末のとき" do
|
149
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
150
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 XX01(c100;TB;W30H20)')
|
151
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
152
|
-
display = @mobile.display
|
153
|
-
display.should_not be_nil
|
154
|
-
display.colors.should be_nil
|
155
|
-
display.width.should be_nil
|
156
|
-
display.height.should be_nil
|
157
|
-
end
|
158
|
-
|
159
|
-
end
|
160
|
-
|
161
|
-
end
|
162
|
-
|
163
|
-
describe "mova端末で" do
|
164
|
-
|
165
|
-
# http://www.nttdocomo.co.jp/service/imode/make/content/browser/html/tag/utn.html
|
166
|
-
|
167
|
-
describe "iモードIDと端末個体識別子を取得できたとき" do
|
168
|
-
before(:each) do
|
169
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy?guid=ON',
|
170
|
-
'HTTP_USER_AGENT' => 'DoCoMo/1.0/SO503i/c10/TB/serXXXXXXXXXXX',
|
171
|
-
'HTTP_X_DCMGUID' => '0123abC')
|
172
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
173
|
-
end
|
174
|
-
|
175
|
-
it "#subscriberid でiモードIDを取得できること" do
|
176
|
-
@mobile.subscriberid.should == '0123abC'
|
177
|
-
end
|
178
|
-
|
179
|
-
it "#deviceid で端末個体識別子を取得できること" do
|
180
|
-
@mobile.deviceid.should == "XXXXXXXXXXX"
|
181
|
-
end
|
182
|
-
|
183
|
-
it "#ident でiモードIDを取得できること" do
|
184
|
-
@mobile.ident.should == '0123abC'
|
185
|
-
end
|
186
|
-
|
187
|
-
end
|
188
|
-
|
189
|
-
describe "端末個体識別子のみ取得できたとき" do
|
190
|
-
|
191
|
-
before(:each) do
|
192
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
193
|
-
'HTTP_USER_AGENT' => 'DoCoMo/1.0/SO503i/c10/TB/serXXXXXXXXXXX')
|
194
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
195
|
-
end
|
196
|
-
|
197
|
-
it "#subscriberid は nil を返すこと" do
|
198
|
-
@mobile.subscriberid.should be_nil
|
199
|
-
end
|
200
|
-
|
201
|
-
it "#deviceid で端末個体識別子を取得できること" do
|
202
|
-
@mobile.deviceid.should == "XXXXXXXXXXX"
|
203
|
-
end
|
204
|
-
|
205
|
-
it "#ident で端末個体識別子を取得できること" do
|
206
|
-
@mobile.ident.should == @mobile.deviceid
|
207
|
-
@mobile.ident.should == "XXXXXXXXXXX"
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
describe "iモードIDも端末個体識別子も取得できないとき" do
|
212
|
-
|
213
|
-
before(:each) do
|
214
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
215
|
-
'HTTP_USER_AGENT' => 'DoCoMo/1.0/N505i/c20/TB/W24H12')
|
216
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
217
|
-
end
|
218
|
-
|
219
|
-
it "#subscriberid は nil を返すこと" do
|
220
|
-
@mobile.subscriberid.should be_nil
|
221
|
-
end
|
222
|
-
|
223
|
-
it "#deviceid は nil を返すこと" do
|
224
|
-
@mobile.deviceid.should be_nil
|
225
|
-
end
|
226
|
-
|
227
|
-
it "#ident は nil を返すこと" do
|
228
|
-
@mobile.ident.should be_nil
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
describe "iモードIDのみ取得できたとき" do
|
233
|
-
|
234
|
-
before(:each) do
|
235
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
236
|
-
'HTTP_USER_AGENT' => 'DoCoMo/1.0/N505i/c20/TB/W24H12',
|
237
|
-
'HTTP_X_DCMGUID' => '0123abC')
|
238
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
239
|
-
end
|
240
|
-
|
241
|
-
it "#subscriberid はiモードIDを返すこと" do
|
242
|
-
@mobile.subscriberid.should == '0123abC'
|
243
|
-
end
|
244
|
-
|
245
|
-
it "#deviceid は nil を返すこと" do
|
246
|
-
@mobile.deviceid.should be_nil
|
247
|
-
end
|
248
|
-
|
249
|
-
it "#ident はiモードIDを返すこと" do
|
250
|
-
@mobile.ident.should == '0123abC'
|
251
|
-
end
|
252
|
-
end
|
253
|
-
|
254
|
-
it "#name で機種名を取得できること" do
|
255
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
256
|
-
'HTTP_USER_AGENT' => "DoCoMo/1.0/SO502i")
|
257
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
258
|
-
mobile.name.should == 'SO502i'
|
259
|
-
end
|
260
|
-
|
261
|
-
it "#cache_size でキャッシュサイズが取得できること" do
|
262
|
-
{
|
263
|
-
'DoCoMo/1.0/F502i' => 5 * 1000,
|
264
|
-
'DoCoMo/1.0/D503i/c10' => 10 * 1000,
|
265
|
-
'DoCoMo/1.0/N504i/c10/TB' => 10 * 1000,
|
266
|
-
'DoCoMo/1.0/SO506iS/c20/TB/W20H10' => 20 * 1000,
|
267
|
-
}.each do |ua, cache_size|
|
268
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
269
|
-
'HTTP_USER_AGENT' => ua)
|
270
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
271
|
-
mobile.cache_size.should == cache_size
|
272
|
-
end
|
273
|
-
end
|
274
|
-
|
275
|
-
describe "ディスプレイ情報を取得できること" do
|
276
|
-
|
277
|
-
it "既知の端末のとき" do
|
278
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
279
|
-
'HTTP_USER_AGENT' => "DoCoMo/1.0/SO502i")
|
280
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
281
|
-
display = @mobile.display
|
282
|
-
display.should_not be_nil
|
283
|
-
display.colors.should == 4
|
284
|
-
display.width.should == 120
|
285
|
-
display.height.should == 120
|
286
|
-
end
|
287
|
-
|
288
|
-
it "未知の端末のとき" do
|
289
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
290
|
-
'HTTP_USER_AGENT' => 'DoCoMo/1.0/X000i')
|
291
|
-
@mobile = Rack::Ketai::Carrier::Docomo.new(@env)
|
292
|
-
display = @mobile.display
|
293
|
-
display.should_not be_nil
|
294
|
-
display.colors.should be_nil
|
295
|
-
display.width.should be_nil
|
296
|
-
display.height.should be_nil
|
297
|
-
end
|
298
|
-
|
299
|
-
end
|
300
|
-
|
301
|
-
end
|
302
|
-
|
303
|
-
describe "#supports_cookie? を使うとき" do
|
304
|
-
|
305
|
-
# iモードブラウザ 2.0から対応
|
306
|
-
# といっても、iモードブラウザ 2.0かどうか判断するには
|
307
|
-
# キャッシュサイズで調べるしかない(c500)
|
308
|
-
# キャッシュが不明な場合は端末データベースから判断
|
309
|
-
# (ただし信頼性が低いので最後の手段)
|
310
|
-
|
311
|
-
it "Cookie対応機種なら true を返すこと" do
|
312
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
313
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 F02B')
|
314
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
315
|
-
mobile.should be_respond_to(:supports_cookie?)
|
316
|
-
mobile.should be_supports_cookie
|
317
|
-
end
|
318
|
-
|
319
|
-
it "Cookie未対応機種なら false を返すこと" do
|
320
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
321
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 L06A')
|
322
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
323
|
-
mobile.should be_respond_to(:supports_cookie?)
|
324
|
-
mobile.should_not be_supports_cookie
|
325
|
-
end
|
326
|
-
|
327
|
-
it "不明な機種でもキャッシュサイズがわかればそれを基に判断すること" do
|
328
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
329
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 X00HOGE3(c500;TB;W24H15)')
|
330
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
331
|
-
mobile.should be_respond_to(:supports_cookie?)
|
332
|
-
mobile.should be_supports_cookie
|
333
|
-
|
334
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
335
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 X00HOGE3(c100;TB;W24H15)')
|
336
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
337
|
-
mobile.should be_respond_to(:supports_cookie?)
|
338
|
-
mobile.should_not be_supports_cookie
|
339
|
-
end
|
340
|
-
|
341
|
-
it "不明な機種でキャッシュサイズもわからないなら false を返すこと" do
|
342
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
343
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 X00HOGE')
|
344
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
345
|
-
mobile.should be_respond_to(:supports_cookie?)
|
346
|
-
mobile.should_not be_supports_cookie
|
347
|
-
end
|
348
|
-
|
349
|
-
end
|
350
|
-
|
351
|
-
end
|