twitter_cldr 3.0.0.beta1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (698) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +16 -2
  3. data/History.txt +9 -1
  4. data/README.md +297 -113
  5. data/Rakefile +97 -17
  6. data/lib/twitter_cldr/collation/collator.rb +12 -3
  7. data/lib/twitter_cldr/collation/trie_builder.rb +1 -1
  8. data/lib/twitter_cldr/{tokenizers/calendars → data_readers}/additional_date_format_selector.rb +6 -4
  9. data/lib/twitter_cldr/data_readers/calendar_data_reader.rb +91 -0
  10. data/lib/twitter_cldr/data_readers/data_reader.rb +32 -0
  11. data/lib/twitter_cldr/data_readers/date_data_reader.rb +26 -0
  12. data/lib/twitter_cldr/data_readers/date_time_data_reader.rb +41 -0
  13. data/lib/twitter_cldr/data_readers/number_data_reader.rb +142 -0
  14. data/lib/twitter_cldr/data_readers/time_data_reader.rb +26 -0
  15. data/lib/twitter_cldr/data_readers/timespan_data_reader.rb +122 -0
  16. data/lib/twitter_cldr/data_readers.rb +17 -0
  17. data/lib/twitter_cldr/formatters/calendars/{datetime_formatter.rb → date_time_formatter.rb} +27 -42
  18. data/lib/twitter_cldr/formatters/calendars/timespan_formatter.rb +3 -64
  19. data/lib/twitter_cldr/formatters/formatter.rb +39 -0
  20. data/lib/twitter_cldr/formatters/list_formatter.rb +22 -12
  21. data/lib/twitter_cldr/formatters/numbers/abbreviated/abbreviated_number_formatter.rb +5 -26
  22. data/lib/twitter_cldr/formatters/numbers/currency_formatter.rb +2 -11
  23. data/lib/twitter_cldr/formatters/numbers/decimal_formatter.rb +4 -2
  24. data/lib/twitter_cldr/formatters/numbers/number_formatter.rb +45 -27
  25. data/lib/twitter_cldr/formatters/numbers/percent_formatter.rb +3 -13
  26. data/lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb +224 -0
  27. data/lib/twitter_cldr/formatters/numbers/rbnf/post_processors/chinese.rb +122 -0
  28. data/lib/twitter_cldr/formatters/numbers/rbnf/rule.rb +93 -0
  29. data/lib/twitter_cldr/formatters/numbers/rbnf/rule_group.rb +20 -0
  30. data/lib/twitter_cldr/formatters/numbers/rbnf/rule_parser.rb +86 -0
  31. data/lib/twitter_cldr/formatters/numbers/rbnf/rule_set.rb +259 -0
  32. data/lib/twitter_cldr/formatters/numbers/rbnf/substitution.rb +30 -0
  33. data/lib/twitter_cldr/formatters/numbers/rbnf.rb +127 -0
  34. data/lib/twitter_cldr/formatters/plurals/plural_formatter.rb +18 -6
  35. data/lib/twitter_cldr/formatters.rb +4 -5
  36. data/lib/twitter_cldr/localized/localized_array.rb +1 -1
  37. data/lib/twitter_cldr/localized/localized_date.rb +6 -3
  38. data/lib/twitter_cldr/localized/localized_datetime.rb +38 -15
  39. data/lib/twitter_cldr/localized/localized_number.rb +40 -24
  40. data/lib/twitter_cldr/localized/localized_object.rb +4 -4
  41. data/lib/twitter_cldr/localized/localized_string.rb +40 -7
  42. data/lib/twitter_cldr/localized/localized_time.rb +9 -2
  43. data/lib/twitter_cldr/localized/localized_timespan.rb +50 -5
  44. data/lib/twitter_cldr/normalization.rb +8 -19
  45. data/lib/twitter_cldr/parsers/parser.rb +50 -0
  46. data/lib/twitter_cldr/parsers/segmentation_parser.rb +137 -0
  47. data/lib/twitter_cldr/parsers/symbol_table.rb +30 -0
  48. data/lib/twitter_cldr/parsers/unicode_regex/character_class.rb +91 -0
  49. data/lib/twitter_cldr/parsers/unicode_regex/character_range.rb +39 -0
  50. data/lib/twitter_cldr/parsers/unicode_regex/character_set.rb +65 -0
  51. data/lib/twitter_cldr/parsers/unicode_regex/component.rb +50 -0
  52. data/lib/twitter_cldr/parsers/unicode_regex/literal.rb +83 -0
  53. data/lib/twitter_cldr/parsers/unicode_regex/unicode_string.rb +41 -0
  54. data/lib/twitter_cldr/parsers/unicode_regex_parser.rb +262 -0
  55. data/lib/twitter_cldr/parsers.rb +5 -1
  56. data/lib/twitter_cldr/resources/casefolder.rb.erb +64 -0
  57. data/lib/twitter_cldr/resources/casefolder_class_generator.rb +75 -0
  58. data/lib/twitter_cldr/resources/download.rb +10 -4
  59. data/lib/twitter_cldr/resources/icu_based_importer.rb +18 -0
  60. data/lib/twitter_cldr/resources/locales_resources_importer.rb +24 -13
  61. data/lib/twitter_cldr/resources/normalization_quick_check_importer.rb +1 -14
  62. data/lib/twitter_cldr/resources/rbnf_test_importer.rb +107 -0
  63. data/lib/twitter_cldr/resources/readme_renderer.rb +115 -0
  64. data/lib/twitter_cldr/resources/tailoring_importer.rb +2 -8
  65. data/lib/twitter_cldr/resources/uli/segment_exceptions_importer.rb +62 -0
  66. data/lib/twitter_cldr/resources/uli.rb +12 -0
  67. data/lib/twitter_cldr/resources/unicode_data_importer.rb +84 -14
  68. data/lib/twitter_cldr/resources/unicode_importer.rb +37 -0
  69. data/lib/twitter_cldr/resources/unicode_properties_importer.rb +79 -0
  70. data/lib/twitter_cldr/resources.rb +8 -1
  71. data/lib/twitter_cldr/shared/break_iterator.rb +213 -0
  72. data/lib/twitter_cldr/shared/calendar.rb +38 -14
  73. data/lib/twitter_cldr/shared/casefolder.rb +210 -0
  74. data/lib/twitter_cldr/shared/code_point.rb +103 -16
  75. data/lib/twitter_cldr/shared/numbering_system.rb +58 -0
  76. data/lib/twitter_cldr/shared/territories.rb +43 -1
  77. data/lib/twitter_cldr/shared/unicode_regex.rb +81 -0
  78. data/lib/twitter_cldr/shared.rb +13 -9
  79. data/lib/twitter_cldr/tokenizers/calendars/date_time_tokenizer.rb +77 -0
  80. data/lib/twitter_cldr/tokenizers/calendars/date_tokenizer.rb +14 -29
  81. data/lib/twitter_cldr/tokenizers/calendars/time_tokenizer.rb +13 -28
  82. data/lib/twitter_cldr/tokenizers/calendars/timespan_tokenizer.rb +11 -87
  83. data/lib/twitter_cldr/tokenizers/numbers/number_tokenizer.rb +16 -71
  84. data/lib/twitter_cldr/tokenizers/numbers/rbnf_tokenizer.rb +53 -0
  85. data/lib/twitter_cldr/tokenizers/pattern_tokenizer.rb +42 -0
  86. data/lib/twitter_cldr/tokenizers/segmentation/segmentation_tokenizer.rb +39 -0
  87. data/lib/twitter_cldr/tokenizers/tokenizer.rb +116 -0
  88. data/lib/twitter_cldr/tokenizers/unicode_regex/unicode_regex_tokenizer.rb +52 -0
  89. data/lib/twitter_cldr/tokenizers.rb +8 -4
  90. data/lib/twitter_cldr/utils/code_points.rb +1 -1
  91. data/lib/twitter_cldr/utils/range_set.rb +242 -0
  92. data/lib/twitter_cldr/utils/yaml.rb +17 -12
  93. data/lib/twitter_cldr/utils.rb +1 -1
  94. data/lib/twitter_cldr/version.rb +1 -1
  95. data/lib/twitter_cldr.rb +2 -1
  96. data/resources/custom/locales/sv/units.yml +8 -0
  97. data/resources/locales/af/calendars.yml +278 -224
  98. data/resources/locales/af/currencies.yml +954 -916
  99. data/resources/locales/af/languages.yml +583 -580
  100. data/resources/locales/af/layout.yml +5 -5
  101. data/resources/locales/af/lists.yml +23 -7
  102. data/resources/locales/af/numbers.yml +59 -54
  103. data/resources/locales/af/plurals.yml +2 -2
  104. data/resources/locales/af/rbnf.yml +261 -0
  105. data/resources/locales/af/territories.yml +264 -263
  106. data/resources/locales/ar/calendars.yml +287 -259
  107. data/resources/locales/ar/currencies.yml +1730 -1692
  108. data/resources/locales/ar/languages.yml +583 -580
  109. data/resources/locales/ar/layout.yml +5 -5
  110. data/resources/locales/ar/lists.yml +23 -7
  111. data/resources/locales/ar/numbers.yml +66 -61
  112. data/resources/locales/ar/plurals.yml +5 -8
  113. data/resources/locales/ar/rbnf.yml +519 -0
  114. data/resources/locales/ar/territories.yml +264 -263
  115. data/resources/locales/be/calendars.yml +238 -237
  116. data/resources/locales/be/currencies.yml +954 -917
  117. data/resources/locales/be/languages.yml +583 -580
  118. data/resources/locales/be/layout.yml +5 -5
  119. data/resources/locales/be/lists.yml +23 -7
  120. data/resources/locales/be/numbers.yml +62 -57
  121. data/resources/locales/be/plurals.yml +7 -4
  122. data/resources/locales/be/rbnf.yml +1288 -0
  123. data/resources/locales/be/territories.yml +264 -263
  124. data/resources/locales/bg/calendars.yml +278 -218
  125. data/resources/locales/bg/currencies.yml +955 -917
  126. data/resources/locales/bg/languages.yml +583 -580
  127. data/resources/locales/bg/layout.yml +5 -5
  128. data/resources/locales/bg/lists.yml +23 -7
  129. data/resources/locales/bg/numbers.yml +62 -57
  130. data/resources/locales/bg/plurals.yml +2 -2
  131. data/resources/locales/bg/rbnf.yml +280 -0
  132. data/resources/locales/bg/territories.yml +264 -263
  133. data/resources/locales/bn/calendars.yml +287 -225
  134. data/resources/locales/bn/currencies.yml +953 -916
  135. data/resources/locales/bn/languages.yml +583 -580
  136. data/resources/locales/bn/layout.yml +5 -5
  137. data/resources/locales/bn/lists.yml +23 -7
  138. data/resources/locales/bn/numbers.yml +62 -57
  139. data/resources/locales/bn/plurals.yml +2 -2
  140. data/resources/locales/bn/rbnf.yml +4 -0
  141. data/resources/locales/bn/territories.yml +264 -263
  142. data/resources/locales/ca/calendars.yml +278 -278
  143. data/resources/locales/ca/currencies.yml +953 -916
  144. data/resources/locales/ca/languages.yml +583 -580
  145. data/resources/locales/ca/layout.yml +5 -5
  146. data/resources/locales/ca/lists.yml +23 -7
  147. data/resources/locales/ca/numbers.yml +62 -57
  148. data/resources/locales/ca/plurals.yml +3 -2
  149. data/resources/locales/ca/rbnf.yml +756 -0
  150. data/resources/locales/ca/territories.yml +264 -263
  151. data/resources/locales/cs/calendars.yml +269 -262
  152. data/resources/locales/cs/currencies.yml +1483 -1172
  153. data/resources/locales/cs/languages.yml +583 -580
  154. data/resources/locales/cs/layout.yml +5 -5
  155. data/resources/locales/cs/lists.yml +23 -7
  156. data/resources/locales/cs/numbers.yml +64 -58
  157. data/resources/locales/cs/plurals.yml +6 -2
  158. data/resources/locales/cs/rbnf.yml +367 -0
  159. data/resources/locales/cs/territories.yml +264 -263
  160. data/resources/locales/cy/calendars.yml +275 -274
  161. data/resources/locales/cy/currencies.yml +1585 -1548
  162. data/resources/locales/cy/languages.yml +583 -580
  163. data/resources/locales/cy/layout.yml +5 -5
  164. data/resources/locales/cy/lists.yml +23 -7
  165. data/resources/locales/cy/numbers.yml +66 -61
  166. data/resources/locales/cy/plurals.yml +4 -3
  167. data/resources/locales/cy/rbnf.yml +298 -0
  168. data/resources/locales/cy/territories.yml +264 -263
  169. data/resources/locales/da/calendars.yml +281 -280
  170. data/resources/locales/da/currencies.yml +954 -916
  171. data/resources/locales/da/languages.yml +583 -580
  172. data/resources/locales/da/layout.yml +5 -5
  173. data/resources/locales/da/lists.yml +23 -7
  174. data/resources/locales/da/numbers.yml +62 -57
  175. data/resources/locales/da/plurals.yml +3 -2
  176. data/resources/locales/da/rbnf.yml +194 -0
  177. data/resources/locales/da/territories.yml +264 -263
  178. data/resources/locales/de/calendars.yml +294 -293
  179. data/resources/locales/de/currencies.yml +954 -916
  180. data/resources/locales/de/languages.yml +583 -580
  181. data/resources/locales/de/layout.yml +5 -5
  182. data/resources/locales/de/lists.yml +23 -7
  183. data/resources/locales/de/numbers.yml +62 -57
  184. data/resources/locales/de/plurals.yml +3 -2
  185. data/resources/locales/de/rbnf.yml +346 -0
  186. data/resources/locales/de/territories.yml +264 -263
  187. data/resources/locales/el/calendars.yml +279 -282
  188. data/resources/locales/el/currencies.yml +954 -916
  189. data/resources/locales/el/languages.yml +583 -580
  190. data/resources/locales/el/layout.yml +5 -5
  191. data/resources/locales/el/lists.yml +23 -7
  192. data/resources/locales/el/numbers.yml +62 -57
  193. data/resources/locales/el/plurals.yml +2 -2
  194. data/resources/locales/el/rbnf.yml +880 -0
  195. data/resources/locales/el/territories.yml +264 -263
  196. data/resources/locales/en/calendars.yml +192 -191
  197. data/resources/locales/en/currencies.yml +953 -915
  198. data/resources/locales/en/languages.yml +583 -580
  199. data/resources/locales/en/layout.yml +5 -5
  200. data/resources/locales/en/lists.yml +23 -7
  201. data/resources/locales/en/numbers.yml +62 -57
  202. data/resources/locales/en/plurals.yml +3 -2
  203. data/resources/locales/en/rbnf.yml +542 -0
  204. data/resources/locales/en/territories.yml +264 -263
  205. data/resources/locales/en-GB/calendars.yml +195 -194
  206. data/resources/locales/en-GB/currencies.yml +953 -915
  207. data/resources/locales/en-GB/languages.yml +583 -580
  208. data/resources/locales/en-GB/layout.yml +5 -5
  209. data/resources/locales/en-GB/lists.yml +23 -7
  210. data/resources/locales/en-GB/numbers.yml +62 -57
  211. data/resources/locales/en-GB/plurals.yml +2 -1
  212. data/resources/locales/en-GB/rbnf.yml +4 -0
  213. data/resources/locales/en-GB/territories.yml +264 -263
  214. data/resources/locales/es/calendars.yml +288 -238
  215. data/resources/locales/es/currencies.yml +953 -922
  216. data/resources/locales/es/languages.yml +583 -580
  217. data/resources/locales/es/layout.yml +5 -5
  218. data/resources/locales/es/lists.yml +23 -7
  219. data/resources/locales/es/numbers.yml +62 -57
  220. data/resources/locales/es/plurals.yml +2 -2
  221. data/resources/locales/es/rbnf.yml +913 -0
  222. data/resources/locales/es/territories.yml +264 -263
  223. data/resources/locales/eu/calendars.yml +277 -218
  224. data/resources/locales/eu/currencies.yml +953 -916
  225. data/resources/locales/eu/languages.yml +583 -580
  226. data/resources/locales/eu/layout.yml +5 -5
  227. data/resources/locales/eu/lists.yml +23 -7
  228. data/resources/locales/eu/numbers.yml +56 -51
  229. data/resources/locales/eu/plurals.yml +2 -2
  230. data/resources/locales/eu/rbnf.yml +4 -0
  231. data/resources/locales/eu/territories.yml +264 -263
  232. data/resources/locales/fa/calendars.yml +294 -293
  233. data/resources/locales/fa/currencies.yml +955 -916
  234. data/resources/locales/fa/languages.yml +583 -580
  235. data/resources/locales/fa/layout.yml +5 -5
  236. data/resources/locales/fa/lists.yml +23 -7
  237. data/resources/locales/fa/numbers.yml +62 -57
  238. data/resources/locales/fa/plurals.yml +2 -2
  239. data/resources/locales/fa/rbnf.yml +157 -0
  240. data/resources/locales/fa/territories.yml +264 -263
  241. data/resources/locales/fi/calendars.yml +284 -283
  242. data/resources/locales/fi/currencies.yml +953 -915
  243. data/resources/locales/fi/languages.yml +583 -580
  244. data/resources/locales/fi/layout.yml +5 -5
  245. data/resources/locales/fi/lists.yml +23 -7
  246. data/resources/locales/fi/numbers.yml +62 -57
  247. data/resources/locales/fi/plurals.yml +3 -2
  248. data/resources/locales/fi/rbnf.yml +206 -0
  249. data/resources/locales/fi/territories.yml +264 -263
  250. data/resources/locales/fil/calendars.yml +281 -230
  251. data/resources/locales/fil/currencies.yml +953 -916
  252. data/resources/locales/fil/languages.yml +583 -580
  253. data/resources/locales/fil/layout.yml +5 -5
  254. data/resources/locales/fil/lists.yml +23 -7
  255. data/resources/locales/fil/numbers.yml +62 -57
  256. data/resources/locales/fil/plurals.yml +3 -2
  257. data/resources/locales/fil/rbnf.yml +158 -0
  258. data/resources/locales/fil/territories.yml +264 -263
  259. data/resources/locales/fr/calendars.yml +297 -296
  260. data/resources/locales/fr/currencies.yml +968 -949
  261. data/resources/locales/fr/languages.yml +583 -580
  262. data/resources/locales/fr/layout.yml +5 -5
  263. data/resources/locales/fr/lists.yml +23 -7
  264. data/resources/locales/fr/numbers.yml +62 -57
  265. data/resources/locales/fr/plurals.yml +2 -2
  266. data/resources/locales/fr/rbnf.yml +621 -0
  267. data/resources/locales/fr/territories.yml +264 -263
  268. data/resources/locales/ga/calendars.yml +192 -191
  269. data/resources/locales/ga/currencies.yml +954 -916
  270. data/resources/locales/ga/languages.yml +583 -580
  271. data/resources/locales/ga/layout.yml +5 -5
  272. data/resources/locales/ga/lists.yml +23 -7
  273. data/resources/locales/ga/numbers.yml +62 -57
  274. data/resources/locales/ga/plurals.yml +4 -3
  275. data/resources/locales/ga/rbnf.yml +615 -0
  276. data/resources/locales/ga/territories.yml +264 -263
  277. data/resources/locales/gl/calendars.yml +283 -217
  278. data/resources/locales/gl/currencies.yml +953 -916
  279. data/resources/locales/gl/languages.yml +583 -580
  280. data/resources/locales/gl/layout.yml +5 -5
  281. data/resources/locales/gl/lists.yml +23 -7
  282. data/resources/locales/gl/numbers.yml +62 -57
  283. data/resources/locales/gl/plurals.yml +3 -2
  284. data/resources/locales/gl/rbnf.yml +4 -0
  285. data/resources/locales/gl/territories.yml +264 -263
  286. data/resources/locales/he/calendars.yml +248 -220
  287. data/resources/locales/he/currencies.yml +992 -932
  288. data/resources/locales/he/languages.yml +583 -580
  289. data/resources/locales/he/layout.yml +5 -5
  290. data/resources/locales/he/lists.yml +23 -7
  291. data/resources/locales/he/numbers.yml +64 -59
  292. data/resources/locales/he/plurals.yml +6 -3
  293. data/resources/locales/he/rbnf.yml +1029 -0
  294. data/resources/locales/he/territories.yml +264 -263
  295. data/resources/locales/hi/calendars.yml +284 -216
  296. data/resources/locales/hi/currencies.yml +953 -915
  297. data/resources/locales/hi/languages.yml +583 -580
  298. data/resources/locales/hi/layout.yml +5 -5
  299. data/resources/locales/hi/lists.yml +23 -7
  300. data/resources/locales/hi/numbers.yml +60 -55
  301. data/resources/locales/hi/plurals.yml +2 -2
  302. data/resources/locales/hi/rbnf.yml +430 -0
  303. data/resources/locales/hi/territories.yml +264 -263
  304. data/resources/locales/hr/calendars.yml +308 -307
  305. data/resources/locales/hr/currencies.yml +1248 -1504
  306. data/resources/locales/hr/languages.yml +583 -580
  307. data/resources/locales/hr/layout.yml +5 -5
  308. data/resources/locales/hr/lists.yml +23 -7
  309. data/resources/locales/hr/numbers.yml +63 -59
  310. data/resources/locales/hr/plurals.yml +12 -4
  311. data/resources/locales/hr/rbnf.yml +599 -0
  312. data/resources/locales/hr/territories.yml +264 -263
  313. data/resources/locales/hu/calendars.yml +285 -284
  314. data/resources/locales/hu/currencies.yml +954 -916
  315. data/resources/locales/hu/languages.yml +583 -580
  316. data/resources/locales/hu/layout.yml +5 -5
  317. data/resources/locales/hu/lists.yml +23 -7
  318. data/resources/locales/hu/numbers.yml +62 -57
  319. data/resources/locales/hu/plurals.yml +2 -2
  320. data/resources/locales/hu/rbnf.yml +363 -0
  321. data/resources/locales/hu/territories.yml +264 -263
  322. data/resources/locales/id/calendars.yml +276 -275
  323. data/resources/locales/id/currencies.yml +954 -916
  324. data/resources/locales/id/languages.yml +583 -580
  325. data/resources/locales/id/layout.yml +5 -5
  326. data/resources/locales/id/lists.yml +23 -7
  327. data/resources/locales/id/numbers.yml +61 -56
  328. data/resources/locales/id/plurals.yml +2 -2
  329. data/resources/locales/id/rbnf.yml +121 -0
  330. data/resources/locales/id/territories.yml +264 -263
  331. data/resources/locales/is/calendars.yml +281 -242
  332. data/resources/locales/is/currencies.yml +954 -916
  333. data/resources/locales/is/languages.yml +583 -580
  334. data/resources/locales/is/layout.yml +5 -5
  335. data/resources/locales/is/lists.yml +23 -7
  336. data/resources/locales/is/numbers.yml +62 -57
  337. data/resources/locales/is/plurals.yml +5 -2
  338. data/resources/locales/is/rbnf.yml +326 -0
  339. data/resources/locales/is/territories.yml +264 -263
  340. data/resources/locales/it/calendars.yml +275 -260
  341. data/resources/locales/it/currencies.yml +953 -920
  342. data/resources/locales/it/languages.yml +583 -580
  343. data/resources/locales/it/layout.yml +5 -5
  344. data/resources/locales/it/lists.yml +23 -7
  345. data/resources/locales/it/numbers.yml +59 -54
  346. data/resources/locales/it/plurals.yml +3 -2
  347. data/resources/locales/it/rbnf.yml +1189 -0
  348. data/resources/locales/it/territories.yml +264 -263
  349. data/resources/locales/ja/calendars.yml +269 -207
  350. data/resources/locales/ja/currencies.yml +953 -915
  351. data/resources/locales/ja/languages.yml +583 -580
  352. data/resources/locales/ja/layout.yml +5 -5
  353. data/resources/locales/ja/lists.yml +23 -7
  354. data/resources/locales/ja/numbers.yml +62 -57
  355. data/resources/locales/ja/plurals.yml +2 -2
  356. data/resources/locales/ja/rbnf.yml +209 -0
  357. data/resources/locales/ja/territories.yml +264 -263
  358. data/resources/locales/ko/calendars.yml +246 -213
  359. data/resources/locales/ko/currencies.yml +953 -915
  360. data/resources/locales/ko/languages.yml +583 -580
  361. data/resources/locales/ko/layout.yml +5 -5
  362. data/resources/locales/ko/lists.yml +23 -7
  363. data/resources/locales/ko/numbers.yml +60 -55
  364. data/resources/locales/ko/plurals.yml +2 -2
  365. data/resources/locales/ko/rbnf.yml +722 -0
  366. data/resources/locales/ko/territories.yml +264 -263
  367. data/resources/locales/lv/calendars.yml +286 -285
  368. data/resources/locales/lv/currencies.yml +1122 -1084
  369. data/resources/locales/lv/languages.yml +583 -580
  370. data/resources/locales/lv/layout.yml +5 -5
  371. data/resources/locales/lv/lists.yml +23 -7
  372. data/resources/locales/lv/numbers.yml +63 -58
  373. data/resources/locales/lv/plurals.yml +11 -3
  374. data/resources/locales/lv/rbnf.yml +238 -0
  375. data/resources/locales/lv/territories.yml +264 -263
  376. data/resources/locales/ms/calendars.yml +280 -279
  377. data/resources/locales/ms/currencies.yml +954 -916
  378. data/resources/locales/ms/languages.yml +583 -580
  379. data/resources/locales/ms/layout.yml +5 -5
  380. data/resources/locales/ms/lists.yml +23 -7
  381. data/resources/locales/ms/numbers.yml +62 -57
  382. data/resources/locales/ms/plurals.yml +2 -2
  383. data/resources/locales/ms/rbnf.yml +130 -0
  384. data/resources/locales/ms/territories.yml +264 -263
  385. data/resources/locales/nb/calendars.yml +284 -283
  386. data/resources/locales/nb/currencies.yml +958 -916
  387. data/resources/locales/nb/languages.yml +583 -580
  388. data/resources/locales/nb/layout.yml +5 -5
  389. data/resources/locales/nb/lists.yml +23 -7
  390. data/resources/locales/nb/numbers.yml +62 -57
  391. data/resources/locales/nb/plurals.yml +2 -2
  392. data/resources/locales/nb/rbnf.yml +191 -0
  393. data/resources/locales/nb/territories.yml +264 -263
  394. data/resources/locales/nl/calendars.yml +285 -284
  395. data/resources/locales/nl/currencies.yml +953 -917
  396. data/resources/locales/nl/languages.yml +583 -580
  397. data/resources/locales/nl/layout.yml +5 -5
  398. data/resources/locales/nl/lists.yml +23 -7
  399. data/resources/locales/nl/numbers.yml +62 -57
  400. data/resources/locales/nl/plurals.yml +3 -2
  401. data/resources/locales/nl/rbnf.yml +320 -0
  402. data/resources/locales/nl/territories.yml +264 -263
  403. data/resources/locales/pl/calendars.yml +288 -287
  404. data/resources/locales/pl/currencies.yml +1326 -1284
  405. data/resources/locales/pl/languages.yml +583 -580
  406. data/resources/locales/pl/layout.yml +5 -5
  407. data/resources/locales/pl/lists.yml +23 -7
  408. data/resources/locales/pl/numbers.yml +64 -59
  409. data/resources/locales/pl/plurals.yml +11 -4
  410. data/resources/locales/pl/rbnf.yml +410 -0
  411. data/resources/locales/pl/territories.yml +264 -263
  412. data/resources/locales/pt/calendars.yml +290 -289
  413. data/resources/locales/pt/currencies.yml +954 -916
  414. data/resources/locales/pt/languages.yml +583 -580
  415. data/resources/locales/pt/layout.yml +5 -5
  416. data/resources/locales/pt/lists.yml +23 -7
  417. data/resources/locales/pt/numbers.yml +62 -57
  418. data/resources/locales/pt/plurals.yml +4 -2
  419. data/resources/locales/pt/rbnf.yml +586 -0
  420. data/resources/locales/pt/territories.yml +264 -263
  421. data/resources/locales/ro/calendars.yml +284 -283
  422. data/resources/locales/ro/currencies.yml +1170 -1132
  423. data/resources/locales/ro/languages.yml +583 -580
  424. data/resources/locales/ro/layout.yml +5 -5
  425. data/resources/locales/ro/lists.yml +23 -7
  426. data/resources/locales/ro/numbers.yml +63 -58
  427. data/resources/locales/ro/plurals.yml +5 -2
  428. data/resources/locales/ro/rbnf.yml +250 -0
  429. data/resources/locales/ro/territories.yml +264 -263
  430. data/resources/locales/ru/calendars.yml +282 -281
  431. data/resources/locales/ru/currencies.yml +1118 -1247
  432. data/resources/locales/ru/languages.yml +583 -580
  433. data/resources/locales/ru/layout.yml +5 -5
  434. data/resources/locales/ru/lists.yml +23 -7
  435. data/resources/locales/ru/numbers.yml +63 -59
  436. data/resources/locales/ru/plurals.yml +8 -4
  437. data/resources/locales/ru/rbnf.yml +385 -0
  438. data/resources/locales/ru/territories.yml +264 -263
  439. data/resources/locales/sk/calendars.yml +254 -251
  440. data/resources/locales/sk/currencies.yml +1174 -1008
  441. data/resources/locales/sk/languages.yml +583 -580
  442. data/resources/locales/sk/layout.yml +5 -5
  443. data/resources/locales/sk/lists.yml +23 -7
  444. data/resources/locales/sk/numbers.yml +64 -58
  445. data/resources/locales/sk/plurals.yml +6 -2
  446. data/resources/locales/sk/rbnf.yml +304 -0
  447. data/resources/locales/sk/territories.yml +264 -263
  448. data/resources/locales/sq/calendars.yml +283 -206
  449. data/resources/locales/sq/currencies.yml +954 -916
  450. data/resources/locales/sq/languages.yml +583 -580
  451. data/resources/locales/sq/layout.yml +5 -5
  452. data/resources/locales/sq/lists.yml +23 -7
  453. data/resources/locales/sq/numbers.yml +62 -57
  454. data/resources/locales/sq/plurals.yml +2 -2
  455. data/resources/locales/sq/rbnf.yml +181 -0
  456. data/resources/locales/sq/territories.yml +264 -263
  457. data/resources/locales/sr/calendars.yml +290 -289
  458. data/resources/locales/sr/currencies.yml +1251 -1508
  459. data/resources/locales/sr/languages.yml +583 -580
  460. data/resources/locales/sr/layout.yml +5 -5
  461. data/resources/locales/sr/lists.yml +23 -7
  462. data/resources/locales/sr/numbers.yml +62 -58
  463. data/resources/locales/sr/plurals.yml +12 -4
  464. data/resources/locales/sr/rbnf.yml +429 -0
  465. data/resources/locales/sr/territories.yml +264 -263
  466. data/resources/locales/sv/calendars.yml +290 -289
  467. data/resources/locales/sv/currencies.yml +960 -930
  468. data/resources/locales/sv/languages.yml +583 -580
  469. data/resources/locales/sv/layout.yml +5 -5
  470. data/resources/locales/sv/lists.yml +23 -7
  471. data/resources/locales/sv/numbers.yml +63 -58
  472. data/resources/locales/sv/plurals.yml +3 -2
  473. data/resources/locales/sv/rbnf.yml +692 -0
  474. data/resources/locales/sv/territories.yml +264 -263
  475. data/resources/locales/ta/calendars.yml +281 -266
  476. data/resources/locales/ta/currencies.yml +953 -915
  477. data/resources/locales/ta/languages.yml +583 -580
  478. data/resources/locales/ta/layout.yml +5 -5
  479. data/resources/locales/ta/lists.yml +23 -7
  480. data/resources/locales/ta/numbers.yml +62 -57
  481. data/resources/locales/ta/plurals.yml +2 -2
  482. data/resources/locales/ta/rbnf.yml +241 -0
  483. data/resources/locales/ta/territories.yml +264 -263
  484. data/resources/locales/th/calendars.yml +278 -289
  485. data/resources/locales/th/currencies.yml +953 -915
  486. data/resources/locales/th/languages.yml +583 -580
  487. data/resources/locales/th/layout.yml +5 -5
  488. data/resources/locales/th/lists.yml +23 -7
  489. data/resources/locales/th/numbers.yml +62 -57
  490. data/resources/locales/th/plurals.yml +2 -2
  491. data/resources/locales/th/rbnf.yml +119 -0
  492. data/resources/locales/th/territories.yml +264 -263
  493. data/resources/locales/tr/calendars.yml +287 -286
  494. data/resources/locales/tr/currencies.yml +953 -916
  495. data/resources/locales/tr/languages.yml +583 -580
  496. data/resources/locales/tr/layout.yml +5 -5
  497. data/resources/locales/tr/lists.yml +23 -7
  498. data/resources/locales/tr/numbers.yml +61 -56
  499. data/resources/locales/tr/plurals.yml +2 -2
  500. data/resources/locales/tr/rbnf.yml +277 -0
  501. data/resources/locales/tr/territories.yml +264 -263
  502. data/resources/locales/uk/calendars.yml +286 -252
  503. data/resources/locales/uk/currencies.yml +1311 -1070
  504. data/resources/locales/uk/languages.yml +583 -580
  505. data/resources/locales/uk/layout.yml +5 -5
  506. data/resources/locales/uk/lists.yml +23 -7
  507. data/resources/locales/uk/numbers.yml +64 -59
  508. data/resources/locales/uk/plurals.yml +10 -4
  509. data/resources/locales/uk/rbnf.yml +430 -0
  510. data/resources/locales/uk/territories.yml +264 -263
  511. data/resources/locales/ur/calendars.yml +267 -228
  512. data/resources/locales/ur/currencies.yml +954 -916
  513. data/resources/locales/ur/languages.yml +583 -580
  514. data/resources/locales/ur/layout.yml +5 -5
  515. data/resources/locales/ur/lists.yml +23 -7
  516. data/resources/locales/ur/numbers.yml +62 -57
  517. data/resources/locales/ur/plurals.yml +3 -2
  518. data/resources/locales/ur/rbnf.yml +4 -0
  519. data/resources/locales/ur/territories.yml +264 -263
  520. data/resources/locales/vi/calendars.yml +256 -236
  521. data/resources/locales/vi/currencies.yml +953 -915
  522. data/resources/locales/vi/languages.yml +583 -580
  523. data/resources/locales/vi/layout.yml +5 -5
  524. data/resources/locales/vi/lists.yml +23 -7
  525. data/resources/locales/vi/numbers.yml +62 -57
  526. data/resources/locales/vi/plurals.yml +2 -2
  527. data/resources/locales/vi/rbnf.yml +164 -0
  528. data/resources/locales/vi/territories.yml +264 -263
  529. data/resources/locales/zh/calendars.yml +266 -265
  530. data/resources/locales/zh/currencies.yml +953 -915
  531. data/resources/locales/zh/languages.yml +583 -580
  532. data/resources/locales/zh/layout.yml +5 -5
  533. data/resources/locales/zh/lists.yml +23 -7
  534. data/resources/locales/zh/numbers.yml +62 -57
  535. data/resources/locales/zh/plurals.yml +2 -2
  536. data/resources/locales/zh/rbnf.yml +689 -0
  537. data/resources/locales/zh/territories.yml +264 -263
  538. data/resources/locales/zh-Hant/calendars.yml +266 -265
  539. data/resources/locales/zh-Hant/currencies.yml +955 -915
  540. data/resources/locales/zh-Hant/languages.yml +583 -580
  541. data/resources/locales/zh-Hant/layout.yml +5 -5
  542. data/resources/locales/zh-Hant/lists.yml +23 -7
  543. data/resources/locales/zh-Hant/numbers.yml +62 -57
  544. data/resources/locales/zh-Hant/plurals.yml +2 -2
  545. data/resources/locales/zh-Hant/rbnf.yml +647 -0
  546. data/resources/locales/zh-Hant/territories.yml +264 -263
  547. data/resources/shared/currency_digits_and_rounding.yml +67 -64
  548. data/resources/shared/numbering_systems.yml +176 -0
  549. data/resources/shared/rbnf_root.yml +1573 -0
  550. data/resources/shared/segments/segments_root.yml +728 -0
  551. data/resources/shared/segments/tailorings/en.yml +8 -0
  552. data/resources/uli/segments/de.yml +128 -0
  553. data/resources/uli/segments/en.yml +154 -0
  554. data/resources/uli/segments/es.yml +112 -0
  555. data/resources/uli/segments/fr.yml +47 -0
  556. data/resources/uli/segments/it.yml +37 -0
  557. data/resources/uli/segments/pt.yml +173 -0
  558. data/resources/uli/segments/ru.yml +10 -0
  559. data/resources/unicode_data/casefolding.yml +4765 -0
  560. data/resources/unicode_data/indices/bidi_class.yml +4572 -0
  561. data/resources/unicode_data/indices/bidi_mirrored.yml +3087 -0
  562. data/resources/unicode_data/indices/category.yml +10918 -0
  563. data/resources/unicode_data/indices/keys.yml +101 -0
  564. data/resources/unicode_data/properties/line_break.yml +9269 -0
  565. data/resources/unicode_data/properties/sentence_break.yml +8067 -0
  566. data/resources/unicode_data/properties/word_break.yml +3001 -0
  567. data/spec/collation/collation_spec.rb +2 -1
  568. data/spec/collation/collator_spec.rb +4 -3
  569. data/spec/collation/tailoring_spec.rb +2 -2
  570. data/spec/collation/tailoring_tests/he.txt +5 -2
  571. data/spec/{tokenizers/calendars → data_readers}/additional_date_format_selector_spec.rb +13 -13
  572. data/spec/data_readers/date_time_data_reader_spec.rb +26 -0
  573. data/spec/data_readers/number_data_reader_spec.rb +18 -0
  574. data/spec/data_readers/timespan_data_reader.rb +22 -0
  575. data/spec/formatters/calendars/datetime_formatter_spec.rb +18 -22
  576. data/spec/formatters/list_formatter_spec.rb +16 -87
  577. data/spec/formatters/numbers/abbreviated/abbreviated_number_formatter_spec.rb +15 -59
  578. data/spec/formatters/numbers/abbreviated/long_decimal_formatter_spec.rb +32 -17
  579. data/spec/formatters/numbers/abbreviated/short_decimal_formatter_spec.rb +33 -17
  580. data/spec/formatters/numbers/currency_formatter_spec.rb +18 -13
  581. data/spec/formatters/numbers/decimal_formatter_spec.rb +16 -18
  582. data/spec/formatters/numbers/number_formatter_spec.rb +40 -31
  583. data/spec/formatters/numbers/percent_formatter_spec.rb +14 -6
  584. data/spec/formatters/numbers/rbnf/allowed_failures.yml +74 -0
  585. data/spec/formatters/numbers/rbnf/locales/af/rbnf_test.yml +706 -0
  586. data/spec/formatters/numbers/rbnf/locales/ar/rbnf_test.yml +706 -0
  587. data/spec/formatters/numbers/rbnf/locales/be/rbnf_test.yml +1174 -0
  588. data/spec/formatters/numbers/rbnf/locales/bg/rbnf_test.yml +706 -0
  589. data/spec/formatters/numbers/rbnf/locales/bn/rbnf_test.yml +1291 -0
  590. data/spec/formatters/numbers/rbnf/locales/ca/rbnf_test.yml +1174 -0
  591. data/spec/formatters/numbers/rbnf/locales/cs/rbnf_test.yml +823 -0
  592. data/spec/formatters/numbers/rbnf/locales/cy/rbnf_test.yml +940 -0
  593. data/spec/formatters/numbers/rbnf/locales/da/rbnf_test.yml +940 -0
  594. data/spec/formatters/numbers/rbnf/locales/de/rbnf_test.yml +940 -0
  595. data/spec/formatters/numbers/rbnf/locales/el/rbnf_test.yml +1174 -0
  596. data/spec/formatters/numbers/rbnf/locales/en/rbnf_test.yml +1291 -0
  597. data/spec/formatters/numbers/rbnf/locales/en-GB/rbnf_test.yml +1291 -0
  598. data/spec/formatters/numbers/rbnf/locales/es/rbnf_test.yml +1642 -0
  599. data/spec/formatters/numbers/rbnf/locales/eu/rbnf_test.yml +1291 -0
  600. data/spec/formatters/numbers/rbnf/locales/fa/rbnf_test.yml +589 -0
  601. data/spec/formatters/numbers/rbnf/locales/fi/rbnf_test.yml +706 -0
  602. data/spec/formatters/numbers/rbnf/locales/fil/rbnf_test.yml +706 -0
  603. data/spec/formatters/numbers/rbnf/locales/fr/rbnf_test.yml +1408 -0
  604. data/spec/formatters/numbers/rbnf/locales/ga/rbnf_test.yml +940 -0
  605. data/spec/formatters/numbers/rbnf/locales/gl/rbnf_test.yml +1291 -0
  606. data/spec/formatters/numbers/rbnf/locales/he/rbnf_test.yml +1057 -0
  607. data/spec/formatters/numbers/rbnf/locales/hi/rbnf_test.yml +823 -0
  608. data/spec/formatters/numbers/rbnf/locales/hr/rbnf_test.yml +1174 -0
  609. data/spec/formatters/numbers/rbnf/locales/hu/rbnf_test.yml +940 -0
  610. data/spec/formatters/numbers/rbnf/locales/id/rbnf_test.yml +706 -0
  611. data/spec/formatters/numbers/rbnf/locales/is/rbnf_test.yml +823 -0
  612. data/spec/formatters/numbers/rbnf/locales/it/rbnf_test.yml +1174 -0
  613. data/spec/formatters/numbers/rbnf/locales/ja/rbnf_test.yml +823 -0
  614. data/spec/formatters/numbers/rbnf/locales/ko/rbnf_test.yml +1408 -0
  615. data/spec/formatters/numbers/rbnf/locales/lv/rbnf_test.yml +706 -0
  616. data/spec/formatters/numbers/rbnf/locales/ms/rbnf_test.yml +706 -0
  617. data/spec/formatters/numbers/rbnf/locales/nb/rbnf_test.yml +940 -0
  618. data/spec/formatters/numbers/rbnf/locales/nl/rbnf_test.yml +706 -0
  619. data/spec/formatters/numbers/rbnf/locales/pl/rbnf_test.yml +823 -0
  620. data/spec/formatters/numbers/rbnf/locales/pt/rbnf_test.yml +1174 -0
  621. data/spec/formatters/numbers/rbnf/locales/ro/rbnf_test.yml +823 -0
  622. data/spec/formatters/numbers/rbnf/locales/ru/rbnf_test.yml +823 -0
  623. data/spec/formatters/numbers/rbnf/locales/sk/rbnf_test.yml +823 -0
  624. data/spec/formatters/numbers/rbnf/locales/sq/rbnf_test.yml +706 -0
  625. data/spec/formatters/numbers/rbnf/locales/sr/rbnf_test.yml +940 -0
  626. data/spec/formatters/numbers/rbnf/locales/sv/rbnf_test.yml +1876 -0
  627. data/spec/formatters/numbers/rbnf/locales/ta/rbnf_test.yml +706 -0
  628. data/spec/formatters/numbers/rbnf/locales/th/rbnf_test.yml +706 -0
  629. data/spec/formatters/numbers/rbnf/locales/tr/rbnf_test.yml +706 -0
  630. data/spec/formatters/numbers/rbnf/locales/uk/rbnf_test.yml +823 -0
  631. data/spec/formatters/numbers/rbnf/locales/ur/rbnf_test.yml +1291 -0
  632. data/spec/formatters/numbers/rbnf/locales/vi/rbnf_test.yml +706 -0
  633. data/spec/formatters/numbers/rbnf/locales/zh/rbnf_test.yml +940 -0
  634. data/spec/formatters/numbers/rbnf/locales/zh-Hant/rbnf_test.yml +940 -0
  635. data/spec/formatters/numbers/rbnf/rbnf_spec.rb +98 -0
  636. data/spec/formatters/plurals/plural_formatter_spec.rb +4 -4
  637. data/spec/formatters/plurals/rules_spec.rb +5 -5
  638. data/spec/localized/localized_date_spec.rb +1 -1
  639. data/spec/localized/localized_datetime_spec.rb +8 -13
  640. data/spec/localized/localized_number_spec.rb +17 -32
  641. data/spec/localized/localized_object_spec.rb +0 -5
  642. data/spec/localized/localized_string_spec.rb +40 -2
  643. data/spec/localized/localized_time_spec.rb +3 -6
  644. data/spec/localized/localized_timespan_spec.rb +144 -0
  645. data/spec/normalization_spec.rb +12 -12
  646. data/spec/parsers/number_parser_spec.rb +5 -5
  647. data/spec/parsers/parser_spec.rb +60 -0
  648. data/spec/parsers/segmentation_parser_spec.rb +96 -0
  649. data/spec/parsers/symbol_table_spec.rb +32 -0
  650. data/spec/parsers/unicode_regex/character_class_spec.rb +117 -0
  651. data/spec/parsers/unicode_regex/character_range_spec.rb +21 -0
  652. data/spec/parsers/unicode_regex/character_set_spec.rb +36 -0
  653. data/spec/parsers/unicode_regex/literal_spec.rb +34 -0
  654. data/spec/parsers/unicode_regex/unicode_string_spec.rb +22 -0
  655. data/spec/parsers/unicode_regex_parser_spec.rb +86 -0
  656. data/spec/readme_spec.rb +8 -269
  657. data/spec/shared/break_iterator_spec.rb +72 -0
  658. data/spec/shared/calendar_spec.rb +5 -4
  659. data/spec/shared/casefolder_spec.rb +30 -0
  660. data/spec/shared/casefolding.txt +251 -0
  661. data/spec/shared/casefolding_expected.txt +251 -0
  662. data/spec/shared/code_point_spec.rb +44 -14
  663. data/spec/shared/numbering_system_spec.rb +41 -0
  664. data/spec/shared/territories_spec.rb +14 -6
  665. data/spec/shared/unicode_regex_spec.rb +203 -0
  666. data/spec/spec_helper.rb +17 -0
  667. data/spec/tokenizers/calendars/date_tokenizer_spec.rb +26 -30
  668. data/spec/tokenizers/calendars/datetime_tokenizer_spec.rb +11 -90
  669. data/spec/tokenizers/calendars/time_tokenizer_spec.rb +5 -5
  670. data/spec/tokenizers/calendars/timespan_tokenizer_spec.rb +17 -7
  671. data/spec/tokenizers/numbers/number_tokenizer_spec.rb +28 -27
  672. data/spec/tokenizers/segmentation/segmentation_tokenizer_spec.rb +40 -0
  673. data/spec/tokenizers/unicode_regex/unicode_regex_tokenizer_spec.rb +190 -0
  674. data/spec/utils/range_set_spec.rb +171 -0
  675. data/spec/utils/yaml/yaml_spec.rb +62 -51
  676. data/twitter_cldr.gemspec +1 -1
  677. metadata +199 -30
  678. data/lib/twitter_cldr/formatters/base.rb +0 -47
  679. data/lib/twitter_cldr/formatters/calendars/date_formatter.rb +0 -19
  680. data/lib/twitter_cldr/formatters/calendars/time_formatter.rb +0 -19
  681. data/lib/twitter_cldr/normalization/base.rb +0 -37
  682. data/lib/twitter_cldr/normalization/hangul.rb +0 -79
  683. data/lib/twitter_cldr/normalization/nfc.rb +0 -24
  684. data/lib/twitter_cldr/normalization/nfd.rb +0 -26
  685. data/lib/twitter_cldr/normalization/nfkc.rb +0 -114
  686. data/lib/twitter_cldr/normalization/nfkd.rb +0 -120
  687. data/lib/twitter_cldr/normalization/quick_check.rb +0 -41
  688. data/lib/twitter_cldr/tokenizers/base.rb +0 -169
  689. data/lib/twitter_cldr/tokenizers/calendars/datetime_tokenizer.rb +0 -131
  690. data/lib/twitter_cldr/utils/territories.rb +0 -56
  691. data/spec/formatters/base_spec.rb +0 -18
  692. data/spec/formatters/calendars/timespan_formatter_spec.rb +0 -112
  693. data/spec/normalization/NormalizationTestShort.txt +0 -602
  694. data/spec/normalization/base_spec.rb +0 -16
  695. data/spec/normalization/hangul_spec.rb +0 -42
  696. data/spec/normalization/normalization_spec.rb +0 -113
  697. data/spec/tokenizers/base_spec.rb +0 -259
  698. data/spec/utils/territories_spec.rb +0 -16
@@ -0,0 +1,98 @@
1
+ # encoding: UTF-8
2
+
3
+ # Copyright 2012 Twitter, Inc
4
+ # http://www.apache.org/licenses/LICENSE-2.0
5
+
6
+ require 'spec_helper'
7
+
8
+ include TwitterCldr::Formatters::Rbnf
9
+
10
+ TEST_FILE_DIR = File.join(File.dirname(__FILE__), "locales")
11
+
12
+ def test_file_for(locale)
13
+ File.join(TEST_FILE_DIR, locale, "rbnf_test.yml")
14
+ end
15
+
16
+ failures = {}
17
+
18
+ describe RbnfFormatter do
19
+ def allowed_failures
20
+ @allowed_failures ||= begin
21
+ YAML.load_file(
22
+ File.join(File.dirname(__FILE__), "allowed_failures.yml")
23
+ )
24
+ end
25
+ end
26
+
27
+ def allowed_failure?(options = {})
28
+ trail = [:locale, :group, :rule_set]
29
+ dest = trail.inject(allowed_failures) do |ret, leg|
30
+ if ret && ret[options[leg]]
31
+ ret[options[leg]]
32
+ else
33
+ ret
34
+ end
35
+ end
36
+
37
+ if dest
38
+ dest.include?(options[:number])
39
+ else
40
+ false
41
+ end
42
+ end
43
+
44
+ TwitterCldr.supported_locales.each do |locale|
45
+ formatter = RbnfFormatter.new(locale)
46
+ test_data = YAML.load_file(test_file_for(locale.to_s))
47
+
48
+ describe locale.localize.as_language_code do
49
+ formatter.group_names.each do |group_name|
50
+
51
+ describe group_name do
52
+ formatter.rule_set_names_for_group(group_name).each do |rule_set_name|
53
+
54
+ describe rule_set_name.gsub("-", " ") do
55
+
56
+ # running basic test suite only runs spellout-numbering tests (for speed)
57
+ it "formats correctly", :slow => rule_set_name != "spellout-numbering" do
58
+ test_data[group_name][rule_set_name].each_pair do |number, expected|
59
+ got = formatter.format(number, {
60
+ :rule_group => group_name,
61
+ :rule_set => rule_set_name
62
+ })
63
+
64
+ if got != expected
65
+ opts = {
66
+ :locale => locale, :group => group_name,
67
+ :rule_set => rule_set_name, :number => number
68
+ }
69
+
70
+ unless allowed_failure?(opts)
71
+ failures[locale] ||= {}
72
+ failures[locale][group_name] ||= {}
73
+ failures[locale][group_name][rule_set_name] ||= []
74
+ failures[locale][group_name][rule_set_name] << number
75
+ got.should == expected
76
+ end
77
+ else
78
+ got.should == expected
79
+ end
80
+
81
+ end
82
+ end
83
+
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ after(:all) do
92
+ if failures.size > 0
93
+ puts "\nFailure hash:"
94
+ puts failures.inspect
95
+ end
96
+ end
97
+
98
+ end
@@ -11,11 +11,11 @@ describe PluralFormatter do
11
11
 
12
12
  describe '#initialize' do
13
13
  it 'fetches locale from options hash' do
14
- PluralFormatter.new(:locale => :ru).locale.should == :ru
14
+ PluralFormatter.new(:ru).locale.should == :ru
15
15
  end
16
16
 
17
- it "uses default locale if it's not passed in options hash" do
18
- PluralFormatter.new.locale.should == TwitterCldr::DEFAULT_LOCALE
17
+ it "uses current locale if it's not passed in options hash" do
18
+ PluralFormatter.new.locale.should == TwitterCldr.locale
19
19
  end
20
20
  end
21
21
 
@@ -198,7 +198,7 @@ describe PluralFormatter do
198
198
  describe '#pluralization_rule' do
199
199
  it 'delegates pluralization rule fetching to Rules.rule_for method' do
200
200
  mock(Plurals::Rules).rule_for(42, :jp) { 'result' }
201
- PluralFormatter.new(:locale => :jp).send(:pluralization_rule, 42).should == 'result'
201
+ PluralFormatter.new(:jp).send(:pluralization_rule, 42).should == 'result'
202
202
  end
203
203
  end
204
204
 
@@ -13,7 +13,7 @@ describe Rules do
13
13
  result = Rules.send(:get_resource, :ru)
14
14
 
15
15
  result.should include(:keys, :rule)
16
- result[:keys].size.should == 4
16
+ result[:keys].size.should == 3
17
17
  result[:rule].should be_a(Proc)
18
18
  end
19
19
  end
@@ -29,8 +29,8 @@ describe Rules do
29
29
  it "returns the correct values for Russian rules" do
30
30
  rules = {
31
31
  :one => [1, 101],
32
- :few => [2, 3, 4, 102],
33
- :many => ((5..11).to_a + [111])
32
+ :many => ((5..11).to_a + [111]),
33
+ :other => [2, 3, 4, 102]
34
34
  }
35
35
 
36
36
  rules.each do |rule, examples|
@@ -48,7 +48,7 @@ describe Rules do
48
48
  describe "#all_for" do
49
49
  it "returns a list of all applicable rules for the given locale" do
50
50
  Rules.all_for(:en).should =~ [:one, :other]
51
- Rules.all_for(:ru).should =~ [:one, :few, :many, :other]
51
+ Rules.all_for(:ru).should =~ [:one, :many, :other]
52
52
  end
53
53
 
54
54
  it "returns nil on error" do
@@ -61,7 +61,7 @@ describe Rules do
61
61
  describe "#all" do
62
62
  it "gets rules for the default locale (usually supplied by FastGettext)" do
63
63
  mock(TwitterCldr).locale { :ru }
64
- Rules.all.should =~ [:one, :few, :many, :other]
64
+ Rules.all.should =~ [:one, :many, :other]
65
65
  end
66
66
  end
67
67
  end
@@ -123,7 +123,7 @@ describe LocalizedDate do
123
123
  describe 'formatters' do
124
124
  it "don't raise errors for any locale" do
125
125
  TwitterCldr.supported_locales.each do |locale|
126
- (TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES - [:additional]).each do |type|
126
+ (LocalizedDate.types - [:additional]).each do |type|
127
127
  lambda { DateTime.now.localize(locale).to_date.send(:"to_#{type}_s") }.should_not raise_error
128
128
  end
129
129
  end
@@ -63,15 +63,15 @@ describe LocalizedDateTime do
63
63
  end
64
64
 
65
65
  describe "#to_timespan" do
66
- it "should return a localized timespan with a direction of :none" do
67
- date_time.localize.to_timespan.formatter.instance_variable_get(:'@direction').should == :none
66
+ it "should return a localized timespan" do
67
+ date_time.localize.to_timespan.should be_a(LocalizedTimespan)
68
68
  end
69
69
  end
70
70
 
71
71
  describe 'formatters' do
72
72
  it "don't raise errors for any locale" do
73
73
  TwitterCldr.supported_locales.each do |locale|
74
- (TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES - [:additional]).each do |type|
74
+ (TwitterCldr::DataReaders::CalendarDataReader.types - [:additional]).each do |type|
75
75
  lambda { date_time.localize(locale).send(:"to_#{type}_s") }.should_not raise_error
76
76
  end
77
77
  end
@@ -79,10 +79,11 @@ describe LocalizedDateTime do
79
79
 
80
80
  it "don't raise errors for additional date formats" do
81
81
  TwitterCldr.supported_locales.each do |locale|
82
- fmt = TwitterCldr::Formatters::DateTimeFormatter.new(:locale => locale)
83
- fmt.additional_format_selector.patterns.each do |pattern|
84
- lambda { fmt.format(date_time, :type => :additional, :format => pattern.to_s) }.should_not raise_error
85
- lambda { date_time.localize(locale).to_s(:format => pattern.to_s) }.should_not raise_error
82
+ data_reader = CalendarDataReader.new(locale)
83
+ data_reader.additional_format_selector.patterns.each do |pattern|
84
+ # puts "#{locale}: #{pattern}"
85
+ # lambda { date_time.localize(locale).to_additional_s(pattern.to_s) }.should_not raise_error
86
+ date_time.localize(locale).to_additional_s(pattern.to_s)
86
87
  end
87
88
  end
88
89
  end
@@ -94,12 +95,6 @@ describe LocalizedDateTime do
94
95
  mock.proxy(loc_date).to_default_s
95
96
  loc_date.to_s.should == "Sep 20, 1987, 10:05:00 PM"
96
97
  end
97
-
98
- it "uses the given format instead of the default when specified" do
99
- loc_date = date_time.localize
100
- mock.proxy(loc_date).to_default_s.never
101
- date_time.localize.to_s(:format => "MMMd").should == "Sep 20"
102
- end
103
98
  end
104
99
 
105
100
  describe "#with_timezone" do
@@ -13,29 +13,17 @@ describe LocalizedNumber do
13
13
  let(:decimal) { LocalizedNumber.new(10, :en) }
14
14
  let(:currency) { LocalizedNumber.new(10, :en, :type => :currency) }
15
15
 
16
- it 'uses :decimal type by default' do
17
- decimal.type.should == :decimal
18
- end
19
-
20
- it 'setups DecimalFormatter by default' do
21
- decimal.formatter.should be_an_instance_of(TwitterCldr::Formatters::DecimalFormatter)
16
+ it 'uses nil type by default (defers decision to data reader)' do
17
+ decimal.type.should == nil
22
18
  end
23
19
 
24
20
  it 'uses provided type if there is one' do
25
21
  currency.type.should == :currency
26
22
  end
27
23
 
28
- it 'setups formatter corresponding to the specified type' do
29
- currency.formatter.should be_an_instance_of(TwitterCldr::Formatters::CurrencyFormatter)
30
- end
31
-
32
- it 'setups formatter with correct locale' do
33
- mock.proxy(TwitterCldr::Formatters::DecimalFormatter).new(:locale => :es)
34
- LocalizedNumber.new(10, :es)
35
- end
36
-
37
- it 'raises ArguemntError if unsupported type is passed' do
38
- lambda { LocalizedNumber.new(10, :en, :type => :foo) }.should raise_error(ArgumentError, 'type foo is not supported')
24
+ it 'sets up object with correct locale, falls back to default locale' do
25
+ LocalizedNumber.new(10, :es).locale.should == :es
26
+ LocalizedNumber.new(10, :blarg).locale.should == TwitterCldr::DEFAULT_LOCALE
39
27
  end
40
28
  end
41
29
 
@@ -43,7 +31,7 @@ describe LocalizedNumber do
43
31
  let(:number) { LocalizedNumber.new(10, :en) }
44
32
  let(:currency) { LocalizedNumber.new(10, :en, :type => :currency) }
45
33
 
46
- LocalizedNumber::TYPES.each do |type|
34
+ LocalizedNumber.types.each do |type|
47
35
  describe "#to_#{type}" do
48
36
  let(:method) { "to_#{type}" }
49
37
 
@@ -51,7 +39,7 @@ describe LocalizedNumber do
51
39
  number.send(method).object_id.should_not == number.object_id
52
40
  end
53
41
 
54
- it 'creates an object of appropriate type, but does not change the type of the original object' do
42
+ it 'creates an object of the appropriate type, but does not change the type of the original object' do
55
43
  new_number = currency.send(method)
56
44
  new_number.type.should == type
57
45
  currency.type.should == :currency
@@ -59,24 +47,29 @@ describe LocalizedNumber do
59
47
 
60
48
  it 'creates a new object with the same base object and locale' do
61
49
  percent = LocalizedNumber.new(42, :fr, :type => :percent)
62
- mock.proxy(TwitterCldr::Localized::LocalizedNumber).new(42, :fr, :type => type)
63
- percent.send(method)
50
+ new_percent = percent.send(method)
51
+ new_percent.locale.should == :fr
52
+ new_percent.base_obj.should == 42
64
53
  end
65
54
  end
66
55
  end
67
56
  end
68
57
 
69
58
  describe '#to_s' do
59
+ it 'raises ArguemntError if unsupported type is passed' do
60
+ lambda do
61
+ LocalizedNumber.new(10, :en, :type => :foo).to_s
62
+ end.should raise_error(ArgumentError, 'Type foo is not supported')
63
+ end
64
+
70
65
  context 'decimals' do
71
66
  let(:number) { LocalizedNumber.new(10, :en) }
72
67
 
73
68
  it 'should default precision to zero' do
74
- mock.proxy(number.formatter).format(number.base_obj, { :type => :decimal })
75
69
  number.to_s.should == "10"
76
70
  end
77
71
 
78
72
  it 'should not overwrite precision when explicitly passed' do
79
- mock.proxy(number.formatter).format(number.base_obj, :precision => 2, :type => :decimal)
80
73
  number.to_s(:precision => 2).should == "10.00"
81
74
  end
82
75
  end
@@ -85,12 +78,10 @@ describe LocalizedNumber do
85
78
  let(:number) { LocalizedNumber.new(10, :en, :type => :currency) }
86
79
 
87
80
  it "should default to a precision of 2" do
88
- mock.proxy(number.formatter).format(number.base_obj, :precision => 2, :type => :currency)
89
81
  number.to_s(:precision => 2).should == "$10.00"
90
82
  end
91
83
 
92
84
  it 'should not overwrite precision when explicitly passed' do
93
- mock.proxy(number.formatter).format(number.base_obj, :precision => 1, :type => :currency)
94
85
  number.to_s(:precision => 1).should == "$10.0"
95
86
  end
96
87
  end
@@ -99,12 +90,10 @@ describe LocalizedNumber do
99
90
  let(:number) { LocalizedNumber.new(10, :en, :type => :percent) }
100
91
 
101
92
  it "should default to a precision of 0" do
102
- mock.proxy(number.formatter).format(number.base_obj, { :type => :percent })
103
93
  number.to_s.should == "10%"
104
94
  end
105
95
 
106
96
  it 'should not overwrite precision when explicitly passed' do
107
- mock.proxy(number.formatter).format(number.base_obj, :precision => 1, :type => :percent)
108
97
  number.to_s(:precision => 1).should == "10.0%"
109
98
  end
110
99
  end
@@ -113,12 +102,10 @@ describe LocalizedNumber do
113
102
  let(:number) { LocalizedNumber.new(1000, :en, :type => :short_decimal) }
114
103
 
115
104
  it "should default to a precision of 0" do
116
- mock.proxy(number.formatter).format(number.base_obj, { :type => :short_decimal })
117
105
  number.to_s.should == "1K"
118
106
  end
119
107
 
120
108
  it 'should not overwrite precision when explicitly passed' do
121
- mock.proxy(number.formatter).format(number.base_obj, :precision => 1, :type => :short_decimal)
122
109
  number.to_s(:precision => 1).should == "1.0K"
123
110
  end
124
111
  end
@@ -127,12 +114,10 @@ describe LocalizedNumber do
127
114
  let(:number) { LocalizedNumber.new(1000, :en, :type => :long_decimal) }
128
115
 
129
116
  it "should default to a precision of 0" do
130
- mock.proxy(number.formatter).format(number.base_obj, { :type => :long_decimal })
131
117
  number.to_s.should == "1 thousand"
132
118
  end
133
119
 
134
120
  it 'should not overwrite precision when explicitly passed' do
135
- mock.proxy(number.formatter).format(number.base_obj, :precision => 1, :type => :long_decimal)
136
121
  number.to_s(:precision => 1).should == "1.0 thousand"
137
122
  end
138
123
  end
@@ -141,7 +126,7 @@ describe LocalizedNumber do
141
126
  describe '#plural_rule' do
142
127
  it 'returns the appropriate plural rule for the number' do
143
128
  1.localize(:ru).plural_rule.should == :one
144
- 2.localize(:ru).plural_rule.should == :few
129
+ 2.localize(:ru).plural_rule.should == :other
145
130
  5.localize(:ru).plural_rule.should == :many
146
131
  end
147
132
 
@@ -41,11 +41,6 @@ describe LocalizedObject do
41
41
  LocalizedClass.new(base_object, :foobar).locale.should == TwitterCldr::DEFAULT_LOCALE
42
42
  end
43
43
 
44
- it 'passes options (including locale) to formatter' do
45
- mock(LocalizedFormatter).new(options.merge(:locale => locale))
46
- LocalizedClass.new(base_object, locale, options)
47
- end
48
-
49
44
  it "doesn't change original options hash" do
50
45
  lambda { LocalizedClass.new(base_object, locale, options) }.should_not change { options }
51
46
  end
@@ -133,12 +133,12 @@ describe LocalizedString do
133
133
  end
134
134
 
135
135
  it 'it uses NFD by default' do
136
- mock(TwitterCldr::Normalization::NFD).normalize(string) { normalized_string }
136
+ mock(Eprun).normalize(string, :nfd) { normalized_string }
137
137
  localized_string.normalize.base_obj.should == normalized_string
138
138
  end
139
139
 
140
140
  it "uses specified algorithm if there is any" do
141
- mock(TwitterCldr::Normalization::NFKD).normalize(string) { normalized_string }
141
+ mock(Eprun).normalize(string, :nfkd) { normalized_string }
142
142
  localized_string.normalize(:using => :NFKD).base_obj.should == normalized_string
143
143
  end
144
144
 
@@ -147,6 +147,44 @@ describe LocalizedString do
147
147
  end
148
148
  end
149
149
 
150
+ describe "#casefold" do
151
+ it 'returns a LocalizedString' do
152
+ str = "Weißrussland".localize.casefold
153
+ str.should be_an_instance_of(LocalizedString)
154
+ str.to_s.should == "weissrussland"
155
+ end
156
+
157
+ it 'does not pass the t option by default' do
158
+ "Istanbul".localize.casefold.to_s.should == "istanbul"
159
+ end
160
+
161
+ it 'uses the t option when explicitly given' do
162
+ "Istanbul".localize.casefold(:t => true).to_s.should == "ıstanbul"
163
+ end
164
+
165
+ it 'uses t by default if the locale is tr (az not supported)' do
166
+ "Istanbul".localize(:tr).casefold.to_s.should == "ıstanbul"
167
+ end
168
+ end
169
+
170
+ describe "#each_sentence" do
171
+ it "returns an enumerator if not passed a block" do
172
+ "foo bar".localize.each_sentence.should be_a(Enumerator)
173
+ end
174
+
175
+ it "yields sentences as localized strings" do
176
+ str = "Quick. Brown. Fox.".localize
177
+
178
+ str.each_sentence do |sentence|
179
+ sentence.should be_a(LocalizedString)
180
+ end
181
+
182
+ str.each_sentence.to_a.map(&:to_s).should == [
183
+ "Quick.", " Brown.", " Fox."
184
+ ]
185
+ end
186
+ end
187
+
150
188
  describe "#code_points" do
151
189
  it "returns an array of Unicode code points for the string" do
152
190
  "español".localize.code_points.should == [0x65, 0x73, 0x70, 0x61, 0xF1, 0x6F, 0x6C]
@@ -32,11 +32,8 @@ describe LocalizedTime do
32
32
  end
33
33
 
34
34
  describe "#ago" do
35
- it "should ago-ify a time with a number of different units" do
36
- base_time = time + 172800
37
- loc_time = time.localize(:de)
38
- loc_time.ago(:base_time => base_time).to_s(:unit => :hour).should match_normalized("Vor 48 Stunden")
39
- loc_time.ago(:base_time => base_time).to_s(:unit => :day).should match_normalized("Vor 2 Tagen")
35
+ it "should return a localized timespan" do
36
+ time.localize(:de).ago.should be_a(LocalizedTimespan)
40
37
  end
41
38
  end
42
39
 
@@ -61,7 +58,7 @@ describe LocalizedTime do
61
58
  describe 'formatters' do
62
59
  it "don't raise errors for any locale" do
63
60
  TwitterCldr.supported_locales.each do |locale|
64
- (TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES - [:additional]).each do |type|
61
+ (CalendarDataReader.types - [:additional]).each do |type|
65
62
  lambda { Time.now.localize(locale).send(:"to_#{type}_s") }.should_not raise_error
66
63
  end
67
64
  end
@@ -0,0 +1,144 @@
1
+ # encoding: UTF-8
2
+
3
+ # Copyright 2012 Twitter, Inc
4
+ # http://www.apache.org/licenses/LICENSE-2.0
5
+
6
+ require 'spec_helper'
7
+
8
+ include TwitterCldr::Localized
9
+
10
+ describe LocalizedTimespan do
11
+ it "should format a numer of seconds in different units" do
12
+ timespan = LocalizedTimespan.new(-172800, :locale => :de)
13
+ timespan.to_s(:unit => :hour).should match_normalized("Vor 48 Stunden")
14
+ timespan.to_s(:unit => :day).should match_normalized("Vor 2 Tagen")
15
+ end
16
+
17
+ it "approximates timespans accurately if explicity asked" do
18
+ options = {
19
+ :direction => :none,
20
+ :approximate => true
21
+ }
22
+
23
+ expected = {
24
+ 44 => "44 Sekunden",
25
+ 45 => "1 Minute",
26
+ 2699 => "45 Minuten",
27
+ 2700 => "1 Stunde",
28
+ 64799 => "18 Stunden",
29
+ 64800 => "1 Tag",
30
+ 453599 => "5 Tage",
31
+ 453600 => "1 Woche",
32
+ 1972307 => "3 Wochen",
33
+ 1972308 => "1 Monat",
34
+ 23667694 => "9 Monate",
35
+ 23667695 => "1 Jahr"
36
+ }
37
+
38
+ expected.each_pair do |seconds, text|
39
+ timespan = LocalizedTimespan.new(seconds, :locale => :de)
40
+ timespan.to_s(options).should match_normalized(text)
41
+ end
42
+ end
43
+
44
+ it "doesn't approximate timespans by default" do
45
+ options = { :direction => :none }
46
+ expected = {
47
+ 44 => "44 Sekunden",
48
+ 45 => "45 Sekunden",
49
+ 2699 => "45 Minuten",
50
+ 2700 => "45 Minuten",
51
+ 64799 => "18 Stunden",
52
+ 64800 => "18 Stunden",
53
+ 453599 => "5 Tage",
54
+ 453600 => "5 Tage",
55
+ 1972307 => "3 Wochen",
56
+ 1972308 => "3 Wochen",
57
+ 23667694 => "9 Monate",
58
+ 23667695 => "9 Monate",
59
+ 31556926 => "1 Jahr"
60
+ }
61
+
62
+ expected.each_pair do |seconds, text|
63
+ timespan = LocalizedTimespan.new(seconds, :locale => :de)
64
+ timespan.to_s(options).should match_normalized(text)
65
+ end
66
+ end
67
+
68
+ describe "non-directional" do
69
+ it "works for a variety of units" do
70
+ timespan = LocalizedTimespan.new(3273932, :locale => :de)
71
+ options = { :direction => :none }
72
+ expected = {
73
+ :year => '0 Jahre',
74
+ :month => '1 Monat',
75
+ :week => '5 Wochen',
76
+ :day => '38 Tage',
77
+ :hour => '909 Stunden',
78
+ :minute => '54566 Minuten',
79
+ :second => '3273932 Sekunden'
80
+ }
81
+
82
+ expected.each_pair do |unit, text|
83
+ timespan.to_s(options.merge(:unit => unit)).should match_normalized(text)
84
+ end
85
+ end
86
+ end
87
+
88
+ describe "ago" do
89
+ it "works for a variety of units" do
90
+ timespan = LocalizedTimespan.new(-3273932, :locale => :de)
91
+ expected = {
92
+ :year => 'Vor 0 Jahren',
93
+ :month => 'Vor 1 Monat',
94
+ :week => 'Vor 5 Wochen',
95
+ :day => 'Vor 38 Tagen',
96
+ :hour => 'Vor 909 Stunden',
97
+ :minute => 'Vor 54566 Minuten',
98
+ :second => 'Vor 3273932 Sekunden'
99
+ }
100
+
101
+ expected.each_pair do |unit, text|
102
+ timespan.to_s(:unit => unit).should match_normalized(text)
103
+ end
104
+ end
105
+ end
106
+
107
+ describe "#until" do
108
+ it "works for a variety of units" do
109
+ timespan = LocalizedTimespan.new(3273932, :locale => :de)
110
+ expected = {
111
+ :year => 'In 0 Jahren',
112
+ :month => 'In 1 Monat',
113
+ :week => 'In 5 Wochen',
114
+ :day => 'In 38 Tagen',
115
+ :hour => 'In 909 Stunden',
116
+ :minute => 'In 54566 Minuten',
117
+ :second => 'In 3273932 Sekunden'
118
+ }
119
+
120
+ expected.each_pair do |unit, text|
121
+ timespan.to_s(:unit => unit).should match_normalized(text)
122
+ end
123
+ end
124
+ end
125
+
126
+ # Note: non-directional timespans are the only ones that support the abbreviated type (i.e. ago and until cannot be abbreviated)
127
+ describe "non-directional" do
128
+ it "works for a variety of units" do
129
+ # year/month/week not supported
130
+ timespan = LocalizedTimespan.new(3273932)
131
+ options = { :type => :abbreviated, :direction => :none }
132
+ expected = {
133
+ :day => '38d',
134
+ :hour => '909h',
135
+ :minute => '54566m',
136
+ :second => '3273932s'
137
+ }
138
+
139
+ expected.each_pair do |unit, text|
140
+ timespan.to_s(options.merge(:unit => unit)).should match_normalized(text)
141
+ end
142
+ end
143
+ end
144
+ end
@@ -5,8 +5,6 @@
5
5
 
6
6
  require 'spec_helper'
7
7
 
8
- include TwitterCldr
9
-
10
8
  describe TwitterCldr::Normalization do
11
9
 
12
10
  describe "#normalize" do
@@ -14,27 +12,29 @@ describe TwitterCldr::Normalization do
14
12
  let(:normalized_string) { 'normalized' }
15
13
 
16
14
  it 'it uses NFD by default' do
17
- mock(TwitterCldr::Normalization::NFD).normalize(string) { normalized_string }
18
- Normalization.normalize(string).should == normalized_string
15
+ mock(Eprun).normalize(string, :nfd) { normalized_string }
16
+ TwitterCldr::Normalization.normalize(string).should == normalized_string
19
17
  end
20
18
 
21
19
  it "uses specified algorithm if there is any" do
22
- mock(TwitterCldr::Normalization::NFKD).normalize(string) { normalized_string }
23
- Normalization.normalize(string, :using => :NFKD).should == normalized_string
20
+ mock(Eprun).normalize(string, :nfkd) { normalized_string }
21
+ TwitterCldr::Normalization.normalize(string, :using => :nfkd).should == normalized_string
24
22
  end
25
23
 
26
24
  it "raises an ArgumentError if passed an unsupported normalizer name" do
27
- lambda { Normalization.normalize(string, :using => :blarg) }.should raise_error(ArgumentError)
25
+ lambda do
26
+ TwitterCldr::Normalization.normalize(string, :using => :blarg)
27
+ end.should raise_error(ArgumentError)
28
28
  end
29
29
 
30
- it 'accepts normalizer name in a lower case' do
31
- mock(TwitterCldr::Normalization::NFKD).normalize(string) { normalized_string }
32
- Normalization.normalize(string, :using => :nfkd).should == normalized_string
30
+ it 'accepts normalizer name in upper case' do
31
+ mock(Eprun).normalize(string, :nfkd) { normalized_string }
32
+ TwitterCldr::Normalization.normalize(string, :using => :NFKD).should == normalized_string
33
33
  end
34
34
 
35
35
  it 'accepts a string' do
36
- mock(TwitterCldr::Normalization::NFKD).normalize(string) { normalized_string }
37
- Normalization.normalize(string, :using => 'NFKD').should == normalized_string
36
+ mock(Eprun).normalize(string, :nfkd) { normalized_string }
37
+ TwitterCldr::Normalization.normalize(string, :using => 'nfkd').should == normalized_string
38
38
  end
39
39
 
40
40
  end