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,128 +0,0 @@
|
|
1
|
-
# -*- encoding: UTF-8 -*-
|
2
|
-
require 'test_helper'
|
3
|
-
require 'webmock/minitest'
|
4
|
-
|
5
|
-
module Wovnrb
|
6
|
-
class ReplacerBaseTest < WovnMiniTest
|
7
|
-
def test_wovn_ignore
|
8
|
-
store = Store.instance
|
9
|
-
replacer = ReplacerBase.new(store)
|
10
|
-
dom = Wovnrb.to_dom('<html><body><div wovn-ignore></div></body></html>')
|
11
|
-
actual = replacer.send(:wovn_ignore?, dom.xpath('//div')[0])
|
12
|
-
|
13
|
-
assert(actual)
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_wovn_ignore_parent
|
17
|
-
store = Store.instance
|
18
|
-
replacer = ReplacerBase.new(store)
|
19
|
-
dom = Wovnrb.to_dom('<html wovn-ignore><body><div wovn-ignore></div></body></html>')
|
20
|
-
actual = replacer.send(:wovn_ignore?, dom.xpath('//div')[0])
|
21
|
-
|
22
|
-
assert(actual)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_wovn_ignore_without_attribute
|
26
|
-
store = Store.instance
|
27
|
-
replacer = ReplacerBase.new(store)
|
28
|
-
dom = Wovnrb.to_dom('<html><body><div></div></body></html>')
|
29
|
-
actual = replacer.send(:wovn_ignore?, dom.xpath('//div')[0])
|
30
|
-
|
31
|
-
assert_equal(false, actual)
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_wovn_ignore_class
|
35
|
-
store = Store.instance
|
36
|
-
store.update_settings({'ignore_class' => ['base_ignore']})
|
37
|
-
replacer = ReplacerBase.new(store)
|
38
|
-
dom = Wovnrb.to_dom('<html><body><div class="base_ignore"></div></body></html>')
|
39
|
-
actual = replacer.send(:wovn_ignore?, dom.xpath('//div')[0])
|
40
|
-
|
41
|
-
assert(actual)
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_wovn_ignore_multiple_classes
|
45
|
-
store = Store.instance
|
46
|
-
store.update_settings({'ignore_class' => ['base_ignore', 'base_ignore2']})
|
47
|
-
replacer = ReplacerBase.new(store)
|
48
|
-
html = <<HTML
|
49
|
-
<html>
|
50
|
-
<body>
|
51
|
-
<div class="base_ignore"></div>
|
52
|
-
<span class="base_ignore2"></span>
|
53
|
-
<p class="base_ignore_liar"></p>
|
54
|
-
</body>
|
55
|
-
</html>
|
56
|
-
HTML
|
57
|
-
dom = Wovnrb.to_dom(html)
|
58
|
-
assert(replacer.send(:wovn_ignore?, dom.xpath('//div')[0]))
|
59
|
-
assert(replacer.send(:wovn_ignore?, dom.xpath('//span')[0]))
|
60
|
-
assert_equal(false, replacer.send(:wovn_ignore?, dom.xpath('//p')[0]))
|
61
|
-
|
62
|
-
def test_wovn_ignore_fragment
|
63
|
-
store = Store.instance
|
64
|
-
replacer = ReplacerBase.new(store)
|
65
|
-
dom = Helpers::NokogumboHelper.parse_fragment('<div wovn-ignore></div>')
|
66
|
-
actual = replacer.send(:wovn_ignore?, dom.xpath('.//div')[0])
|
67
|
-
|
68
|
-
assert(actual)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_wovn_ignore_fragment_parent
|
73
|
-
store = Store.instance
|
74
|
-
replacer = ReplacerBase.new(store)
|
75
|
-
dom = Helpers::NokogumboHelper.parse_fragment('<div wovn-ignore><span></span></div>')
|
76
|
-
actual = replacer.send(:wovn_ignore?, dom.xpath('.//span')[0])
|
77
|
-
|
78
|
-
assert(actual)
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_wovn_ignore_fragment_no_wovn_ignore
|
82
|
-
store = Store.instance
|
83
|
-
replacer = ReplacerBase.new(store)
|
84
|
-
dom = Helpers::NokogumboHelper.parse_fragment('<div><span></span></div>')
|
85
|
-
actual = replacer.send(:wovn_ignore?, dom.xpath('.//span')[0])
|
86
|
-
|
87
|
-
assert(!actual)
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_replace_text
|
91
|
-
store = Store.instance
|
92
|
-
replacer = ReplacerBase.new(store)
|
93
|
-
actual = replacer.send(:replace_text, 'Hello', 'こんにちは')
|
94
|
-
assert_equal('こんにちは', actual)
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_replace_text_with_space
|
98
|
-
store = Store.instance
|
99
|
-
replacer = ReplacerBase.new(store)
|
100
|
-
actual = replacer.send(:replace_text, ' Hello ', 'こんにちは')
|
101
|
-
assert_equal(' こんにちは ', actual)
|
102
|
-
end
|
103
|
-
|
104
|
-
def test_replace_text_with_line_break
|
105
|
-
store = Store.instance
|
106
|
-
replacer = ReplacerBase.new(store)
|
107
|
-
actual = replacer.send(:replace_text, " Hello \n Hello ", 'こんにちは')
|
108
|
-
assert_equal(' こんにちは ', actual)
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_add_comment_node
|
112
|
-
store = Store.instance
|
113
|
-
replacer = ReplacerBase.new(store)
|
114
|
-
html = Nokogiri::HTML5('<html><body><h1 id="test-node">Test Content</h1></body></html>')
|
115
|
-
h1 = html.xpath("//h1[@id='test-node']")[0]
|
116
|
-
|
117
|
-
assert_equal('Test Content', h1.inner_html)
|
118
|
-
h1.xpath('//text()').each do |node|
|
119
|
-
text_content = node.content
|
120
|
-
if text_content == 'Test Content'
|
121
|
-
replacer.send(:add_comment_node, node, 'test content')
|
122
|
-
end
|
123
|
-
end
|
124
|
-
assert_equal("<!--wovn-src:test content-->Test Content", h1.inner_html)
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
@@ -1,139 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'webmock/minitest'
|
3
|
-
|
4
|
-
module Wovnrb
|
5
|
-
class ScriptReplacerTest < WovnMiniTest
|
6
|
-
def test_replace
|
7
|
-
store = Store.instance
|
8
|
-
store.update_settings({
|
9
|
-
'user_token' => 'test_token',
|
10
|
-
'default_lang' => 'en',
|
11
|
-
'url_pattern' => 'domain'
|
12
|
-
})
|
13
|
-
|
14
|
-
replacer = ScriptReplacer.new(store)
|
15
|
-
dom = to_head_dom('<script src="test/test.js"></script>')
|
16
|
-
replacer.replace(dom, Lang.new('ja'))
|
17
|
-
|
18
|
-
scripts = dom.xpath('//script')
|
19
|
-
assert_equal(2, scripts.length)
|
20
|
-
|
21
|
-
wovn_script = scripts[0]
|
22
|
-
other_script = scripts[1]
|
23
|
-
|
24
|
-
check_wovn_script(wovn_script, 'test_token', 'ja', 'en', 'domain')
|
25
|
-
assert_equal('test/test.js', other_script.get_attribute('src'))
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_replace_with_wovn_dev_mode_on
|
29
|
-
store = Store.instance
|
30
|
-
store.update_settings({
|
31
|
-
'user_token' => 'test_token',
|
32
|
-
'default_lang' => 'en',
|
33
|
-
'url_pattern' => 'domain',
|
34
|
-
'wovn_dev_mode' => true
|
35
|
-
})
|
36
|
-
|
37
|
-
replacer = ScriptReplacer.new(store)
|
38
|
-
dom = to_head_dom('<script src="test/test.js"></script>')
|
39
|
-
replacer.replace(dom, Lang.new('ja'))
|
40
|
-
|
41
|
-
scripts = dom.xpath('//script')
|
42
|
-
assert_equal(2, scripts.length)
|
43
|
-
|
44
|
-
wovn_script = scripts[0]
|
45
|
-
other_script = scripts[1]
|
46
|
-
|
47
|
-
assert_equal('//j.dev-wovn.io:3000/1', wovn_script.get_attribute('src'))
|
48
|
-
assert_equal('test/test.js', other_script.get_attribute('src'))
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_with_embed_wovn
|
52
|
-
store = Store.instance
|
53
|
-
store.update_settings({
|
54
|
-
'user_token' => 'test_token',
|
55
|
-
'default_lang' => 'en',
|
56
|
-
'url_pattern' => 'domain'
|
57
|
-
})
|
58
|
-
|
59
|
-
replacer = ScriptReplacer.new(store)
|
60
|
-
dom = to_head_dom('<script src="//j.wovn.io/aaaa" data-wovnio="key=test_token" async></script>')
|
61
|
-
replacer.replace(dom, Lang.new('ja'))
|
62
|
-
|
63
|
-
scripts = dom.xpath('//script')
|
64
|
-
assert_equal(1, scripts.length)
|
65
|
-
|
66
|
-
check_wovn_script(scripts[0], 'test_token', 'ja', 'en', 'domain')
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_with_multiple_embed_wovn
|
70
|
-
store = Store.instance
|
71
|
-
store.update_settings({
|
72
|
-
'user_token' => 'test_token',
|
73
|
-
'default_lang' => 'en',
|
74
|
-
'url_pattern' => 'domain'
|
75
|
-
})
|
76
|
-
|
77
|
-
replacer = ScriptReplacer.new(store)
|
78
|
-
dom = to_head_dom('<script src="//j.wovn.io/aaaa" data-wovnio="key=test_token" async></script><script src="//j.wovn.io/bbb" data-wovnio="key=test_token" async></script>')
|
79
|
-
replacer.replace(dom, Lang.new('ja'))
|
80
|
-
|
81
|
-
scripts = dom.xpath('//script')
|
82
|
-
assert_equal(1, scripts.length)
|
83
|
-
|
84
|
-
check_wovn_script(scripts[0], 'test_token', 'ja', 'en', 'domain')
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_with_embed_wovn_at_body
|
88
|
-
store = Store.instance
|
89
|
-
store.update_settings({
|
90
|
-
'user_token' => 'test_token',
|
91
|
-
'default_lang' => 'en',
|
92
|
-
'url_pattern' => 'domain'
|
93
|
-
})
|
94
|
-
|
95
|
-
replacer = ScriptReplacer.new(store)
|
96
|
-
dom = Wovnrb.get_dom('<script src="//j.wovn.io/aaaa" data-wovnio="key=test_token" async></script>')
|
97
|
-
replacer.replace(dom, Lang.new('ja'))
|
98
|
-
|
99
|
-
scripts = dom.xpath('//script')
|
100
|
-
assert_equal(1, scripts.length)
|
101
|
-
|
102
|
-
check_wovn_script(scripts[0], 'test_token', 'ja', 'en', 'domain')
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_contains_lang_code_aliases
|
106
|
-
store = Store.instance
|
107
|
-
store.update_settings({
|
108
|
-
'user_token' => 'test_token',
|
109
|
-
'default_lang' => 'en',
|
110
|
-
'url_pattern' => 'domain',
|
111
|
-
'custom_lang_aliases' => {'ja' => 'staging-ja'}
|
112
|
-
})
|
113
|
-
|
114
|
-
replacer = ScriptReplacer.new(store)
|
115
|
-
dom = to_head_dom('')
|
116
|
-
replacer.replace(dom, Lang.new('ja'))
|
117
|
-
|
118
|
-
scripts = dom.xpath('//script')
|
119
|
-
assert_equal(1, scripts.length)
|
120
|
-
check_wovn_script(scripts[0], 'test_token', 'ja', 'en', 'domain', '{"ja":"staging-ja"}')
|
121
|
-
end
|
122
|
-
|
123
|
-
def check_wovn_script(node, project_token, current_lang, default_lang, url_pattern, custom_lang_aliases = {})
|
124
|
-
wovn_data = [
|
125
|
-
['src', '//j.wovn.io/1'],
|
126
|
-
['async', 'true'],
|
127
|
-
['data-wovnio', "key=#{project_token}&backend=true¤tLang=#{current_lang}&defaultLang=#{default_lang}&urlPattern=#{url_pattern}&langCodeAliases=#{custom_lang_aliases}&version=#{Wovnrb::VERSION}"]
|
128
|
-
]
|
129
|
-
wovn_data.each do |data|
|
130
|
-
assert_equal(data[1], node.get_attribute(data[0]))
|
131
|
-
end
|
132
|
-
assert_equal(wovn_data.length, node.attributes.length)
|
133
|
-
end
|
134
|
-
|
135
|
-
def to_head_dom(html)
|
136
|
-
Wovnrb.to_dom("<html><head>#{html}</head></html>")
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
# -*- encoding: UTF-8 -*-
|
2
|
-
require 'test_helper'
|
3
|
-
require 'webmock/minitest'
|
4
|
-
|
5
|
-
module Wovnrb
|
6
|
-
class TextReplacerTest < WovnMiniTest
|
7
|
-
def test_replace
|
8
|
-
store = Store.instance
|
9
|
-
replacer = TextReplacer.new(store,{
|
10
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
11
|
-
})
|
12
|
-
|
13
|
-
dom = Wovnrb.get_dom('Hello')
|
14
|
-
replacer.replace(dom, Lang.new('ja'))
|
15
|
-
|
16
|
-
node = dom.xpath('//text()')[0]
|
17
|
-
assert_equal('こんにちは', node.content)
|
18
|
-
assert_equal('wovn-src:Hello', node.previous.content)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_replace_in_fragment
|
22
|
-
store = Store.instance
|
23
|
-
replacer = TextReplacer.new(store,{
|
24
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
25
|
-
})
|
26
|
-
|
27
|
-
dom = Helpers::NokogumboHelper::parse_fragment('<span>Hello</span>')
|
28
|
-
replacer.replace(dom, Lang.new('ja'))
|
29
|
-
|
30
|
-
node = dom.xpath('.//text()')[0]
|
31
|
-
assert_equal('こんにちは', node.content)
|
32
|
-
assert_equal('wovn-src:Hello', node.previous.content)
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_replace_multiple
|
36
|
-
store = Store.instance
|
37
|
-
replacer = TextReplacer.new(store, {
|
38
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
|
39
|
-
'Bye' => {'ja' => [{'data' => 'さようなら'}]}
|
40
|
-
})
|
41
|
-
|
42
|
-
dom = Wovnrb.get_dom('<span>Hello</span><span>Bye</span>')
|
43
|
-
replacer.replace(dom, Lang.new('ja'))
|
44
|
-
|
45
|
-
node = dom.xpath('//text()')[0]
|
46
|
-
node2 = dom.xpath('//text()')[1]
|
47
|
-
assert_equal('こんにちは', node.content)
|
48
|
-
assert_equal('wovn-src:Hello', node.previous.content)
|
49
|
-
assert_equal('さようなら', node2.content)
|
50
|
-
assert_equal('wovn-src:Bye', node2.previous.content)
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_replace_multiple_in_fragment
|
54
|
-
store = Store.instance
|
55
|
-
replacer = TextReplacer.new(store, {
|
56
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
|
57
|
-
'Bye' => {'ja' => [{'data' => 'さようなら'}]}
|
58
|
-
})
|
59
|
-
|
60
|
-
dom = Helpers::NokogumboHelper::parse_fragment('<span>Hello</span><span>Bye</span>')
|
61
|
-
replacer.replace(dom, Lang.new('ja'))
|
62
|
-
|
63
|
-
node = dom.xpath('.//text()')[0]
|
64
|
-
node2 = dom.xpath('.//text()')[1]
|
65
|
-
assert_equal('こんにちは', node.content)
|
66
|
-
assert_equal('wovn-src:Hello', node.previous.content)
|
67
|
-
assert_equal('さようなら', node2.content)
|
68
|
-
assert_equal('wovn-src:Bye', node2.previous.content)
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_replace_wovn_ignore
|
72
|
-
store = Store.instance
|
73
|
-
replacer = TextReplacer.new(store, {
|
74
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
75
|
-
})
|
76
|
-
|
77
|
-
dom = Wovnrb.get_dom('<div wovn-ignore>Hello</div>')
|
78
|
-
replacer.replace(dom, Lang.new('ja'))
|
79
|
-
|
80
|
-
node = dom.xpath('//text()')[0]
|
81
|
-
assert_equal('Hello', node.content)
|
82
|
-
assert_nil(node.previous)
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_replace_wovn_ignore_on_fragment
|
86
|
-
store = Store.instance
|
87
|
-
replacer = TextReplacer.new(store, {
|
88
|
-
'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
|
89
|
-
})
|
90
|
-
|
91
|
-
dom = Helpers::NokogumboHelper::parse_fragment('<div wovn-ignore>Hello</div>')
|
92
|
-
replacer.replace(dom, Lang.new('ja'))
|
93
|
-
|
94
|
-
node = dom.xpath('.//text()')[0]
|
95
|
-
assert_equal('Hello', node.content)
|
96
|
-
assert_nil(node.previous)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
@@ -1,137 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module Wovnrb
|
4
|
-
module UnifiedValues
|
5
|
-
class DstSwappingTargetsCreatorTest < WovnMiniTest
|
6
|
-
def test_run
|
7
|
-
text_index = {
|
8
|
-
'' => {
|
9
|
-
'en' => [
|
10
|
-
{ 'data' => 'a<a>b</a>c' }
|
11
|
-
]
|
12
|
-
}
|
13
|
-
}
|
14
|
-
|
15
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
16
|
-
assert_equal(%w[a b c], text_index['']['en'][0]['swapping_targets'])
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_run_with_data_with_spaces
|
20
|
-
text_index = {
|
21
|
-
'' => {
|
22
|
-
'en' => [
|
23
|
-
{ 'data' => ' a <a> b </a> c ' }
|
24
|
-
]
|
25
|
-
}
|
26
|
-
}
|
27
|
-
|
28
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
29
|
-
assert_equal([' a ', ' b ', ' c '], text_index['']['en'][0]['swapping_targets'])
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_run_with_data_stated_by_tag
|
33
|
-
text_index = {
|
34
|
-
'' => {
|
35
|
-
'en' => [
|
36
|
-
{ 'data' => '<a>b</a>c' }
|
37
|
-
]
|
38
|
-
}
|
39
|
-
}
|
40
|
-
|
41
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
42
|
-
assert_equal(['', 'b', 'c'], text_index['']['en'][0]['swapping_targets'])
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_run_with_data_ended_by_tag
|
46
|
-
text_index = {
|
47
|
-
'' => {
|
48
|
-
'en' => [
|
49
|
-
{ 'data' => 'a<a>b</a>' }
|
50
|
-
]
|
51
|
-
}
|
52
|
-
}
|
53
|
-
|
54
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
55
|
-
assert_equal(['a', 'b', ''], text_index['']['en'][0]['swapping_targets'])
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_run_with_data_with_no_content_inside_tag
|
59
|
-
text_index = {
|
60
|
-
'' => {
|
61
|
-
'en' => [
|
62
|
-
{ 'data' => 'a<a></a>c' }
|
63
|
-
]
|
64
|
-
}
|
65
|
-
}
|
66
|
-
|
67
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
68
|
-
assert_equal(['a', '', 'c'], text_index['']['en'][0]['swapping_targets'])
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_run_with_data_with_tag_only
|
72
|
-
text_index = {
|
73
|
-
'' => {
|
74
|
-
'en' => [
|
75
|
-
{ 'data' => '<a></a>' }
|
76
|
-
]
|
77
|
-
}
|
78
|
-
}
|
79
|
-
|
80
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
81
|
-
assert_equal(['', '', ''], text_index['']['en'][0]['swapping_targets'])
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_run_with_data_without_tag
|
85
|
-
text_index = {
|
86
|
-
'' => {
|
87
|
-
'en' => [
|
88
|
-
{ 'data' => 'a' }
|
89
|
-
]
|
90
|
-
}
|
91
|
-
}
|
92
|
-
|
93
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
94
|
-
assert_equal(['a'], text_index['']['en'][0]['swapping_targets'])
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_run_with_data_with_wovn_ignore
|
98
|
-
text_index = {
|
99
|
-
'' => {
|
100
|
-
'en' => [
|
101
|
-
{ 'data' => 'a<a wovn-ignore>b</a>c' }
|
102
|
-
]
|
103
|
-
}
|
104
|
-
}
|
105
|
-
|
106
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
107
|
-
assert_equal(%w[a c], text_index['']['en'][0]['swapping_targets'])
|
108
|
-
end
|
109
|
-
|
110
|
-
def test_run_with_data_with_closing_tag
|
111
|
-
text_index = {
|
112
|
-
'' => {
|
113
|
-
'en' => [
|
114
|
-
{ 'data' => 'a<br>bc' }
|
115
|
-
]
|
116
|
-
}
|
117
|
-
}
|
118
|
-
|
119
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
120
|
-
assert_equal(%w[a bc], text_index['']['en'][0]['swapping_targets'])
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_run_with_data_with_both_closing_tag_and_no_closing_tag
|
124
|
-
text_index = {
|
125
|
-
'' => {
|
126
|
-
'en' => [
|
127
|
-
{ 'data' => 'a<a>b<br>c</a>d' }
|
128
|
-
]
|
129
|
-
}
|
130
|
-
}
|
131
|
-
|
132
|
-
DstSwappingTargetsCreator.new(text_index).run!
|
133
|
-
assert_equal(%w[a b c d], text_index['']['en'][0]['swapping_targets'])
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|