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,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,9 +0,0 @@
1
- <html>
2
- <head></head>
3
- <body>
4
- <svg width="1px" height="1px" xmlns="http://www.w3.org/2000/svg">
5
- <text x="1" y="1" font-size="30">text value!</text>
6
- <use href="#test-sym" x="0" y="1" width="1" height="1"/>
7
- </svg>
8
- </body>
9
- </html>
@@ -1,8 +0,0 @@
1
- [
2
- {
3
- "xpath": "/html/body/svg/text/text()",
4
- "srcs": [
5
- "text value!"
6
- ]
7
- }
8
- ]
@@ -1,6 +0,0 @@
1
- <html>
2
- <head></head>
3
- <body>
4
- <p>This is &lt;a&gt; text value!</p>
5
- </body>
6
- </html>
@@ -1,8 +0,0 @@
1
- [
2
- {
3
- "xpath": "/html/body/p/text()",
4
- "srcs": [
5
- "This is &lt;a&gt; text value!"
6
- ]
7
- }
8
- ]
@@ -1,12 +0,0 @@
1
- <html>
2
- <head></head>
3
- <body>
4
- <div>
5
- <span>
6
- <a href="#">text value1</a>
7
- <unknown class="emoticon">text value2</unknown>
8
- text value3
9
- </span>
10
- </div>
11
- </body>
12
- </html>
@@ -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
- ]
@@ -1,12 +0,0 @@
1
- <html>
2
- <head></head>
3
- <body>
4
- <li>
5
- <a href="#">
6
- <span><span><img src='sample.jpeg'></span></span>
7
- <span>text value1</span>
8
- <span>text value2</span>
9
- </a>
10
- </li>
11
- </body>
12
- </html>
@@ -1,14 +0,0 @@
1
- [
2
- {
3
- "xpath": "/html/body/li/text()[2]",
4
- "srcs": [
5
- "<span>",
6
- "text value1",
7
- "</span>",
8
- "<span>",
9
- "text value2",
10
- "</span>",
11
- "</a>"
12
- ]
13
- }
14
- ]
@@ -1,10 +0,0 @@
1
- <html>
2
- <head></head>
3
- <body>
4
- <div>
5
- <span>
6
- This is a <b wovn-ignore>complex</b> text value!
7
- </span>
8
- </div>
9
- </body>
10
- </html>
@@ -1,13 +0,0 @@
1
- [
2
- {
3
- "xpath": "/html/body/div/text()",
4
- "srcs": [
5
- "<span>",
6
- "This is a",
7
- "<b wovn-ignore>",
8
- "</b>",
9
- "text value!",
10
- "</span>"
11
- ]
12
- }
13
- ]
@@ -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