PageRenderTime 51ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/bundle/ruby/1.9.1/gems/i18n-0.6.0/test/backend/interpolation_compiler_test.rb

https://bitbucket.org/sqctest01/sample_app_3_1
Ruby | 102 lines | 84 code | 17 blank | 1 comment | 1 complexity | 34fc2f5477e6f7be1f7020bc7f8e8658 MD5 | raw file
Possible License(s): GPL-2.0
  1. require 'test_helper'
  2. class InterpolationCompilerTest < Test::Unit::TestCase
  3. Compiler = I18n::Backend::InterpolationCompiler::Compiler
  4. def compile_and_interpolate(str, values = {})
  5. Compiler.compile_if_an_interpolation(str).i18n_interpolate(values)
  6. end
  7. def assert_escapes_interpolation_key(expected, malicious_str)
  8. assert_equal(expected, Compiler.send(:escape_key_sym, malicious_str))
  9. end
  10. def test_escape_key_properly_escapes
  11. assert_escapes_interpolation_key ':"\""', '"'
  12. assert_escapes_interpolation_key ':"\\\\"', '\\'
  13. assert_escapes_interpolation_key ':"\\\\\""', '\\"'
  14. assert_escapes_interpolation_key ':"\#{}"', '#{}'
  15. assert_escapes_interpolation_key ':"\\\\\#{}"', '\#{}'
  16. end
  17. def assert_escapes_plain_string(expected, plain_str)
  18. assert_equal expected, Compiler.send(:escape_plain_str, plain_str)
  19. end
  20. def test_escape_plain_string_properly_escapes
  21. assert_escapes_plain_string '\\"', '"'
  22. assert_escapes_plain_string '\'', '\''
  23. assert_escapes_plain_string '\\#', '#'
  24. assert_escapes_plain_string '\\#{}', '#{}'
  25. assert_escapes_plain_string '\\\\\\"','\\"'
  26. end
  27. def test_non_interpolated_strings_or_arrays_dont_get_compiled
  28. ['abc', '\\{a}}', '{a}}', []].each do |obj|
  29. Compiler.compile_if_an_interpolation(obj)
  30. assert_equal false, obj.respond_to?(:i18n_interpolate)
  31. end
  32. end
  33. def test_interpolated_string_gets_compiled
  34. assert_equal '-A-', compile_and_interpolate('-%{a}-', :a => 'A')
  35. end
  36. def assert_handles_key(str, key)
  37. assert_equal 'A', compile_and_interpolate(str, key => 'A')
  38. end
  39. def test_compiles_fancy_keys
  40. assert_handles_key('%{\}', :'\\' )
  41. assert_handles_key('%{#}', :'#' )
  42. assert_handles_key('%{#{}', :'#{' )
  43. assert_handles_key('%{#$SAFE}', :'#$SAFE')
  44. assert_handles_key('%{\000}', :'\000' )
  45. assert_handles_key('%{\'}', :'\'' )
  46. assert_handles_key('%{\'\'}', :'\'\'' )
  47. assert_handles_key('%{a.b}', :'a.b' )
  48. assert_handles_key('%{ }', :' ' )
  49. assert_handles_key('%{:}', :':' )
  50. assert_handles_key("%{:''}", :":''" )
  51. assert_handles_key('%{:"}', :':"' )
  52. end
  53. def test_str_containing_only_escaped_interpolation_is_handled_correctly
  54. assert_equal 'abc %{x}', compile_and_interpolate('abc %%{x}')
  55. end
  56. def test_handles_weird_strings
  57. assert_equal '#{} a', compile_and_interpolate('#{} %{a}', :a => 'a')
  58. assert_equal '"#{abc}"', compile_and_interpolate('"#{ab%{a}c}"', :a => '' )
  59. assert_equal 'a}', compile_and_interpolate('%{{a}}', :'{a' => 'a')
  60. assert_equal '"', compile_and_interpolate('"%{a}', :a => '' )
  61. assert_equal 'a%{a}', compile_and_interpolate('%{a}%%{a}', :a => 'a')
  62. assert_equal '%%{a}', compile_and_interpolate('%%%{a}')
  63. assert_equal '\";eval("a")', compile_and_interpolate('\";eval("%{a}")', :a => 'a')
  64. assert_equal '\";eval("a")', compile_and_interpolate('\";eval("a")%{a}', :a => '' )
  65. assert_equal "\na", compile_and_interpolate("\n%{a}", :a => 'a')
  66. end
  67. end
  68. class I18nBackendInterpolationCompilerTest < Test::Unit::TestCase
  69. class Backend < I18n::Backend::Simple
  70. include I18n::Backend::InterpolationCompiler
  71. end
  72. include I18n::Tests::Interpolation
  73. def setup
  74. I18n.backend = Backend.new
  75. super
  76. end
  77. # pre-compile default strings to make sure we are testing I18n::Backend::InterpolationCompiler
  78. def interpolate(*args)
  79. options = args.last.kind_of?(Hash) ? args.last : {}
  80. if default_str = options[:default]
  81. I18n::Backend::InterpolationCompiler::Compiler.compile_if_an_interpolation(default_str)
  82. end
  83. super
  84. end
  85. end