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.
- checksums.yaml +4 -4
- data/.gitignore +3 -6
- data/README.md +116 -12
- data/lib/wovnrb/api_data.rb +59 -0
- data/lib/wovnrb/headers.rb +30 -5
- data/lib/wovnrb/html_replacers/image_replacer.rb +44 -0
- data/lib/wovnrb/html_replacers/link_replacer.rb +18 -0
- data/lib/wovnrb/html_replacers/meta_replacer.rb +20 -0
- data/lib/wovnrb/html_replacers/replacer_base.rb +17 -0
- data/lib/wovnrb/html_replacers/script_replacer.rb +39 -0
- data/lib/wovnrb/html_replacers/text_replacer.rb +19 -0
- data/lib/wovnrb/lang.rb +133 -23
- data/lib/wovnrb/services/url.rb +2 -68
- data/lib/wovnrb/services/wovn_logger.rb +45 -0
- data/lib/wovnrb/store.rb +19 -38
- data/lib/wovnrb/text_caches/cache_base.rb +52 -0
- data/lib/wovnrb/text_caches/memory_cache.rb +52 -0
- data/lib/wovnrb/version.rb +1 -1
- data/lib/wovnrb.rb +19 -224
- data/test/lib/api_data_test.rb +62 -0
- data/test/lib/headers_test.rb +1221 -1212
- data/test/lib/html_replacers/image_replacer_test.rb +86 -0
- data/test/lib/html_replacers/link_replacer_test.rb +43 -0
- data/test/lib/html_replacers/meta_replacer_test.rb +105 -0
- data/test/lib/html_replacers/replacer_base_test.rb +31 -0
- data/test/lib/html_replacers/script_replacer_test.rb +90 -0
- data/test/lib/html_replacers/text_replacer_test.rb +57 -0
- data/test/lib/lang_test.rb +446 -33
- data/test/lib/services/wovn_logger_test.rb +40 -0
- data/test/lib/store_test.rb +39 -29
- data/test/lib/text_caches/cache_base_test.rb +31 -0
- data/test/lib/text_caches/memory_cache_test.rb +91 -0
- data/test/lib/wovnrb_test.rb +39 -886
- data/test/test_helper.rb +96 -1
- data/wovnrb.gemspec +4 -0
- metadata +89 -2
data/test/lib/lang_test.rb
CHANGED
@@ -1,47 +1,460 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'minitest/autorun'
|
3
3
|
|
4
|
-
|
4
|
+
module Wovnrb
|
5
|
+
class LangTest < WovnMiniTest
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
def test_langs_exist
|
8
|
+
refute_nil(Wovnrb::Lang::LANG)
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
20
|
+
def test_get_code_with_valid_code
|
21
|
+
assert_equal('ms', Wovnrb::Lang.get_code('ms'))
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
def test_get_code_with_capital_letters
|
25
|
+
assert_equal('zh-CHT', Wovnrb::Lang.get_code('zh-cht'))
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
def test_get_code_with_valid_english_name
|
29
|
+
assert_equal('pt', Wovnrb::Lang.get_code('Portuguese'))
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
def test_get_code_with_valid_native_name
|
33
|
+
assert_equal('hi', Wovnrb::Lang.get_code('हिन्दी'))
|
34
|
+
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
36
|
+
def test_get_code_with_invalid_name
|
37
|
+
assert_equal(nil, Wovnrb::Lang.get_code('WOVN4LYFE'))
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
def test_get_code_with_empty_string
|
41
|
+
assert_equal(nil, Wovnrb::Lang.get_code(''))
|
42
|
+
end
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
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;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;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=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&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=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&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=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&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=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&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=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&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=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&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=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&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=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&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=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&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
|
data/test/lib/store_test.rb
CHANGED
@@ -1,37 +1,47 @@
|
|
1
|
-
require 'wovnrb/store'
|
2
1
|
require 'minitest/autorun'
|
2
|
+
require 'test_helper'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|