wovnrb 1.1.0 → 2.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 +1 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +308 -0
- data/Rakefile +13 -14
- data/lib/wovnrb.rb +43 -98
- data/lib/wovnrb/api_translator.rb +143 -0
- data/lib/wovnrb/headers.rb +78 -92
- data/lib/wovnrb/helpers/nokogumbo_helper.rb +1 -1
- data/lib/wovnrb/lang.rb +93 -125
- data/lib/wovnrb/railtie.rb +5 -7
- data/lib/wovnrb/services/glob.rb +3 -3
- data/lib/wovnrb/services/html_converter.rb +192 -0
- data/lib/wovnrb/services/html_replace_marker.rb +38 -0
- data/lib/wovnrb/services/wovn_logger.rb +8 -4
- data/lib/wovnrb/settings.rb +5 -3
- data/lib/wovnrb/store.rb +35 -26
- data/lib/wovnrb/text_caches/cache_base.rb +3 -2
- data/lib/wovnrb/text_caches/memory_cache.rb +2 -2
- data/lib/wovnrb/version.rb +1 -1
- data/test/fixtures/html/test.html +8 -0
- data/test/fixtures/html/test_translated.html +8 -0
- data/test/lib/api_translator_test.rb +109 -0
- data/test/lib/headers_test.rb +84 -55
- data/test/lib/lang_test.rb +157 -357
- data/test/lib/services/glob_test.rb +1 -1
- data/test/lib/services/html_converter_test.rb +166 -0
- data/test/lib/services/html_replace_marker_test.rb +75 -0
- data/test/lib/services/wovn_logger_test.rb +6 -6
- data/test/lib/store_test.rb +25 -69
- data/test/lib/text_caches/cache_base_test.rb +1 -1
- data/test/lib/text_caches/memory_cache_test.rb +10 -11
- data/test/lib/wovnrb_test.rb +77 -310
- data/test/test_helper.rb +22 -32
- data/wovnrb.gemspec +35 -44
- metadata +86 -205
- data/ext/dom/Makefile +0 -239
- data/lib/wovnrb/api_data.rb +0 -59
- data/lib/wovnrb/html_replacers/image_replacer.rb +0 -69
- data/lib/wovnrb/html_replacers/input_replacer.rb +0 -38
- data/lib/wovnrb/html_replacers/link_replacer.rb +0 -78
- data/lib/wovnrb/html_replacers/meta_replacer.rb +0 -28
- data/lib/wovnrb/html_replacers/replacer_base.rb +0 -49
- data/lib/wovnrb/html_replacers/script_replacer.rb +0 -39
- data/lib/wovnrb/html_replacers/text_replacer.rb +0 -21
- data/lib/wovnrb/html_replacers/unified_values/dst_swapping_targets_creator.rb +0 -76
- data/lib/wovnrb/html_replacers/unified_values/element_category.rb +0 -242
- data/lib/wovnrb/html_replacers/unified_values/node_swapping_targets_creator.rb +0 -134
- data/lib/wovnrb/html_replacers/unified_values/text_replacer.rb +0 -35
- data/lib/wovnrb/html_replacers/unified_values/text_scraper.rb +0 -152
- data/lib/wovnrb/html_replacers/unified_values/values_stack.rb +0 -65
- data/lib/wovnrb/services/url.rb +0 -12
- data/lib/wovnrb/services/value_agent.rb +0 -9
- data/test/fixtures/unified_values/site_html/simple_actual.html +0 -96
- data/test/fixtures/unified_values/site_html/simple_expected.json +0 -251
- data/test/fixtures/unified_values/site_html/wovn.io_actual.html +0 -686
- data/test/fixtures/unified_values/site_html/wovn.io_expected.json +0 -543
- data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_actual.html +0 -1024
- data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_expected.json +0 -3345
- data/test/fixtures/unified_values/small_html/block_inside_inline_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/block_inside_inline_expected.json +0 -22
- data/test/fixtures/unified_values/small_html/br_tag_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/br_tag_expected.json +0 -12
- data/test/fixtures/unified_values/small_html/comment_tag_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/comment_tag_expected.json +0 -10
- data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_actual.html +0 -7
- data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_expected.json +0 -11
- data/test/fixtures/unified_values/small_html/deep_nested_block_actual.html +0 -14
- data/test/fixtures/unified_values/small_html/deep_nested_block_expected.json +0 -8
- data/test/fixtures/unified_values/small_html/deep_nested_inline_actual.html +0 -20
- data/test/fixtures/unified_values/small_html/deep_nested_inline_expected.json +0 -20
- data/test/fixtures/unified_values/small_html/empty_tag_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/empty_tag_expected.json +0 -12
- data/test/fixtures/unified_values/small_html/empty_text_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/empty_text_expected.json +0 -1
- data/test/fixtures/unified_values/small_html/ignore_tag_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/ignore_tag_expected.json +0 -16
- data/test/fixtures/unified_values/small_html/ignored_class_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/ignored_class_expected.json +0 -13
- data/test/fixtures/unified_values/small_html/img_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/img_expected.json +0 -23
- data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_expected.json +0 -16
- data/test/fixtures/unified_values/small_html/nested_text_value_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/nested_text_value_expected.json +0 -12
- data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_expected.json +0 -14
- data/test/fixtures/unified_values/small_html/option_tag_actual.html +0 -9
- data/test/fixtures/unified_values/small_html/option_tag_expected.json +0 -13
- data/test/fixtures/unified_values/small_html/text_different_inline_each_other_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/text_different_inline_each_other_expected.json +0 -22
- data/test/fixtures/unified_values/small_html/text_in_svg_actual.html +0 -9
- data/test/fixtures/unified_values/small_html/text_in_svg_expected.json +0 -8
- data/test/fixtures/unified_values/small_html/text_with_html_entity_actual.html +0 -6
- data/test/fixtures/unified_values/small_html/text_with_html_entity_expected.json +0 -8
- data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_expected.json +0 -24
- data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_actual.html +0 -12
- data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_expected.json +0 -14
- data/test/fixtures/unified_values/small_html/wovn_ignore_actual.html +0 -10
- data/test/fixtures/unified_values/small_html/wovn_ignore_expected.json +0 -13
- data/test/lib/api_data_test.rb +0 -83
- data/test/lib/html_replacers/image_replacer_test.rb +0 -165
- data/test/lib/html_replacers/input_replacer_test.rb +0 -140
- data/test/lib/html_replacers/link_replacer_test.rb +0 -328
- data/test/lib/html_replacers/meta_replacer_test.rb +0 -157
- data/test/lib/html_replacers/replacer_base_test.rb +0 -128
- data/test/lib/html_replacers/script_replacer_test.rb +0 -139
- data/test/lib/html_replacers/text_replacer_test.rb +0 -99
- data/test/lib/html_replacers/unified_values/dst_swapping_targets_creator_test.rb +0 -137
- data/test/lib/html_replacers/unified_values/element_category_test.rb +0 -49
- data/test/lib/html_replacers/unified_values/node_swapping_targets_creator_test.rb +0 -137
- data/test/lib/html_replacers/unified_values/text_replacer_test.rb +0 -270
- data/test/lib/html_replacers/unified_values/text_scraper_test.rb +0 -121
- data/test/lib/html_replacers/unified_values/values_stack_test.rb +0 -122
- data/test/lib/services/url_test.rb +0 -9
- data/test/lib/services/value_agent_test.rb +0 -32
- data/test/services/url_test.rb +0 -163
- data/values/values +0 -1
@@ -1,22 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"xpath": "/html/body/div/text()",
|
4
|
-
"srcs": [
|
5
|
-
"<span>",
|
6
|
-
"<a>",
|
7
|
-
"text value1",
|
8
|
-
"</a>",
|
9
|
-
"</span>"
|
10
|
-
]
|
11
|
-
},
|
12
|
-
{
|
13
|
-
"xpath": "/html/body/div/text()[2]",
|
14
|
-
"srcs": [
|
15
|
-
"<strong>",
|
16
|
-
"<em>",
|
17
|
-
"text value1",
|
18
|
-
"</em>",
|
19
|
-
"</strong>"
|
20
|
-
]
|
21
|
-
}
|
22
|
-
]
|
@@ -1,24 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"xpath": "/html/body/div/text()",
|
4
|
-
"srcs": [
|
5
|
-
"<span>",
|
6
|
-
"<a>",
|
7
|
-
"text value1",
|
8
|
-
"</a>"
|
9
|
-
]
|
10
|
-
},
|
11
|
-
{
|
12
|
-
"xpath": "/html/body/div/span/unknown/text()",
|
13
|
-
"srcs": [
|
14
|
-
"text value2"
|
15
|
-
]
|
16
|
-
},
|
17
|
-
{
|
18
|
-
"xpath": "/html/body/div/text()[2]",
|
19
|
-
"srcs": [
|
20
|
-
"text value3",
|
21
|
-
"</span>"
|
22
|
-
]
|
23
|
-
}
|
24
|
-
]
|
data/test/lib/api_data_test.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'wovnrb/text_caches/cache_base'
|
3
|
-
require 'wovnrb/text_caches/memory_cache'
|
4
|
-
require 'wovnrb/api_data'
|
5
|
-
require 'webmock/minitest'
|
6
|
-
|
7
|
-
module Wovnrb
|
8
|
-
class MemoryCacheTest < WovnMiniTest
|
9
|
-
def setup
|
10
|
-
Wovnrb::CacheBase.set_single({})
|
11
|
-
end
|
12
|
-
|
13
|
-
def teardown
|
14
|
-
Wovnrb::CacheBase.reset_cache
|
15
|
-
WebMock.reset!
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_initialize
|
19
|
-
Wovnrb::ApiData.new('http://wwww.example.com', Wovnrb::Store.instance)
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_get_data
|
23
|
-
token = 'a'
|
24
|
-
url = 'url'
|
25
|
-
stub_request(:get, "https://api.wovn.io/v0/values?token=#{token}&url=#{url}").
|
26
|
-
to_return(:body => '{"test_body": "a"}')
|
27
|
-
store = Wovnrb::Store.instance
|
28
|
-
store.update_settings('project_token' => token)
|
29
|
-
api_data = Wovnrb::ApiData.new(url, store)
|
30
|
-
|
31
|
-
assert_equal({'test_body' => 'a'}, api_data.get_data)
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_get_data_when_cache_exists
|
35
|
-
token = 'a'
|
36
|
-
url = 'url'
|
37
|
-
stub = stub_request(:get, "https://api.wovn.io/v0/values?token=#{token}&url=#{url}").
|
38
|
-
to_return(:body => '{"test_body": "a"}')
|
39
|
-
store = Wovnrb::Store.instance
|
40
|
-
store.update_settings('project_token' => token)
|
41
|
-
api_data = Wovnrb::ApiData.new(url, store)
|
42
|
-
|
43
|
-
assert_equal({'test_body' => 'a'}, api_data.get_data)
|
44
|
-
assert_equal({'test_body' => 'a'}, api_data.get_data)
|
45
|
-
assert_requested(stub, :times => 1)
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_get_data_cache_with_different_project_tokens
|
49
|
-
token = 'a'
|
50
|
-
url = 'url'
|
51
|
-
stub_a = stub_request(:get, "https://api.wovn.io/v0/values?token=#{token}&url=#{url}").
|
52
|
-
to_return(:body => '{"test_body": "a"}')
|
53
|
-
store = Wovnrb::Store.instance
|
54
|
-
api_data = Wovnrb::ApiData.new(url, store)
|
55
|
-
|
56
|
-
store.update_settings('project_token' => token)
|
57
|
-
assert_equal({'test_body' => 'a'}, api_data.get_data)
|
58
|
-
|
59
|
-
token = 'b'
|
60
|
-
stub_b = stub_request(:get, "https://api.wovn.io/v0/values?token=#{token}&url=#{url}").
|
61
|
-
to_return(:body => '{"test_body": "a"}')
|
62
|
-
store.update_settings('project_token' => token)
|
63
|
-
assert_equal({'test_body' => 'a'}, api_data.get_data)
|
64
|
-
|
65
|
-
assert_requested(stub_a, :times => 1)
|
66
|
-
assert_requested(stub_b, :times => 1)
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_get_data_fail
|
70
|
-
token = 'a'
|
71
|
-
url = 'url'
|
72
|
-
stub_request(:get, "https://api.wovn.io/v0/values?token=#{token}&url=#{url}").
|
73
|
-
to_return(:status => [500, "Internal Server Error"])
|
74
|
-
store = Wovnrb::Store.instance
|
75
|
-
store.update_settings('project_token' => token)
|
76
|
-
api_data = Wovnrb::ApiData.new(url, store)
|
77
|
-
log_mock = Wovnrb::LogMock.mock_log
|
78
|
-
|
79
|
-
assert_equal({}, api_data.get_data)
|
80
|
-
assert(log_mock.errors[0].start_with?('API server GET request failed'))
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,165 +0,0 @@
|
|
1
|
-
# -*- encoding: UTF-8 -*-
|
2
|
-
require 'test_helper'
|
3
|
-
require 'webmock/minitest'
|
4
|
-
|
5
|
-
module Wovnrb
|
6
|
-
class ImageReplacerTest < WovnMiniTest
|
7
|
-
def test_replace
|
8
|
-
store = Store.instance
|
9
|
-
url = {
|
10
|
-
:protocol => 'http',
|
11
|
-
:host => 'www.example.com',
|
12
|
-
:pathname => 'hello/index.html'
|
13
|
-
}
|
14
|
-
text_index = {
|
15
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
16
|
-
}
|
17
|
-
src_index = {
|
18
|
-
'http://www.example.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
19
|
-
}
|
20
|
-
img_src_prefix = 'prefix::'
|
21
|
-
replacer = ImageReplacer.new(store, url, text_index, src_index, img_src_prefix, [])
|
22
|
-
|
23
|
-
dom = Wovnrb.get_dom('<img src="http://www.example.com/test.img" alt="Hello"')
|
24
|
-
replacer.replace(dom, Lang.new('ja'))
|
25
|
-
|
26
|
-
img = dom.xpath('//img')[0]
|
27
|
-
assert_equal('prefix::http://test.com/ttt.img', img.get_attribute('src'))
|
28
|
-
assert_equal('こんにちは', img.get_attribute('alt'))
|
29
|
-
assert_equal('wovn-src:Hello', img.previous.content)
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_replace_in_fragment
|
33
|
-
store = Store.instance
|
34
|
-
url = {
|
35
|
-
:protocol => 'http',
|
36
|
-
:host => 'www.example.com',
|
37
|
-
:pathname => 'hello/index.html'
|
38
|
-
}
|
39
|
-
text_index = {
|
40
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
41
|
-
}
|
42
|
-
src_index = {
|
43
|
-
'http://www.example.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
44
|
-
}
|
45
|
-
img_src_prefix = 'prefix::'
|
46
|
-
replacer = ImageReplacer.new(store, url, text_index, src_index, img_src_prefix, [])
|
47
|
-
|
48
|
-
dom = Helpers::NokogumboHelper::parse_fragment('<img src="http://www.example.com/test.img" alt="Hello">')
|
49
|
-
replacer.replace(dom, Lang.new('ja'))
|
50
|
-
|
51
|
-
img = dom.xpath('.//img')[0]
|
52
|
-
assert_equal('prefix::http://test.com/ttt.img', img.get_attribute('src'))
|
53
|
-
assert_equal('こんにちは', img.get_attribute('alt'))
|
54
|
-
assert_equal('wovn-src:Hello', img.previous.content)
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_replace_relative_path
|
58
|
-
store = Store.instance
|
59
|
-
url = {
|
60
|
-
:protocol => 'http',
|
61
|
-
:host => 'www.example.com',
|
62
|
-
:path => '/hello/'
|
63
|
-
}
|
64
|
-
text_index = {}
|
65
|
-
src_index = {
|
66
|
-
'http://www.example.com/hello/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
67
|
-
}
|
68
|
-
replacer = ImageReplacer.new(store, url, text_index, src_index, '', [])
|
69
|
-
|
70
|
-
dom = Wovnrb.get_dom('<img src="test.img"')
|
71
|
-
replacer.replace(dom, Lang.new('ja'))
|
72
|
-
|
73
|
-
img = dom.xpath('//img')[0]
|
74
|
-
assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
|
75
|
-
assert_nil(img.previous)
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_replace_root_path
|
79
|
-
store = Store.instance
|
80
|
-
url = {
|
81
|
-
:protocol => 'http',
|
82
|
-
:host => 'www.example.com',
|
83
|
-
:path => '/hello/'
|
84
|
-
}
|
85
|
-
text_index = {}
|
86
|
-
src_index = {
|
87
|
-
'http://www.example.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
88
|
-
}
|
89
|
-
replacer = ImageReplacer.new(store, url, text_index, src_index, '', [])
|
90
|
-
|
91
|
-
dom = Wovnrb.get_dom('<img src="/test.img"')
|
92
|
-
replacer.replace(dom, Lang.new('ja'))
|
93
|
-
|
94
|
-
img = dom.xpath('//img')[0]
|
95
|
-
assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
|
96
|
-
assert_nil(img.previous)
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_replace_absolute_path
|
100
|
-
img = img_test_helper('/hello/')
|
101
|
-
assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
|
102
|
-
assert_nil(img.previous)
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_replace_empty_path
|
106
|
-
img = img_test_helper('')
|
107
|
-
assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
|
108
|
-
assert_nil(img.previous)
|
109
|
-
end
|
110
|
-
|
111
|
-
private
|
112
|
-
def img_test_helper path
|
113
|
-
store = Store.instance
|
114
|
-
url = {
|
115
|
-
protocol: 'http',
|
116
|
-
host: 'www.example.com',
|
117
|
-
path: path,
|
118
|
-
}
|
119
|
-
text_index = {}
|
120
|
-
src_index = {
|
121
|
-
'http://www.test.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
122
|
-
}
|
123
|
-
replacer = ImageReplacer.new(store, url, text_index, src_index, '', [])
|
124
|
-
dom = Wovnrb.get_dom('<img src="http://www.test.com/test.img"')
|
125
|
-
replacer.replace(dom, Lang.new('ja'))
|
126
|
-
dom.xpath('//img')[0]
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_replace_host_alias
|
130
|
-
store = Store.instance
|
131
|
-
url = {
|
132
|
-
:protocol => 'http',
|
133
|
-
:host => 'www.example.com',
|
134
|
-
:path => '/hello/'
|
135
|
-
}
|
136
|
-
src_index = {
|
137
|
-
'http://www.test.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
138
|
-
}
|
139
|
-
path = '/test.img'
|
140
|
-
|
141
|
-
# no replace image if not exist host alias
|
142
|
-
img = img_dom_helper(store, url, src_index, path, [])
|
143
|
-
assert_equal('/test.img', img.get_attribute('src'))
|
144
|
-
img = img_dom_helper(store, url, src_index, path, ['www.test.com'])
|
145
|
-
assert_equal('/test.img', img.get_attribute('src'))
|
146
|
-
img = img_dom_helper(store, url, src_index, path, ['www.example.com'])
|
147
|
-
assert_equal('/test.img', img.get_attribute('src'))
|
148
|
-
img = img_dom_helper(store, url, src_index, path, ['www.test.com', 'www.wrong.com'])
|
149
|
-
assert_equal('/test.img', img.get_attribute('src'))
|
150
|
-
|
151
|
-
# replace image if exist host alias
|
152
|
-
img = img_dom_helper(store, url, src_index, path, ['www.test.com', 'www.example.com'])
|
153
|
-
assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
|
154
|
-
end
|
155
|
-
|
156
|
-
private
|
157
|
-
def img_dom_helper(store, url, src_index, path, host_aliases)
|
158
|
-
text_index = {}
|
159
|
-
replacer = ImageReplacer.new(store, url, text_index, src_index, '', host_aliases)
|
160
|
-
dom = Wovnrb.get_dom('<img src="' + path + '"')
|
161
|
-
replacer.replace(dom, Lang.new('ja'))
|
162
|
-
dom.xpath('//img')[0]
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
@@ -1,140 +0,0 @@
|
|
1
|
-
# -*- encoding: UTF-8 -*-
|
2
|
-
require 'test_helper'
|
3
|
-
require 'webmock/minitest'
|
4
|
-
|
5
|
-
module Wovnrb
|
6
|
-
class InputReplacerTest < WovnMiniTest
|
7
|
-
def test_replace_submit_value
|
8
|
-
store = Store.instance
|
9
|
-
replacer = InputReplacer.new(store, {
|
10
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
11
|
-
})
|
12
|
-
|
13
|
-
dom = Wovnrb.get_dom('<input type="submit" value="Hello">')
|
14
|
-
replacer.replace(dom, Lang.new('ja'))
|
15
|
-
|
16
|
-
content = dom.xpath('//input')[0].get_attribute('value')
|
17
|
-
assert_equal('こんにちは', content)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_replace_in_fragment
|
21
|
-
store = Store.instance
|
22
|
-
replacer = InputReplacer.new(store, {
|
23
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
24
|
-
})
|
25
|
-
|
26
|
-
dom = Helpers::NokogumboHelper::parse_fragment('<input type="submit" value="Hello">')
|
27
|
-
replacer.replace(dom, Lang.new('ja'))
|
28
|
-
|
29
|
-
content = dom.xpath('.//input')[0].get_attribute('value')
|
30
|
-
assert_equal('こんにちは', content)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_dont_replace_empty_submit_value
|
34
|
-
store = Store.instance
|
35
|
-
replacer = InputReplacer.new(store, {
|
36
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
37
|
-
})
|
38
|
-
|
39
|
-
dom = Wovnrb.get_dom('<input type="submit" value="">')
|
40
|
-
replacer.replace(dom, Lang.new('ja'))
|
41
|
-
|
42
|
-
content = dom.xpath('//input')[0].get_attribute('value')
|
43
|
-
assert_equal('', content)
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_dont_replace_type_text_value
|
47
|
-
store = Store.instance
|
48
|
-
replacer = InputReplacer.new(store, {
|
49
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
50
|
-
})
|
51
|
-
|
52
|
-
dom = Wovnrb.get_dom('<input type="text" value="Hello">')
|
53
|
-
replacer.replace(dom, Lang.new('ja'))
|
54
|
-
|
55
|
-
content = dom.xpath('//input')[0].get_attribute('value')
|
56
|
-
assert_equal('Hello', content)
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_dont_replace_type_search_value
|
60
|
-
store = Store.instance
|
61
|
-
replacer = InputReplacer.new(store, {
|
62
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
63
|
-
})
|
64
|
-
|
65
|
-
dom = Wovnrb.get_dom('<input type="search" value="Hello">')
|
66
|
-
replacer.replace(dom, Lang.new('ja'))
|
67
|
-
|
68
|
-
content = dom.xpath('//input')[0].get_attribute('value')
|
69
|
-
assert_equal('Hello', content)
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_dont_replace_type_hidden_value
|
73
|
-
store = Store.instance
|
74
|
-
replacer = InputReplacer.new(store, {
|
75
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
76
|
-
})
|
77
|
-
|
78
|
-
dom = Wovnrb.get_dom('<input type="hidden" value="Hello">')
|
79
|
-
replacer.replace(dom, Lang.new('ja'))
|
80
|
-
|
81
|
-
content = dom.xpath('//input')[0].get_attribute('value')
|
82
|
-
assert_equal('Hello', content)
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_dont_replace_type_password_value
|
86
|
-
store = Store.instance
|
87
|
-
replacer = InputReplacer.new(store, {
|
88
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
89
|
-
})
|
90
|
-
|
91
|
-
dom = Wovnrb.get_dom('<input type="password" value="Hello">')
|
92
|
-
replacer.replace(dom, Lang.new('ja'))
|
93
|
-
|
94
|
-
content = dom.xpath('//input')[0].get_attribute('value')
|
95
|
-
assert_equal('Hello', content)
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_replace_type_password_placeholder
|
99
|
-
store = Store.instance
|
100
|
-
replacer = InputReplacer.new(store, {
|
101
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
|
102
|
-
'Hi' => {'ja' => [{'data' => 'やぁ'}]},
|
103
|
-
})
|
104
|
-
|
105
|
-
dom = Wovnrb.get_dom('<input type="password" value="Hello" placeholder="Hi">')
|
106
|
-
replacer.replace(dom, Lang.new('ja'))
|
107
|
-
|
108
|
-
value_content = dom.xpath('//input')[0].get_attribute('value')
|
109
|
-
placeholder_content = dom.xpath('//input')[0].get_attribute('placeholder')
|
110
|
-
assert_equal('Hello', value_content)
|
111
|
-
assert_equal('やぁ', placeholder_content)
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_dont_replace_type_url_value
|
115
|
-
store = Store.instance
|
116
|
-
replacer = InputReplacer.new(store, {
|
117
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
118
|
-
})
|
119
|
-
|
120
|
-
dom = Wovnrb.get_dom('<input type="url" value="Hello">')
|
121
|
-
replacer.replace(dom, Lang.new('ja'))
|
122
|
-
|
123
|
-
content = dom.xpath('//input')[0].get_attribute('value')
|
124
|
-
assert_equal('Hello', content)
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_dont_replace_no_type_value
|
128
|
-
store = Store.instance
|
129
|
-
replacer = InputReplacer.new(store, {
|
130
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
131
|
-
})
|
132
|
-
|
133
|
-
dom = Wovnrb.get_dom('<input value="Hello">')
|
134
|
-
replacer.replace(dom, Lang.new('ja'))
|
135
|
-
|
136
|
-
content = dom.xpath('//input')[0].get_attribute('value')
|
137
|
-
assert_equal('Hello', content)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|