rutils 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +45 -0
- data/README +97 -36
- data/TODO +1 -16
- data/bin/gilensize +1 -1
- data/lib/countries/countries.rb +1772 -0
- data/lib/datetime/datetime.rb +60 -43
- data/lib/gilenson/gilenson.rb +594 -249
- data/lib/gilenson/gilenson_port.rb +287 -307
- data/lib/integration/rails_date_helper_override.rb +9 -31
- data/lib/integration/red_cloth_override.rb +2 -1
- data/lib/pluralizer/pluralizer.rb +213 -192
- data/lib/rutils.rb +23 -11
- data/lib/transliteration/transliteration.rb +148 -148
- data/test/run_tests.rb +2 -2
- data/test/t_datetime.rb +32 -6
- data/test/t_gilenson.rb +291 -29
- data/test/t_integration.rb +33 -33
- data/test/t_pluralize.rb +56 -49
- data/test/t_transliteration.rb +68 -68
- data/test/t_typografica.rb +46 -46
- metadata +5 -4
- data/test/t_binaries.rb +0 -26
data/test/t_gilenson.rb
CHANGED
@@ -6,37 +6,299 @@ require File.dirname(__FILE__) + '/../lib/rutils'
|
|
6
6
|
# Cюда идут наши тесты типографа. Мы содержим их отдельно поскольку набор тестов Типографицы нами не контролируется.
|
7
7
|
# Когда у рутилей появятся собственные баги под каждый баг следует завести тест
|
8
8
|
class GilensonOwnTest < Test::Unit::TestCase
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
9
|
+
|
10
|
+
# Проверка изъятия тагов и помещения их На Место©
|
11
|
+
# характерно что пока мы не рефакторнули все как следует можно проверять
|
12
|
+
# только конечный результат трансформации - что глючно до безобразия
|
13
|
+
def test_tag_lift
|
14
|
+
assert_equal "Вот такие<tag some='foo>' /> <tagmore></tagmore> дела", "Вот такие<tag some='foo>' /> <tagmore></tagmore> дела".gilensize
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_byte_pass
|
18
|
+
assert_equal '<p>Теперь добираться до офиса Студии автортранспортом стало удобнее. ' +
|
19
|
+
'Для этого мы разместили в разделе <a href="#">«Контакт»</a> окно вебкамеры, ' +
|
20
|
+
'которая непрерывно транслирует дорожную обстановку на Садовом кольце по адресу Земляной Вал, 23. <br>' +
|
21
|
+
'Удачной дороги! </p>',
|
22
|
+
'<p>Теперь добираться до офиса Студии автортранспортом стало удобнее. ' +
|
23
|
+
'Для этого мы разместили в разделе <a href="#">«Контакт»</a> окно вебкамеры, ' +
|
24
|
+
'которая непрерывно транслирует дорожную обстановку на Садовом кольце по адресу Земляной Вал, 23. <br>' +
|
25
|
+
'Удачной дороги! </p>'.gilensize
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_phones
|
29
|
+
assert_equal '<nobr>3–12–30</nobr>', '3-12-30'.gilensize
|
30
|
+
assert_equal '<nobr>12–34–56</nobr>', '12-34-56'.gilensize
|
31
|
+
assert_equal '<nobr>88–25–04</nobr>', '88-25-04'.gilensize
|
32
|
+
assert_equal '+7 <nobr>(99284) 65–818</nobr>', '+7 (99284) 65-818'.gilensize
|
33
|
+
assert_equal '<nobr>725–01–10</nobr>', '725-01-10'.gilensize
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_address
|
37
|
+
assert_equal 'табл. 2, рис. 2.10', 'табл. 2, рис. 2.10'.gilensize
|
38
|
+
assert_equal 'офис 415, оф.340, д.5, ул. Народной Воли, пл. Малышева', 'офис 415, оф.340, д.5, ул. Народной Воли, пл. Малышева'.gilensize
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_html_entities_replace
|
42
|
+
assert_equal '" & ' > <   § © « ® ° ± · » – — ‘ ’ “ ” „ • … ™ −', '" & ' > < § © « ® ° ± · » – — ‘ ’ “ ” „ • … ™ −'.gilensize
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_ugly_entities_replace1 # not_correct_number
|
46
|
+
assert_equal '„ … ' “ ” • – — ™', '„ … ’ “ ” • – — ™'.gilensize
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_specials
|
50
|
+
assert_equal '© 2002, © 2003, © 2004, © 2005 — тоже без пробелов: ©2002, ©Кукуц. однако: варианты (а) и (с)', '(с) 2002, (С) 2003, (c) 2004, (C) 2005 -- тоже без пробелов: (с)2002, (c)Кукуц. однако: варианты (а) и (с)'.gilensize
|
51
|
+
assert_equal '+5°С, +7°C, –5°F', '+5^С, +17^C, -275^F'.gilensize
|
52
|
+
assert_equal 'об этом подробнее — читай §25', 'об этом подробнее -- читай (p)25'.gilensize
|
53
|
+
assert_equal 'один же минус – краткое тире', 'один же минус - краткое тире'.gilensize
|
54
|
+
assert_equal 'Sharpdesign™, Microsoft<sup>®</sup>', 'Sharpdesign(tm), Microsoft(r)'.gilensize
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_breaking
|
58
|
+
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана', 'скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана'.gilensize
|
59
|
+
assert_equal 'so be it, my liege. Tiny dwellers roam thru midnight! Hell raised, the Balrog is hiding in your backyard!', 'so be it ,my liege .Tiny dwellers roam thru midnight !Hell raised, the Balrog is hiding in your backyard!'.gilensize
|
60
|
+
assert_equal 'при установке командой строки в ?page=help <nobr>бла-бла-бла-бла</nobr>', 'при установке командой строки в ?page=help бла-бла-бла-бла'.gilensize
|
61
|
+
assert_equal 'как интересно будет переноситься со строки на строку <nobr>что-то</nobr> разделённое дефисом, ведь дефис тот тоже ведь из наших. <nobr>Какие-то</nobr> браузеры думают, что следует переносить и его…', 'как интересно будет переноситься со строки на строку что-то разделённое дефисом, ведь дефис тот тоже ведь из наших. Какие-то браузеры думают, что следует переносить и его...'.gilensize
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_quotes
|
65
|
+
assert_equal 'english “quotes” should be quite like this', 'english "quotes" should be quite like this'.gilensize
|
66
|
+
assert_equal 'русские же «оформляются» подобным образом', 'русские же "оформляются" подобным образом'.gilensize
|
67
|
+
assert_equal 'кавычки «расставлены» “in a chaotic order”', 'кавычки "расставлены" "in a chaotic order"'.gilensize
|
68
|
+
assert_equal 'диагональ моего монитора — 17″, а размер пениса — 1,5″', 'диагональ моего монитора -- 17", а размер пениса -- 1,5"'.gilensize
|
69
|
+
assert_equal 'в толщину, «вложенные “quotes” вот так», “or it «будет вложено» elsewhere”', 'в толщину, "вложенные "quotes" вот так", "or it "будет вложено" elsewhere"'.gilensize
|
70
|
+
assert_equal '“complicated «кавычки», «странные “includements” кавычек»', '"complicated "кавычки", "странные "includements" кавычек"'.gilensize
|
71
|
+
assert_equal '“double “quotes”', '"double "quotes"'.gilensize
|
72
|
+
assert_equal '«дважды вложенные «кавычки»', '"дважды вложенные "кавычки"'.gilensize
|
73
|
+
assert_equal '«01/02/03», дискеты в 5.25″', '"01/02/03", дискеты в 5.25"'.gilensize
|
74
|
+
assert_equal 'после троеточия правая кавычка — «Вот…»', 'после троеточия правая кавычка -- "Вот..."'.gilensize
|
75
|
+
assert_equal 'setlocale(LC_ALL, “ru_RU.UTF8”);', 'setlocale(LC_ALL, "ru_RU.UTF8");'.gilensize
|
76
|
+
assert_equal '“read, write, delete” с флагом “only_mine”', '"read, write, delete" с флагом "only_mine"'.gilensize
|
77
|
+
assert_equal '«Двоеточие:», «такую умную тему должен писать чувак умеющий скрипты скриптить.»', '"Двоеточие:", "такую умную тему должен писать чувак умеющий скрипты скриптить."'.gilensize
|
78
|
+
assert_equal '(«Вики != HTML» — «Вики != HTML» — («всякая чушь»))', '("Вики != HTML" -- "Вики != HTML" -- ("всякая чушь"))'.gilensize
|
79
|
+
assert_equal '«фигня123», “fignya123”', '"фигня123", "fignya123"'.gilensize
|
80
|
+
# assert_equal '«сбалансированные «кавычки<!--notypo--><!--/notypo--> (четыре в конце) — связано с синтаксисом ваки', '"сбалансированные "кавычки"""" (четыре в конце) -- связано с синтаксисом ваки'.gilensize
|
81
|
+
assert_equal '«несбалансированные «кавычки""" (три в конце) — связано с синтаксисом ваки', '"несбалансированные "кавычки""" (три в конце) -- связано с синтаксисом ваки'.gilensize
|
82
|
+
assert_equal '«разноязыкие quotes»', '"разноязыкие quotes"'.gilensize
|
83
|
+
assert_equal '«multilanguage кавычки»', '"multilanguage кавычки"'.gilensize
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_additional_quote_cases
|
87
|
+
assert_equal "«И это называется языком?», — таков был его вопрос",
|
88
|
+
%q{ "И это называется языком?", -- таков был его вопрос }.gilensize
|
89
|
+
|
90
|
+
assert_equal "«Он — сволочь!», сказал я",
|
91
|
+
%q{ "Он -- сволочь!", сказал я }.gilensize
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_initials
|
96
|
+
assert_equal 'Это нам сказал П.И. Петров', 'Это нам сказал П. И. Петров'.gilensize
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_nbsp_last_letters
|
100
|
+
assert_equal "сказал я", "сказал я".gilensize
|
101
|
+
assert_equal "сказал я!", "сказал я!".gilensize
|
102
|
+
assert_equal "сказал я?", "сказал я?".gilensize
|
103
|
+
assert_equal "сказал я…", "сказал я...".gilensize
|
104
|
+
assert_equal "сказал он…", "сказал он...".gilensize
|
105
|
+
assert_equal "сказали мы?..", "сказали мы?..".gilensize
|
106
|
+
assert_equal "сказали мы?!", "сказали мы?!".gilensize
|
107
|
+
assert_equal "сказали мы?!!!", "сказали мы?!!!".gilensize
|
108
|
+
assert_equal "сказали нам", "сказали нам".gilensize
|
109
|
+
assert_equal "(сказали им)", "(сказали им)".gilensize
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
class GilensonConfigurationTest < Test::Unit::TestCase
|
116
|
+
def setup
|
117
|
+
@gilenson = RuTils::Gilenson::Formatter.new
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_settings_as_tail_arguments
|
121
|
+
|
122
|
+
assert_equal "Ну и куда вот — да туда!",
|
123
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
124
|
+
|
125
|
+
assert_equal "Ну и куда вот — да туда!",
|
126
|
+
@gilenson.process("Ну и куда вот -- да туда!", :dash => false, :dashglue => false, :wordglue => false)
|
127
|
+
|
128
|
+
assert_equal "Ну и куда вот — да туда!",
|
129
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
130
|
+
|
131
|
+
@gilenson.configure!(:dash => false, :dashglue => false, :wordglue => false)
|
132
|
+
|
133
|
+
assert_equal "Ну и куда вот — да туда!",
|
134
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
135
|
+
|
136
|
+
@gilenson.configure!(:all => true)
|
137
|
+
|
138
|
+
assert_equal "Ну и куда вот — да туда!",
|
139
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
140
|
+
|
141
|
+
@gilenson.configure!(:all => false)
|
142
|
+
|
143
|
+
assert_equal "Ну и куда вот -- да туда!",
|
144
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_glyph_override
|
148
|
+
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана',
|
149
|
+
@gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
|
150
|
+
|
151
|
+
@gilenson.glyph[:nbsp] = ' '
|
152
|
+
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана',
|
153
|
+
@gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_ugly_entities_replace2 # copy&paste
|
157
|
+
@gilenson.configure!(:copypaste => true)
|
158
|
+
assert_equal '  « » § © ® ° ± ¶ · – — ‘ ’ “ ” „ • … № ™ −   ″', @gilenson.process(' « » § © ® ° ± ¶ · – — ‘ ’ “ ” „ • … № ™ − ″')
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_raise_on_unknown_setting
|
162
|
+
assert_raise(RuTils::Gilenson::UnknownSetting) { @gilenson.configure!(:bararara => true) }
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_raw_utf8_output
|
166
|
+
@gilenson.configure!(:raw_output=>true)
|
167
|
+
assert_equal '阪 Это просто «кавычки»',
|
168
|
+
@gilenson.process('阪 Это просто "кавычки"')
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_configure_alternate_names
|
172
|
+
assert @gilenson.configure(:raw_output=>true)
|
173
|
+
assert @gilenson.configure!(:raw_output=>true)
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_skip_code
|
177
|
+
@gilenson.configure!(:all => true)
|
178
|
+
|
179
|
+
@gilenson.configure!(:skip_code => true)
|
180
|
+
|
181
|
+
assert_equal "<code>Скип -- скип!</code>",
|
182
|
+
@gilenson.process("<code>Скип -- скип!</code>")
|
183
|
+
|
184
|
+
assert_equal '<code attr="test -- attr">Скип -- скип!</code>',
|
185
|
+
@gilenson.process('<code attr="test -- attr">Скип -- скип!</code>')
|
186
|
+
|
187
|
+
assert_equal "<tt>Скип -- скип!</tt> test — test <tt attr='test -- attr'>Скип -- скип!</tt>",
|
188
|
+
@gilenson.process("<tt>Скип -- скип!</tt> test -- test <tt attr='test -- attr'>Скип -- скип!</tt>")
|
189
|
+
|
190
|
+
assert_equal "<TT>Скип -- скип!</TT><TT>Скип -- скип!</TT> — <CoDe attr='test -- attr'>Скип -- скип!</cOdE>",
|
191
|
+
@gilenson.process("<TT>Скип -- скип!</TT><TT>Скип -- скип!</TT> -- <CoDe attr='test -- attr'>Скип -- скип!</cOdE>")
|
192
|
+
|
193
|
+
assert_equal "<ttt>Скип — скип!</tt>",
|
194
|
+
@gilenson.process("<ttt>Скип -- скип!</tt>")
|
195
|
+
|
196
|
+
assert_equal "<tt>Скип — скип!</ttt>",
|
197
|
+
@gilenson.process("<tt>Скип -- скип!</ttt>")
|
198
|
+
|
199
|
+
assert_equal "Ах, — <code>var x = j // -- тест</code>",
|
200
|
+
@gilenson.process("Ах, -- <code>var x = j // -- тест</code>")
|
201
|
+
|
202
|
+
assert_equal "<![CDATA[ CDATA -- ]]> — CDATA",
|
203
|
+
@gilenson.process("<![CDATA[ CDATA -- ]]> -- CDATA")
|
204
|
+
|
205
|
+
assert_equal "<![CDATA[ CDATA -- >] -- CDATA ]]> — <![CDATA[ CDATA ]> -- CDATA ]]>",
|
206
|
+
@gilenson.process("<![CDATA[ CDATA -- >] -- CDATA ]]> -- <![CDATA[ CDATA ]> -- CDATA ]]>")
|
207
|
+
|
208
|
+
assert_equal "<![CDATA[ CDATA -- >] -- CDATA ]]> — <![CDATA[ CDATA ]> -- CDATA ]]> — CDATA ]]>",
|
209
|
+
@gilenson.process("<![CDATA[ CDATA -- >] -- CDATA ]]> -- <![CDATA[ CDATA ]> -- CDATA ]]> -- CDATA ]]>")
|
210
|
+
|
211
|
+
@gilenson.configure!(:skip_code => false)
|
212
|
+
|
213
|
+
assert_equal "Ах, — <code>var x = j // — тест</code>",
|
214
|
+
@gilenson.process("Ах, -- <code>var x = j // -- тест</code>")
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_skip_attr
|
218
|
+
@gilenson.configure!(:skip_attr => true)
|
219
|
+
|
220
|
+
assert_equal "<a href='#' attr='смотри -- смотри' title='test -- me' alt=\"смотри -- смотри\">just — test</a>",
|
221
|
+
@gilenson.process("<a href='#' attr='смотри -- смотри' title='test -- me' alt=\"смотри -- смотри\">just -- test</a>")
|
222
|
+
|
223
|
+
assert_equal 'мы напишем title="test — me" и alt=\'test — me\', вот',
|
224
|
+
@gilenson.process('мы напишем title="test -- me" и alt=\'test -- me\', вот')
|
225
|
+
|
226
|
+
@gilenson.configure!(:skip_attr => false)
|
227
|
+
|
228
|
+
assert_equal "<a href='#' attr='смотри -- смотри' title='test — me' alt=\"смотри — смотри\">just — test</a>",
|
229
|
+
@gilenson.process("<a href='#' attr='смотри -- смотри' title='test -- me' alt=\"смотри -- смотри\">just -- test</a>")
|
230
|
+
|
231
|
+
assert_equal 'мы напишем title="test — me" и alt=\'test — me\', вот',
|
232
|
+
@gilenson.process('мы напишем title="test -- me" и alt=\'test -- me\', вот')
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_escape_html
|
236
|
+
assert_equal "Используйте & вместо &amp;",
|
237
|
+
@gilenson.process("Используйте & вместо &amp;")
|
238
|
+
|
239
|
+
@gilenson.configure!(:html => false)
|
240
|
+
|
241
|
+
assert_equal "&#38; — &amp; <code/> <some_tag>таги не пройдут!</some_tag>. Ну и?..",
|
242
|
+
@gilenson.process("& -- & <code/> <some_tag>таги не пройдут!</some_tag>. Ну и?..")
|
243
|
+
|
244
|
+
assert_equal "Используйте &#38; вместо &amp;",
|
245
|
+
@gilenson.process("Используйте & вместо &")
|
246
|
+
|
247
|
+
end
|
248
|
+
|
249
|
+
def test_ampersand_in_urls
|
250
|
+
|
251
|
+
@gilenson.configure!(:html=>false)
|
252
|
+
|
253
|
+
assert_equal "<a href='test?test5=5&#38;test6=6'>test&#38;</a>",
|
254
|
+
@gilenson.process("<a href='test?test5=5&test6=6'>test&</a>")
|
255
|
+
|
256
|
+
@gilenson.configure!(:html=>true)
|
257
|
+
|
258
|
+
assert_equal "<a href='test?test7=7&test8=8'>test&</a>",
|
259
|
+
@gilenson.process("<a href='test?test7=7&test8=8'>test&</a>")
|
260
|
+
|
261
|
+
assert_equal "<a href='test?test9=9&test10=10'>test&</a>",
|
262
|
+
@gilenson.process("<a href='test?test9=9&test10=10'>test&</a>")
|
263
|
+
|
264
|
+
assert_equal "<a href='test?test11=11&test12=12'>test&</a>",
|
265
|
+
@gilenson.process("<a href='test?test11=11&test12=12'>test&</a>")
|
266
|
+
|
267
|
+
assert_equal "<a href='test?test12=12&'>test</a>",
|
268
|
+
@gilenson.process("<a href='test?test12=12&'>test</a>")
|
269
|
+
|
270
|
+
assert_equal "<a href='test?x=1&y=2' title='&-amp, …-hellip'>test</a>",
|
271
|
+
@gilenson.process("<a href='test?x=1&y=2' title='&-amp, …-hellip'>test</a>")
|
272
|
+
|
273
|
+
assert_equal "<a href='test?x=3&#039;y=4'>test</a>",
|
274
|
+
@gilenson.process("<a href='test?x=3'y=4'>test</a>")
|
275
|
+
|
276
|
+
|
277
|
+
@gilenson.glyph[:amp] = '&'
|
278
|
+
|
279
|
+
assert_equal "<a href='test?test11=11&test12=12'>test&</a>",
|
280
|
+
@gilenson.process("<a href='test?test11=11&test12=12'>test&</a>")
|
281
|
+
|
282
|
+
assert_equal "<a href='test?test13=13&test14=14'>test&</a>",
|
283
|
+
@gilenson.process("<a href='test?test13=13&test14=14'>test&</a>")
|
284
|
+
|
285
|
+
assert_equal "<a href='test?test15=15&amppp;test16=16'>test&</a>",
|
286
|
+
@gilenson.process("<a href='test?test15=15&pp;test16=16'>test&</a>")
|
287
|
+
|
288
|
+
end
|
27
289
|
|
28
290
|
end
|
29
291
|
|
30
292
|
# class TypograficaTrakoEntries < Test::Unit::TestCase
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
293
|
+
# def test_cpp
|
294
|
+
# assert_equal "C++-API", "C++-API".gilensize
|
295
|
+
# end
|
296
|
+
#
|
297
|
+
# def test_symmetricity # http://pixel-apes.com/typografica/trako/12
|
298
|
+
# assert_equal "«Справка 09»", '"Справка 09"'.gilensize
|
299
|
+
# end
|
300
|
+
#
|
301
|
+
# def test_paths # http://pixel-apes.com/typografica/trako/13
|
302
|
+
# assert_equal '«c:\www\sites\»', '"c:\www\sites\"'.gilensize
|
303
|
+
# end
|
42
304
|
# end
|
data/test/t_integration.rb
CHANGED
@@ -25,48 +25,48 @@ end
|
|
25
25
|
# Интеграция с RedCloth - Textile.
|
26
26
|
# Нужно иметь в виду что Textile осуществляет свою обработку типографики, которую мы подменяем!
|
27
27
|
class TextileIntegrationTest < Test::Unit::TestCase
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
def test_integration_textile
|
29
|
+
RuTils::overrides = true
|
30
|
+
assert RuTils.overrides_enabled?
|
31
|
+
assert_equal "<p>И вот «они пошли туда», и шли шли шли</p>",
|
32
|
+
RedCloth.new('И вот "они пошли туда", и шли шли шли').to_html
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
RuTils::overrides = false
|
35
|
+
assert !RuTils.overrides_enabled?
|
36
|
+
assert_equal "<p>И вот “они пошли туда”, и шли шли шли</p>",
|
37
|
+
RedCloth.new('И вот "они пошли туда", и шли шли шли').to_html
|
38
|
+
end
|
39
39
|
end
|
40
40
|
|
41
41
|
# Интеграция с BlueCloth - Markdown
|
42
42
|
# Сам Markdown никакой обработки типографики не производит (это делает RubyPants, но вряд ли его кто-то юзает на практике)
|
43
43
|
class MarkdownIntegrationTest < Test::Unit::TestCase
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
44
|
+
def test_integration_markdown
|
45
|
+
RuTils::overrides = true
|
46
|
+
assert RuTils.overrides_enabled?
|
47
|
+
assert_equal "<p>И вот «они пошли туда», и шли шли шли</p>",
|
48
|
+
BlueCloth.new('И вот "они пошли туда", и шли шли шли').to_html
|
49
|
+
|
50
|
+
RuTils::overrides = false
|
51
|
+
assert !RuTils.overrides_enabled?
|
52
|
+
assert_equal "<p>И вот \"они пошли туда\", и шли шли шли</p>",
|
53
|
+
BlueCloth.new('И вот "они пошли туда", и шли шли шли').to_html
|
54
|
+
end
|
55
55
|
end
|
56
56
|
|
57
57
|
# Перегрузка helper'ов Rails
|
58
58
|
class RailsHelpersOverrideTest < Test::Unit::TestCase
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
59
|
+
def test_distance_of_time_in_words
|
60
|
+
eval 'class Foo
|
61
|
+
include ActionView::Helpers::DateHelper
|
62
|
+
def get_dst
|
63
|
+
distance_of_time_in_words(Time.now - 20.minutes, Time.now)
|
64
|
+
end
|
65
|
+
end'
|
66
|
+
|
67
|
+
RuTils::overrides = true
|
68
|
+
foo = Foo.new
|
69
|
+
assert_equal "20 минут", foo.get_dst
|
70
|
+
end
|
71
71
|
end
|
72
72
|
|
data/test/t_pluralize.rb
CHANGED
@@ -4,59 +4,66 @@ require File.dirname(__FILE__) + '/../lib/rutils'
|
|
4
4
|
|
5
5
|
|
6
6
|
class PropisjuTestCase < Test::Unit::TestCase
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
7
|
+
def test_ints
|
8
|
+
assert_equal "пятьсот двадцать три", 523.propisju
|
9
|
+
assert_equal "шесть тысяч семьсот двадцать семь", 6727.propisju
|
10
|
+
assert_equal "восемь миллионов шестьсот пятьдесят два", 8000652.propisju
|
11
|
+
assert_equal "восемь миллионов шестьсот пятьдесят две", 8000652.propisju(2)
|
12
|
+
assert_equal "восемь миллионов шестьсот пятьдесят два", 8000652.propisju(3)
|
13
|
+
assert_equal "сорок пять", 45.propisju
|
14
|
+
assert_equal "пять", 5.propisju
|
15
|
+
assert_equal "шестьсот двенадцать", 612.propisju
|
16
|
+
assert_equal "двадцать пять колес", 25.propisju_items(3, "колесо", "колеса", "колес")
|
17
|
+
assert_equal "двадцать одна подстава", 21.propisju_items(2, "подстава", "подставы", "подстав")
|
18
|
+
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
20
|
+
def test_floats
|
21
|
+
assert_equal "шесть целых пять десятых", (6.50).propisju
|
22
|
+
assert_equal "триста сорок одна целая девять десятых", (341.9).propisju
|
23
|
+
assert_equal "триста сорок одна целая двести сорок пять тысячных", (341.245).propisju
|
24
|
+
assert_equal "двести три целых сорок одна сотая", (203.41).propisju
|
25
|
+
assert_equal "четыреста сорок две целых пять десятых", (442.50000).propisju
|
26
|
+
assert_equal "двести двенадцать целых четыре десятых сволочи", (212.40).propisju_items(2, "сволочь", "сволочи", "сволочей")
|
27
|
+
assert_equal "двести двенадцать сволочей", (212.00).propisju_items(2, "сволочь", "сволочи", "сволочей")
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_items
|
31
|
+
assert_equal "чемодана", 523.items("чемодан", "чемодана", "чемоданов")
|
32
|
+
assert_equal "партий", 6727.items("партия", "партии", "партий")
|
33
|
+
assert_equal "козлов", 45.items("козел", "козла", "козлов")
|
34
|
+
assert_equal "колес", 260.items("колесо", "колеса", "колес")
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_money
|
38
|
+
assert_equal "сто двадцать три рубля", 123.rublej
|
39
|
+
assert_equal "триста сорок три рубля двадцать копеек", (343.20).rublej
|
40
|
+
assert_equal "сорок две копейки", (0.4187).rublej
|
41
|
+
assert_equal "триста тридцать два рубля", (331.995).rublej
|
42
|
+
end
|
36
43
|
end
|
37
44
|
|
38
45
|
#class PluralizeTestCase < Test::Unit::TestCase
|
39
46
|
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
+
# def test_males
|
48
|
+
# assert_equal "гада", "гад".ru_pluralize(3)
|
49
|
+
# assert_equal "враг", "враг".ru_pluralize(1)
|
50
|
+
# assert_equal "сцепа", "сцеп".ru_pluralize(2)
|
51
|
+
# assert_equal "огня", "огонь".ru_pluralize(2)
|
52
|
+
# assert_equal "огней", "огонь".ru_pluralize(6)
|
53
|
+
# end
|
47
54
|
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
55
|
+
# def test_females
|
56
|
+
# assert_equal "сволочей", "сволочь".ru_pluralize(6)
|
57
|
+
# assert_equal "весны", "весна".ru_pluralize(3)
|
58
|
+
# assert_equal "чета", "четы".ru_pluralize(2)
|
59
|
+
# assert_equal "чета", "чет".ru_pluralize(5)
|
60
|
+
# assert_equal "вони", "вонь".ru_pluralize(3)
|
61
|
+
# assert_equal "воней", "вонь".ru_pluralize(6)
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
# def test_middles
|
65
|
+
# assert_equal "окна", "окно".ru_pluralize(2)
|
66
|
+
# assert_equal "колес", "колесо".ru_pluralize(15)
|
67
|
+
# assert_equal "насилий", "насилие".ru_pluralize(5)
|
68
|
+
# end
|
62
69
|
#end
|