118 lines
5.0 KiB
Ruby
118 lines
5.0 KiB
Ruby
|
# Copyright (c) 2005-2006 David Barri
|
||
|
|
||
|
$LOAD_PATH.push File.join(File.dirname(__FILE__),'..','lib')
|
||
|
require "#{File.dirname(__FILE__)}/../../../../test/test_helper"
|
||
|
require "#{File.dirname(__FILE__)}/../init"
|
||
|
|
||
|
class GLocRailsTestController < ActionController::Base
|
||
|
autodetect_language_filter :only => :auto, :on_set_lang => :called_when_set, :on_no_lang => :called_when_bad
|
||
|
autodetect_language_filter :only => :auto2, :check_accept_header => false, :check_params => 'xx'
|
||
|
autodetect_language_filter :only => :auto3, :check_cookie => false
|
||
|
autodetect_language_filter :only => :auto4, :check_cookie => 'qwe', :check_params => false
|
||
|
def rescue_action(e) raise e end
|
||
|
def auto; render :text => 'auto'; end
|
||
|
def auto2; render :text => 'auto'; end
|
||
|
def auto3; render :text => 'auto'; end
|
||
|
def auto4; render :text => 'auto'; end
|
||
|
attr_accessor :callback_set, :callback_bad
|
||
|
def called_when_set(l) @callback_set ||= 0; @callback_set += 1 end
|
||
|
def called_when_bad; @callback_bad ||= 0; @callback_bad += 1 end
|
||
|
end
|
||
|
|
||
|
class GLocRailsTest < Test::Unit::TestCase
|
||
|
|
||
|
def setup
|
||
|
@lstrings = GLoc::LOCALIZED_STRINGS.clone
|
||
|
@old_config= GLoc::CONFIG.clone
|
||
|
begin_new_request
|
||
|
end
|
||
|
|
||
|
def teardown
|
||
|
GLoc.clear_strings
|
||
|
GLoc::LOCALIZED_STRINGS.merge! @lstrings
|
||
|
GLoc::CONFIG.merge! @old_config
|
||
|
end
|
||
|
|
||
|
def begin_new_request
|
||
|
@controller = GLocRailsTestController.new
|
||
|
@request = ActionController::TestRequest.new
|
||
|
@response = ActionController::TestResponse.new
|
||
|
end
|
||
|
|
||
|
def test_autodetect_language
|
||
|
GLoc::CONFIG[:default_language]= :def
|
||
|
GLoc::CONFIG[:default_param_name] = 'plang'
|
||
|
GLoc::CONFIG[:default_cookie_name] = 'clang'
|
||
|
GLoc.clear_strings
|
||
|
GLoc.add_localized_strings :en, :a => 'a'
|
||
|
GLoc.add_localized_strings :en_au, :a => 'a'
|
||
|
GLoc.add_localized_strings :en_US, :a => 'a'
|
||
|
GLoc.add_localized_strings :Ja, :a => 'a'
|
||
|
GLoc.add_localized_strings :ZH_HK, :a => 'a'
|
||
|
|
||
|
# default
|
||
|
subtest_autodetect_language :def, nil, nil, nil
|
||
|
subtest_autodetect_language :def, 'its', 'all', 'bullshit,man;q=zxc'
|
||
|
# simple
|
||
|
subtest_autodetect_language :en_au, 'en_au', nil, nil
|
||
|
subtest_autodetect_language :en_US, nil, 'en_us', nil
|
||
|
subtest_autodetect_language :Ja, nil, nil, 'ja'
|
||
|
# priority
|
||
|
subtest_autodetect_language :Ja, 'ja', 'en_us', 'qwe_ja,zh,monkey_en;q=0.5'
|
||
|
subtest_autodetect_language :en_US, 'why', 'en_us', 'qwe_ja,zh,monkey_en;q=0.5'
|
||
|
subtest_autodetect_language :Ja, nil, nil, 'qwe_en,JA,zh,monkey_en;q=0.5'
|
||
|
# dashes to underscores in accept string
|
||
|
subtest_autodetect_language :en_au, 'monkey', nil, 'de,EN-Au'
|
||
|
# remove dialect
|
||
|
subtest_autodetect_language :en, nil, 'en-bullshit', nil
|
||
|
subtest_autodetect_language :en, 'monkey', nil, 'de,EN-NZ,ja'
|
||
|
# different dialect
|
||
|
subtest_autodetect_language :ZH_HK, 'zh', nil, 'de,EN-NZ,ja'
|
||
|
subtest_autodetect_language :ZH_HK, 'monkey', 'zh', 'de,EN-NZ,ja'
|
||
|
|
||
|
# Check param/cookie names use defaults
|
||
|
GLoc::CONFIG[:default_param_name] = 'p_lang'
|
||
|
GLoc::CONFIG[:default_cookie_name] = 'c_lang'
|
||
|
# :check_params
|
||
|
subtest_autodetect_language :def, 'en_au', nil, nil
|
||
|
subtest_autodetect_language :en_au, {:p_lang => 'en_au'}, nil, nil
|
||
|
# :check_cookie
|
||
|
subtest_autodetect_language :def, nil, 'en_us', nil
|
||
|
subtest_autodetect_language :en_US, nil, {:c_lang => 'en_us'}, nil
|
||
|
GLoc::CONFIG[:default_param_name] = 'plang'
|
||
|
GLoc::CONFIG[:default_cookie_name] = 'clang'
|
||
|
|
||
|
# autodetect_language_filter :only => :auto2, :check_accept_header => false, :check_params => 'xx'
|
||
|
subtest_autodetect_language :def, 'ja', nil, 'en_US', :auto2
|
||
|
subtest_autodetect_language :Ja, {:xx => 'ja'}, nil, 'en_US', :auto2
|
||
|
subtest_autodetect_language :en_au, 'ja', 'en_au', 'en_US', :auto2
|
||
|
|
||
|
# autodetect_language_filter :only => :auto3, :check_cookie => false
|
||
|
subtest_autodetect_language :Ja, 'ja', 'en_us', 'qwe_ja,zh,monkey_en;q=0.5', :auto3
|
||
|
subtest_autodetect_language :ZH_HK, 'hehe', 'en_us', 'qwe_ja,zh,monkey_en;q=0.5', :auto3
|
||
|
|
||
|
# autodetect_language_filter :only => :auto4, :check_cookie => 'qwe', :check_params => false
|
||
|
subtest_autodetect_language :def, 'ja', 'en_us', nil, :auto4
|
||
|
subtest_autodetect_language :ZH_HK, 'ja', 'en_us', 'qwe_ja,zh,monkey_en;q=0.5', :auto4
|
||
|
subtest_autodetect_language :en_US, 'ja', {:qwe => 'en_us'}, 'ja', :auto4
|
||
|
end
|
||
|
|
||
|
def subtest_autodetect_language(expected,params,cookie,accept, action=:auto)
|
||
|
begin_new_request
|
||
|
params= {'plang' => params} if params.is_a?(String)
|
||
|
params ||= {}
|
||
|
if cookie
|
||
|
cookie={'clang' => cookie} unless cookie.is_a?(Hash)
|
||
|
cookie.each_pair {|k,v| @request.cookies[k.to_s]= CGI::Cookie.new(k.to_s,v)}
|
||
|
end
|
||
|
@request.env['HTTP_ACCEPT_LANGUAGE']= accept
|
||
|
get action, params
|
||
|
assert_equal expected, @controller.current_language
|
||
|
if action == :auto
|
||
|
s,b = expected != :def ? [1,nil] : [nil,1]
|
||
|
assert_equal s, @controller.callback_set
|
||
|
assert_equal b, @controller.callback_bad
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|