mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Non-string results from forwarded methods should be returned vertabim.
This commit is contained in:
parent
b8eec5ac33
commit
809af7f558
2 changed files with 15 additions and 9 deletions
|
@ -106,7 +106,8 @@ module ActiveSupport #:nodoc:
|
||||||
@wrapped_string.__send__(method, *args, &block)
|
@wrapped_string.__send__(method, *args, &block)
|
||||||
self
|
self
|
||||||
else
|
else
|
||||||
chars(@wrapped_string.__send__(method, *args, &block))
|
result = @wrapped_string.__send__(method, *args, &block)
|
||||||
|
result.kind_of?(String) ? chars(result) : result
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,9 @@ module MultibyteTest
|
||||||
end
|
end
|
||||||
|
|
||||||
class String
|
class String
|
||||||
def __string_for_multibyte_testing; self; end
|
def __method_for_multibyte_testing_with_integer_result; 1; end
|
||||||
def __string_for_multibyte_testing!; self; end
|
def __method_for_multibyte_testing; 'result'; end
|
||||||
|
def __method_for_multibyte_testing!; 'result'; end
|
||||||
end
|
end
|
||||||
|
|
||||||
class MultibyteCharsTest < Test::Unit::TestCase
|
class MultibyteCharsTest < Test::Unit::TestCase
|
||||||
|
@ -40,7 +41,7 @@ class MultibyteCharsTest < Test::Unit::TestCase
|
||||||
|
|
||||||
def test_should_allow_method_calls_to_string
|
def test_should_allow_method_calls_to_string
|
||||||
assert_nothing_raised do
|
assert_nothing_raised do
|
||||||
@chars.__string_for_multibyte_testing
|
@chars.__method_for_multibyte_testing
|
||||||
end
|
end
|
||||||
assert_raises NoMethodError do
|
assert_raises NoMethodError do
|
||||||
@chars.__unknown_method
|
@chars.__unknown_method
|
||||||
|
@ -48,19 +49,23 @@ class MultibyteCharsTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_forwarded_method_calls_should_return_new_chars_instance
|
def test_forwarded_method_calls_should_return_new_chars_instance
|
||||||
assert @chars.__string_for_multibyte_testing.kind_of?(@proxy_class)
|
assert @chars.__method_for_multibyte_testing.kind_of?(@proxy_class)
|
||||||
assert_not_equal @chars.object_id, @chars.__string_for_multibyte_testing.object_id
|
assert_not_equal @chars.object_id, @chars.__method_for_multibyte_testing.object_id
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_forwarded_bang_method_calls_should_return_the_original_chars_instance
|
def test_forwarded_bang_method_calls_should_return_the_original_chars_instance
|
||||||
assert @chars.__string_for_multibyte_testing!.kind_of?(@proxy_class)
|
assert @chars.__method_for_multibyte_testing!.kind_of?(@proxy_class)
|
||||||
assert_equal @chars.object_id, @chars.__string_for_multibyte_testing!.object_id
|
assert_equal @chars.object_id, @chars.__method_for_multibyte_testing!.object_id
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_methods_are_forwarded_to_wrapped_string_for_byte_strings
|
def test_methods_are_forwarded_to_wrapped_string_for_byte_strings
|
||||||
assert_equal BYTE_STRING.class, BYTE_STRING.mb_chars.class
|
assert_equal BYTE_STRING.class, BYTE_STRING.mb_chars.class
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_forwarded_method_with_non_string_result_should_be_returned_vertabim
|
||||||
|
assert_equal ''.__method_for_multibyte_testing_with_integer_result, @chars.__method_for_multibyte_testing_with_integer_result
|
||||||
|
end
|
||||||
|
|
||||||
def test_should_concatenate
|
def test_should_concatenate
|
||||||
assert_equal 'ab', 'a'.mb_chars + 'b'
|
assert_equal 'ab', 'a'.mb_chars + 'b'
|
||||||
assert_equal 'ab', 'a' + 'b'.mb_chars
|
assert_equal 'ab', 'a' + 'b'.mb_chars
|
||||||
|
|
Loading…
Reference in a new issue