activesupport 2.3.5 → 2.3.6.pre

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activesupport might be problematic. Click here for more details.

Files changed (121) hide show
  1. data/CHANGELOG +23 -0
  2. data/lib/active_support.rb +1 -0
  3. data/lib/active_support/core_ext/date_time/conversions.rb +14 -3
  4. data/lib/active_support/core_ext/enumerable.rb +6 -0
  5. data/lib/active_support/core_ext/file/atomic.rb +2 -1
  6. data/lib/active_support/core_ext/numeric/conversions.rb +2 -2
  7. data/lib/active_support/core_ext/object.rb +1 -0
  8. data/lib/active_support/core_ext/object/metaclass.rb +6 -5
  9. data/lib/active_support/core_ext/object/singleton_class.rb +13 -0
  10. data/lib/active_support/core_ext/string.rb +0 -1
  11. data/lib/active_support/core_ext/string/output_safety.rb +148 -44
  12. data/lib/active_support/core_ext/time/calculations.rb +1 -1
  13. data/lib/active_support/inflector.rb +1 -1
  14. data/lib/active_support/json/backends/yajl.rb +40 -0
  15. data/lib/active_support/json/decoding.rb +16 -1
  16. data/lib/active_support/json/encoding.rb +11 -2
  17. data/lib/active_support/ordered_hash.rb +24 -1
  18. data/lib/active_support/vendor.rb +10 -2
  19. data/lib/active_support/vendor/i18n-0.3.3/CHANGELOG.textile +76 -0
  20. data/lib/active_support/vendor/{i18n-0.1.3 → i18n-0.3.3}/MIT-LICENSE +0 -0
  21. data/lib/active_support/vendor/i18n-0.3.3/README.textile +81 -0
  22. data/lib/active_support/vendor/i18n-0.3.3/Rakefile +24 -0
  23. data/lib/active_support/vendor/i18n-0.3.3/benchmark/example.yml +144 -0
  24. data/lib/active_support/vendor/i18n-0.3.3/benchmark/run.rb +71 -0
  25. data/lib/active_support/vendor/i18n-0.3.3/contributors.txt +17 -0
  26. data/lib/active_support/vendor/i18n-0.3.3/i18n.gemspec +165 -0
  27. data/lib/active_support/vendor/i18n-0.3.3/init.rb +1 -0
  28. data/lib/active_support/vendor/{i18n-0.1.3 → i18n-0.3.3}/lib/i18n.rb +99 -21
  29. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend.rb +17 -0
  30. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/active_record.rb +70 -0
  31. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/active_record/missing.rb +67 -0
  32. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/active_record/store_procs.rb +38 -0
  33. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/active_record/translation.rb +83 -0
  34. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/base.rb +259 -0
  35. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/cache.rb +75 -0
  36. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/cascade.rb +44 -0
  37. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/chain.rb +74 -0
  38. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/fallbacks.rb +52 -0
  39. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/fast.rb +68 -0
  40. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/gettext.rb +75 -0
  41. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/helpers.rb +80 -0
  42. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/interpolation_compiler.rb +119 -0
  43. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/metadata.rb +73 -0
  44. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/pluralization.rb +57 -0
  45. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/backend/simple.rb +22 -0
  46. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/core_ext/object/meta_class.rb +5 -0
  47. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/core_ext/string/interpolate.rb +99 -0
  48. data/lib/active_support/vendor/{i18n-0.1.3 → i18n-0.3.3}/lib/i18n/exceptions.rb +14 -6
  49. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/gettext.rb +25 -0
  50. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/helpers.rb +5 -0
  51. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/helpers/gettext.rb +64 -0
  52. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/locale.rb +6 -0
  53. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/locale/fallbacks.rb +98 -0
  54. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/locale/tag.rb +28 -0
  55. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/locale/tag/parents.rb +24 -0
  56. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/locale/tag/rfc4646.rb +76 -0
  57. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/locale/tag/simple.rb +41 -0
  58. data/lib/active_support/vendor/i18n-0.3.3/lib/i18n/version.rb +3 -0
  59. data/lib/active_support/vendor/i18n-0.3.3/test/all.rb +8 -0
  60. data/lib/active_support/vendor/i18n-0.3.3/test/api/basics.rb +15 -0
  61. data/lib/active_support/vendor/i18n-0.3.3/test/api/defaults.rb +40 -0
  62. data/lib/active_support/vendor/i18n-0.3.3/test/api/interpolation.rb +92 -0
  63. data/lib/active_support/vendor/i18n-0.3.3/test/api/link.rb +55 -0
  64. data/lib/active_support/vendor/i18n-0.3.3/test/api/localization/date.rb +91 -0
  65. data/lib/active_support/vendor/i18n-0.3.3/test/api/localization/date_time.rb +90 -0
  66. data/lib/active_support/vendor/i18n-0.3.3/test/api/localization/procs.rb +54 -0
  67. data/lib/active_support/vendor/i18n-0.3.3/test/api/localization/time.rb +84 -0
  68. data/lib/active_support/vendor/i18n-0.3.3/test/api/lookup.rb +45 -0
  69. data/lib/active_support/vendor/i18n-0.3.3/test/api/pluralization.rb +35 -0
  70. data/lib/active_support/vendor/i18n-0.3.3/test/api/procs.rb +40 -0
  71. data/lib/active_support/vendor/i18n-0.3.3/test/cases/api/active_record_test.rb +29 -0
  72. data/lib/active_support/vendor/i18n-0.3.3/test/cases/api/all_features_test.rb +40 -0
  73. data/lib/active_support/vendor/i18n-0.3.3/test/cases/api/cascade_test.rb +31 -0
  74. data/lib/active_support/vendor/i18n-0.3.3/test/cases/api/chain_test.rb +26 -0
  75. data/lib/active_support/vendor/i18n-0.3.3/test/cases/api/fallbacks_test.rb +33 -0
  76. data/lib/active_support/vendor/i18n-0.3.3/test/cases/api/fast_test.rb +31 -0
  77. data/lib/active_support/vendor/i18n-0.3.3/test/cases/api/pluralization_test.rb +33 -0
  78. data/lib/active_support/vendor/i18n-0.3.3/test/cases/api/simple_test.rb +21 -0
  79. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/active_record/missing_test.rb +60 -0
  80. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/active_record_test.rb +52 -0
  81. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/cache_test.rb +72 -0
  82. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/cascade_test.rb +66 -0
  83. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/chain_test.rb +64 -0
  84. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/fallbacks_test.rb +57 -0
  85. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/fast_test.rb +50 -0
  86. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/helpers_test.rb +26 -0
  87. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/interpolation_compiler_test.rb +107 -0
  88. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/metadata_test.rb +67 -0
  89. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/pluralization_test.rb +43 -0
  90. data/lib/active_support/vendor/i18n-0.3.3/test/cases/backend/simple_test.rb +77 -0
  91. data/lib/active_support/vendor/i18n-0.3.3/test/cases/core_ext/string/interpolate_test.rb +94 -0
  92. data/lib/active_support/vendor/i18n-0.3.3/test/cases/gettext/api_test.rb +201 -0
  93. data/lib/active_support/vendor/i18n-0.3.3/test/cases/gettext/backend_test.rb +91 -0
  94. data/lib/active_support/vendor/{i18n-0.1.3/test → i18n-0.3.3/test/cases}/i18n_exceptions_test.rb +8 -10
  95. data/lib/active_support/vendor/i18n-0.3.3/test/cases/i18n_load_path_test.rb +23 -0
  96. data/lib/active_support/vendor/i18n-0.3.3/test/cases/i18n_test.rb +172 -0
  97. data/lib/active_support/vendor/i18n-0.3.3/test/cases/locale/fallbacks_test.rb +126 -0
  98. data/lib/active_support/vendor/i18n-0.3.3/test/cases/locale/tag/rfc4646_test.rb +143 -0
  99. data/lib/active_support/vendor/i18n-0.3.3/test/cases/locale/tag/simple_test.rb +33 -0
  100. data/lib/active_support/vendor/i18n-0.3.3/test/fixtures/locales/de.po +72 -0
  101. data/lib/active_support/vendor/i18n-0.3.3/test/fixtures/locales/en.rb +3 -0
  102. data/lib/active_support/vendor/i18n-0.3.3/test/fixtures/locales/en.yml +3 -0
  103. data/lib/active_support/vendor/i18n-0.3.3/test/fixtures/locales/plurals.rb +113 -0
  104. data/lib/active_support/vendor/i18n-0.3.3/test/test_helper.rb +100 -0
  105. data/lib/active_support/vendor/i18n-0.3.3/vendor/po_parser.rb +329 -0
  106. data/lib/active_support/version.rb +1 -1
  107. data/lib/active_support/whiny_nil.rb +1 -1
  108. data/lib/active_support/xml_mini/libxml.rb +23 -83
  109. data/lib/active_support/xml_mini/libxmlsax.rb +74 -0
  110. data/lib/active_support/xml_mini/nokogiri.rb +25 -22
  111. data/lib/active_support/xml_mini/nokogirisax.rb +73 -0
  112. metadata +108 -20
  113. data/lib/active_support/vendor/i18n-0.1.3/README.textile +0 -20
  114. data/lib/active_support/vendor/i18n-0.1.3/Rakefile +0 -5
  115. data/lib/active_support/vendor/i18n-0.1.3/i18n.gemspec +0 -27
  116. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/backend/simple.rb +0 -214
  117. data/lib/active_support/vendor/i18n-0.1.3/test/all.rb +0 -5
  118. data/lib/active_support/vendor/i18n-0.1.3/test/i18n_test.rb +0 -124
  119. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.rb +0 -1
  120. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.yml +0 -3
  121. data/lib/active_support/vendor/i18n-0.1.3/test/simple_backend_test.rb +0 -567
@@ -1,20 +0,0 @@
1
- h1. Ruby I18n gem
2
-
3
- I18n and localization solution for Ruby.
4
-
5
- For information please refer to http://rails-i18n.org
6
-
7
- h2. Authors
8
-
9
- * "Matt Aimonetti":http://railsontherun.com
10
- * "Sven Fuchs":http://www.artweb-design.de
11
- * "Joshua Harvey":http://www.workingwithrails.com/person/759-joshua-harvey
12
- * "Saimon Moore":http://saimonmoore.net
13
- * "Stephan Soller":http://www.arkanis-development.de
14
-
15
- h2. License
16
-
17
- MIT License. See the included MIT-LICENCE file.
18
-
19
-
20
-
@@ -1,5 +0,0 @@
1
- task :default => [:test]
2
-
3
- task :test do
4
- ruby "test/all.rb"
5
- end
@@ -1,27 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = "i18n"
3
- s.version = "0.1.3"
4
- s.date = "2009-01-09"
5
- s.summary = "Internationalization support for Ruby"
6
- s.email = "rails-i18n@googlegroups.com"
7
- s.homepage = "http://rails-i18n.org"
8
- s.description = "Add Internationalization support to your Ruby application."
9
- s.has_rdoc = false
10
- s.authors = ['Sven Fuchs', 'Joshua Harvey', 'Matt Aimonetti', 'Stephan Soller', 'Saimon Moore']
11
- s.files = [
12
- 'i18n.gemspec',
13
- 'lib/i18n/backend/simple.rb',
14
- 'lib/i18n/exceptions.rb',
15
- 'lib/i18n.rb',
16
- 'MIT-LICENSE',
17
- 'README.textile'
18
- ]
19
- s.test_files = [
20
- 'test/all.rb',
21
- 'test/i18n_exceptions_test.rb',
22
- 'test/i18n_test.rb',
23
- 'test/locale/en.rb',
24
- 'test/locale/en.yml',
25
- 'test/simple_backend_test.rb'
26
- ]
27
- end
@@ -1,214 +0,0 @@
1
- require 'yaml'
2
-
3
- module I18n
4
- module Backend
5
- class Simple
6
- INTERPOLATION_RESERVED_KEYS = %w(scope default)
7
- MATCH = /(\\\\)?\{\{([^\}]+)\}\}/
8
-
9
- # Accepts a list of paths to translation files. Loads translations from
10
- # plain Ruby (*.rb) or YAML files (*.yml). See #load_rb and #load_yml
11
- # for details.
12
- def load_translations(*filenames)
13
- filenames.each { |filename| load_file(filename) }
14
- end
15
-
16
- # Stores translations for the given locale in memory.
17
- # This uses a deep merge for the translations hash, so existing
18
- # translations will be overwritten by new ones only at the deepest
19
- # level of the hash.
20
- def store_translations(locale, data)
21
- merge_translations(locale, data)
22
- end
23
-
24
- def translate(locale, key, options = {})
25
- raise InvalidLocale.new(locale) if locale.nil?
26
- return key.map { |k| translate(locale, k, options) } if key.is_a? Array
27
-
28
- reserved = :scope, :default
29
- count, scope, default = options.values_at(:count, *reserved)
30
- options.delete(:default)
31
- values = options.reject { |name, value| reserved.include?(name) }
32
-
33
- entry = lookup(locale, key, scope)
34
- if entry.nil?
35
- entry = default(locale, default, options)
36
- if entry.nil?
37
- raise(I18n::MissingTranslationData.new(locale, key, options))
38
- end
39
- end
40
- entry = pluralize(locale, entry, count)
41
- entry = interpolate(locale, entry, values)
42
- entry
43
- end
44
-
45
- # Acts the same as +strftime+, but returns a localized version of the
46
- # formatted date string. Takes a key from the date/time formats
47
- # translations as a format argument (<em>e.g.</em>, <tt>:short</tt> in <tt>:'date.formats'</tt>).
48
- def localize(locale, object, format = :default)
49
- raise ArgumentError, "Object must be a Date, DateTime or Time object. #{object.inspect} given." unless object.respond_to?(:strftime)
50
-
51
- type = object.respond_to?(:sec) ? 'time' : 'date'
52
- # TODO only translate these if format is a String?
53
- formats = translate(locale, :"#{type}.formats")
54
- format = formats[format.to_sym] if formats && formats[format.to_sym]
55
- # TODO raise exception unless format found?
56
- format = format.to_s.dup
57
-
58
- # TODO only translate these if the format string is actually present
59
- # TODO check which format strings are present, then bulk translate then, then replace them
60
- format.gsub!(/%a/, translate(locale, :"date.abbr_day_names")[object.wday])
61
- format.gsub!(/%A/, translate(locale, :"date.day_names")[object.wday])
62
- format.gsub!(/%b/, translate(locale, :"date.abbr_month_names")[object.mon])
63
- format.gsub!(/%B/, translate(locale, :"date.month_names")[object.mon])
64
- format.gsub!(/%p/, translate(locale, :"time.#{object.hour < 12 ? :am : :pm}")) if object.respond_to? :hour
65
- object.strftime(format)
66
- end
67
-
68
- def initialized?
69
- @initialized ||= false
70
- end
71
-
72
- # Returns an array of locales for which translations are available
73
- def available_locales
74
- init_translations unless initialized?
75
- translations.keys
76
- end
77
-
78
- def reload!
79
- @initialized = false
80
- @translations = nil
81
- end
82
-
83
- protected
84
- def init_translations
85
- load_translations(*I18n.load_path.flatten)
86
- @initialized = true
87
- end
88
-
89
- def translations
90
- @translations ||= {}
91
- end
92
-
93
- # Looks up a translation from the translations hash. Returns nil if
94
- # eiher key is nil, or locale, scope or key do not exist as a key in the
95
- # nested translations hash. Splits keys or scopes containing dots
96
- # into multiple keys, i.e. <tt>currency.format</tt> is regarded the same as
97
- # <tt>%w(currency format)</tt>.
98
- def lookup(locale, key, scope = [])
99
- return unless key
100
- init_translations unless initialized?
101
- keys = I18n.send(:normalize_translation_keys, locale, key, scope)
102
- keys.inject(translations) do |result, k|
103
- if (x = result[k.to_sym]).nil?
104
- return nil
105
- else
106
- x
107
- end
108
- end
109
- end
110
-
111
- # Evaluates a default translation.
112
- # If the given default is a String it is used literally. If it is a Symbol
113
- # it will be translated with the given options. If it is an Array the first
114
- # translation yielded will be returned.
115
- #
116
- # <em>I.e.</em>, <tt>default(locale, [:foo, 'default'])</tt> will return +default+ if
117
- # <tt>translate(locale, :foo)</tt> does not yield a result.
118
- def default(locale, default, options = {})
119
- case default
120
- when String then default
121
- when Symbol then translate locale, default, options
122
- when Array then default.each do |obj|
123
- result = default(locale, obj, options.dup) and return result
124
- end and nil
125
- end
126
- rescue MissingTranslationData
127
- nil
128
- end
129
-
130
- # Picks a translation from an array according to English pluralization
131
- # rules. It will pick the first translation if count is not equal to 1
132
- # and the second translation if it is equal to 1. Other backends can
133
- # implement more flexible or complex pluralization rules.
134
- def pluralize(locale, entry, count)
135
- return entry unless entry.is_a?(Hash) and count
136
- # raise InvalidPluralizationData.new(entry, count) unless entry.is_a?(Hash)
137
- key = :zero if count == 0 && entry.has_key?(:zero)
138
- key ||= count == 1 ? :one : :other
139
- raise InvalidPluralizationData.new(entry, count) unless entry.has_key?(key)
140
- entry[key]
141
- end
142
-
143
- # Interpolates values into a given string.
144
- #
145
- # interpolate "file {{file}} opened by \\{{user}}", :file => 'test.txt', :user => 'Mr. X'
146
- # # => "file test.txt opened by {{user}}"
147
- #
148
- # Note that you have to double escape the <tt>\\</tt> when you want to escape
149
- # the <tt>{{...}}</tt> key in a string (once for the string and once for the
150
- # interpolation).
151
- def interpolate(locale, string, values = {})
152
- return string unless string.is_a?(String)
153
-
154
- string.gsub(MATCH) do
155
- escaped, pattern, key = $1, $2, $2.to_sym
156
-
157
- if escaped
158
- pattern
159
- elsif INTERPOLATION_RESERVED_KEYS.include?(pattern)
160
- raise ReservedInterpolationKey.new(pattern, string)
161
- elsif !values.include?(key)
162
- raise MissingInterpolationArgument.new(pattern, string)
163
- else
164
- values[key].to_s
165
- end
166
- end
167
- end
168
-
169
- # Loads a single translations file by delegating to #load_rb or
170
- # #load_yml depending on the file extension and directly merges the
171
- # data to the existing translations. Raises I18n::UnknownFileType
172
- # for all other file extensions.
173
- def load_file(filename)
174
- type = File.extname(filename).tr('.', '').downcase
175
- raise UnknownFileType.new(type, filename) unless respond_to?(:"load_#{type}")
176
- data = send :"load_#{type}", filename # TODO raise a meaningful exception if this does not yield a Hash
177
- data.each { |locale, d| merge_translations(locale, d) }
178
- end
179
-
180
- # Loads a plain Ruby translations file. eval'ing the file must yield
181
- # a Hash containing translation data with locales as toplevel keys.
182
- def load_rb(filename)
183
- eval(IO.read(filename), binding, filename)
184
- end
185
-
186
- # Loads a YAML translations file. The data must have locales as
187
- # toplevel keys.
188
- def load_yml(filename)
189
- YAML::load(IO.read(filename))
190
- end
191
-
192
- # Deep merges the given translations hash with the existing translations
193
- # for the given locale
194
- def merge_translations(locale, data)
195
- locale = locale.to_sym
196
- translations[locale] ||= {}
197
- data = deep_symbolize_keys(data)
198
-
199
- # deep_merge by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809
200
- merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
201
- translations[locale].merge!(data, &merger)
202
- end
203
-
204
- # Return a new hash with all keys and nested keys converted to symbols.
205
- def deep_symbolize_keys(hash)
206
- hash.inject({}) { |result, (key, value)|
207
- value = deep_symbolize_keys(value) if value.is_a? Hash
208
- result[(key.to_sym rescue key) || key] = value
209
- result
210
- }
211
- end
212
- end
213
- end
214
- end
@@ -1,5 +0,0 @@
1
- dir = File.dirname(__FILE__)
2
- require dir + '/i18n_test.rb'
3
- require dir + '/simple_backend_test.rb'
4
- require dir + '/i18n_exceptions_test.rb'
5
- # *require* dir + '/custom_backend_test.rb'
@@ -1,124 +0,0 @@
1
- $:.unshift "lib"
2
-
3
- require 'rubygems'
4
- require 'test/unit'
5
- require 'i18n'
6
- require 'active_support'
7
-
8
- class I18nTest < Test::Unit::TestCase
9
- def setup
10
- I18n.backend.store_translations :'en', {
11
- :currency => {
12
- :format => {
13
- :separator => '.',
14
- :delimiter => ',',
15
- }
16
- }
17
- }
18
- end
19
-
20
- def test_uses_simple_backend_set_by_default
21
- assert I18n.backend.is_a?(I18n::Backend::Simple)
22
- end
23
-
24
- def test_can_set_backend
25
- assert_nothing_raised{ I18n.backend = self }
26
- assert_equal self, I18n.backend
27
- I18n.backend = I18n::Backend::Simple.new
28
- end
29
-
30
- def test_uses_en_us_as_default_locale_by_default
31
- assert_equal 'en', I18n.default_locale
32
- end
33
-
34
- def test_can_set_default_locale
35
- assert_nothing_raised{ I18n.default_locale = 'de' }
36
- assert_equal 'de', I18n.default_locale
37
- I18n.default_locale = 'en'
38
- end
39
-
40
- def test_uses_default_locale_as_locale_by_default
41
- assert_equal I18n.default_locale, I18n.locale
42
- end
43
-
44
- def test_can_set_locale_to_thread_current
45
- assert_nothing_raised{ I18n.locale = 'de' }
46
- assert_equal 'de', I18n.locale
47
- assert_equal 'de', Thread.current[:locale]
48
- I18n.locale = 'en'
49
- end
50
-
51
- def test_can_set_exception_handler
52
- assert_nothing_raised{ I18n.exception_handler = :custom_exception_handler }
53
- I18n.exception_handler = :default_exception_handler # revert it
54
- end
55
-
56
- def test_uses_custom_exception_handler
57
- I18n.exception_handler = :custom_exception_handler
58
- I18n.expects(:custom_exception_handler)
59
- I18n.translate :bogus
60
- I18n.exception_handler = :default_exception_handler # revert it
61
- end
62
-
63
- def test_delegates_translate_to_backend
64
- I18n.backend.expects(:translate).with 'de', :foo, {}
65
- I18n.translate :foo, :locale => 'de'
66
- end
67
-
68
- def test_delegates_localize_to_backend
69
- I18n.backend.expects(:localize).with 'de', :whatever, :default
70
- I18n.localize :whatever, :locale => 'de'
71
- end
72
-
73
- def test_translate_given_no_locale_uses_i18n_locale
74
- I18n.backend.expects(:translate).with 'en', :foo, {}
75
- I18n.translate :foo
76
- end
77
-
78
- def test_translate_on_nested_symbol_keys_works
79
- assert_equal ".", I18n.t(:'currency.format.separator')
80
- end
81
-
82
- def test_translate_with_nested_string_keys_works
83
- assert_equal ".", I18n.t('currency.format.separator')
84
- end
85
-
86
- def test_translate_with_array_as_scope_works
87
- assert_equal ".", I18n.t(:separator, :scope => ['currency.format'])
88
- end
89
-
90
- def test_translate_with_array_containing_dot_separated_strings_as_scope_works
91
- assert_equal ".", I18n.t(:separator, :scope => ['currency.format'])
92
- end
93
-
94
- def test_translate_with_key_array_and_dot_separated_scope_works
95
- assert_equal [".", ","], I18n.t(%w(separator delimiter), :scope => 'currency.format')
96
- end
97
-
98
- def test_translate_with_dot_separated_key_array_and_scope_works
99
- assert_equal [".", ","], I18n.t(%w(format.separator format.delimiter), :scope => 'currency')
100
- end
101
-
102
- def test_translate_with_options_using_scope_works
103
- I18n.backend.expects(:translate).with('de', :precision, :scope => :"currency.format")
104
- I18n.with_options :locale => 'de', :scope => :'currency.format' do |locale|
105
- locale.t :precision
106
- end
107
- end
108
-
109
- # def test_translate_given_no_args_raises_missing_translation_data
110
- # assert_equal "translation missing: en, no key", I18n.t
111
- # end
112
-
113
- def test_translate_given_a_bogus_key_raises_missing_translation_data
114
- assert_equal "translation missing: en, bogus", I18n.t(:bogus)
115
- end
116
-
117
- def test_localize_nil_raises_argument_error
118
- assert_raise(I18n::ArgumentError) { I18n.l nil }
119
- end
120
-
121
- def test_localize_object_raises_argument_error
122
- assert_raise(I18n::ArgumentError) { I18n.l Object.new }
123
- end
124
- end
@@ -1 +0,0 @@
1
- {:'en-Ruby' => {:foo => {:bar => "baz"}}}
@@ -1,3 +0,0 @@
1
- en-Yaml:
2
- foo:
3
- bar: baz
@@ -1,567 +0,0 @@
1
- # encoding: utf-8
2
- $:.unshift "lib"
3
-
4
- require 'rubygems'
5
- require 'test/unit'
6
- require 'i18n'
7
- require 'time'
8
- require 'yaml'
9
-
10
- module I18nSimpleBackendTestSetup
11
- def setup_backend
12
- # backend_reset_translations!
13
- @backend = I18n::Backend::Simple.new
14
- @backend.store_translations 'en', :foo => {:bar => 'bar', :baz => 'baz'}
15
- @locale_dir = File.dirname(__FILE__) + '/locale'
16
- end
17
- alias :setup :setup_backend
18
-
19
- # def backend_reset_translations!
20
- # I18n::Backend::Simple::ClassMethods.send :class_variable_set, :@@translations, {}
21
- # end
22
-
23
- def backend_get_translations
24
- # I18n::Backend::Simple::ClassMethods.send :class_variable_get, :@@translations
25
- @backend.instance_variable_get :@translations
26
- end
27
-
28
- def add_datetime_translations
29
- @backend.store_translations :'de', {
30
- :date => {
31
- :formats => {
32
- :default => "%d.%m.%Y",
33
- :short => "%d. %b",
34
- :long => "%d. %B %Y",
35
- },
36
- :day_names => %w(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag),
37
- :abbr_day_names => %w(So Mo Di Mi Do Fr Sa),
38
- :month_names => %w(Januar Februar März April Mai Juni Juli August September Oktober November Dezember).unshift(nil),
39
- :abbr_month_names => %w(Jan Feb Mar Apr Mai Jun Jul Aug Sep Okt Nov Dez).unshift(nil),
40
- :order => [:day, :month, :year]
41
- },
42
- :time => {
43
- :formats => {
44
- :default => "%a, %d. %b %Y %H:%M:%S %z",
45
- :short => "%d. %b %H:%M",
46
- :long => "%d. %B %Y %H:%M",
47
- },
48
- :am => 'am',
49
- :pm => 'pm'
50
- },
51
- :datetime => {
52
- :distance_in_words => {
53
- :half_a_minute => 'half a minute',
54
- :less_than_x_seconds => {
55
- :one => 'less than 1 second',
56
- :other => 'less than {{count}} seconds'
57
- },
58
- :x_seconds => {
59
- :one => '1 second',
60
- :other => '{{count}} seconds'
61
- },
62
- :less_than_x_minutes => {
63
- :one => 'less than a minute',
64
- :other => 'less than {{count}} minutes'
65
- },
66
- :x_minutes => {
67
- :one => '1 minute',
68
- :other => '{{count}} minutes'
69
- },
70
- :about_x_hours => {
71
- :one => 'about 1 hour',
72
- :other => 'about {{count}} hours'
73
- },
74
- :x_days => {
75
- :one => '1 day',
76
- :other => '{{count}} days'
77
- },
78
- :about_x_months => {
79
- :one => 'about 1 month',
80
- :other => 'about {{count}} months'
81
- },
82
- :x_months => {
83
- :one => '1 month',
84
- :other => '{{count}} months'
85
- },
86
- :about_x_years => {
87
- :one => 'about 1 year',
88
- :other => 'about {{count}} year'
89
- },
90
- :over_x_years => {
91
- :one => 'over 1 year',
92
- :other => 'over {{count}} years'
93
- }
94
- }
95
- }
96
- }
97
- end
98
- end
99
-
100
- class I18nSimpleBackendTranslationsTest < Test::Unit::TestCase
101
- include I18nSimpleBackendTestSetup
102
-
103
- def test_store_translations_adds_translations # no, really :-)
104
- @backend.store_translations :'en', :foo => 'bar'
105
- assert_equal Hash[:'en', {:foo => 'bar'}], backend_get_translations
106
- end
107
-
108
- def test_store_translations_deep_merges_translations
109
- @backend.store_translations :'en', :foo => {:bar => 'bar'}
110
- @backend.store_translations :'en', :foo => {:baz => 'baz'}
111
- assert_equal Hash[:'en', {:foo => {:bar => 'bar', :baz => 'baz'}}], backend_get_translations
112
- end
113
-
114
- def test_store_translations_forces_locale_to_sym
115
- @backend.store_translations 'en', :foo => 'bar'
116
- assert_equal Hash[:'en', {:foo => 'bar'}], backend_get_translations
117
- end
118
-
119
- def test_store_translations_converts_keys_to_symbols
120
- # backend_reset_translations!
121
- @backend.store_translations 'en', 'foo' => {'bar' => 'bar', 'baz' => 'baz'}
122
- assert_equal Hash[:'en', {:foo => {:bar => 'bar', :baz => 'baz'}}], backend_get_translations
123
- end
124
- end
125
-
126
- class I18nSimpleBackendAvailableLocalesTest < Test::Unit::TestCase
127
- def test_available_locales
128
- @backend = I18n::Backend::Simple.new
129
- @backend.store_translations 'de', :foo => 'bar'
130
- @backend.store_translations 'en', :foo => 'foo'
131
-
132
- assert_equal ['de', 'en'], @backend.available_locales.map{|locale| locale.to_s }.sort
133
- end
134
- end
135
-
136
- class I18nSimpleBackendTranslateTest < Test::Unit::TestCase
137
- include I18nSimpleBackendTestSetup
138
-
139
- def test_translate_calls_lookup_with_locale_given
140
- @backend.expects(:lookup).with('de', :bar, [:foo]).returns 'bar'
141
- @backend.translate 'de', :bar, :scope => [:foo]
142
- end
143
-
144
- def test_given_no_keys_it_returns_the_default
145
- assert_equal 'default', @backend.translate('en', nil, :default => 'default')
146
- end
147
-
148
- def test_translate_given_a_symbol_as_a_default_translates_the_symbol
149
- assert_equal 'bar', @backend.translate('en', nil, :scope => [:foo], :default => :bar)
150
- end
151
-
152
- def test_translate_given_an_array_as_default_uses_the_first_match
153
- assert_equal 'bar', @backend.translate('en', :does_not_exist, :scope => [:foo], :default => [:does_not_exist_2, :bar])
154
- end
155
-
156
- def test_translate_given_an_array_of_inexistent_keys_it_raises_missing_translation_data
157
- assert_raise I18n::MissingTranslationData do
158
- @backend.translate('en', :does_not_exist, :scope => [:foo], :default => [:does_not_exist_2, :does_not_exist_3])
159
- end
160
- end
161
-
162
- def test_translate_an_array_of_keys_translates_all_of_them
163
- assert_equal %w(bar baz), @backend.translate('en', [:bar, :baz], :scope => [:foo])
164
- end
165
-
166
- def test_translate_calls_pluralize
167
- @backend.expects(:pluralize).with 'en', 'bar', 1
168
- @backend.translate 'en', :bar, :scope => [:foo], :count => 1
169
- end
170
-
171
- def test_translate_calls_interpolate
172
- @backend.expects(:interpolate).with 'en', 'bar', {}
173
- @backend.translate 'en', :bar, :scope => [:foo]
174
- end
175
-
176
- def test_translate_calls_interpolate_including_count_as_a_value
177
- @backend.expects(:interpolate).with 'en', 'bar', {:count => 1}
178
- @backend.translate 'en', :bar, :scope => [:foo], :count => 1
179
- end
180
-
181
- def test_translate_given_nil_as_a_locale_raises_an_argument_error
182
- assert_raise(I18n::InvalidLocale){ @backend.translate nil, :bar }
183
- end
184
-
185
- def test_translate_with_a_bogus_key_and_no_default_raises_missing_translation_data
186
- assert_raise(I18n::MissingTranslationData){ @backend.translate 'de', :bogus }
187
- end
188
- end
189
-
190
- class I18nSimpleBackendLookupTest < Test::Unit::TestCase
191
- include I18nSimpleBackendTestSetup
192
-
193
- # useful because this way we can use the backend with no key for interpolation/pluralization
194
- def test_lookup_given_nil_as_a_key_returns_nil
195
- assert_nil @backend.send(:lookup, 'en', nil)
196
- end
197
-
198
- def test_lookup_given_nested_keys_looks_up_a_nested_hash_value
199
- assert_equal 'bar', @backend.send(:lookup, 'en', :bar, [:foo])
200
- end
201
- end
202
-
203
- class I18nSimpleBackendPluralizeTest < Test::Unit::TestCase
204
- include I18nSimpleBackendTestSetup
205
-
206
- def test_pluralize_given_nil_returns_the_given_entry
207
- entry = {:one => 'bar', :other => 'bars'}
208
- assert_equal entry, @backend.send(:pluralize, nil, entry, nil)
209
- end
210
-
211
- def test_pluralize_given_0_returns_zero_string_if_zero_key_given
212
- assert_equal 'zero', @backend.send(:pluralize, nil, {:zero => 'zero', :one => 'bar', :other => 'bars'}, 0)
213
- end
214
-
215
- def test_pluralize_given_0_returns_plural_string_if_no_zero_key_given
216
- assert_equal 'bars', @backend.send(:pluralize, nil, {:one => 'bar', :other => 'bars'}, 0)
217
- end
218
-
219
- def test_pluralize_given_1_returns_singular_string
220
- assert_equal 'bar', @backend.send(:pluralize, nil, {:one => 'bar', :other => 'bars'}, 1)
221
- end
222
-
223
- def test_pluralize_given_2_returns_plural_string
224
- assert_equal 'bars', @backend.send(:pluralize, nil, {:one => 'bar', :other => 'bars'}, 2)
225
- end
226
-
227
- def test_pluralize_given_3_returns_plural_string
228
- assert_equal 'bars', @backend.send(:pluralize, nil, {:one => 'bar', :other => 'bars'}, 3)
229
- end
230
-
231
- def test_interpolate_given_incomplete_pluralization_data_raises_invalid_pluralization_data
232
- assert_raise(I18n::InvalidPluralizationData){ @backend.send(:pluralize, nil, {:one => 'bar'}, 2) }
233
- end
234
-
235
- # def test_interpolate_given_a_string_raises_invalid_pluralization_data
236
- # assert_raise(I18n::InvalidPluralizationData){ @backend.send(:pluralize, nil, 'bar', 2) }
237
- # end
238
- #
239
- # def test_interpolate_given_an_array_raises_invalid_pluralization_data
240
- # assert_raise(I18n::InvalidPluralizationData){ @backend.send(:pluralize, nil, ['bar'], 2) }
241
- # end
242
- end
243
-
244
- class I18nSimpleBackendInterpolateTest < Test::Unit::TestCase
245
- include I18nSimpleBackendTestSetup
246
-
247
- def test_interpolate_given_a_value_hash_interpolates_the_values_to_the_string
248
- assert_equal 'Hi David!', @backend.send(:interpolate, nil, 'Hi {{name}}!', :name => 'David')
249
- end
250
-
251
- def test_interpolate_given_a_value_hash_interpolates_into_unicode_string
252
- assert_equal 'Häi David!', @backend.send(:interpolate, nil, 'Häi {{name}}!', :name => 'David')
253
- end
254
-
255
- def test_interpolate_given_an_unicode_value_hash_interpolates_to_the_string
256
- assert_equal 'Hi ゆきひろ!', @backend.send(:interpolate, nil, 'Hi {{name}}!', :name => 'ゆきひろ')
257
- end
258
-
259
- def test_interpolate_given_an_unicode_value_hash_interpolates_into_unicode_string
260
- assert_equal 'こんにちは、ゆきひろさん!', @backend.send(:interpolate, nil, 'こんにちは、{{name}}さん!', :name => 'ゆきひろ')
261
- end
262
-
263
- if Kernel.const_defined?(:Encoding)
264
- def test_interpolate_given_a_non_unicode_multibyte_value_hash_interpolates_into_a_string_with_the_same_encoding
265
- assert_equal euc_jp('Hi ゆきひろ!'), @backend.send(:interpolate, nil, 'Hi {{name}}!', :name => euc_jp('ゆきひろ'))
266
- end
267
-
268
- def test_interpolate_given_an_unicode_value_hash_into_a_non_unicode_multibyte_string_raises_encoding_compatibility_error
269
- assert_raise(Encoding::CompatibilityError) do
270
- @backend.send(:interpolate, nil, euc_jp('こんにちは、{{name}}さん!'), :name => 'ゆきひろ')
271
- end
272
- end
273
-
274
- def test_interpolate_given_a_non_unicode_multibyte_value_hash_into_an_unicode_string_raises_encoding_compatibility_error
275
- assert_raise(Encoding::CompatibilityError) do
276
- @backend.send(:interpolate, nil, 'こんにちは、{{name}}さん!', :name => euc_jp('ゆきひろ'))
277
- end
278
- end
279
- end
280
-
281
- def test_interpolate_given_nil_as_a_string_returns_nil
282
- assert_nil @backend.send(:interpolate, nil, nil, :name => 'David')
283
- end
284
-
285
- def test_interpolate_given_an_non_string_as_a_string_returns_nil
286
- assert_equal [], @backend.send(:interpolate, nil, [], :name => 'David')
287
- end
288
-
289
- def test_interpolate_given_a_values_hash_with_nil_values_interpolates_the_string
290
- assert_equal 'Hi !', @backend.send(:interpolate, nil, 'Hi {{name}}!', {:name => nil})
291
- end
292
-
293
- def test_interpolate_given_an_empty_values_hash_raises_missing_interpolation_argument
294
- assert_raise(I18n::MissingInterpolationArgument) { @backend.send(:interpolate, nil, 'Hi {{name}}!', {}) }
295
- end
296
-
297
- def test_interpolate_given_a_string_containing_a_reserved_key_raises_reserved_interpolation_key
298
- assert_raise(I18n::ReservedInterpolationKey) { @backend.send(:interpolate, nil, '{{default}}', {:default => nil}) }
299
- end
300
-
301
- private
302
-
303
- def euc_jp(string)
304
- string.encode!(Encoding::EUC_JP)
305
- end
306
- end
307
-
308
- class I18nSimpleBackendLocalizeDateTest < Test::Unit::TestCase
309
- include I18nSimpleBackendTestSetup
310
-
311
- def setup
312
- @backend = I18n::Backend::Simple.new
313
- add_datetime_translations
314
- @date = Date.new 2008, 1, 1
315
- end
316
-
317
- def test_translate_given_the_short_format_it_uses_it
318
- assert_equal '01. Jan', @backend.localize('de', @date, :short)
319
- end
320
-
321
- def test_translate_given_the_long_format_it_uses_it
322
- assert_equal '01. Januar 2008', @backend.localize('de', @date, :long)
323
- end
324
-
325
- def test_translate_given_the_default_format_it_uses_it
326
- assert_equal '01.01.2008', @backend.localize('de', @date, :default)
327
- end
328
-
329
- def test_translate_given_a_day_name_format_it_returns_a_day_name
330
- assert_equal 'Dienstag', @backend.localize('de', @date, '%A')
331
- end
332
-
333
- def test_translate_given_an_abbr_day_name_format_it_returns_an_abbrevated_day_name
334
- assert_equal 'Di', @backend.localize('de', @date, '%a')
335
- end
336
-
337
- def test_translate_given_a_month_name_format_it_returns_a_month_name
338
- assert_equal 'Januar', @backend.localize('de', @date, '%B')
339
- end
340
-
341
- def test_translate_given_an_abbr_month_name_format_it_returns_an_abbrevated_month_name
342
- assert_equal 'Jan', @backend.localize('de', @date, '%b')
343
- end
344
-
345
- def test_translate_given_no_format_it_does_not_fail
346
- assert_nothing_raised{ @backend.localize 'de', @date }
347
- end
348
-
349
- def test_translate_given_an_unknown_format_it_does_not_fail
350
- assert_nothing_raised{ @backend.localize 'de', @date, '%x' }
351
- end
352
-
353
- def test_localize_nil_raises_argument_error
354
- assert_raise(I18n::ArgumentError) { @backend.localize 'de', nil }
355
- end
356
-
357
- def test_localize_object_raises_argument_error
358
- assert_raise(I18n::ArgumentError) { @backend.localize 'de', Object.new }
359
- end
360
- end
361
-
362
- class I18nSimpleBackendLocalizeDateTimeTest < Test::Unit::TestCase
363
- include I18nSimpleBackendTestSetup
364
-
365
- def setup
366
- @backend = I18n::Backend::Simple.new
367
- add_datetime_translations
368
- @morning = DateTime.new 2008, 1, 1, 6
369
- @evening = DateTime.new 2008, 1, 1, 18
370
- end
371
-
372
- def test_translate_given_the_short_format_it_uses_it
373
- assert_equal '01. Jan 06:00', @backend.localize('de', @morning, :short)
374
- end
375
-
376
- def test_translate_given_the_long_format_it_uses_it
377
- assert_equal '01. Januar 2008 06:00', @backend.localize('de', @morning, :long)
378
- end
379
-
380
- def test_translate_given_the_default_format_it_uses_it
381
- assert_equal 'Di, 01. Jan 2008 06:00:00 +0000', @backend.localize('de', @morning, :default)
382
- end
383
-
384
- def test_translate_given_a_day_name_format_it_returns_the_correct_day_name
385
- assert_equal 'Dienstag', @backend.localize('de', @morning, '%A')
386
- end
387
-
388
- def test_translate_given_an_abbr_day_name_format_it_returns_the_correct_abbrevated_day_name
389
- assert_equal 'Di', @backend.localize('de', @morning, '%a')
390
- end
391
-
392
- def test_translate_given_a_month_name_format_it_returns_the_correct_month_name
393
- assert_equal 'Januar', @backend.localize('de', @morning, '%B')
394
- end
395
-
396
- def test_translate_given_an_abbr_month_name_format_it_returns_the_correct_abbrevated_month_name
397
- assert_equal 'Jan', @backend.localize('de', @morning, '%b')
398
- end
399
-
400
- def test_translate_given_a_meridian_indicator_format_it_returns_the_correct_meridian_indicator
401
- assert_equal 'am', @backend.localize('de', @morning, '%p')
402
- assert_equal 'pm', @backend.localize('de', @evening, '%p')
403
- end
404
-
405
- def test_translate_given_no_format_it_does_not_fail
406
- assert_nothing_raised{ @backend.localize 'de', @morning }
407
- end
408
-
409
- def test_translate_given_an_unknown_format_it_does_not_fail
410
- assert_nothing_raised{ @backend.localize 'de', @morning, '%x' }
411
- end
412
- end
413
-
414
- class I18nSimpleBackendLocalizeTimeTest < Test::Unit::TestCase
415
- include I18nSimpleBackendTestSetup
416
-
417
- def setup
418
- @old_timezone, ENV['TZ'] = ENV['TZ'], 'UTC'
419
- @backend = I18n::Backend::Simple.new
420
- add_datetime_translations
421
- @morning = Time.parse '2008-01-01 6:00 UTC'
422
- @evening = Time.parse '2008-01-01 18:00 UTC'
423
- end
424
-
425
- def teardown
426
- @old_timezone ? ENV['TZ'] = @old_timezone : ENV.delete('TZ')
427
- end
428
-
429
- def test_translate_given_the_short_format_it_uses_it
430
- assert_equal '01. Jan 06:00', @backend.localize('de', @morning, :short)
431
- end
432
-
433
- def test_translate_given_the_long_format_it_uses_it
434
- assert_equal '01. Januar 2008 06:00', @backend.localize('de', @morning, :long)
435
- end
436
-
437
- # TODO Seems to break on Windows because ENV['TZ'] is ignored. What's a better way to do this?
438
- # def test_translate_given_the_default_format_it_uses_it
439
- # assert_equal 'Di, 01. Jan 2008 06:00:00 +0000', @backend.localize('de', @morning, :default)
440
- # end
441
-
442
- def test_translate_given_a_day_name_format_it_returns_the_correct_day_name
443
- assert_equal 'Dienstag', @backend.localize('de', @morning, '%A')
444
- end
445
-
446
- def test_translate_given_an_abbr_day_name_format_it_returns_the_correct_abbrevated_day_name
447
- assert_equal 'Di', @backend.localize('de', @morning, '%a')
448
- end
449
-
450
- def test_translate_given_a_month_name_format_it_returns_the_correct_month_name
451
- assert_equal 'Januar', @backend.localize('de', @morning, '%B')
452
- end
453
-
454
- def test_translate_given_an_abbr_month_name_format_it_returns_the_correct_abbrevated_month_name
455
- assert_equal 'Jan', @backend.localize('de', @morning, '%b')
456
- end
457
-
458
- def test_translate_given_a_meridian_indicator_format_it_returns_the_correct_meridian_indicator
459
- assert_equal 'am', @backend.localize('de', @morning, '%p')
460
- assert_equal 'pm', @backend.localize('de', @evening, '%p')
461
- end
462
-
463
- def test_translate_given_no_format_it_does_not_fail
464
- assert_nothing_raised{ @backend.localize 'de', @morning }
465
- end
466
-
467
- def test_translate_given_an_unknown_format_it_does_not_fail
468
- assert_nothing_raised{ @backend.localize 'de', @morning, '%x' }
469
- end
470
- end
471
-
472
- class I18nSimpleBackendHelperMethodsTest < Test::Unit::TestCase
473
- def setup
474
- @backend = I18n::Backend::Simple.new
475
- end
476
-
477
- def test_deep_symbolize_keys_works
478
- result = @backend.send :deep_symbolize_keys, 'foo' => {'bar' => {'baz' => 'bar'}}
479
- expected = {:foo => {:bar => {:baz => 'bar'}}}
480
- assert_equal expected, result
481
- end
482
- end
483
-
484
- class I18nSimpleBackendLoadTranslationsTest < Test::Unit::TestCase
485
- include I18nSimpleBackendTestSetup
486
-
487
- def test_load_translations_with_unknown_file_type_raises_exception
488
- assert_raise(I18n::UnknownFileType) { @backend.load_translations "#{@locale_dir}/en.xml" }
489
- end
490
-
491
- def test_load_translations_with_ruby_file_type_does_not_raise_exception
492
- assert_nothing_raised { @backend.load_translations "#{@locale_dir}/en.rb" }
493
- end
494
-
495
- def test_load_rb_loads_data_from_ruby_file
496
- data = @backend.send :load_rb, "#{@locale_dir}/en.rb"
497
- assert_equal({:'en-Ruby' => {:foo => {:bar => "baz"}}}, data)
498
- end
499
-
500
- def test_load_rb_loads_data_from_yaml_file
501
- data = @backend.send :load_yml, "#{@locale_dir}/en.yml"
502
- assert_equal({'en-Yaml' => {'foo' => {'bar' => 'baz'}}}, data)
503
- end
504
-
505
- def test_load_translations_loads_from_different_file_formats
506
- @backend = I18n::Backend::Simple.new
507
- @backend.load_translations "#{@locale_dir}/en.rb", "#{@locale_dir}/en.yml"
508
- expected = {
509
- :'en-Ruby' => {:foo => {:bar => "baz"}},
510
- :'en-Yaml' => {:foo => {:bar => "baz"}}
511
- }
512
- assert_equal expected, backend_get_translations
513
- end
514
- end
515
-
516
- class I18nSimpleBackendLoadPathTest < Test::Unit::TestCase
517
- include I18nSimpleBackendTestSetup
518
-
519
- def teardown
520
- I18n.load_path = []
521
- end
522
-
523
- def test_nested_load_paths_do_not_break_locale_loading
524
- @backend = I18n::Backend::Simple.new
525
- I18n.load_path = [[File.dirname(__FILE__) + '/locale/en.yml']]
526
- assert_nil backend_get_translations
527
- assert_nothing_raised { @backend.send :init_translations }
528
- assert_not_nil backend_get_translations
529
- end
530
-
531
- def test_adding_arrays_of_filenames_to_load_path_do_not_break_locale_loading
532
- @backend = I18n::Backend::Simple.new
533
- I18n.load_path << Dir[File.dirname(__FILE__) + '/locale/*.{rb,yml}']
534
- assert_nil backend_get_translations
535
- assert_nothing_raised { @backend.send :init_translations }
536
- assert_not_nil backend_get_translations
537
- end
538
- end
539
-
540
- class I18nSimpleBackendReloadTranslationsTest < Test::Unit::TestCase
541
- include I18nSimpleBackendTestSetup
542
-
543
- def setup
544
- @backend = I18n::Backend::Simple.new
545
- I18n.load_path = [File.dirname(__FILE__) + '/locale/en.yml']
546
- assert_nil backend_get_translations
547
- @backend.send :init_translations
548
- end
549
-
550
- def teardown
551
- I18n.load_path = []
552
- end
553
-
554
- def test_setup
555
- assert_not_nil backend_get_translations
556
- end
557
-
558
- def test_reload_translations_unloads_translations
559
- @backend.reload!
560
- assert_nil backend_get_translations
561
- end
562
-
563
- def test_reload_translations_uninitializes_translations
564
- @backend.reload!
565
- assert_equal @backend.initialized?, false
566
- end
567
- end