rack-ketai 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- 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,108 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'kconv'
|
3
|
-
require 'rack/ketai/carrier/general'
|
4
|
-
|
5
|
-
describe Rack::Ketai::Carrier::General::EmoticonFilter, "外部フィルタを適用する時" do
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
@filter = Rack::Ketai::Carrier::General::EmoticonFilter.new(:emoticons_path => '/images/emoticons')
|
9
|
-
end
|
10
|
-
|
11
|
-
it "emoticons_path が与えられないときはなにもしないこと" do
|
12
|
-
filter = Rack::Ketai::Carrier::General::EmoticonFilter.new
|
13
|
-
Rack::Ketai::Carrier::General::EmoticonFilter::EMOJIID_TO_TYPECAST_EMOTICONS.each do |emojiid, filenames|
|
14
|
-
str = '今日はいい[e:'+format("%03X", emojiid)+']ですね。'
|
15
|
-
resdata = str
|
16
|
-
|
17
|
-
status, headers, body = filter.outbound(200, { "Content-Type" => "text/html"}, [str])
|
18
|
-
|
19
|
-
body[0].should == resdata
|
20
|
-
end
|
21
|
-
filter = Rack::Ketai::Carrier::General::EmoticonFilter.new(:emoticons_path => '')
|
22
|
-
Rack::Ketai::Carrier::General::EmoticonFilter::EMOJIID_TO_TYPECAST_EMOTICONS.each do |emojiid, filenames|
|
23
|
-
str = '今日はいい[e:'+format("%03X", emojiid)+']ですね。'
|
24
|
-
resdata = str
|
25
|
-
|
26
|
-
status, headers, body = filter.outbound(200, { "Content-Type" => "text/html"}, [str])
|
27
|
-
|
28
|
-
body[0].should == resdata
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
it "データ中の絵文字IDをimgタグに変換すること" do
|
33
|
-
Rack::Ketai::Carrier::General::EmoticonFilter::EMOJIID_TO_TYPECAST_EMOTICONS.each do |emojiid, filenames|
|
34
|
-
tag = filenames.collect{ |filename| "<img src=\"/images/emoticons/#{filename}.gif\" />" }.join('')
|
35
|
-
resdata = "今日はいい#{tag}ですね。"
|
36
|
-
|
37
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => "text/html"}, ['今日はいい[e:'+format("%03X", emojiid)+']ですね。'])
|
38
|
-
|
39
|
-
body[0].should == resdata
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
it "データ中に絵文字ID=絵文字IDだが絵文字≠絵文字IDのIDが含まれているとき、正しく逆変換できること" do
|
44
|
-
resdata = "たとえば<img src=\"/images/emoticons/happy01.gif\" />「e-330 HAPPY FACE WITH OPEN MOUTH」とか。"
|
45
|
-
|
46
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => "text/html"}, ["たとえば[e:330]「e-330 HAPPY FACE WITH OPEN MOUTH」とか。"])
|
47
|
-
|
48
|
-
body[0].should == resdata
|
49
|
-
end
|
50
|
-
|
51
|
-
it "データ中にTypepad絵文字にはない絵文字IDが存在するとき、代替文字を表示すること" do
|
52
|
-
resdata = "黒い矢印[#{[0x2190].pack('U')}]です" # 左黒矢印
|
53
|
-
|
54
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => "text/html"}, ['黒い矢印[e:AFB]です'])
|
55
|
-
|
56
|
-
body[0].should == resdata
|
57
|
-
end
|
58
|
-
|
59
|
-
it "Content-typeがhtmlでないときには変換しないこと(未設定の場合除く)" do
|
60
|
-
emojiid = 0x00F
|
61
|
-
filenames = ["sun","cloud"]
|
62
|
-
str = '今日はいい[e:'+format("%03X", emojiid)+']ですね。'
|
63
|
-
tag = filenames.collect{ |filename| "<img src=\"/images/emoticons/#{filename}.gif\" />" }.join('')
|
64
|
-
|
65
|
-
%w(text/plain text/xml text/json application/json text/javascript application/rss+xml image/jpeg).each do |contenttype|
|
66
|
-
resdata = str
|
67
|
-
|
68
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => contenttype}, ['今日はいい[e:'+format("%03X", emojiid)+']ですね。'])
|
69
|
-
|
70
|
-
body[0].should == resdata
|
71
|
-
end
|
72
|
-
|
73
|
-
%w(text/html application/xhtml+xml).each do |contenttype|
|
74
|
-
resdata = '今日はいい'+tag+'ですね。'
|
75
|
-
|
76
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => contenttype}, ['今日はいい[e:'+format("%03X", emojiid)+']ですね。'])
|
77
|
-
|
78
|
-
body[0].should == resdata
|
79
|
-
end
|
80
|
-
|
81
|
-
resdata = '今日はいい'+tag+'ですね。'
|
82
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => ''}, ['今日はいい[e:'+format("%03X", emojiid)+']ですね。'])
|
83
|
-
body[0].should == resdata
|
84
|
-
|
85
|
-
resdata = '今日はいい'+tag+'ですね。'
|
86
|
-
status, headers, body = @filter.outbound(200, {}, ['今日はいい[e:'+format("%03X", emojiid)+']ですね。'])
|
87
|
-
body[0].should == resdata
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
it "Content-typeは触らないこと" do
|
92
|
-
[
|
93
|
-
[nil, nil],
|
94
|
-
['text/html'],
|
95
|
-
['application/xhtml+xml'],
|
96
|
-
['text/javascript'],
|
97
|
-
['text/json'],
|
98
|
-
['application/json'],
|
99
|
-
['text/javascript+json'],
|
100
|
-
['image/jpeg'],
|
101
|
-
['application/octet-stream'],
|
102
|
-
].each do |content_type|
|
103
|
-
status, headers, body = @filter.outbound(200, { "Content-Type" => content_type}, ['適当な本文'])
|
104
|
-
headers['Content-Type'].should == content_type
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
end
|
data/spec/unit/filter_spec.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'rack/ketai/carrier/general'
|
3
|
-
describe Rack::Ketai::Carrier::General do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy')
|
7
|
-
@carrier = Rack::Ketai::Carrier::General.new(@env)
|
8
|
-
end
|
9
|
-
|
10
|
-
it ":disable_filter オプションを指定しないか false を渡すとフィルタが実行されること" do
|
11
|
-
options = { }
|
12
|
-
response = [200, { }, ['']]
|
13
|
-
mock_filter = mock(Rack::Ketai::Carrier::General::EmoticonFilter)
|
14
|
-
mock_filter.should_receive(:inbound).once.with(@env).and_return(@env)
|
15
|
-
mock_filter.should_receive(:outbound).once.with(*response).and_return(response)
|
16
|
-
Rack::Ketai::Carrier::General::EmoticonFilter.should_receive(:new).at_least(1).with(options).and_return(mock_filter)
|
17
|
-
@carrier.filtering(@env, options){ |env| response }
|
18
|
-
|
19
|
-
options = { :disable_filter => false }
|
20
|
-
response = [200, { }, ['']]
|
21
|
-
mock_filter = mock(Rack::Ketai::Carrier::General::EmoticonFilter)
|
22
|
-
mock_filter.should_receive(:inbound).once.with(@env).and_return(@env)
|
23
|
-
mock_filter.should_receive(:outbound).once.with(*response).and_return(response)
|
24
|
-
Rack::Ketai::Carrier::General::EmoticonFilter.should_receive(:new).at_least(1).with(options).and_return(mock_filter)
|
25
|
-
@carrier.filtering(@env, options){ |env| response }.should == response
|
26
|
-
end
|
27
|
-
|
28
|
-
it ":disable_filter オプションに true を渡すと、フィルタが実行されないこと" do
|
29
|
-
options = { :disable_filter => true }
|
30
|
-
response = [200, { }, ['']]
|
31
|
-
mock_filter = mock(Rack::Ketai::Carrier::General::EmoticonFilter)
|
32
|
-
mock_filter.should_receive(:inbound).exactly(0)
|
33
|
-
mock_filter.should_receive(:outbound).exactly(0)
|
34
|
-
Rack::Ketai::Carrier::General::EmoticonFilter.should_receive(:new).any_number_of_times.with(options).and_return(mock_filter)
|
35
|
-
@carrier.filtering(@env, options){ |env| response }.should == response
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
data/spec/unit/general_spec.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'rack/ketai/carrier/general'
|
3
|
-
describe "Rack::Ketai::Carrier::General" do
|
4
|
-
|
5
|
-
describe 'PCでのアクセスのとき' do
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
9
|
-
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ja; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729; .NET4.0E)',
|
10
|
-
'REMOTE_ADDR' => '110.160.154.44')
|
11
|
-
@mobile = Rack::Ketai::Carrier.load(@env)
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'PC向け絵文字フィルタが適用されること' do
|
15
|
-
mock_app = mock('App')
|
16
|
-
mock_app.should_receive(:call).twice do |env|
|
17
|
-
[200, { "Content-Type" => "text/html"}, ["今日は良い天気ですね[e:000]"]]
|
18
|
-
end
|
19
|
-
|
20
|
-
middleware = Rack::Ketai::Middleware.new(mock_app, {})
|
21
|
-
middleware.call(@env)[2].should == ['今日は良い天気ですね[e:000]']
|
22
|
-
|
23
|
-
middleware = Rack::Ketai::Middleware.new(mock_app, { :emoticons_path => '/path-to/emoticons' })
|
24
|
-
middleware.call(@env)[2].should == ['今日は良い天気ですね<img src="/path-to/emoticons/sun.gif" />']
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'Rack::Ketai::Carrier::General がセットされること' do
|
28
|
-
@mobile.should be_is_a(Rack::Ketai::Carrier::General)
|
29
|
-
end
|
30
|
-
|
31
|
-
it '携帯端末でないこと' do
|
32
|
-
@mobile.should_not be_mobile
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'スマートフォンでないこと' do
|
36
|
-
@mobile.should_not be_smartphone
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
data/spec/unit/gps_spec.rb
DELETED
@@ -1,146 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'rack/ketai/carrier/docomo'
|
3
|
-
|
4
|
-
describe "位置情報を取得するとき" do
|
5
|
-
describe "DoCoMo端末で" do
|
6
|
-
|
7
|
-
it "#position でGPS位置情報が取得できること" do
|
8
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?lat=%2B35.00.35.600&lon=%2B135.41.35.600&geo=wgs84&x-acc=3',
|
9
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 P903i(c10)')
|
10
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
11
|
-
position = mobile.position
|
12
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
13
|
-
format("%.10f", position.lat).should == "35.0098888889"
|
14
|
-
format("%.10f", position.lng).should == "135.6932222222"
|
15
|
-
end
|
16
|
-
|
17
|
-
it "取得に失敗したら #position が nil に設定されること" do
|
18
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
19
|
-
'HTTP_USER_AGENT' => 'DoCoMo/2.0 P903i(c10)')
|
20
|
-
mobile = Rack::Ketai::Carrier::Docomo.new(env)
|
21
|
-
mobile.position.should be_nil
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "au端末で" do
|
26
|
-
|
27
|
-
describe "#position でGPS位置情報が" do
|
28
|
-
it "WGS84+度分秒単位で渡された場合に取得できること" do
|
29
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?var=1&alt=33&time=20100913142300&smaj=104&smin=53&vert=41&majaa=96&fm=2&unit=0&lat=%2B35.00.35.60&lon=%2B135.41.35.60&datum=0',
|
30
|
-
'HTTP_USER_AGENT' => 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0')
|
31
|
-
mobile = Rack::Ketai::Carrier::Au.new(env)
|
32
|
-
position = mobile.position
|
33
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
34
|
-
format("%.10f", position.lat).should == "35.0098888889"
|
35
|
-
format("%.10f", position.lng).should == "135.6932222222"
|
36
|
-
|
37
|
-
# +/-が省略
|
38
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?var=1&alt=33&time=20100913142300&smaj=104&smin=53&vert=41&majaa=96&fm=2&unit=0&lat=35.00.35.60&lon=135.41.35.60&datum=0',
|
39
|
-
'HTTP_USER_AGENT' => 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0')
|
40
|
-
mobile = Rack::Ketai::Carrier::Au.new(env)
|
41
|
-
position = mobile.position
|
42
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
43
|
-
format("%.10f", position.lat).should == "35.0098888889"
|
44
|
-
format("%.10f", position.lng).should == "135.6932222222"
|
45
|
-
end
|
46
|
-
|
47
|
-
it "WGS84+度単位で渡された場合に取得できること" do
|
48
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?var=1&alt=33&time=20100913142300&smaj=104&smin=53&vert=41&majaa=96&fm=2&unit=1&lat=%2B35.00989&lon=%2B135.69322&datum=0',
|
49
|
-
'HTTP_USER_AGENT' => 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0')
|
50
|
-
mobile = Rack::Ketai::Carrier::Au.new(env)
|
51
|
-
position = mobile.position
|
52
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
53
|
-
format("%.10f", position.lat).should == "35.0098900000"
|
54
|
-
format("%.10f", position.lng).should == "135.6932200000"
|
55
|
-
|
56
|
-
# +/-が省略
|
57
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?var=1&alt=33&time=20100913142300&smaj=104&smin=53&vert=41&majaa=96&fm=2&unit=1&lat=35.00989&lon=135.69322&datum=0',
|
58
|
-
'HTTP_USER_AGENT' => 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0')
|
59
|
-
mobile = Rack::Ketai::Carrier::Au.new(env)
|
60
|
-
position = mobile.position
|
61
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
62
|
-
format("%.10f", position.lat).should == "35.0098900000"
|
63
|
-
format("%.10f", position.lng).should == "135.6932200000"
|
64
|
-
end
|
65
|
-
|
66
|
-
it "TOKYO97+度分秒単位で渡された場合に取得できること" do
|
67
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?var=1&alt=33&time=20100913142300&smaj=104&smin=53&vert=41&majaa=96&fm=2&unit=0&lat=%2B35.00.35.60&lon=%2B135.41.35.60&datum=1',
|
68
|
-
'HTTP_USER_AGENT' => 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0')
|
69
|
-
mobile = Rack::Ketai::Carrier::Au.new(env)
|
70
|
-
position = mobile.position
|
71
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
72
|
-
format("%.10f", position.lat).should == "35.0131010819"
|
73
|
-
format("%.10f", position.lng).should == "135.6903650621"
|
74
|
-
|
75
|
-
# +/-が省略
|
76
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?var=1&alt=33&time=20100913142300&smaj=104&smin=53&vert=41&majaa=96&fm=2&unit=0&lat=35.00.35.60&lon=135.41.35.60&datum=1',
|
77
|
-
'HTTP_USER_AGENT' => 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0')
|
78
|
-
mobile = Rack::Ketai::Carrier::Au.new(env)
|
79
|
-
position = mobile.position
|
80
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
81
|
-
format("%.10f", position.lat).should == "35.0131010819"
|
82
|
-
format("%.10f", position.lng).should == "135.6903650621"
|
83
|
-
end
|
84
|
-
|
85
|
-
it "TOKYO97+度単位で渡された場合に取得できること" do
|
86
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?var=1&alt=33&time=20100913142300&smaj=104&smin=53&vert=41&majaa=96&fm=2&unit=1&lat=%2B35.00989&lon=%2B135.69322&datum=1',
|
87
|
-
'HTTP_USER_AGENT' => 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0')
|
88
|
-
mobile = Rack::Ketai::Carrier::Au.new(env)
|
89
|
-
position = mobile.position
|
90
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
91
|
-
format("%.10f", position.lat).should == "35.0131021928"
|
92
|
-
format("%.10f", position.lng).should == "135.6903628401"
|
93
|
-
|
94
|
-
# +/-が省略
|
95
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?var=1&alt=33&time=20100913142300&smaj=104&smin=53&vert=41&majaa=96&fm=2&unit=1&lat=35.00989&lon=135.69322&datum=1',
|
96
|
-
'HTTP_USER_AGENT' => 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0')
|
97
|
-
mobile = Rack::Ketai::Carrier::Au.new(env)
|
98
|
-
position = mobile.position
|
99
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
100
|
-
format("%.10f", position.lat).should == "35.0131021928"
|
101
|
-
format("%.10f", position.lng).should == "135.6903628401"
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
it "取得に失敗したら #position が nil に設定されること" do
|
107
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
108
|
-
'HTTP_USER_AGENT' => 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0')
|
109
|
-
mobile = Rack::Ketai::Carrier::Au.new(env)
|
110
|
-
mobile.position.should be_nil
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
describe "Softbank端末(3GC)で" do
|
115
|
-
|
116
|
-
it "#position でGPS位置情報(WGS84)が取得できること" do
|
117
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?pos=N35.00.35.60E135.41.35.60&geo=wgs84&x-acr=3',
|
118
|
-
'HTTP_USER_AGENT' => 'SoftBank/1.0/824T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1')
|
119
|
-
mobile = Rack::Ketai::Carrier::Softbank.new(env)
|
120
|
-
position = mobile.position
|
121
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
122
|
-
format("%.10f", position.lat).should == "35.0098888889"
|
123
|
-
format("%.10f", position.lng).should == "135.6932222222"
|
124
|
-
end
|
125
|
-
|
126
|
-
it "#position でGPS位置情報(TOKYO)が取得できること" do
|
127
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy?pos=N35.00.35.60E135.41.35.60&geo=tokyo&x-acr=3',
|
128
|
-
'HTTP_USER_AGENT' => 'SoftBank/1.0/824T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1')
|
129
|
-
mobile = Rack::Ketai::Carrier::Softbank.new(env)
|
130
|
-
position = mobile.position
|
131
|
-
position.should be_instance_of(Rack::Ketai::Position)
|
132
|
-
format("%.10f", position.lat).should == "35.0131010819"
|
133
|
-
format("%.10f", position.lng).should == "135.6903650621"
|
134
|
-
end
|
135
|
-
|
136
|
-
|
137
|
-
it "取得に失敗したら #position が nil に設定されること" do
|
138
|
-
env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
139
|
-
'HTTP_USER_AGENT' => 'SoftBank/1.0/824T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1')
|
140
|
-
mobile = Rack::Ketai::Carrier::Softbank.new(env)
|
141
|
-
mobile.position.should be_nil
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
end
|
146
|
-
|
data/spec/unit/iphone_spec.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'rack/ketai/carrier/iphone'
|
3
|
-
describe "Rack::Ketai::Carrier::IPhone" do
|
4
|
-
|
5
|
-
describe 'iPhoneでのアクセスのとき' do
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
9
|
-
'HTTP_USER_AGENT' => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7',
|
10
|
-
'REMOTE_ADDR' => '126.240.0.41')
|
11
|
-
@mobile = Rack::Ketai::Carrier.load(@env)
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'PC向け絵文字フィルタが適用されること' do
|
15
|
-
mock_app = mock('App')
|
16
|
-
mock_app.should_receive(:call).twice do |env|
|
17
|
-
[200, { "Content-Type" => "text/html"}, ["今日は良い天気ですね[e:000]"]]
|
18
|
-
end
|
19
|
-
|
20
|
-
middleware = Rack::Ketai::Middleware.new(mock_app, {})
|
21
|
-
middleware.call(@env)[2].should == ['今日は良い天気ですね[e:000]']
|
22
|
-
|
23
|
-
middleware = Rack::Ketai::Middleware.new(mock_app, { :emoticons_path => '/path-to/emoticons' })
|
24
|
-
middleware.call(@env)[2].should == ['今日は良い天気ですね<img src="/path-to/emoticons/sun.gif" />']
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'Rack::Ketai::Carrier::IPhone がセットされること' do
|
28
|
-
@mobile.should be_is_a(Rack::Ketai::Carrier::IPhone)
|
29
|
-
end
|
30
|
-
|
31
|
-
it '携帯端末であること' do
|
32
|
-
@mobile.should be_mobile
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'スマートフォンであること' do
|
36
|
-
@mobile.should be_smartphone
|
37
|
-
end
|
38
|
-
|
39
|
-
it "#supports_cookie? は true を返すこと" do
|
40
|
-
@mobile.should be_respond_to(:supports_cookie?)
|
41
|
-
@mobile.should be_supports_cookie
|
42
|
-
end
|
43
|
-
|
44
|
-
it "#valid_addr? は false を返すこと" do
|
45
|
-
@mobile.should_not be_valid_addr
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
describe 'iPodでのアクセスのとき' do
|
51
|
-
|
52
|
-
before(:each) do
|
53
|
-
@env = Rack::MockRequest.env_for('http://hoge.com/dummy',
|
54
|
-
'HTTP_USER_AGENT' => 'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3',
|
55
|
-
'REMOTE_ADDR' => '126.240.0.41')
|
56
|
-
@mobile = Rack::Ketai::Carrier.load(@env)
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'PC向け絵文字フィルタが適用されること' do
|
60
|
-
mock_app = mock('App')
|
61
|
-
mock_app.should_receive(:call).twice do |env|
|
62
|
-
[200, { "Content-Type" => "text/html"}, ["今日は良い天気ですね[e:000]"]]
|
63
|
-
end
|
64
|
-
|
65
|
-
middleware = Rack::Ketai::Middleware.new(mock_app, {})
|
66
|
-
middleware.call(@env)[2].should == ['今日は良い天気ですね[e:000]']
|
67
|
-
|
68
|
-
middleware = Rack::Ketai::Middleware.new(mock_app, { :emoticons_path => '/path-to/emoticons' })
|
69
|
-
middleware.call(@env)[2].should == ['今日は良い天気ですね<img src="/path-to/emoticons/sun.gif" />']
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'Rack::Ketai::Carrier::IPhone がセットされること' do
|
73
|
-
@mobile.should be_is_a(Rack::Ketai::Carrier::IPhone)
|
74
|
-
end
|
75
|
-
|
76
|
-
it '携帯端末であること' do
|
77
|
-
@mobile.should be_mobile
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'スマートフォンであること' do
|
81
|
-
@mobile.should be_smartphone
|
82
|
-
end
|
83
|
-
|
84
|
-
it "#supports_cookie? は true を返すこと" do
|
85
|
-
@mobile.should be_respond_to(:supports_cookie?)
|
86
|
-
@mobile.should be_supports_cookie
|
87
|
-
end
|
88
|
-
|
89
|
-
it "#valid_addr? は false を返すこと" do
|
90
|
-
@mobile.should_not be_valid_addr
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
describe Rack::Ketai::Middleware, "#call を実行するとき" do
|
4
|
-
|
5
|
-
it "適切な env['rack.ketai'] を設定できること" do
|
6
|
-
{
|
7
|
-
'DoCoMo/1.0/N505i' => Rack::Ketai::Carrier::Docomo, # Mova
|
8
|
-
'DoCoMo/2.0 P903i' => Rack::Ketai::Carrier::Docomo, # FOMA
|
9
|
-
'KDDI-CA39 UP.Browser/6.2.0.13.1.5 (GUI) MMP/2.0' => Rack::Ketai::Carrier::Au, # WAP2.0 MMP2.0
|
10
|
-
'KDDI-TS21 UP.Browser/6.0.2.273 (GUI) MMP/1.1' => Rack::Ketai::Carrier::Au, # WAP2.0 MMP1.1
|
11
|
-
'SoftBank/1.0/930SH/SHJ001[/Serial] Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1' => Rack::Ketai::Carrier::Softbank, # SoftBank 3GC
|
12
|
-
'Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5B108 Safari/525.20' => Rack::Ketai::Carrier::IPhone,
|
13
|
-
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Q312461; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' => nil, # IE8
|
14
|
-
'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1' => nil,
|
15
|
-
'Opera/9.21 (Windows NT 5.1; U; ja)' => nil,
|
16
|
-
'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP) AppleWebKit/525.19 (KHTML, like Gecko) Version/3.1.2 Safari/525.21' => nil,
|
17
|
-
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13' => nil,
|
18
|
-
}.each do |ua, carrier|
|
19
|
-
mock_env = Rack::MockRequest.env_for('http://hoge.com/dummy','HTTP_USER_AGENT' => ua)
|
20
|
-
|
21
|
-
mock_app = mock('App')
|
22
|
-
mock_app.should_receive(:call) do |env|
|
23
|
-
if carrier
|
24
|
-
env['rack.ketai'].should_not be_nil
|
25
|
-
env['rack.ketai'].mobile?.should be_true
|
26
|
-
else
|
27
|
-
env['rack.ketai'].should be_nil
|
28
|
-
env['rack.ketai'].mobile?.should be_false
|
29
|
-
end
|
30
|
-
[200, { "Content-Type" => "text/plain"}, ["OK"]]
|
31
|
-
end
|
32
|
-
|
33
|
-
middleware = Rack::Ketai::Middleware.new(mock_app, { })
|
34
|
-
middleware.call(mock_env)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|