wovnrb 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -0
  3. data/.gitignore +2 -0
  4. data/.rubocop.yml +1 -0
  5. data/.rubocop_todo.yml +308 -0
  6. data/Rakefile +13 -14
  7. data/lib/wovnrb.rb +43 -98
  8. data/lib/wovnrb/api_translator.rb +143 -0
  9. data/lib/wovnrb/headers.rb +78 -92
  10. data/lib/wovnrb/helpers/nokogumbo_helper.rb +1 -1
  11. data/lib/wovnrb/lang.rb +93 -125
  12. data/lib/wovnrb/railtie.rb +5 -7
  13. data/lib/wovnrb/services/glob.rb +3 -3
  14. data/lib/wovnrb/services/html_converter.rb +192 -0
  15. data/lib/wovnrb/services/html_replace_marker.rb +38 -0
  16. data/lib/wovnrb/services/wovn_logger.rb +8 -4
  17. data/lib/wovnrb/settings.rb +5 -3
  18. data/lib/wovnrb/store.rb +35 -26
  19. data/lib/wovnrb/text_caches/cache_base.rb +3 -2
  20. data/lib/wovnrb/text_caches/memory_cache.rb +2 -2
  21. data/lib/wovnrb/version.rb +1 -1
  22. data/test/fixtures/html/test.html +8 -0
  23. data/test/fixtures/html/test_translated.html +8 -0
  24. data/test/lib/api_translator_test.rb +109 -0
  25. data/test/lib/headers_test.rb +84 -55
  26. data/test/lib/lang_test.rb +157 -357
  27. data/test/lib/services/glob_test.rb +1 -1
  28. data/test/lib/services/html_converter_test.rb +166 -0
  29. data/test/lib/services/html_replace_marker_test.rb +75 -0
  30. data/test/lib/services/wovn_logger_test.rb +6 -6
  31. data/test/lib/store_test.rb +25 -69
  32. data/test/lib/text_caches/cache_base_test.rb +1 -1
  33. data/test/lib/text_caches/memory_cache_test.rb +10 -11
  34. data/test/lib/wovnrb_test.rb +77 -310
  35. data/test/test_helper.rb +22 -32
  36. data/wovnrb.gemspec +35 -44
  37. metadata +86 -205
  38. data/ext/dom/Makefile +0 -239
  39. data/lib/wovnrb/api_data.rb +0 -59
  40. data/lib/wovnrb/html_replacers/image_replacer.rb +0 -69
  41. data/lib/wovnrb/html_replacers/input_replacer.rb +0 -38
  42. data/lib/wovnrb/html_replacers/link_replacer.rb +0 -78
  43. data/lib/wovnrb/html_replacers/meta_replacer.rb +0 -28
  44. data/lib/wovnrb/html_replacers/replacer_base.rb +0 -49
  45. data/lib/wovnrb/html_replacers/script_replacer.rb +0 -39
  46. data/lib/wovnrb/html_replacers/text_replacer.rb +0 -21
  47. data/lib/wovnrb/html_replacers/unified_values/dst_swapping_targets_creator.rb +0 -76
  48. data/lib/wovnrb/html_replacers/unified_values/element_category.rb +0 -242
  49. data/lib/wovnrb/html_replacers/unified_values/node_swapping_targets_creator.rb +0 -134
  50. data/lib/wovnrb/html_replacers/unified_values/text_replacer.rb +0 -35
  51. data/lib/wovnrb/html_replacers/unified_values/text_scraper.rb +0 -152
  52. data/lib/wovnrb/html_replacers/unified_values/values_stack.rb +0 -65
  53. data/lib/wovnrb/services/url.rb +0 -12
  54. data/lib/wovnrb/services/value_agent.rb +0 -9
  55. data/test/fixtures/unified_values/site_html/simple_actual.html +0 -96
  56. data/test/fixtures/unified_values/site_html/simple_expected.json +0 -251
  57. data/test/fixtures/unified_values/site_html/wovn.io_actual.html +0 -686
  58. data/test/fixtures/unified_values/site_html/wovn.io_expected.json +0 -543
  59. data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_actual.html +0 -1024
  60. data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_expected.json +0 -3345
  61. data/test/fixtures/unified_values/small_html/block_inside_inline_actual.html +0 -12
  62. data/test/fixtures/unified_values/small_html/block_inside_inline_expected.json +0 -22
  63. data/test/fixtures/unified_values/small_html/br_tag_actual.html +0 -10
  64. data/test/fixtures/unified_values/small_html/br_tag_expected.json +0 -12
  65. data/test/fixtures/unified_values/small_html/comment_tag_actual.html +0 -12
  66. data/test/fixtures/unified_values/small_html/comment_tag_expected.json +0 -10
  67. data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_actual.html +0 -7
  68. data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_expected.json +0 -11
  69. data/test/fixtures/unified_values/small_html/deep_nested_block_actual.html +0 -14
  70. data/test/fixtures/unified_values/small_html/deep_nested_block_expected.json +0 -8
  71. data/test/fixtures/unified_values/small_html/deep_nested_inline_actual.html +0 -20
  72. data/test/fixtures/unified_values/small_html/deep_nested_inline_expected.json +0 -20
  73. data/test/fixtures/unified_values/small_html/empty_tag_actual.html +0 -10
  74. data/test/fixtures/unified_values/small_html/empty_tag_expected.json +0 -12
  75. data/test/fixtures/unified_values/small_html/empty_text_actual.html +0 -12
  76. data/test/fixtures/unified_values/small_html/empty_text_expected.json +0 -1
  77. data/test/fixtures/unified_values/small_html/ignore_tag_actual.html +0 -12
  78. data/test/fixtures/unified_values/small_html/ignore_tag_expected.json +0 -16
  79. data/test/fixtures/unified_values/small_html/ignored_class_actual.html +0 -10
  80. data/test/fixtures/unified_values/small_html/ignored_class_expected.json +0 -13
  81. data/test/fixtures/unified_values/small_html/img_actual.html +0 -12
  82. data/test/fixtures/unified_values/small_html/img_expected.json +0 -23
  83. data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_actual.html +0 -10
  84. data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_expected.json +0 -16
  85. data/test/fixtures/unified_values/small_html/nested_text_value_actual.html +0 -10
  86. data/test/fixtures/unified_values/small_html/nested_text_value_expected.json +0 -12
  87. data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_actual.html +0 -10
  88. data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_expected.json +0 -14
  89. data/test/fixtures/unified_values/small_html/option_tag_actual.html +0 -9
  90. data/test/fixtures/unified_values/small_html/option_tag_expected.json +0 -13
  91. data/test/fixtures/unified_values/small_html/text_different_inline_each_other_actual.html +0 -10
  92. data/test/fixtures/unified_values/small_html/text_different_inline_each_other_expected.json +0 -22
  93. data/test/fixtures/unified_values/small_html/text_in_svg_actual.html +0 -9
  94. data/test/fixtures/unified_values/small_html/text_in_svg_expected.json +0 -8
  95. data/test/fixtures/unified_values/small_html/text_with_html_entity_actual.html +0 -6
  96. data/test/fixtures/unified_values/small_html/text_with_html_entity_expected.json +0 -8
  97. data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_actual.html +0 -12
  98. data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_expected.json +0 -24
  99. data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_actual.html +0 -12
  100. data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_expected.json +0 -14
  101. data/test/fixtures/unified_values/small_html/wovn_ignore_actual.html +0 -10
  102. data/test/fixtures/unified_values/small_html/wovn_ignore_expected.json +0 -13
  103. data/test/lib/api_data_test.rb +0 -83
  104. data/test/lib/html_replacers/image_replacer_test.rb +0 -165
  105. data/test/lib/html_replacers/input_replacer_test.rb +0 -140
  106. data/test/lib/html_replacers/link_replacer_test.rb +0 -328
  107. data/test/lib/html_replacers/meta_replacer_test.rb +0 -157
  108. data/test/lib/html_replacers/replacer_base_test.rb +0 -128
  109. data/test/lib/html_replacers/script_replacer_test.rb +0 -139
  110. data/test/lib/html_replacers/text_replacer_test.rb +0 -99
  111. data/test/lib/html_replacers/unified_values/dst_swapping_targets_creator_test.rb +0 -137
  112. data/test/lib/html_replacers/unified_values/element_category_test.rb +0 -49
  113. data/test/lib/html_replacers/unified_values/node_swapping_targets_creator_test.rb +0 -137
  114. data/test/lib/html_replacers/unified_values/text_replacer_test.rb +0 -270
  115. data/test/lib/html_replacers/unified_values/text_scraper_test.rb +0 -121
  116. data/test/lib/html_replacers/unified_values/values_stack_test.rb +0 -122
  117. data/test/lib/services/url_test.rb +0 -9
  118. data/test/lib/services/value_agent_test.rb +0 -32
  119. data/test/services/url_test.rb +0 -163
  120. 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&currentLang=#{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