wovnrb 0.2.01 → 0.2.02

Sign up to get free protection for your applications and to get access to all the features.
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