Make all translation lookup errors throw exceptions in test mode
This commit is contained in:
parent
ac6a872a48
commit
4ee60c0f8f
3 changed files with 49 additions and 29 deletions
|
@ -42,6 +42,12 @@ I18n.fallbacks.map("no" => "nb")
|
|||
|
||||
I18n.enforce_available_locales = false
|
||||
|
||||
if Rails.env.test?
|
||||
I18n.exception_handler = proc do |exception|
|
||||
raise exception.to_exception
|
||||
end
|
||||
end
|
||||
|
||||
Rails.configuration.after_initialize do
|
||||
I18n.available_locales
|
||||
end
|
||||
|
|
|
@ -3,51 +3,53 @@ require "test_helper"
|
|||
class I18nTest < ActiveSupport::TestCase
|
||||
I18n.available_locales.each do |locale|
|
||||
define_method("test_#{locale.to_s.underscore}".to_sym) do
|
||||
# plural_keys = plural_keys(locale)
|
||||
without_i18n_exceptions do
|
||||
# plural_keys = plural_keys(locale)
|
||||
|
||||
translation_keys.each do |key|
|
||||
variables = []
|
||||
translation_keys.each do |key|
|
||||
variables = []
|
||||
|
||||
default_value = I18n.t(key, :locale => I18n.default_locale)
|
||||
default_value = I18n.t(key, :locale => I18n.default_locale)
|
||||
|
||||
if default_value.is_a?(Hash)
|
||||
variables.push("count")
|
||||
if default_value.is_a?(Hash)
|
||||
variables.push("count")
|
||||
|
||||
default_value.each_value do |subvalue|
|
||||
subvalue.scan(/%\{(\w+)\}/) do
|
||||
default_value.each_value do |subvalue|
|
||||
subvalue.scan(/%\{(\w+)\}/) do
|
||||
variables.push(Regexp.last_match(1))
|
||||
end
|
||||
end
|
||||
else
|
||||
default_value.scan(/%\{(\w+)\}/) do
|
||||
variables.push(Regexp.last_match(1))
|
||||
end
|
||||
end
|
||||
else
|
||||
default_value.scan(/%\{(\w+)\}/) do
|
||||
variables.push(Regexp.last_match(1))
|
||||
end
|
||||
end
|
||||
|
||||
variables.push("attribute") if key =~ /^(active(model|record)\.)?errors\./
|
||||
variables.push("attribute") if key =~ /^(active(model|record)\.)?errors\./
|
||||
|
||||
value = I18n.t(key, :locale => locale, :fallback => true)
|
||||
value = I18n.t(key, :locale => locale, :fallback => true)
|
||||
|
||||
if value.is_a?(Hash)
|
||||
value.each do |subkey, subvalue|
|
||||
# assert plural_keys.include?(subkey), "#{key}.#{subkey} is not a valid plural key"
|
||||
if value.is_a?(Hash)
|
||||
value.each do |subkey, subvalue|
|
||||
# assert plural_keys.include?(subkey), "#{key}.#{subkey} is not a valid plural key"
|
||||
|
||||
next if subvalue.nil?
|
||||
next if subvalue.nil?
|
||||
|
||||
subvalue.scan(/%\{(\w+)\}/) do
|
||||
assert variables.include?(Regexp.last_match(1)), "#{key}.#{subkey} uses unknown interpolation variable #{Regexp.last_match(1)}"
|
||||
subvalue.scan(/%\{(\w+)\}/) do
|
||||
assert variables.include?(Regexp.last_match(1)), "#{key}.#{subkey} uses unknown interpolation variable #{Regexp.last_match(1)}"
|
||||
end
|
||||
end
|
||||
else
|
||||
assert value.is_a?(String), "#{key} is not a string"
|
||||
|
||||
value.scan(/%\{(\w+)\}/) do
|
||||
assert variables.include?(Regexp.last_match(1)), "#{key} uses unknown interpolation variable #{Regexp.last_match(1)}"
|
||||
end
|
||||
end
|
||||
else
|
||||
assert value.is_a?(String), "#{key} is not a string"
|
||||
|
||||
value.scan(/%\{(\w+)\}/) do
|
||||
assert variables.include?(Regexp.last_match(1)), "#{key} uses unknown interpolation variable #{Regexp.last_match(1)}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assert %w[ltr rtl].include?(I18n.t("html.dir", :locale => locale)), "html.dir must be ltr or rtl"
|
||||
assert %w[ltr rtl].include?(I18n.t("html.dir", :locale => locale)), "html.dir must be ltr or rtl"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -42,6 +42,18 @@ module ActiveSupport
|
|||
end
|
||||
end
|
||||
|
||||
##
|
||||
# execute a block with missing translation exceptions suppressed
|
||||
def without_i18n_exceptions
|
||||
exception_handler = I18n.exception_handler
|
||||
begin
|
||||
I18n.exception_handler = nil
|
||||
yield
|
||||
ensure
|
||||
I18n.exception_handler = exception_handler
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# work round minitest insanity that causes it to tell you
|
||||
# to use assert_nil to test for nil, which is fine if you're
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue