wovnrb 0.2.01 → 0.2.02

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -6
  3. data/README.md +116 -12
  4. data/lib/wovnrb/api_data.rb +59 -0
  5. data/lib/wovnrb/headers.rb +30 -5
  6. data/lib/wovnrb/html_replacers/image_replacer.rb +44 -0
  7. data/lib/wovnrb/html_replacers/link_replacer.rb +18 -0
  8. data/lib/wovnrb/html_replacers/meta_replacer.rb +20 -0
  9. data/lib/wovnrb/html_replacers/replacer_base.rb +17 -0
  10. data/lib/wovnrb/html_replacers/script_replacer.rb +39 -0
  11. data/lib/wovnrb/html_replacers/text_replacer.rb +19 -0
  12. data/lib/wovnrb/lang.rb +133 -23
  13. data/lib/wovnrb/services/url.rb +2 -68
  14. data/lib/wovnrb/services/wovn_logger.rb +45 -0
  15. data/lib/wovnrb/store.rb +19 -38
  16. data/lib/wovnrb/text_caches/cache_base.rb +52 -0
  17. data/lib/wovnrb/text_caches/memory_cache.rb +52 -0
  18. data/lib/wovnrb/version.rb +1 -1
  19. data/lib/wovnrb.rb +19 -224
  20. data/test/lib/api_data_test.rb +62 -0
  21. data/test/lib/headers_test.rb +1221 -1212
  22. data/test/lib/html_replacers/image_replacer_test.rb +86 -0
  23. data/test/lib/html_replacers/link_replacer_test.rb +43 -0
  24. data/test/lib/html_replacers/meta_replacer_test.rb +105 -0
  25. data/test/lib/html_replacers/replacer_base_test.rb +31 -0
  26. data/test/lib/html_replacers/script_replacer_test.rb +90 -0
  27. data/test/lib/html_replacers/text_replacer_test.rb +57 -0
  28. data/test/lib/lang_test.rb +446 -33
  29. data/test/lib/services/wovn_logger_test.rb +40 -0
  30. data/test/lib/store_test.rb +39 -29
  31. data/test/lib/text_caches/cache_base_test.rb +31 -0
  32. data/test/lib/text_caches/memory_cache_test.rb +91 -0
  33. data/test/lib/wovnrb_test.rb +39 -886
  34. data/test/test_helper.rb +96 -1
  35. data/wovnrb.gemspec +4 -0
  36. metadata +89 -2
@@ -1,47 +1,460 @@
1
- require 'wovnrb/lang'
1
+ require 'test_helper'
2
2
  require 'minitest/autorun'
3
3
 
4
- class LangTest < Minitest::Test
4
+ module Wovnrb
5
+ class LangTest < WovnMiniTest
5
6
 
6
- def test_langs_exist
7
- refute_nil(Wovnrb::Lang::LANG)
8
- end
7
+ def test_langs_exist
8
+ refute_nil(Wovnrb::Lang::LANG)
9
+ end
9
10
 
10
- def test_keys_exist
11
- Wovnrb::Lang::LANG.each do |k, l|
12
- assert(l.has_key?(:name))
13
- assert(l.has_key?(:code))
14
- assert(l.has_key?(:en))
15
- assert_equal(k, l[:code])
11
+ def test_keys_exist
12
+ Wovnrb::Lang::LANG.each do |k, l|
13
+ assert(l.has_key?(:name))
14
+ assert(l.has_key?(:code))
15
+ assert(l.has_key?(:en))
16
+ assert_equal(k, l[:code])
17
+ end
16
18
  end
17
- end
18
19
 
19
- def test_get_code_with_valid_code
20
- assert_equal('ms', Wovnrb::Lang.get_code('ms'))
21
- end
20
+ def test_get_code_with_valid_code
21
+ assert_equal('ms', Wovnrb::Lang.get_code('ms'))
22
+ end
22
23
 
23
- def test_get_code_with_capital_letters
24
- assert_equal('zh-CHT', Wovnrb::Lang.get_code('zh-cht'))
25
- end
24
+ def test_get_code_with_capital_letters
25
+ assert_equal('zh-CHT', Wovnrb::Lang.get_code('zh-cht'))
26
+ end
26
27
 
27
- def test_get_code_with_valid_english_name
28
- assert_equal('pt', Wovnrb::Lang.get_code('Portuguese'))
29
- end
28
+ def test_get_code_with_valid_english_name
29
+ assert_equal('pt', Wovnrb::Lang.get_code('Portuguese'))
30
+ end
30
31
 
31
- def test_get_code_with_valid_native_name
32
- assert_equal('hi', Wovnrb::Lang.get_code('हिन्दी'))
33
- end
32
+ def test_get_code_with_valid_native_name
33
+ assert_equal('hi', Wovnrb::Lang.get_code('हिन्दी'))
34
+ end
34
35
 
35
- def test_get_code_with_invalid_name
36
- assert_equal(nil, Wovnrb::Lang.get_code('WOVN4LYFE'))
37
- end
36
+ def test_get_code_with_invalid_name
37
+ assert_equal(nil, Wovnrb::Lang.get_code('WOVN4LYFE'))
38
+ end
38
39
 
39
- def test_get_code_with_empty_string
40
- assert_equal(nil, Wovnrb::Lang.get_code(''))
41
- end
40
+ def test_get_code_with_empty_string
41
+ assert_equal(nil, Wovnrb::Lang.get_code(''))
42
+ end
42
43
 
43
- def test_get_code_with_nil
44
- assert_equal(nil, Wovnrb::Lang.get_code(nil))
45
- end
44
+ def test_get_code_with_nil
45
+ assert_equal(nil, Wovnrb::Lang.get_code(nil))
46
+ end
47
+
48
+ def test_add_lang_code
49
+ lang = Lang.new('zh-cht')
50
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
51
+ assert_equal("http://www.facebook.com", lang.add_lang_code("http://www.facebook.com", 'subdomain', h))
52
+ end
53
+
54
+ def test_add_lang_code_relative_slash_href_url_with_path
55
+ lang = Lang.new('fr')
56
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://fr.favy.tips/topics/44'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
57
+ assert_equal("http://fr.favy.tips/topics/50", lang.add_lang_code("/topics/50", 'subdomain', h))
58
+ end
59
+
60
+ def test_add_lang_code_relative_dot_href_url_with_path
61
+ lang = Lang.new('fr')
62
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://fr.favy.tips/topics/44'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
63
+ assert_equal("http://fr.favy.tips/topics/44/topics/50", lang.add_lang_code("./topics/50", 'subdomain', h))
64
+ end
65
+
66
+ def test_add_lang_code_relative_two_dots_href_url_with_path
67
+ lang = Lang.new('fr')
68
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://fr.favy.tips/topics/44'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
69
+ assert_equal("http://fr.favy.tips/topics/50", lang.add_lang_code("../topics/50", 'subdomain', h))
70
+ end
71
+
72
+ def test_add_lang_code_trad_chinese
73
+ lang = Lang.new('zh-cht')
74
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
75
+ assert_equal("http://zh-cht.favy.tips/topics/31", lang.add_lang_code("http://favy.tips/topics/31", 'subdomain', h))
76
+ end
77
+
78
+ def test_add_lang_code_trad_chinese_2
79
+ lang = Lang.new('zh-cht')
80
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://zh-cht.favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
81
+ assert_equal("http://zh-cht.favy.tips/topics/31", lang.add_lang_code("/topics/31", 'subdomain', h))
82
+ end
83
+
84
+ def test_add_lang_code_trad_chinese_lang_in_link_already
85
+ lang = Lang.new('zh-cht')
86
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://zh-cht.favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
87
+ assert_equal("http://zh-cht.favy.tips/topics/31", lang.add_lang_code("http://zh-cht.favy.tips/topics/31", 'subdomain', h))
88
+ end
89
+
90
+ def test_add_lang_code_no_protocol
91
+ lang = Lang.new('zh-cht')
92
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'https://zh-cht.google.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
93
+ assert_equal("//zh-cht.google.com", lang.add_lang_code("//google.com", 'subdomain', h))
94
+ end
95
+
96
+ def test_add_lang_code_no_protocol_2
97
+ lang = Lang.new('zh-cht')
98
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'https://zh-cht.favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
99
+ assert_equal("//google.com", lang.add_lang_code("//google.com", 'subdomain', h))
100
+ end
101
+
102
+ def test_add_lang_code_invalid_url
103
+ lang = Lang.new('zh-cht')
104
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
105
+ assert_equal("http://www.facebook.com/sharer.php?u=http://favy.tips/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!", lang.add_lang_code("http://www.facebook.com/sharer.php?u=http://favy.tips/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!", 'subdomain', h))
106
+ end
107
+
108
+ def test_add_lang_code_path_only_with_slash
109
+ lang = Lang.new('zh-cht')
110
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
111
+ assert_equal("http://zh-cht.favy.tips/topics/31", lang.add_lang_code("/topics/31", 'subdomain', h))
112
+ end
113
+
114
+ def test_add_lang_code_path_only_no_slash
115
+ lang = Lang.new('zh-cht')
116
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
117
+ assert_equal("http://zh-cht.favy.tips/topics/31", lang.add_lang_code("topics/31", 'subdomain', h))
118
+ end
119
+
120
+ def test_add_lang_code_path_explicit_page_no_slash
121
+ lang = Lang.new('zh-cht')
122
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
123
+ assert_equal("http://zh-cht.favy.tips/topics/31.html", lang.add_lang_code("topics/31.html", 'subdomain', h))
124
+ end
125
+
126
+ def test_add_lang_code_path_explicit_page_with_slash
127
+ lang = Lang.new('zh-cht')
128
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
129
+ assert_equal("http://zh-cht.favy.tips/topics/31.html", lang.add_lang_code("/topics/31.html", 'subdomain', h))
130
+ end
131
+
132
+ def test_add_lang_code_no_protocol_with_path_explicit_page
133
+ lang = Lang.new('zh-cht')
134
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
135
+ assert_equal("//www.google.com/topics/31.php", lang.add_lang_code("//www.google.com/topics/31.php", 'subdomain', h))
136
+ end
137
+
138
+ def test_add_lang_code_protocol_with_path_explicit_page
139
+ lang = Lang.new('zh-cht')
140
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
141
+ assert_equal("http://www.google.com/topics/31.php", lang.add_lang_code("http://www.google.com/topics/31.php", 'subdomain', h))
142
+ end
143
+
144
+ def test_add_lang_code_relative_path_double_period
145
+ lang = Lang.new('zh-cht')
146
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
147
+ assert_equal("http://zh-cht.favy.tips/topics/31", lang.add_lang_code("../topics/31", 'subdomain', h))
148
+ end
149
+
150
+ def test_add_lang_code_relative_path_single_period
151
+ lang = Lang.new('zh-cht')
152
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
153
+ assert_equal("http://zh-cht.favy.tips/topics/31", lang.add_lang_code("./topics/31", 'subdomain', h))
154
+ end
155
+
156
+ def test_add_lang_code_empty_href
157
+ lang = Lang.new('zh-cht')
158
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
159
+ assert_equal("", lang.add_lang_code("", 'subdomain', h))
160
+ end
161
+
162
+ def test_add_lang_code_hash_href
163
+ lang = Lang.new('zh-cht')
164
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
165
+ assert_equal("#", lang.add_lang_code("#", 'subdomain', h))
166
+ end
167
+
168
+ def test_add_lang_code_nil_href
169
+ lang = Lang.new('en')
170
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings)
171
+ assert_equal(nil, lang.add_lang_code(nil,'path', h))
172
+ end
173
+ def test_add_lang_code_absolute_different_host
174
+ lang = Lang.new('fr')
175
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
176
+ assert_equal('http://yahoo.co.jp', lang.add_lang_code('http://yahoo.co.jp', 'path', h))
177
+ end
178
+
179
+ def test_add_lang_code_absolute_subdomain_no_subdomain
180
+ lang = Lang.new('fr')
181
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
182
+ assert_equal('http://fr.google.com', lang.add_lang_code('http://google.com', 'subdomain', h))
183
+ end
184
+
185
+ def test_add_lang_code_absolute_subdomain_with_subdomain
186
+ lang = Lang.new('fr')
187
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://home.google.com'), Wovnrb.get_settings)
188
+ assert_equal('http://fr.home.google.com', lang.add_lang_code('http://home.google.com', 'subdomain', headers))
189
+ end
190
+
191
+ def test_add_lang_code_absolute_query_no_query
192
+ lang = Lang.new('fr')
193
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
194
+ assert_equal('http://google.com?wovn=fr', lang.add_lang_code('http://google.com', 'query', headers))
195
+ end
196
+
197
+ def test_add_lang_code_absolute_query_with_query
198
+ lang = Lang.new('fr')
199
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
200
+ assert_equal('http://google.com?hey=yo&wovn=fr', lang.add_lang_code('http://google.com?hey=yo', 'query', headers))
201
+ end
202
+
203
+ def test_add_lang_code_absolute_path_no_pathname
204
+ lang = Lang.new('fr')
205
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
206
+ assert_equal('http://google.com/fr/', lang.add_lang_code('http://google.com', 'path', headers))
207
+ end
208
+
209
+ def test_add_lang_code_absolute_path_with_pathname
210
+ lang = Lang.new('fr')
211
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
212
+ assert_equal('http://google.com/fr/index.html', lang.add_lang_code('http://google.com/index.html', 'path', headers))
213
+ end
214
+
215
+ def test_add_lang_code_absolute_path_with_long_pathname
216
+ lang = Lang.new('fr')
217
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
218
+ assert_equal('http://google.com/fr/hello/long/path/index.html', lang.add_lang_code('http://google.com/hello/long/path/index.html', 'path', headers))
219
+ end
220
+
221
+ def test_add_lang_code_relative_subdomain_leading_slash
222
+ lang = Lang.new('fr')
223
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
224
+ assert_equal('http://fr.google.com/', lang.add_lang_code('/', 'subdomain', headers))
225
+ end
226
+
227
+ def test_add_lang_code_relative_subdomain_leading_slash_filename
228
+ lang = Lang.new('fr')
229
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
230
+ assert_equal('http://fr.google.com/index.html', lang.add_lang_code('/index.html', 'subdomain', headers))
231
+ end
232
+
233
+ def test_add_lang_code_relative_subdomain_no_leading_slash_filename
234
+ lang = Lang.new('fr')
235
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
236
+ assert_equal('http://fr.google.com/index.html', lang.add_lang_code('index.html', 'subdomain', headers))
237
+ end
238
+
239
+ def test_add_lang_code_relative_query_with_no_query
240
+ lang = Lang.new('fr')
241
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
242
+ assert_equal('/index.html?wovn=fr', lang.add_lang_code('/index.html', 'query', headers))
243
+ end
244
+
245
+ def test_add_lang_code_relative_query_with_query
246
+ lang = Lang.new('fr')
247
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
248
+ assert_equal('/index.html?hey=yo&wovn=fr', lang.add_lang_code('/index.html?hey=yo', 'query', headers))
249
+ end
250
+
251
+ def test_add_lang_code_relative_path_with_leading_slash
252
+ lang = Lang.new('fr')
253
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
254
+ assert_equal('/fr/index.html', lang.add_lang_code('/index.html', 'path', headers))
255
+ end
256
+
257
+ def test_add_lang_code_relative_path_without_leading_slash_different_pathname
258
+ lang = Lang.new('fr')
259
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/hello/tab.html'), Wovnrb.get_settings)
260
+ assert_equal('/fr/hello/index.html', lang.add_lang_code('index.html', 'path', headers))
261
+ end
262
+
263
+ def test_add_lang_code_relative_path_without_leading_slash_different_pathname2
264
+ lang = Lang.new('fr')
265
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/hello/tab.html'), Wovnrb.get_settings)
266
+ assert_equal('/fr/hello/hey/index.html', lang.add_lang_code('hey/index.html', 'path', headers))
267
+ end
268
+
269
+ def test_add_lang_code_relative_path_at_root
270
+ lang = Lang.new('fr')
271
+ headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com/'), Wovnrb.get_settings)
272
+ assert_equal('/fr/index.html', lang.add_lang_code('index.html', 'path', headers))
273
+ end
274
+
275
+ def generate_body(param = "")
276
+ case param
277
+ when "ignore_parent"
278
+ body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
279
+ <div wovn-ignore><p>Hello</p></div>
280
+ </body></html>"
281
+ when "ignore_everything"
282
+ body = "<html><body wovn-ignore><h1>Mr. Belvedere Fan Club</h1>
283
+ <div><p>Hello</p></div>
284
+ </body></html>"
285
+ when "ignore_parent_translated_in_japanese"
286
+ body = "<html lang=\"ja\">
287
+ <head>
288
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
289
+ <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">
290
+ </head>
291
+ <body>
292
+ <h1>ベルベデアさんファンクラブ</h1>
293
+ <div wovn-ignore=\"\"><p>Hello</p></div>
294
+ </body>
295
+ </html>
296
+ "
297
+ when "translated_in_japanese"
298
+ body = "<html lang=\"ja\">
299
+ <head>
300
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
301
+ <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">
302
+ </head>
303
+ <body>
304
+ <h1>ベルベデアさんファンクラブ</h1>
305
+ <div><p>こんにちは</p></div>
306
+ </body>
307
+ </html>
308
+ "
309
+ when "ignore_everything_translated"
310
+ body = "<html lang=\"ja\">
311
+ <head>
312
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
313
+ <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">
314
+ </head>
315
+ <body wovn-ignore=\"\">
316
+ <h1>Mr. Belvedere Fan Club</h1>
317
+ <div><p>Hello</p></div>
318
+ </body>
319
+ </html>
320
+ "
321
+ when "empty"
322
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore><p>Hello</p></div></body></html>"
323
+ when "empty_single_quote"
324
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=''><p>Hello</p></div></body></html>"
325
+ when "empty_double_quote"
326
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=""><p>Hello</p></div></body></html>"
327
+ when "value_single_quote"
328
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore='value'><p>Hello</p></div></body></html>"
329
+ when "value_double_quote"
330
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"value\"><p>Hello</p></div></body></html>"
331
+ when "empty_translated"
332
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"\"><p>Hello</p></div>\n</body>\n</html>\n"
333
+ when "empty_single_quote_translated"
334
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"\"><p>Hello</p></div>\n</body>\n</html>\n"
335
+ when "empty_double_quote_translated"
336
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"\"><p>Hello</p></div>\n</body>\n</html>\n"
337
+ when "value_single_quote_translated"
338
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"value\"><p>Hello</p></div>\n</body>\n</html>\n"
339
+ when "value_double_quote_translated"
340
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"value\"><p>Hello</p></div>\n</body>\n</html>\n"
341
+ when "meta_img_alt_tags_translated"
342
+ body = "<html lang=\"ja\">\n<head>\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<meta name=\"description\" content=\"こんにちは\">\n<meta name=\"title\" content=\"こんにちは\">\n<meta property=\"og:title\" content=\"こんにちは\">\n<meta property=\"og:description\" content=\"こんにちは\">\n<meta property=\"twitter:title\" content=\"こんにちは\">\n<meta property=\"twitter:description\" content=\"こんにちは\">\n<link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">\n</head>\n<body>\n<h1>ベルベデアさんファンクラブ</h1>\n<div><p>こんにちは</p></div>\n<img src=\"http://example.com/photo.png\" alt=\"こんにちは\">\n</body>\n</html>\n"
343
+ when "meta_img_alt_tags"
344
+ body = "<html><head><meta name =\"description\" content=\"Hello\">\n<meta name=\"title\" content=\"Hello\">\n<meta property=\"og:title\" content=\"Hello\">\n<meta property=\"og:description\" content=\"Hello\">\n<meta property=\"twitter:title\" content=\"Hello\">\n<meta property=\"twitter:description\" content=\"Hello\"></head>
345
+ <body><h1>Mr. Belvedere Fan Club</h1>
346
+ <div><p>Hello</p></div>
347
+ <img src=\"http://example.com/photo.png\" alt=\"Hello\">
348
+ </body></html>"
349
+ else # "" case
350
+ body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
351
+ <div><p>Hello</p></div>
352
+ </body></html>"
353
+ end
354
+ return body
355
+ end
356
+
357
+ def generate_dom(param='')
358
+ Wovnrb.to_dom(generate_body(param))
359
+ end
360
+
361
+ def generate_values
362
+ values = {}
363
+ values['text_vals'] = {
364
+ 'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
365
+ 'Mr. Belvedere Fan Club' => {'ja' => [{'data' => 'ベルベデアさんファンクラブ'}]}
366
+ }
367
+ return values
368
+ end
369
+
370
+ def test_switch_lang
371
+ lang = Lang.new('ja')
372
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
373
+ dom = generate_dom
374
+ values = generate_values
375
+ url = h.url
376
+ swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
377
+ assert_equal(generate_body('translated_in_japanese'), swapped_body)
378
+ end
379
+
380
+ def test_switch_lang_meta_img_alt_tags
381
+ lang = Lang.new('ja')
382
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
383
+ dom = generate_dom('meta_img_alt_tags')
384
+ values = generate_values
385
+ url = h.url
386
+ swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
387
+ assert_equal(generate_body('meta_img_alt_tags_translated'), swapped_body)
388
+ end
46
389
 
390
+ def test_switch_lang_wovn_ignore
391
+ lang = Lang.new('ja')
392
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
393
+ dom = generate_dom('ignore_parent')
394
+ values = generate_values
395
+ url = h.url
396
+ swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
397
+ assert_equal(generate_body('ignore_parent_translated_in_japanese'), swapped_body)
398
+ end
399
+
400
+ def test_switch_lang_wovn_ignore_everything
401
+ lang = Lang.new('ja')
402
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
403
+ dom = generate_dom('ignore_everything')
404
+ values = generate_values
405
+ url = h.url
406
+ swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
407
+ assert_equal(generate_body('ignore_everything_translated'), swapped_body)
408
+ end
409
+
410
+ def test_switch_lang_wovn_ignore_empty
411
+ lang = Lang.new('ja')
412
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
413
+ dom = generate_dom('empty')
414
+ values = generate_values
415
+ url = h.url
416
+ swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
417
+ assert_equal(generate_body('empty_translated'), swapped_body)
418
+ end
419
+
420
+ def test_switch_lang_wovn_ignore_empty_single_quote
421
+ lang = Lang.new('ja')
422
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
423
+ dom = generate_dom('empty_single_quote')
424
+ values = generate_values
425
+ url = h.url
426
+ swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
427
+ assert_equal(generate_body('empty_single_quote_translated'), swapped_body)
428
+ end
429
+
430
+ def test_switch_lang_wovn_ignore_empty_double_quote
431
+ lang = Lang.new('ja')
432
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
433
+ dom = generate_dom('empty_double_quote')
434
+ values = generate_values
435
+ url = h.url
436
+ swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
437
+ assert_equal(generate_body('empty_double_quote_translated'), swapped_body)
438
+ end
439
+
440
+ def test_switch_lang_wovn_ignore_value_single_quote
441
+ lang = Lang.new('ja')
442
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
443
+ dom = generate_dom('value_single_quote')
444
+ values = generate_values
445
+ url = h.url
446
+ swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
447
+ assert_equal(generate_body('value_single_quote_translated'), swapped_body)
448
+ end
449
+
450
+ def test_switch_lang_wovn_ignore_value_double_quote
451
+ lang = Lang.new('ja')
452
+ h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
453
+ dom = generate_dom('value_double_quote')
454
+ values = generate_values
455
+ url = h.url
456
+ swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
457
+ assert_equal(generate_body('value_double_quote_translated'), swapped_body)
458
+ end
459
+ end
47
460
  end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+ require 'singleton'
3
+
4
+ module Wovnrb
5
+ class StoreTest < WovnMiniTest
6
+ def setup
7
+ Singleton.__init__(WovnLogger)
8
+ end
9
+
10
+ def test_initialize
11
+ log_file_name = 'test_tmp.log'
12
+ Store.instance.settings({'log_path' => log_file_name})
13
+ WovnLogger.instance
14
+ assert(File.exists?(log_file_name))
15
+ File.delete(log_file_name)
16
+ end
17
+
18
+ def test_initialize_without_path
19
+ path = Store.instance.settings['log_path']
20
+ Store.instance.settings({'log_path' => nil})
21
+ WovnLogger.instance
22
+ assert_equal(false, File.exists?(path))
23
+ end
24
+
25
+ def test_initialize_wit_invalid_path
26
+ log_file_name = 'in/val/id/test_tmp.log'
27
+ Store.instance.settings({'log_path' => log_file_name})
28
+ WovnLogger.instance
29
+ assert_equal(false, File.exists?(log_file_name))
30
+ assert_equal(true, File.exists?('wovn_error.log'))
31
+ File.delete('wovn_error.log')
32
+ end
33
+
34
+ def test_error
35
+ mock = LogMock.mock_log
36
+ WovnLogger.instance.error('aaa')
37
+ assert_equal(['aaa'], mock.errors)
38
+ end
39
+ end
40
+ end
@@ -1,37 +1,47 @@
1
- require 'wovnrb/store'
2
1
  require 'minitest/autorun'
2
+ require 'test_helper'
3
3
 
4
- class StoreTest < Minitest::Test
5
- def test_initialize
6
- s = Wovnrb::Store.new
7
- refute_nil(s)
8
- end
4
+ module Wovnrb
5
+ class StoreTest < WovnMiniTest
6
+ def test_initialize
7
+ s = Wovnrb::Store.instance
8
+ refute_nil(s)
9
+ end
9
10
 
10
- def test_settings_no_parameters
11
- s = Wovnrb::Store.new
12
- assert_equal('path', s.settings['url_pattern'])
13
- assert_equal('/(?<lang>[^/.?]+)', s.settings['url_pattern_reg'])
14
- end
11
+ def test_settings_no_parameters
12
+ s = Wovnrb::Store.instance
13
+ assert_equal('path', s.settings['url_pattern'])
14
+ assert_equal('/(?<lang>[^/.?]+)', s.settings['url_pattern_reg'])
15
+ end
15
16
 
16
- def test_settings_url_pattern_path
17
- s = Wovnrb::Store.new
18
- s.settings({'url_pattern' => 'path'})
19
- assert_equal('path', s.settings['url_pattern'])
20
- assert_equal('/(?<lang>[^/.?]+)', s.settings['url_pattern_reg'])
21
- end
17
+ def test_settings_url_pattern_path
18
+ s = Wovnrb::Store.instance
19
+ s.settings({'url_pattern' => 'path'})
20
+ assert_equal('path', s.settings['url_pattern'])
21
+ assert_equal('/(?<lang>[^/.?]+)', s.settings['url_pattern_reg'])
22
+ end
22
23
 
23
- def test_settings_url_pattern_subdomain
24
- s = Wovnrb::Store.new
25
- s.settings({'url_pattern' => 'subdomain'})
26
- assert_equal("^(?<lang>[^.]+)\.", s.settings['url_pattern_reg'])
27
- assert_equal('subdomain', s.settings['url_pattern'])
28
- end
24
+ def test_settings_url_pattern_subdomain
25
+ s = Wovnrb::Store.instance
26
+ s.settings({'url_pattern' => 'subdomain'})
27
+ assert_equal("^(?<lang>[^.]+)\.", s.settings['url_pattern_reg'])
28
+ assert_equal('subdomain', s.settings['url_pattern'])
29
+ end
29
30
 
30
- def test_settings_url_pattern_query
31
- s = Wovnrb::Store.new
32
- s.settings({'url_pattern' => 'query'})
33
- assert_equal('((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)', s.settings['url_pattern_reg'])
34
- assert_equal('query', s.settings['url_pattern'])
31
+ def test_settings_url_pattern_query
32
+ s = Wovnrb::Store.instance
33
+ s.settings({'url_pattern' => 'query'})
34
+ assert_equal('((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)', s.settings['url_pattern_reg'])
35
+ assert_equal('query', s.settings['url_pattern'])
36
+ end
37
+
38
+ def test_invalid_settings
39
+ mock = LogMock.mock_log
40
+ store = Wovnrb::Store.instance
41
+ valid = store.valid_settings?
42
+
43
+ assert_equal(false, valid)
44
+ assert_equal(['User token is not valid.', 'Secret key is not valid.'], mock.errors)
45
+ end
35
46
  end
36
47
  end
37
-
@@ -0,0 +1,31 @@
1
+ require 'wovnrb/text_caches/cache_base'
2
+ require 'minitest/autorun'
3
+
4
+ class CacheBaseTest < Minitest::Test
5
+ def teardown
6
+ Wovnrb::CacheBase.reset_cache
7
+ end
8
+
9
+ def test_build
10
+ cache = Wovnrb::CacheBase.build({})
11
+ assert_equal('Wovnrb::MemoryCache', cache.class.name)
12
+ end
13
+
14
+ def test_build_with_invalid_strategy
15
+ assert_raises RuntimeError do
16
+ Wovnrb::CacheBase.build({strategy: :invalid})
17
+ end
18
+ end
19
+
20
+ def test_set_and_get_single
21
+ Wovnrb::CacheBase.set_single({})
22
+ cache = Wovnrb::CacheBase.get_single
23
+ assert_equal('Wovnrb::MemoryCache', cache.class.name)
24
+ end
25
+
26
+ def test_get_single_without_set
27
+ assert_raises RuntimeError do
28
+ Wovnrb::CacheBase.get_single
29
+ end
30
+ end
31
+ end