# -*- coding: utf-8 -*- require File.expand_path(File.join(File.dirname(__FILE__), '/../spec_helper')) describe "jpmobile integration spec" do include Jpmobile::Util shared_examples_for "hankaku_filter :input => true のとき" do it "はtextareaの中では半角に変換されないこと" do get "/#{@controller}/textarea", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == send(@conversion_method, '') end it "はinputのvalueの中では半角に変換されないこと" do get "/#{@controller}/input_tag", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == send(@conversion_method, '') end it "は 変換されない" do get "/#{@controller}/nbsp_char", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == send(@conversion_method, 'アブラ カダブラ') end end shared_examples_for "hankaku_filter :input => false のとき" do it "はtextareaの中でも半角に変換されること" do get "/#{@controller}/textarea", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == send(@conversion_method, '') end it "はinputのvalueの中も半角に変換されること" do get "/#{@controller}/input_tag", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == send(@conversion_method, '') end it "は 変換されない" do get "/#{@controller}/nbsp_char", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == send(@conversion_method, 'アブラ カダブラ') end end shared_examples_for "文字コードフィルタが動作しているとき" do it "はhtml以外は変換しないこと" do get "/#{@controller}/rawdata", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == "アブラカダブラ" headers['Content-Type'].should_not =~ /charset/i end it "response.bodyが空のときは文字コードを変更しないこと" do get "/#{@controller}/empty", {}, {"HTTP_USER_AGENT" => @user_agent} headers['Content-Type'].should =~ /utf-8/i end end shared_examples_for "Shift_JISで通信する端末との通信" do it "はShift_JISで携帯に送出されること" do get "/#{@controller}/abracadabra_utf8", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == utf8_to_sjis("アブラカダブラ") headers['Content-Type'].should =~ /Shift_JIS/i end it "はxhtmlでもShift_JISで携帯に送出されること" do get "/#{@controller}/abracadabra_xhtml_utf8", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == utf8_to_sjis("アブラカダブラ") headers['Content-Type'].should =~ /Shift_JIS/i end it "はShift_JISで渡されたパラメタがparamsにUTF-8に変換されて格納されること" do get "/#{@controller}", {:q => utf8_to_sjis("アブラカダブラ")}, {"HTTP_USER_AGENT" => @user_agent} assigns(:q).should == utf8("アブラカダブラ") end it "は半角カナのparamsを変換しないこと" do # アブラカダブラ半角,SJIS get "/#{@controller}", {:q => sjis("\261\314\336\327\266\300\336\314\336\327")}, {"HTTP_USER_AGENT" => @user_agent} assigns(:q).should == utf8("アブラカダブラ") end it_should_behave_like "文字コードフィルタが動作しているとき" end shared_examples_for "UTF-8で通信する端末との通信" do it "はUTF-8で携帯に送出されること" do get "/#{@controller}/abracadabra_utf8", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == "アブラカダブラ" headers['Content-Type'].should =~ /utf-8/i end it "はxhtmlでもUTF-8で携帯に送出されること" do get "/#{@controller}/abracadabra_xhtml_utf8", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == "アブラカダブラ" headers['Content-Type'].should =~ /utf-8/i end it "はparamsにUTF-8のまま格納されること" do get "/#{@controller}/index", {:q => "アブラカダブラ"}, {"HTTP_USER_AGENT" => @user_agent} assigns(:q).should == utf8("アブラカダブラ") end it "は半角カナのparamsを変換しないこと" do get "/#{@controller}/index", {:q => "アブラカダブラ"}, {"HTTP_USER_AGENT" => @user_agent} assigns(:q).should == utf8("アブラカダブラ") end it_should_behave_like "文字コードフィルタが動作しているとき" end shared_examples_for "Shift_JISで通信する端末との通信(半角変換付き)" do it "は半角に変換されShift_JISで携帯に送出されること" do get "/#{@controller}/abracadabra_utf8", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == sjis("\261\314\336\327\266\300\336\314\336\327") # アブラカダブラ半角,SJIS headers['Content-Type'].should =~ /Shift_JIS/ end it "はShift_JISで渡されたパラメタがparamsにUTF-8に変換されて格納されること" do get "/#{@controller}/index", {:q => utf8_to_sjis("アブラカダブラ")}, {"HTTP_USER_AGENT" => @user_agent} assigns(:q).should == utf8("アブラカダブラ") end it "は半角Shift_JISで渡されたパラメタがparamsに全角UTF-8に変換されて格納されること" do # アブラカダブラ半角,SJIS get "/#{@controller}/index", {:q => sjis("\261\314\336\327\266\300\336\314\336\327")}, {"HTTP_USER_AGENT" => @user_agent} assigns(:q).should == utf8("アブラカダブラ") end it_should_behave_like "文字コードフィルタが動作しているとき" end shared_examples_for "UTF-8で通信する端末との通信(半角変換付き)" do it "はUTF-8半角で携帯に送出されること" do get "/#{@controller}/abracadabra_utf8", {}, {"HTTP_USER_AGENT" => @user_agent} body.should == "アブラカダブラ" headers['Content-Type'].should =~ /utf-8/i end it "はparamsにUTF-8のまま格納されること" do get "/#{@controller}/index", {:q => "アブラカダブラ"}, {"HTTP_USER_AGENT" => @user_agent} assigns(:q).should == utf8("アブラカダブラ") end it "は半角で渡されたparamsを全角に変換して格納すること" do get "/#{@controller}/index", {:q => "アブラカダブラ"}, {"HTTP_USER_AGENT" => @user_agent} assigns(:q).should == utf8("アブラカダブラ") end it_should_behave_like "文字コードフィルタが動作しているとき" end # # PCからのアクセス # describe FilterController, "PCからのアクセス" do before(:each) do @user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)" @controller = "filter" end it_should_behave_like "UTF-8で通信する端末との通信" end describe HankakuFilterController, "PCからのアクセス" do before(:each) do @user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)" @controller = "hankaku_filter" end it_should_behave_like "UTF-8で通信する端末との通信" end # # 携帯からのアクセス # describe FilterController, "DoCoMo SH902i からのアクセス" do before do @user_agent = "DoCoMo/2.0 SH902i(c100;TB;W24H12)" @controller = "filter" end it_should_behave_like "Shift_JISで通信する端末との通信" end describe FilterController, "au CA32 からのアクセス" do before do @user_agent = "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0" @controller = "filter" end it_should_behave_like "Shift_JISで通信する端末との通信" end describe FilterController, "Vodafone V903T からのアクセス" do before do @user_agent = "Vodafone/1.0/V903T/TJ001 Browser/VF-Browser/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Profile/JSCL-1.2.2 Ext-V-Profile/VSCL-2.0.0" @controller = "filter" end it_should_behave_like "UTF-8で通信する端末との通信" end describe FilterController, "SoftBank 910T からのアクセス" do before do @user_agent = "SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1" @controller = "filter" end it_should_behave_like "UTF-8で通信する端末との通信" end # # 半角フィルタ # describe HankakuFilterController, "DoCoMo SH902i からのアクセス" do before do @user_agent = "DoCoMo/2.0 SH902i(c100;TB;W24H12)" @controller = "hankaku_filter" @conversion_method = :utf8_to_sjis end it_should_behave_like "Shift_JISで通信する端末との通信(半角変換付き)" it_should_behave_like "hankaku_filter :input => false のとき" end describe HankakuFilterController, "SoftBank 910T からのアクセス" do before do @user_agent = "SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1" @controller = "hankaku_filter" @conversion_method = :utf8 end it_should_behave_like "UTF-8で通信する端末との通信(半角変換付き)" it_should_behave_like "hankaku_filter :input => false のとき" end # # 半角フィルタ(input付き) # describe HankakuInputFilterController, "DoCoMo SH902i からのアクセス" do before do @user_agent = "DoCoMo/2.0 SH902i(c100;TB;W24H12)" @controller = "hankaku_input_filter" @conversion_method = :utf8_to_sjis end it_should_behave_like "Shift_JISで通信する端末との通信(半角変換付き)" it_should_behave_like "hankaku_filter :input => true のとき" end describe HankakuInputFilterController, "SoftBank 910T からのアクセス" do before do @user_agent = "SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1" @controller = "hankaku_input_filter" @conversion_method = :utf8 end it_should_behave_like "UTF-8で通信する端末との通信(半角変換付き)" it_should_behave_like "hankaku_filter :input => true のとき" end end