jpmobile 6.1.2 → 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +8 -3
- data/.rubocop.yml +1 -1
- data/.ruby-version +1 -1
- data/Gemfile +2 -0
- data/Gemfile.lock +119 -138
- data/README.md +3 -18
- data/jpmobile.gemspec +3 -4
- data/lib/jpmobile/docomo_guid.rb +2 -2
- data/lib/jpmobile/hook_action_view.rb +3 -3
- data/lib/jpmobile/hook_template_details_requested.rb +12 -0
- data/lib/jpmobile/mailer.rb +1 -1
- data/lib/jpmobile/mobile/android.rb +1 -1
- data/lib/jpmobile/mobile/android_tablet.rb +1 -1
- data/lib/jpmobile/mobile/au.rb +2 -2
- data/lib/jpmobile/mobile/black_berry.rb +1 -1
- data/lib/jpmobile/mobile/ddipocket.rb +1 -1
- data/lib/jpmobile/mobile/docomo.rb +2 -2
- data/lib/jpmobile/mobile/emobile.rb +2 -2
- data/lib/jpmobile/mobile/ipad.rb +1 -1
- data/lib/jpmobile/mobile/iphone.rb +1 -1
- data/lib/jpmobile/mobile/softbank.rb +2 -2
- data/lib/jpmobile/mobile/vodafone.rb +2 -2
- data/lib/jpmobile/mobile/willcom.rb +2 -2
- data/lib/jpmobile/mobile/windows_phone.rb +1 -1
- data/lib/jpmobile/path_set.rb +10 -36
- data/lib/jpmobile/rails.rb +2 -0
- data/lib/jpmobile/resolver.rb +44 -6
- data/lib/jpmobile/template_details.rb +38 -0
- data/lib/jpmobile/trans_sid.rb +1 -1
- data/lib/jpmobile/util.rb +1 -1
- data/lib/jpmobile/version.rb +1 -1
- data/lib/jpmobile/view_selector.rb +5 -6
- data/lib/jpmobile.rb +13 -0
- data/lib/tasks/jpmobile_tasks.rake +2 -1
- data/spec/rack/jpmobile/mobile_by_ua_spec.rb +1 -0
- data/test/rails/overrides/Gemfile.jpmobile +4 -0
- data/test/rails/overrides/app/controllers/mobile_spec_controller.rb +1 -1
- data/test/rails/overrides/app/controllers/template_path_controller.rb +3 -0
- data/test/rails/overrides/app/views/mobile_spec/mobile_not_exist.html.erb +3 -0
- data/test/rails/overrides/config/routes.rb +1 -1
- data/test/rails/overrides/spec/controllers/mobile_spec_controller_spec.rb +3 -3
- data/test/rails/overrides/spec/rails_helper.rb +1 -1
- data/test/rails/overrides/spec/requests/filter_spec.rb +106 -0
- data/test/rails/overrides/spec/requests/template_path_spec.rb +1 -1
- data/test/rails/overrides/spec/{features → system}/admin/top_spec.rb +2 -2
- data/test/rails/overrides/spec/{features → system}/filter_spec.rb +2 -7
- data/test/rails/overrides/spec/system/support/cuprite_setup.rb +14 -0
- data/test/rails/overrides/spec/system_helper.rb +3 -0
- metadata +23 -29
- data/test/rails/overrides/app/views/mobile_spec/no_mobile.html.erb +0 -3
@@ -4,9 +4,9 @@ module Jpmobile::Mobile
|
|
4
4
|
# スーパクラスはSoftbank。
|
5
5
|
class Vodafone < Softbank
|
6
6
|
# 対応するUser-Agentの正規表現
|
7
|
-
USER_AGENT_REGEXP = /^(Vodafone|Vemulator)
|
7
|
+
USER_AGENT_REGEXP = /^(Vodafone|Vemulator)/
|
8
8
|
# 対応するメールアドレスの正規表現
|
9
|
-
MAIL_ADDRESS_REGEXP = /.+@[dhtcrknsq]\.vodafone\.ne\.jp
|
9
|
+
MAIL_ADDRESS_REGEXP = /.+@[dhtcrknsq]\.vodafone\.ne\.jp/
|
10
10
|
|
11
11
|
# cookieに対応しているか?
|
12
12
|
def supports_cookie?
|
@@ -4,9 +4,9 @@ module Jpmobile::Mobile
|
|
4
4
|
# Ddipocketのスーパクラス。
|
5
5
|
class Willcom < AbstractMobile
|
6
6
|
# 対応するUser-Agentの正規表現
|
7
|
-
USER_AGENT_REGEXP = %r{^Mozilla/3.0\(WILLCOM}
|
7
|
+
USER_AGENT_REGEXP = %r{^Mozilla/3.0\(WILLCOM}
|
8
8
|
# 対応するメールアドレスの正規表現
|
9
|
-
MAIL_ADDRESS_REGEXP = /.+@((.+\.)?pdx\.ne\.jp|willcom\.com)
|
9
|
+
MAIL_ADDRESS_REGEXP = /.+@((.+\.)?pdx\.ne\.jp|willcom\.com)/
|
10
10
|
|
11
11
|
# 位置情報があれば Position のインスタンスを返す。無ければ +nil+ を返す。
|
12
12
|
def position
|
data/lib/jpmobile/path_set.rb
CHANGED
@@ -1,41 +1,15 @@
|
|
1
1
|
module Jpmobile
|
2
|
-
class PathSet <
|
3
|
-
|
4
|
-
class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
5
|
-
def #{method}(*args)
|
6
|
-
super
|
7
|
-
typecast!
|
8
|
-
end
|
9
|
-
METHOD
|
10
|
-
end
|
2
|
+
class PathSet < ActionView::PathSet
|
3
|
+
private
|
11
4
|
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
each do |resolver|
|
21
|
-
templates = resolver.find_all(*args)
|
22
|
-
return templates unless templates.empty?
|
23
|
-
end
|
24
|
-
[]
|
25
|
-
end
|
26
|
-
|
27
|
-
def exists?(*args)
|
28
|
-
find_all(*args).any?
|
29
|
-
end
|
30
|
-
|
31
|
-
protected
|
32
|
-
|
33
|
-
def typecast!
|
34
|
-
each_with_index do |path, i|
|
35
|
-
path = path.to_s if path.is_a?(Pathname)
|
36
|
-
next unless path.is_a?(String)
|
37
|
-
|
38
|
-
self[i] = Jpmobile::Resolver.new(path)
|
5
|
+
def typecast(paths)
|
6
|
+
paths.map do |path|
|
7
|
+
case path
|
8
|
+
when Pathname, String
|
9
|
+
Jpmobile::Resolver.new path.to_s
|
10
|
+
else
|
11
|
+
super(paths)
|
12
|
+
end
|
39
13
|
end
|
40
14
|
end
|
41
15
|
end
|
data/lib/jpmobile/rails.rb
CHANGED
@@ -12,8 +12,10 @@ end
|
|
12
12
|
|
13
13
|
ActiveSupport.on_load(:action_view) do
|
14
14
|
require 'jpmobile/hook_action_view'
|
15
|
+
require 'jpmobile/hook_template_details_requested'
|
15
16
|
|
16
17
|
self.prepend Jpmobile::HtmlOptionsWithAcceptCharset
|
18
|
+
ActionView::TemplateDetails::Requested.prepend Jpmobile::HookTemplateDetailsRequested
|
17
19
|
end
|
18
20
|
|
19
21
|
ActiveSupport.on_load(:after_initialize) do
|
data/lib/jpmobile/resolver.rb
CHANGED
@@ -1,14 +1,52 @@
|
|
1
1
|
module Jpmobile
|
2
2
|
class Resolver < ::ActionView::FileSystemResolver
|
3
|
-
EXTENSIONS = [:locale, :formats, :handlers, :mobile].freeze
|
4
|
-
DEFAULT_PATTERN = ':prefix/:action{_:mobile,}{.:locale,}{.:formats,}{+:variants,}{.:handlers,}'.freeze
|
5
|
-
|
6
3
|
def initialize(path)
|
7
|
-
|
4
|
+
super(path)
|
5
|
+
|
6
|
+
@path_parser = Jpmobile::Resolver::PathParser.new
|
7
|
+
end
|
8
8
|
|
9
|
+
def clear_cache
|
9
10
|
super
|
10
|
-
|
11
|
-
@
|
11
|
+
|
12
|
+
@path_parser = Jpmobile::Resolver::PathParser.new
|
13
|
+
end
|
14
|
+
|
15
|
+
class PathParser < ::ActionView::Resolver::PathParser
|
16
|
+
def build_path_regex
|
17
|
+
handlers = ::ActionView::Template::Handlers.extensions.map {|x| Regexp.escape(x) }.join('|')
|
18
|
+
formats = ::ActionView::Template::Types.symbols.map {|x| Regexp.escape(x) }.join('|')
|
19
|
+
locales = '[a-z]{2}(?:-[A-Z]{2})?'
|
20
|
+
variants = '[^.]*'
|
21
|
+
mobile = Jpmobile::Mobile.all_variants.map {|x| Regexp.escape(x) }.join('|')
|
22
|
+
|
23
|
+
%r{
|
24
|
+
\A
|
25
|
+
(?:(?<prefix>.*)/)?
|
26
|
+
(?<partial>_)?
|
27
|
+
(?<action>.*?)
|
28
|
+
(?:_(?<mobile>#{mobile}))??
|
29
|
+
(?:\.(?<locale>#{locales}))??
|
30
|
+
(?:\.(?<format>#{formats}))??
|
31
|
+
(?:\+(?<variant>#{variants}))??
|
32
|
+
(?:\.(?<handler>#{handlers}))?
|
33
|
+
\z
|
34
|
+
}x
|
35
|
+
end
|
36
|
+
|
37
|
+
def parse(path)
|
38
|
+
@regex ||= build_path_regex
|
39
|
+
match = @regex.match(path)
|
40
|
+
path = ActionView::TemplatePath.build(match[:action], match[:prefix] || '', !!match[:partial])
|
41
|
+
details = Jpmobile::TemplateDetails.new(
|
42
|
+
match[:locale]&.to_sym,
|
43
|
+
match[:handler]&.to_sym,
|
44
|
+
match[:format]&.to_sym,
|
45
|
+
match[:variant]&.to_sym,
|
46
|
+
match[:mobile]&.to_sym,
|
47
|
+
)
|
48
|
+
ParsedPath.new(path, details)
|
49
|
+
end
|
12
50
|
end
|
13
51
|
end
|
14
52
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Jpmobile
|
2
|
+
class TemplateDetails < ActionView::TemplateDetails
|
3
|
+
def initialize(locale, handler, format, variant, mobile)
|
4
|
+
@mobile = mobile
|
5
|
+
|
6
|
+
super(locale, handler, format, variant)
|
7
|
+
end
|
8
|
+
|
9
|
+
def matches?(requested)
|
10
|
+
requested.formats_idx[@format] &&
|
11
|
+
requested.locale_idx[@locale] &&
|
12
|
+
requested.variants_idx[@variant] &&
|
13
|
+
requested.handlers_idx[@handler] &&
|
14
|
+
requested.mobile_idx[@mobile]
|
15
|
+
end
|
16
|
+
|
17
|
+
def sort_key_for(requested)
|
18
|
+
[
|
19
|
+
requested.formats_idx[@format],
|
20
|
+
requested.locale_idx[@locale],
|
21
|
+
requested.variants_idx[@variant],
|
22
|
+
requested.handlers_idx[@handler],
|
23
|
+
requested.mobile_idx[@mobile],
|
24
|
+
]
|
25
|
+
end
|
26
|
+
|
27
|
+
class Requested < ActionView::TemplateDetails::Requested
|
28
|
+
attr_reader :mobile, :mobile_idx
|
29
|
+
|
30
|
+
def initialize(locale:, handlers:, formats:, variants:, mobile:)
|
31
|
+
super(locale: locale, handlers: handlers, formats: formats, variants: variants)
|
32
|
+
|
33
|
+
@mobile = mobile.map(&:to_sym)
|
34
|
+
@mobile_idx = build_idx_hash(mobile)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/jpmobile/trans_sid.rb
CHANGED
data/lib/jpmobile/util.rb
CHANGED
data/lib/jpmobile/version.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
module Jpmobile
|
2
2
|
module ViewSelector
|
3
|
-
|
4
|
-
base.class_eval do
|
5
|
-
before_action :register_mobile
|
3
|
+
extend ActiveSupport::Concern
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
included do
|
6
|
+
before_action :register_mobile
|
7
|
+
|
8
|
+
self.view_paths = Jpmobile::PathSet.new(self.view_paths.paths.map(&:path))
|
10
9
|
end
|
11
10
|
|
12
11
|
def register_mobile
|
data/lib/jpmobile.rb
CHANGED
@@ -48,9 +48,19 @@ module Jpmobile
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def self.carriers=(ary)
|
51
|
+
@all_variants = nil
|
52
|
+
|
51
53
|
@carriers = ary
|
52
54
|
end
|
53
55
|
|
56
|
+
def self.all_variants
|
57
|
+
return @all_variants if @all_variants
|
58
|
+
|
59
|
+
@all_variants = carriers.map {|carrier|
|
60
|
+
Jpmobile::Mobile.const_get(carrier).new({}, {}).variants
|
61
|
+
}.flatten.uniq
|
62
|
+
end
|
63
|
+
|
54
64
|
require 'jpmobile/mobile/abstract_mobile'
|
55
65
|
end
|
56
66
|
|
@@ -63,6 +73,9 @@ module Jpmobile
|
|
63
73
|
autoload :Mailer, 'jpmobile/mailer'
|
64
74
|
autoload :Resolver, 'jpmobile/resolver'
|
65
75
|
|
76
|
+
autoload :PathSet, 'jpmobile/path_set'
|
77
|
+
autoload :TemplateDetails, 'jpmobile/template_details'
|
78
|
+
|
66
79
|
autoload :ViewSelector, 'jpmobile/view_selector'
|
67
80
|
autoload :FallbackViewSelector, 'jpmobile/fallback_view_selector'
|
68
81
|
|
@@ -112,12 +112,13 @@ namespace :test do
|
|
112
112
|
|
113
113
|
system 'bundle install'
|
114
114
|
system 'bin/rails db:migrate RAILS_ENV=test' unless skip
|
115
|
-
system 'bin/rails spec'
|
115
|
+
system 'bin/rails spec', exception: true
|
116
116
|
|
117
117
|
ENV.replace(original_env)
|
118
118
|
end
|
119
119
|
end
|
120
120
|
end
|
121
|
+
|
121
122
|
desc 'Run sinatra on jpmobile tests'
|
122
123
|
Rake::TestTask.new(:sinatra) do |t|
|
123
124
|
t.libs << 'lib'
|
@@ -17,6 +17,7 @@ describe Jpmobile::MobileCarrier do
|
|
17
17
|
[Jpmobile::Mobile::Emobile, 'emobile/1.0.0 (H11T; like Gecko; Wireless) NetFront/3.4'],
|
18
18
|
[Jpmobile::Mobile::Iphone, 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; ja-jp) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16'],
|
19
19
|
[Jpmobile::Mobile::Android, 'Mozilla/5.0 (Linux; U; Android 1.6; ja-jp; SonyEriccsonSO-01B Build/R1EA018) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1'],
|
20
|
+
[Jpmobile::Mobile::Android, 'Mozilla/5.0 (Linux; Android 9; ANE-LX2J Build/HUAWEIANE-LX2J; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.93 Mobile Safari/537.36 Instagram 172.0.0.21.123 Android (28/9; 480dpi; 1080x2060; HUAWEI; ANE-LX2J; HWANE; hi6250; ja_JP; 269790805)'],
|
20
21
|
[Jpmobile::Mobile::WindowsPhone, 'Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1 T-01A_6.5; Windows Phone 6.5)'],
|
21
22
|
[Jpmobile::Mobile::BlackBerry, 'BlackBerry9000/4.6.0.224 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/220'],
|
22
23
|
[Jpmobile::Mobile::Ipad, 'Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F191 Safari/6533.18.5'],
|
@@ -52,7 +52,7 @@ describe MobileSpecController, type: :controller do
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
describe "GET '
|
55
|
+
describe "GET 'mobile_not_exist'" do
|
56
56
|
around do |example|
|
57
57
|
orig_value = Jpmobile.config.fallback_view_selector
|
58
58
|
Jpmobile.config.fallback_view_selector = true
|
@@ -65,7 +65,7 @@ describe MobileSpecController, type: :controller do
|
|
65
65
|
context 'PC access' do
|
66
66
|
it 'should be successful' do
|
67
67
|
request.user_agent = 'Mozilla'
|
68
|
-
get '
|
68
|
+
get 'mobile_not_exist'
|
69
69
|
|
70
70
|
expect(response).to be_successful
|
71
71
|
expect(response.body).not_to match('RailsRoot PC mobile')
|
@@ -75,7 +75,7 @@ describe MobileSpecController, type: :controller do
|
|
75
75
|
context 'mobile access' do
|
76
76
|
it 'should be successful' do
|
77
77
|
request.user_agent = 'DoCoMo/2.0 SH902i(c100;TB;W24H12)'
|
78
|
-
get '
|
78
|
+
get 'mobile_not_exist'
|
79
79
|
|
80
80
|
expect(response).to be_successful
|
81
81
|
expect(response.body).not_to match('RailsRoot mobile')
|
@@ -48,7 +48,7 @@ RSpec.configure do |config|
|
|
48
48
|
# # ...
|
49
49
|
# end
|
50
50
|
#
|
51
|
-
# The different available types are documented in the
|
51
|
+
# The different available types are documented in the system, such as in
|
52
52
|
# https://relishapp.com/rspec/rspec-rails/docs
|
53
53
|
config.infer_spec_type_from_file_location!
|
54
54
|
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'system_helper'
|
2
|
+
|
3
|
+
describe 'jpmobile integration spec', type: :request do
|
4
|
+
include Jpmobile::Util
|
5
|
+
|
6
|
+
before do
|
7
|
+
page.driver.headers = { 'User-Agent' => user_agent }
|
8
|
+
end
|
9
|
+
|
10
|
+
shared_examples_for '文字コードフィルタが動作しているとき' do
|
11
|
+
it 'はhtml以外は変換しないこと' do
|
12
|
+
get "/#{controller}/rawdata", env: { 'HTTP_USER_AGENT' => user_agent }
|
13
|
+
expect(response.body.encode('UTF-8')).to eq('アブラカダブラ')
|
14
|
+
expect(response.headers['Content-Type']).not_to match(/charset/i)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# PCからのアクセス
|
20
|
+
#
|
21
|
+
describe FilterController do
|
22
|
+
let(:controller) { 'filter' }
|
23
|
+
|
24
|
+
describe 'PCからのアクセス' do
|
25
|
+
let(:user_agent) do
|
26
|
+
'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)'
|
27
|
+
end
|
28
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'DoCoMo SH902i からのアクセス' do
|
32
|
+
let(:user_agent) do
|
33
|
+
'DoCoMo/2.0 SH902i(c100;TB;W24H12)'
|
34
|
+
end
|
35
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'au CA32 からのアクセス' do
|
39
|
+
let(:user_agent) do
|
40
|
+
'KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0'
|
41
|
+
end
|
42
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
43
|
+
end
|
44
|
+
|
45
|
+
describe 'Vodafone V903T からのアクセス' do
|
46
|
+
let(:user_agent) do
|
47
|
+
'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'
|
48
|
+
end
|
49
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'SoftBank 910T からのアクセス' do
|
53
|
+
let(:user_agent) do
|
54
|
+
'SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1'
|
55
|
+
end
|
56
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe HankakuFilterController do
|
61
|
+
let(:controller) { 'hankaku_filter' }
|
62
|
+
|
63
|
+
describe 'PCからのアクセス' do
|
64
|
+
let(:user_agent) do
|
65
|
+
'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)'
|
66
|
+
end
|
67
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
68
|
+
end
|
69
|
+
|
70
|
+
describe 'DoCoMo SH902i からのアクセス' do
|
71
|
+
let(:user_agent) do
|
72
|
+
'DoCoMo/2.0 SH902i(c100;TB;W24H12)'
|
73
|
+
end
|
74
|
+
|
75
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
76
|
+
end
|
77
|
+
|
78
|
+
describe 'SoftBank 910T からのアクセス' do
|
79
|
+
let(:user_agent) do
|
80
|
+
'SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1'
|
81
|
+
end
|
82
|
+
|
83
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe HankakuInputFilterController do
|
88
|
+
let(:controller) { 'hankaku_input_filter' }
|
89
|
+
|
90
|
+
describe 'DoCoMo SH902i からのアクセス' do
|
91
|
+
let(:user_agent) do
|
92
|
+
'DoCoMo/2.0 SH902i(c100;TB;W24H12)'
|
93
|
+
end
|
94
|
+
|
95
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
96
|
+
end
|
97
|
+
|
98
|
+
describe 'SoftBank 910T からのアクセス' do
|
99
|
+
let(:user_agent) do
|
100
|
+
'SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1'
|
101
|
+
end
|
102
|
+
|
103
|
+
it_should_behave_like '文字コードフィルタが動作しているとき'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'system_helper'
|
2
2
|
|
3
3
|
describe Admin::TopController, type: :feature do
|
4
4
|
describe "GET 'full_path'" do
|
5
5
|
before do
|
6
|
-
page.driver.
|
6
|
+
page.driver.headers = { 'User-Agent' => user_agent }
|
7
7
|
end
|
8
8
|
|
9
9
|
context 'PCからのアクセスの場合' do
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'system_helper'
|
2
2
|
|
3
3
|
describe 'jpmobile integration spec', type: :feature do
|
4
4
|
include Jpmobile::Util
|
5
5
|
|
6
6
|
before do
|
7
|
-
page.driver.
|
7
|
+
page.driver.headers = { 'User-Agent' => user_agent }
|
8
8
|
end
|
9
9
|
|
10
10
|
shared_examples_for 'hankaku_filter input: true のとき' do
|
@@ -38,11 +38,6 @@ describe 'jpmobile integration spec', type: :feature do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
shared_examples_for '文字コードフィルタが動作しているとき' do
|
41
|
-
it 'はhtml以外は変換しないこと' do
|
42
|
-
visit "/#{controller}/rawdata"
|
43
|
-
expect(page.body.encode('UTF-8')).to have_content('アブラカダブラ')
|
44
|
-
expect(page.response_headers['Content-Type']).not_to match(/charset/i)
|
45
|
-
end
|
46
41
|
it 'response.bodyが空のときは文字コードを変更しないこと' do
|
47
42
|
visit "/#{controller}/empty"
|
48
43
|
expect(page.response_headers['Content-Type']).to match(/utf-8/i)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'capybara/cuprite'
|
2
|
+
|
3
|
+
Capybara.register_driver(:cuprite) do |app|
|
4
|
+
Capybara::Cuprite::Driver.new(
|
5
|
+
app,
|
6
|
+
**{
|
7
|
+
window_size: [1200, 800],
|
8
|
+
browser_options: {},
|
9
|
+
inspector: true,
|
10
|
+
},
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
Capybara.default_driver = Capybara.javascript_driver = :cuprite
|