From 61604feec0fa04810f5903d13b74bad06e67b3bb Mon Sep 17 00:00:00 2001 From: Yehuda Katz + Carl Lerche Date: Mon, 6 Jul 2009 12:25:34 -0700 Subject: Get Initializer tests running without requiring parts of Rails being loaded first --- .../lib/active_support/testing/isolation.rb | 142 +++++++++++---------- 1 file changed, 72 insertions(+), 70 deletions(-) (limited to 'activesupport') diff --git a/activesupport/lib/active_support/testing/isolation.rb b/activesupport/lib/active_support/testing/isolation.rb index dd13abcd5d..30e194536b 100644 --- a/activesupport/lib/active_support/testing/isolation.rb +++ b/activesupport/lib/active_support/testing/isolation.rb @@ -1,94 +1,96 @@ -module ActiveSupport::Testing - class ProxyTestResult - def initialize - @calls = [] - end - - def __replay__(result) - @calls.each do |name, args| - result.send(name, *args) +module ActiveSupport + module Testing + class ProxyTestResult + def initialize + @calls = [] end - end - - def method_missing(name, *args) - @calls << [name, args] - end - end - module Isolation - def self.forking_env? - !ENV["NO_FORK"] && RUBY_PLATFORM !~ /mswin|mingw|java/ - end - - def run(result) - unless defined?(@@ran_class_setup) - self.class.setup - @@ran_class_setup = true + def __replay__(result) + @calls.each do |name, args| + result.send(name, *args) + end end - yield(Test::Unit::TestCase::STARTED, name) - - @_result = result + def method_missing(name, *args) + @calls << [name, args] + end + end - proxy = run_in_isolation do |proxy| - super(proxy) { } + module Isolation + def self.forking_env? + !ENV["NO_FORK"] && RUBY_PLATFORM !~ /mswin|mingw|java/ end - proxy.__replay__(@_result) + def run(result) + unless defined?(@@ran_class_setup) + self.class.setup if self.class.respond_to?(:setup) + @@ran_class_setup = true + end - yield(Test::Unit::TestCase::FINISHED, name) - end + yield(Test::Unit::TestCase::STARTED, name) - module Forking - def run_in_isolation(&blk) - read, write = IO.pipe + @_result = result - pid = fork do - read.close - proxy = ProxyTestResult.new - yield proxy - write.puts [Marshal.dump(proxy)].pack("m") - exit! + proxy = run_in_isolation do |proxy| + super(proxy) { } end - write.close - result = read.read - Process.wait2(pid) - Marshal.load(result.unpack("m")[0]) + proxy.__replay__(@_result) + + yield(Test::Unit::TestCase::FINISHED, name) end - end - module Subprocess - # Crazy H4X to get this working in windows / jruby with - # no forking. - def run_in_isolation(&blk) - require "tempfile" - - if ENV["ISOLATION_TEST"] - proxy = ProxyTestResult.new - yield proxy - File.open(ENV["ISOLATION_OUTPUT"], "w") do |file| - file.puts [Marshal.dump(proxy)].pack("m") - end - exit! - else - Tempfile.open("isolation") do |tmpfile| - ENV["ISOLATION_TEST"] = @method_name - ENV["ISOLATION_OUTPUT"] = tmpfile.path + module Forking + def run_in_isolation(&blk) + read, write = IO.pipe - load_paths = $-I.map {|p| "-I\"#{File.expand_path(p)}\"" }.join(" ") - `#{Gem.ruby} #{load_paths} #{$0} #{ORIG_ARGV.join(" ")} -t\"#{self.class}\"` + pid = fork do + read.close + proxy = ProxyTestResult.new + yield proxy + write.puts [Marshal.dump(proxy)].pack("m") + exit! + end - ENV.delete("ISOLATION_TEST") - ENV.delete("ISOLATION_OUTPUT") + write.close + result = read.read + Process.wait2(pid) + Marshal.load(result.unpack("m")[0]) + end + end - return Marshal.load(tmpfile.read.unpack("m")[0]) + module Subprocess + # Crazy H4X to get this working in windows / jruby with + # no forking. + def run_in_isolation(&blk) + require "tempfile" + + if ENV["ISOLATION_TEST"] + proxy = ProxyTestResult.new + yield proxy + File.open(ENV["ISOLATION_OUTPUT"], "w") do |file| + file.puts [Marshal.dump(proxy)].pack("m") + end + exit! + else + Tempfile.open("isolation") do |tmpfile| + ENV["ISOLATION_TEST"] = @method_name + ENV["ISOLATION_OUTPUT"] = tmpfile.path + + load_paths = $-I.map {|p| "-I\"#{File.expand_path(p)}\"" }.join(" ") + `#{Gem.ruby} #{load_paths} #{$0} #{ORIG_ARGV.join(" ")} -t\"#{self.class}\"` + + ENV.delete("ISOLATION_TEST") + ENV.delete("ISOLATION_OUTPUT") + + return Marshal.load(tmpfile.read.unpack("m")[0]) + end end end end - end - include forking_env? ? Forking : Subprocess + include forking_env? ? Forking : Subprocess + end end end -- cgit v1.2.3 From da635394c1c3004f4dacf4a35275404e5b1aef43 Mon Sep 17 00:00:00 2001 From: Lawrence Pit Date: Mon, 6 Jul 2009 10:27:31 +1000 Subject: Ruby 1.9 style String interpolation support for lower ruby versions. Thanks to code from Masao Mutoh's GetText gem. [#2870 state:resolved] Signed-off-by: Yehuda Katz --- .../lib/active_support/core_ext/string.rb | 1 + .../core_ext/string/interpolation.rb | 87 ++++++++++++++++++++++ activesupport/test/core_ext/string_ext_test.rb | 62 +++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 activesupport/lib/active_support/core_ext/string/interpolation.rb (limited to 'activesupport') diff --git a/activesupport/lib/active_support/core_ext/string.rb b/activesupport/lib/active_support/core_ext/string.rb index 98ad75429e..d06a5a32fb 100644 --- a/activesupport/lib/active_support/core_ext/string.rb +++ b/activesupport/lib/active_support/core_ext/string.rb @@ -7,3 +7,4 @@ require 'active_support/core_ext/string/access' require 'active_support/core_ext/string/iterators' require 'active_support/core_ext/string/xchar' require 'active_support/core_ext/string/behavior' +require 'active_support/core_ext/string/interpolation' \ No newline at end of file diff --git a/activesupport/lib/active_support/core_ext/string/interpolation.rb b/activesupport/lib/active_support/core_ext/string/interpolation.rb new file mode 100644 index 0000000000..b21977ecc1 --- /dev/null +++ b/activesupport/lib/active_support/core_ext/string/interpolation.rb @@ -0,0 +1,87 @@ +if RUBY_VERSION < '1.9' + +=begin + string.rb - Extension for String. + + Copyright (C) 2005-2009 Masao Mutoh + + You may redistribute it and/or modify it under the same + license terms as Ruby. +=end + +# This feature is included in Ruby 1.9 or later but not occur TypeError. +# +# String#% method which accepts named arguments. Particularly useful if the +# string is to be used by a translator because named arguments mean more +# than %s/%d style. +class String + + unless instance_methods.find {|m| m.to_s == 'bytesize'} + # For older ruby (such as ruby-1.8.5) + alias :bytesize :size + end + + alias :_old_format_m :% # :nodoc: + + PERCENT_MATCH_RE = Regexp.union( + /%%/, + /%\{(\w+)\}/, + /%<(\w+)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/ + ) + + # call-seq: + # %(arg) + # %(hash) + # + # Format - Uses str as a format specification, and returns the result of applying it to arg. + # If the format specification contains more than one substitution, then arg must be + # an Array containing the values to be substituted. See Kernel::sprintf for details of the + # format string. This is the default behavior of the String class. + # * arg: an Array or other class except Hash. + # * Returns: formatted String + # Example: + # "%s, %s" % ["Masao", "Mutoh"] + # + # Also you can use a Hash as the "named argument". This is recommended way so translators + # can understand the meanings of the msgids easily. + # * hash: {:key1 => value1, :key2 => value2, ... } + # * Returns: formatted String + # Example: + # For strings. + # "%{firstname}, %{familyname}" % {:firstname => "Masao", :familyname => "Mutoh"} + # + # With field type to specify format such as d(decimal), f(float),... + # "%d, %.1f" % {:age => 10, :weight => 43.4} + def %(args) + if args.kind_of?(Hash) + ret = dup + ret.gsub!(PERCENT_MATCH_RE) {|match| + if match == '%%' + '%' + elsif $1 + key = $1.to_sym + args.has_key?(key) ? args[key] : match + elsif $2 + key = $2.to_sym + args.has_key?(key) ? sprintf("%#{$3}", args[key]) : match + end + } + ret + else + ret = gsub(/%([{<])/, '%%\1') + begin + ret._old_format_m(args) + rescue ArgumentError => e + if $DEBUG + $stderr.puts " The string:#{ret}" + $stderr.puts " args:#{args.inspect}" + puts e.backtrace + else + raise ArgumentError, e.message + end + end + end + end +end + +end \ No newline at end of file diff --git a/activesupport/test/core_ext/string_ext_test.rb b/activesupport/test/core_ext/string_ext_test.rb index 6991b174b7..f77ad5236e 100644 --- a/activesupport/test/core_ext/string_ext_test.rb +++ b/activesupport/test/core_ext/string_ext_test.rb @@ -280,3 +280,65 @@ class CoreExtStringMultibyteTest < ActiveSupport::TestCase end end end + +=begin + string.rb - Interpolation for String. + + Copyright (C) 2005-2009 Masao Mutoh + + You may redistribute it and/or modify it under the same + license terms as Ruby. +=end +class TestGetTextString < Test::Unit::TestCase + def test_sprintf + assert_equal("foo is a number", "%{msg} is a number" % {:msg => "foo"}) + assert_equal("bar is a number", "%s is a number" % ["bar"]) + assert_equal("bar is a number", "%s is a number" % "bar") + assert_equal("1, test", "%{num}, %{record}" % {:num => 1, :record => "test"}) + assert_equal("test, 1", "%{record}, %{num}" % {:num => 1, :record => "test"}) + assert_equal("1, test", "%d, %s" % [1, "test"]) + assert_equal("test, 1", "%2$s, %1$d" % [1, "test"]) + assert_raise(ArgumentError) { "%-%" % [1] } + end + + def test_percent + assert_equal("% 1", "%% %d" % {:num => 1.0}) + assert_equal("%{num} %d", "%%{num} %%d" % {:num => 1}) + end + + def test_sprintf_percent_in_replacement + assert_equal("%s", "%{msg}" % { :msg => '%s', :not_translated => 'should not happen' }) + end + + def test_sprintf_lack_argument + assert_equal("%{num}, test", "%{num}, %{record}" % {:record => "test"}) + assert_equal("%{record}", "%{record}" % {:num => 1}) + end + + def test_no_placeholder + assert_equal("aaa", "aaa" % {:num => 1}) + assert_equal("bbb", "bbb" % [1]) + end + + def test_sprintf_ruby19_style + assert_equal("1", "%d" % {:num => 1}) + assert_equal("0b1", "%#b" % {:num => 1}) + assert_equal("foo", "%s" % {:msg => "foo"}) + assert_equal("1.000000", "%f" % {:num => 1.0}) + assert_equal(" 1", "%3.0f" % {:num => 1.0}) + assert_equal("100.00", "%2.2f" % {:num => 100.0}) + assert_equal("0x64", "%#x" % {:num => 100.0}) + assert_raise(ArgumentError) { "%,d" % {:num => 100} } + assert_raise(ArgumentError) { "%/d" % {:num => 100} } + end + + def test_sprintf_old_style + assert_equal("foo 1.000000", "%s %f" % ["foo", 1.0]) + end + + def test_sprintf_mix + assert_equal("foo 1.000000", "%{name} %f" % {:name => "foo", :num => 1.0}) + assert_equal("%{name} 1.000000", "%{name} %f" % [1.0]) + assert_equal("%{name} 1.000000", "%{name} %f" % [1.0, 2.0]) + end +end -- cgit v1.2.3 From 579250ea467ac406a5897dc2187c7959bf343b4f Mon Sep 17 00:00:00 2001 From: Lawrence Pit Date: Mon, 6 Jul 2009 11:42:41 +1000 Subject: Use the i18n gem if present instead of vendor code. [#2871 state:resolved] Signed-off-by: Yehuda Katz --- activesupport/lib/active_support/vendor.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'activesupport') diff --git a/activesupport/lib/active_support/vendor.rb b/activesupport/lib/active_support/vendor.rb index b6223fe20a..ca64c5ebe3 100644 --- a/activesupport/lib/active_support/vendor.rb +++ b/activesupport/lib/active_support/vendor.rb @@ -19,10 +19,9 @@ rescue Gem::LoadError $:.unshift "#{File.dirname(__FILE__)}/vendor/tzinfo-0.3.13" end -# TODO I18n gem has not been released yet -# begin -# gem 'i18n', '~> 0.1.3' -# rescue Gem::LoadError +begin + gem 'i18n', '~> 0.1.3' +rescue Gem::LoadError $:.unshift "#{File.dirname(__FILE__)}/vendor/i18n-0.1.3/lib" require 'i18n' -# end +end -- cgit v1.2.3 From 0920e69244026ec83471bb4571e56300045307d3 Mon Sep 17 00:00:00 2001 From: Lourens Naude Date: Sun, 12 Jul 2009 12:18:04 +0100 Subject: ActiveSupport Hash optimizations [#2902 state:resolved] Signed-off-by: Carl Lerche --- activesupport/lib/active_support/core_ext/hash/deep_merge.rb | 2 +- activesupport/lib/active_support/core_ext/hash/diff.rb | 2 +- activesupport/lib/active_support/core_ext/hash/reverse_merge.rb | 2 +- activesupport/lib/active_support/hash_with_indifferent_access.rb | 6 +++++- 4 files changed, 8 insertions(+), 4 deletions(-) (limited to 'activesupport') diff --git a/activesupport/lib/active_support/core_ext/hash/deep_merge.rb b/activesupport/lib/active_support/core_ext/hash/deep_merge.rb index b009be3d84..ffde34a741 100644 --- a/activesupport/lib/active_support/core_ext/hash/deep_merge.rb +++ b/activesupport/lib/active_support/core_ext/hash/deep_merge.rb @@ -4,7 +4,7 @@ class Hash merge(other_hash) do |key, oldval, newval| oldval = oldval.to_hash if oldval.respond_to?(:to_hash) newval = newval.to_hash if newval.respond_to?(:to_hash) - oldval.class.to_s == 'Hash' && newval.class.to_s == 'Hash' ? oldval.deep_merge(newval) : newval + oldval.is_a?( Hash ) && newval.is_a?( Hash ) ? oldval.deep_merge(newval) : newval end end diff --git a/activesupport/lib/active_support/core_ext/hash/diff.rb b/activesupport/lib/active_support/core_ext/hash/diff.rb index da98593458..b904f49fa8 100644 --- a/activesupport/lib/active_support/core_ext/hash/diff.rb +++ b/activesupport/lib/active_support/core_ext/hash/diff.rb @@ -8,6 +8,6 @@ class Hash # {}.diff(1 => 2) # => {1 => 2} # {1 => 2, 3 => 4}.diff(1 => 2) # => {3 => 4} def diff(h2) - dup.delete_if { |k, v| h2[k] == v }.merge(h2.dup.delete_if { |k, v| has_key?(k) }) + dup.delete_if { |k, v| h2[k] == v }.merge!(h2.dup.delete_if { |k, v| has_key?(k) }) end end diff --git a/activesupport/lib/active_support/core_ext/hash/reverse_merge.rb b/activesupport/lib/active_support/core_ext/hash/reverse_merge.rb index ebfdcb2cf0..d7ebd5feef 100644 --- a/activesupport/lib/active_support/core_ext/hash/reverse_merge.rb +++ b/activesupport/lib/active_support/core_ext/hash/reverse_merge.rb @@ -21,7 +21,7 @@ class Hash # Performs the opposite of merge, with the keys and values from the first hash taking precedence over the second. # Modifies the receiver in place. def reverse_merge!(other_hash) - replace(reverse_merge(other_hash)) + merge!( other_hash ){|k,o,n| o } end alias_method :reverse_update, :reverse_merge! diff --git a/activesupport/lib/active_support/hash_with_indifferent_access.rb b/activesupport/lib/active_support/hash_with_indifferent_access.rb index 61fc6475a0..543dab4a75 100644 --- a/activesupport/lib/active_support/hash_with_indifferent_access.rb +++ b/activesupport/lib/active_support/hash_with_indifferent_access.rb @@ -98,6 +98,10 @@ module ActiveSupport super other_hash.with_indifferent_access end + def reverse_merge!(other_hash) + replace(reverse_merge( other_hash )) + end + # Removes a specified key from the hash. def delete(key) super(convert_key(key)) @@ -109,7 +113,7 @@ module ActiveSupport # Convert to a Hash with String keys. def to_hash - Hash.new(default).merge(self) + Hash.new(default).merge!(self) end protected -- cgit v1.2.3 From 17d5cc12b9f8d0d78a081d231e7e0c5ec9df1104 Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Wed, 8 Jul 2009 18:17:42 +0200 Subject: * don't include String#% for Ruby 1.9 * raise a KeyError exception for missing named interpolation args (like Ruby 1.9 does) * raise an ArgumentError when mixing named and unnamed placeholders (like Ruby 1.9 does) * improve docs and comply a bit more w/ Rails names/conventions [#2870 state:committed] Signed-off-by: Jeremy Kemper --- .../core_ext/string/interpolation.rb | 152 +++++++++++---------- activesupport/test/core_ext/string_ext_test.rb | 13 +- 2 files changed, 87 insertions(+), 78 deletions(-) (limited to 'activesupport') diff --git a/activesupport/lib/active_support/core_ext/string/interpolation.rb b/activesupport/lib/active_support/core_ext/string/interpolation.rb index b21977ecc1..d459c03d39 100644 --- a/activesupport/lib/active_support/core_ext/string/interpolation.rb +++ b/activesupport/lib/active_support/core_ext/string/interpolation.rb @@ -1,87 +1,93 @@ -if RUBY_VERSION < '1.9' - =begin - string.rb - Extension for String. - + heavily based on Masao Mutoh's gettext String interpolation extension + http://github.com/mutoh/gettext/blob/f6566738b981fe0952548c421042ad1e0cdfb31e/lib/gettext/core_ext/string.rb Copyright (C) 2005-2009 Masao Mutoh - - You may redistribute it and/or modify it under the same - license terms as Ruby. + You may redistribute it and/or modify it under the same license terms as Ruby. =end -# This feature is included in Ruby 1.9 or later but not occur TypeError. -# -# String#% method which accepts named arguments. Particularly useful if the -# string is to be used by a translator because named arguments mean more -# than %s/%d style. -class String +if RUBY_VERSION < '1.9' - unless instance_methods.find {|m| m.to_s == 'bytesize'} - # For older ruby (such as ruby-1.8.5) - alias :bytesize :size - end + # KeyError is raised by String#% when the string contains a named placeholder + # that is not contained in the given arguments hash. Ruby 1.9 includes and + # raises this exception natively. We define it to mimic Ruby 1.9's behaviour + # in Ruby 1.8.x - alias :_old_format_m :% # :nodoc: + class KeyError < IndexError + def initialize(message = nil) + super(message || "key not found") + end + end unless defined?(KeyError) - PERCENT_MATCH_RE = Regexp.union( + # Extension for String class. This feature is included in Ruby 1.9 or later but not occur TypeError. + # + # String#% method which accept "named argument". The translator can know + # the meaning of the msgids using "named argument" instead of %s/%d style. + + class String + # For older ruby versions, such as ruby-1.8.5 + alias :bytesize :size unless instance_methods.find {|m| m.to_s == 'bytesize'} + alias :interpolate_without_ruby_19_syntax :% # :nodoc: + + INTERPOLATION_PATTERN = Regexp.union( /%%/, - /%\{(\w+)\}/, - /%<(\w+)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/ - ) + /%\{(\w+)\}/, # matches placeholders like "%{foo}" + /%<(\w+)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/ # matches placeholders like "%.d" + ) - # call-seq: - # %(arg) - # %(hash) - # - # Format - Uses str as a format specification, and returns the result of applying it to arg. - # If the format specification contains more than one substitution, then arg must be - # an Array containing the values to be substituted. See Kernel::sprintf for details of the - # format string. This is the default behavior of the String class. - # * arg: an Array or other class except Hash. - # * Returns: formatted String - # Example: - # "%s, %s" % ["Masao", "Mutoh"] - # - # Also you can use a Hash as the "named argument". This is recommended way so translators - # can understand the meanings of the msgids easily. - # * hash: {:key1 => value1, :key2 => value2, ... } - # * Returns: formatted String - # Example: - # For strings. - # "%{firstname}, %{familyname}" % {:firstname => "Masao", :familyname => "Mutoh"} - # - # With field type to specify format such as d(decimal), f(float),... - # "%d, %.1f" % {:age => 10, :weight => 43.4} - def %(args) - if args.kind_of?(Hash) - ret = dup - ret.gsub!(PERCENT_MATCH_RE) {|match| - if match == '%%' - '%' - elsif $1 - key = $1.to_sym - args.has_key?(key) ? args[key] : match - elsif $2 - key = $2.to_sym - args.has_key?(key) ? sprintf("%#{$3}", args[key]) : match - end - } - ret - else - ret = gsub(/%([{<])/, '%%\1') - begin - ret._old_format_m(args) - rescue ArgumentError => e - if $DEBUG - $stderr.puts " The string:#{ret}" - $stderr.puts " args:#{args.inspect}" - puts e.backtrace - else - raise ArgumentError, e.message + # % uses self (i.e. the String) as a format specification and returns the + # result of applying it to the given arguments. In other words it interpolates + # the given arguments to the string according to the formats the string + # defines. + # + # There are three ways to use it: + # + # * Using a single argument or Array of arguments. + # + # This is the default behaviour of the String class. See Kernel#sprintf for + # more details about the format string. + # + # Example: + # + # "%d %s" % [1, "message"] + # # => "1 message" + # + # * Using a Hash as an argument and unformatted, named placeholders. + # + # When you pass a Hash as an argument and specify placeholders with %{foo} + # it will interpret the hash values as named arguments. + # + # Example: + # + # "%{firstname}, %{lastname}" % {:firstname => "Masao", :lastname => "Mutoh"} + # # => "Masao Mutoh" + # + # * Using a Hash as an argument and formatted, named placeholders. + # + # When you pass a Hash as an argument and specify placeholders with %d + # it will interpret the hash values as named arguments and format the value + # according to the formatting instruction appended to the closing >. + # + # Example: + # + # "%d, %.1f" % { :integer => 10, :float => 43.4 } + # # => "10, 43.3" + def %(args) + if args.kind_of?(Hash) + dup.gsub(INTERPOLATION_PATTERN) do |match| + if match == '%%' + '%' + else + key = ($1 || $2).to_sym + raise KeyError unless args.has_key?(key) + $3 ? sprintf("%#{$3}", args[key]) : args[key] + end end + elsif self =~ INTERPOLATION_PATTERN + raise ArgumentError.new('one hash required') + else + result = gsub(/%([{<])/, '%%\1') + result.send :'interpolate_without_ruby_19_syntax', args end end end -end - end \ No newline at end of file diff --git a/activesupport/test/core_ext/string_ext_test.rb b/activesupport/test/core_ext/string_ext_test.rb index f77ad5236e..a23d3f6fef 100644 --- a/activesupport/test/core_ext/string_ext_test.rb +++ b/activesupport/test/core_ext/string_ext_test.rb @@ -311,8 +311,8 @@ class TestGetTextString < Test::Unit::TestCase end def test_sprintf_lack_argument - assert_equal("%{num}, test", "%{num}, %{record}" % {:record => "test"}) - assert_equal("%{record}", "%{record}" % {:num => 1}) + assert_raises(KeyError) { "%{num}, %{record}" % {:record => "test"} } + assert_raises(KeyError) { "%{record}" % {:num => 1} } end def test_no_placeholder @@ -336,9 +336,12 @@ class TestGetTextString < Test::Unit::TestCase assert_equal("foo 1.000000", "%s %f" % ["foo", 1.0]) end - def test_sprintf_mix + def test_sprintf_mix_unformatted_and_formatted_named_placeholders assert_equal("foo 1.000000", "%{name} %f" % {:name => "foo", :num => 1.0}) - assert_equal("%{name} 1.000000", "%{name} %f" % [1.0]) - assert_equal("%{name} 1.000000", "%{name} %f" % [1.0, 2.0]) + end + + def test_string_interpolation_raises_an_argument_error_when_mixing_named_and_unnamed_placeholders + assert_raises(ArgumentError) { "%{name} %f" % [1.0] } + assert_raises(ArgumentError) { "%{name} %f" % [1.0, 2.0] } end end -- cgit v1.2.3 From 9d7aae710384fb5f04129c35b86c5ea5fb9d83a9 Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Sun, 19 Jul 2009 14:36:44 +0900 Subject: Ruby 1.9.2 compat: name method was renamed to __name__ since MiniTest 1.4.x [#2922 state:resolved] Signed-off-by: Yehuda Katz --- activesupport/lib/active_support/test_case.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'activesupport') diff --git a/activesupport/lib/active_support/test_case.rb b/activesupport/lib/active_support/test_case.rb index d5282bad6a..c915bf799d 100644 --- a/activesupport/lib/active_support/test_case.rb +++ b/activesupport/lib/active_support/test_case.rb @@ -19,7 +19,8 @@ module ActiveSupport class TestCase < ::Test::Unit::TestCase if defined? MiniTest Assertion = MiniTest::Assertion - alias_method :method_name, :name + alias_method :method_name, :name if method_defined? :name + alias_method :method_name, :__name__ if method_defined? :__name__ else # TODO: Figure out how to get the Rails::BacktraceFilter into minitest/unit if defined?(Rails) && ENV['BACKTRACE'].nil? -- cgit v1.2.3