aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2009-08-31 22:11:50 +0100
committerPratik Naik <pratiknaik@gmail.com>2009-08-31 22:11:50 +0100
commitbae00bb1cc392e1cf408369809b9cf85468bef42 (patch)
tree17103af6eeb5de96c72beda1debce28950cc7fea /activesupport/test
parent93c76b2fb08668bc4b8364cc8051476e6d1d15ba (diff)
parentffd2cf167040b60c26d97c01598560c87bd4b2d3 (diff)
downloadrails-bae00bb1cc392e1cf408369809b9cf85468bef42.tar.gz
rails-bae00bb1cc392e1cf408369809b9cf85468bef42.tar.bz2
rails-bae00bb1cc392e1cf408369809b9cf85468bef42.zip
Merge commit 'mainstream/master'
Diffstat (limited to 'activesupport/test')
-rw-r--r--activesupport/test/core_ext/array_ext_test.rb7
-rw-r--r--activesupport/test/core_ext/date_ext_test.rb6
-rw-r--r--activesupport/test/core_ext/enumerable_test.rb2
-rw-r--r--activesupport/test/core_ext/hash_ext_test.rb19
-rw-r--r--activesupport/test/core_ext/module_test.rb13
-rw-r--r--activesupport/test/core_ext/regexp_ext_test.rb18
-rw-r--r--activesupport/test/dependencies_test.rb77
-rw-r--r--activesupport/test/flush_cache_on_private_memoization_test.rb44
-rw-r--r--activesupport/test/inflector_test.rb10
-rw-r--r--activesupport/test/isolation_test.rb8
-rw-r--r--activesupport/test/json/decoding_test.rb8
-rw-r--r--activesupport/test/multibyte_chars_test.rb15
12 files changed, 173 insertions, 54 deletions
diff --git a/activesupport/test/core_ext/array_ext_test.rb b/activesupport/test/core_ext/array_ext_test.rb
index 24d33896ce..8198b9bd2c 100644
--- a/activesupport/test/core_ext/array_ext_test.rb
+++ b/activesupport/test/core_ext/array_ext_test.rb
@@ -302,6 +302,13 @@ class ArrayToXmlTests < Test::Unit::TestCase
xml = [].to_xml
assert_match(/type="array"\/>/, xml)
end
+
+ def test_to_xml_dups_options
+ options = {:skip_instruct => true}
+ [].to_xml(options)
+ # :builder, etc, shouldn't be added to options
+ assert_equal({:skip_instruct => true}, options)
+ end
end
class ArrayExtractOptionsTests < Test::Unit::TestCase
diff --git a/activesupport/test/core_ext/date_ext_test.rb b/activesupport/test/core_ext/date_ext_test.rb
index 8a7bae5fc6..18422d68bc 100644
--- a/activesupport/test/core_ext/date_ext_test.rb
+++ b/activesupport/test/core_ext/date_ext_test.rb
@@ -251,6 +251,12 @@ class DateExtCalculationsTest < Test::Unit::TestCase
Time.zone_default = nil
end
+ def test_date_advance_should_not_change_passed_options_hash
+ options = { :years => 3, :months => 11, :days => 2 }
+ Date.new(2005,2,28).advance(options)
+ assert_equal({ :years => 3, :months => 11, :days => 2 }, options)
+ end
+
protected
def with_env_tz(new_tz = 'US/Eastern')
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
diff --git a/activesupport/test/core_ext/enumerable_test.rb b/activesupport/test/core_ext/enumerable_test.rb
index 66507d4652..4170de3dce 100644
--- a/activesupport/test/core_ext/enumerable_test.rb
+++ b/activesupport/test/core_ext/enumerable_test.rb
@@ -64,9 +64,9 @@ class EnumerableTests < Test::Unit::TestCase
def test_enumerable_sums
assert_equal 20, (1..4).sum { |i| i * 2 }
assert_equal 10, (1..4).sum
+ assert_equal 10, (1..4.5).sum
assert_equal 6, (1...4).sum
assert_equal 'abc', ('a'..'c').sum
- assert_raises(NoMethodError) { 1..2.5.sum }
end
def test_each_with_object
diff --git a/activesupport/test/core_ext/hash_ext_test.rb b/activesupport/test/core_ext/hash_ext_test.rb
index ece5466abb..eb4c37aaf0 100644
--- a/activesupport/test/core_ext/hash_ext_test.rb
+++ b/activesupport/test/core_ext/hash_ext_test.rb
@@ -265,6 +265,18 @@ class HashExtTest < Test::Unit::TestCase
assert_equal expected, hash_1
end
+ def test_deep_merge_on_indifferent_access
+ hash_1 = HashWithIndifferentAccess.new({ :a => "a", :b => "b", :c => { :c1 => "c1", :c2 => "c2", :c3 => { :d1 => "d1" } } })
+ hash_2 = HashWithIndifferentAccess.new({ :a => 1, :c => { :c1 => 2, :c3 => { :d2 => "d2" } } })
+ hash_3 = { :a => 1, :c => { :c1 => 2, :c3 => { :d2 => "d2" } } }
+ expected = { "a" => 1, "b" => "b", "c" => { "c1" => 2, "c2" => "c2", "c3" => { "d1" => "d1", "d2" => "d2" } } }
+ assert_equal expected, hash_1.deep_merge(hash_2)
+ assert_equal expected, hash_1.deep_merge(hash_3)
+
+ hash_1.deep_merge!(hash_2)
+ assert_equal expected, hash_1
+ end
+
def test_reverse_merge
defaults = { :a => "x", :b => "y", :c => 10 }.freeze
options = { :a => 1, :b => 2 }
@@ -880,6 +892,13 @@ class HashToXmlTest < Test::Unit::TestCase
assert_equal 30, alert_at.min
assert_equal 45, alert_at.sec
end
+
+ def test_to_xml_dups_options
+ options = {:skip_instruct => true}
+ {}.to_xml(options)
+ # :builder, etc, shouldn't be added to options
+ assert_equal({:skip_instruct => true}, options)
+ end
end
class QueryTest < Test::Unit::TestCase
diff --git a/activesupport/test/core_ext/module_test.rb b/activesupport/test/core_ext/module_test.rb
index f8387ae4ab..87f056ea85 100644
--- a/activesupport/test/core_ext/module_test.rb
+++ b/activesupport/test/core_ext/module_test.rb
@@ -32,7 +32,7 @@ end
Somewhere = Struct.new(:street, :city)
Someone = Struct.new(:name, :place) do
- delegate :street, :city, :to => :place
+ delegate :street, :city, :to_f, :to => :place
delegate :state, :to => :@place
delegate :upcase, :to => "place.city"
end
@@ -44,6 +44,7 @@ end
Project = Struct.new(:description, :person) do
delegate :name, :to => :person, :allow_nil => true
+ delegate :to_f, :to => :description, :allow_nil => true
end
class Name
@@ -145,6 +146,16 @@ class ModuleTest < Test::Unit::TestCase
assert_raise(RuntimeError) { david.street }
end
+ def test_delegation_to_method_that_exists_on_nil
+ nil_person = Someone.new(nil)
+ assert_equal 0.0, nil_person.to_f
+ end
+
+ def test_delegation_to_method_that_exists_on_nil_when_allowing_nil
+ nil_project = Project.new(nil)
+ assert_equal 0.0, nil_project.to_f
+ end
+
def test_parent
assert_equal Yz::Zy, Yz::Zy::Cd.parent
assert_equal Yz, Yz::Zy.parent
diff --git a/activesupport/test/core_ext/regexp_ext_test.rb b/activesupport/test/core_ext/regexp_ext_test.rb
index f71099856d..e2d9140bca 100644
--- a/activesupport/test/core_ext/regexp_ext_test.rb
+++ b/activesupport/test/core_ext/regexp_ext_test.rb
@@ -7,20 +7,20 @@ class RegexpExtAccessTests < Test::Unit::TestCase
end
def test_multiline
- assert //m.multiline?
- assert ! //.multiline?
- assert ! /(?m:)/.multiline?
+ assert_equal true, //m.multiline?
+ assert_equal false, //.multiline?
+ assert_equal false, /(?m:)/.multiline?
end
def test_optionalize
- assert "a?", Regexp.optionalize("a")
- assert "(?:foo)?", Regexp.optionalize("foo")
- assert "", Regexp.optionalize("")
+ assert_equal "a?", Regexp.optionalize("a")
+ assert_equal "(?:foo)?", Regexp.optionalize("foo")
+ assert_equal "", Regexp.optionalize("")
end
def test_unoptionalize
- assert "a", Regexp.unoptionalize("a?")
- assert "foo", Regexp.unoptionalize("(?:foo)")
- assert "", Regexp.unoptionalize("")
+ assert_equal "a", Regexp.unoptionalize("a?")
+ assert_equal "foo", Regexp.unoptionalize("(?:foo)?")
+ assert_equal "", Regexp.unoptionalize("")
end
end \ No newline at end of file
diff --git a/activesupport/test/dependencies_test.rb b/activesupport/test/dependencies_test.rb
index 99c53924c2..97d70cf8c4 100644
--- a/activesupport/test/dependencies_test.rb
+++ b/activesupport/test/dependencies_test.rb
@@ -3,6 +3,7 @@ require 'pp'
require 'active_support/dependencies'
require 'active_support/core_ext/module/loading'
require 'active_support/core_ext/kernel/reporting'
+require 'active_support/core_ext/symbol/to_proc'
module ModuleWithMissing
mattr_accessor :missing_count
@@ -23,9 +24,11 @@ class DependenciesTest < Test::Unit::TestCase
def with_loading(*from)
old_mechanism, ActiveSupport::Dependencies.mechanism = ActiveSupport::Dependencies.mechanism, :load
- dir = File.dirname(__FILE__)
+ this_dir = File.dirname(__FILE__)
+ parent_dir = File.dirname(this_dir)
+ $LOAD_PATH.unshift(parent_dir) unless $LOAD_PATH.include?(parent_dir)
prior_load_paths = ActiveSupport::Dependencies.load_paths
- ActiveSupport::Dependencies.load_paths = from.collect { |f| "#{dir}/#{f}" }
+ ActiveSupport::Dependencies.load_paths = from.collect { |f| "#{this_dir}/#{f}" }
yield
ensure
ActiveSupport::Dependencies.load_paths = prior_load_paths
@@ -33,6 +36,10 @@ class DependenciesTest < Test::Unit::TestCase
ActiveSupport::Dependencies.explicitly_unloadable_constants = []
end
+ def with_autoloading_fixtures(&block)
+ with_loading 'autoloading_fixtures', &block
+ end
+
def test_tracking_loaded_files
require_dependency 'dependencies/service_one'
require_dependency 'dependencies/service_two'
@@ -129,7 +136,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_module_loading
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_kind_of Module, A
assert_kind_of Class, A::B
assert_kind_of Class, A::C::D
@@ -138,7 +145,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_non_existing_const_raises_name_error
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_raise(NameError) { DoesNotExist }
assert_raise(NameError) { NoModule::DoesNotExist }
assert_raise(NameError) { A::DoesNotExist }
@@ -147,49 +154,49 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_directories_manifest_as_modules_unless_const_defined
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_kind_of Module, ModuleFolder
Object.__send__ :remove_const, :ModuleFolder
end
end
def test_module_with_nested_class
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_kind_of Class, ModuleFolder::NestedClass
Object.__send__ :remove_const, :ModuleFolder
end
end
def test_module_with_nested_inline_class
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_kind_of Class, ModuleFolder::InlineClass
Object.__send__ :remove_const, :ModuleFolder
end
end
def test_directories_may_manifest_as_nested_classes
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_kind_of Class, ClassFolder
Object.__send__ :remove_const, :ClassFolder
end
end
def test_class_with_nested_class
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_kind_of Class, ClassFolder::NestedClass
Object.__send__ :remove_const, :ClassFolder
end
end
def test_class_with_nested_inline_class
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_kind_of Class, ClassFolder::InlineClass
Object.__send__ :remove_const, :ClassFolder
end
end
def test_class_with_nested_inline_subclass_of_parent
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_kind_of Class, ClassFolder::ClassFolderSubclass
assert_kind_of Class, ClassFolder
assert_equal 'indeed', ClassFolder::ClassFolderSubclass::ConstantInClassFolder
@@ -198,7 +205,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_nested_class_can_access_sibling
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
sibling = ModuleFolder::NestedClass.class_eval "NestedSibling"
assert defined?(ModuleFolder::NestedSibling)
assert_equal ModuleFolder::NestedSibling, sibling
@@ -207,7 +214,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def failing_test_access_thru_and_upwards_fails
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert ! defined?(ModuleFolder)
assert_raise(NameError) { ModuleFolder::Object }
assert_raise(NameError) { ModuleFolder::NestedClass::Object }
@@ -216,7 +223,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_non_existing_const_raises_name_error_with_fully_qualified_name
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
begin
A::DoesNotExist.nil?
flunk "No raise!!"
@@ -294,7 +301,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_autoloaded?
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder")
assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder::NestedClass")
@@ -373,7 +380,7 @@ class DependenciesTest < Test::Unit::TestCase
end
end_eval
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert_kind_of Integer, ::ModuleWithCustomConstMissing::B
assert_kind_of Module, ::ModuleWithCustomConstMissing::A
assert_kind_of String, ::ModuleWithCustomConstMissing::A::B
@@ -382,7 +389,7 @@ class DependenciesTest < Test::Unit::TestCase
def test_const_missing_should_not_double_load
$counting_loaded_times = 0
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
require_dependency '././counting_loader'
assert_equal 1, $counting_loaded_times
assert_raise(ArgumentError) { ActiveSupport::Dependencies.load_missing_constant Object, :CountingLoader }
@@ -396,7 +403,7 @@ class DependenciesTest < Test::Unit::TestCase
m.module_eval "def a() CountingLoader; end"
extend m
kls = nil
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
kls = nil
assert_nothing_raised { kls = a }
assert_equal "CountingLoader", kls.name
@@ -431,7 +438,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_load_once_paths_do_not_add_to_autoloaded_constants
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
ActiveSupport::Dependencies.load_once_paths = ActiveSupport::Dependencies.load_paths.dup
assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder")
@@ -447,7 +454,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_application_should_special_case_application_controller
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
require_dependency 'application'
assert_equal 10, ApplicationController
assert ActiveSupport::Dependencies.autoloaded?(:ApplicationController)
@@ -455,7 +462,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_const_missing_on_kernel_should_fallback_to_object
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
kls = Kernel::E
assert_equal "E", kls.name
assert_equal kls.object_id, Kernel::E.object_id
@@ -463,14 +470,14 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_preexisting_constants_are_not_marked_as_autoloaded
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
require_dependency 'e'
assert ActiveSupport::Dependencies.autoloaded?(:E)
ActiveSupport::Dependencies.clear
end
Object.const_set :E, Class.new
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
require_dependency 'e'
assert ! ActiveSupport::Dependencies.autoloaded?(:E), "E shouldn't be marked autoloaded!"
ActiveSupport::Dependencies.clear
@@ -481,7 +488,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_unloadable
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
Object.const_set :M, Module.new
M.unloadable
@@ -495,14 +502,14 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_unloadable_should_fail_with_anonymous_modules
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
m = Module.new
assert_raise(ArgumentError) { m.unloadable }
end
end
def test_unloadable_should_return_change_flag
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
Object.const_set :M, Module.new
assert_equal true, M.unloadable
assert_equal false, M.unloadable
@@ -593,7 +600,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_file_with_multiple_constants_and_require_dependency
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert ! defined?(MultipleConstantFile)
assert ! defined?(SiblingConstant)
@@ -611,7 +618,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_file_with_multiple_constants_and_auto_loading
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert ! defined?(MultipleConstantFile)
assert ! defined?(SiblingConstant)
@@ -630,7 +637,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_nested_file_with_multiple_constants_and_require_dependency
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert ! defined?(ClassFolder::NestedClass)
assert ! defined?(ClassFolder::SiblingClass)
@@ -649,7 +656,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_nested_file_with_multiple_constants_and_auto_loading
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert ! defined?(ClassFolder::NestedClass)
assert ! defined?(ClassFolder::SiblingClass)
@@ -668,7 +675,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_autoload_doesnt_shadow_no_method_error_with_relative_constant
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert !defined?(::RaisesNoMethodError), "::RaisesNoMethodError is defined but it hasn't been referenced yet!"
2.times do
assert_raise(NoMethodError) { RaisesNoMethodError }
@@ -681,7 +688,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_autoload_doesnt_shadow_no_method_error_with_absolute_constant
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
assert !defined?(::RaisesNoMethodError), "::RaisesNoMethodError is defined but it hasn't been referenced yet!"
2.times do
assert_raise(NoMethodError) { ::RaisesNoMethodError }
@@ -694,7 +701,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_autoload_doesnt_shadow_error_when_mechanism_not_set_to_load
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
ActiveSupport::Dependencies.mechanism = :require
2.times do
assert_raise(NameError) { assert_equal 123, ::RaisesNameError::FooBarBaz }
@@ -703,7 +710,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_autoload_doesnt_shadow_name_error
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
Object.send(:remove_const, :RaisesNameError) if defined?(::RaisesNameError)
2.times do
begin
@@ -737,7 +744,7 @@ class DependenciesTest < Test::Unit::TestCase
end
def test_load_once_constants_should_not_be_unloaded
- with_loading 'autoloading_fixtures' do
+ with_autoloading_fixtures do
ActiveSupport::Dependencies.load_once_paths = ActiveSupport::Dependencies.load_paths
::A.to_s
assert defined?(A)
diff --git a/activesupport/test/flush_cache_on_private_memoization_test.rb b/activesupport/test/flush_cache_on_private_memoization_test.rb
new file mode 100644
index 0000000000..ddbd05b0e0
--- /dev/null
+++ b/activesupport/test/flush_cache_on_private_memoization_test.rb
@@ -0,0 +1,44 @@
+require 'rubygems'
+require 'activesupport'
+require 'test/unit'
+
+class FlashCacheOnPrivateMemoizationTest < Test::Unit::TestCase
+ extend ActiveSupport::Memoizable
+
+ def test_public
+ assert_method_unmemoizable :pub
+ end
+
+ def test_protected
+ assert_method_unmemoizable :prot
+ end
+
+ def test_private
+ assert_method_unmemoizable :priv
+ end
+
+ def pub; rand end
+ memoize :pub
+
+ protected
+
+ def prot; rand end
+ memoize :prot
+
+ private
+
+ def priv; rand end
+ memoize :priv
+
+ def assert_method_unmemoizable(meth, message=nil)
+ full_message = build_message(message, "<?> not unmemoizable.\n", meth)
+ assert_block(full_message) do
+ a = send meth
+ b = send meth
+ unmemoize_all
+ c = send meth
+ a == b && a != c
+ end
+ end
+
+end \ No newline at end of file
diff --git a/activesupport/test/inflector_test.rb b/activesupport/test/inflector_test.rb
index 7d1554910e..76bdc0e973 100644
--- a/activesupport/test/inflector_test.rb
+++ b/activesupport/test/inflector_test.rb
@@ -256,6 +256,16 @@ class InflectorTest < Test::Unit::TestCase
end
end
+ Irregularities.each do |irregularity|
+ singular, plural = *irregularity
+ ActiveSupport::Inflector.inflections do |inflect|
+ define_method("test_pluralize_of_irregularity_#{plural}_should_be_the_same") do
+ inflect.irregular(singular, plural)
+ assert_equal plural, ActiveSupport::Inflector.pluralize(plural)
+ end
+ end
+ end
+
[ :all, [] ].each do |scope|
ActiveSupport::Inflector.inflections do |inflect|
define_method("test_clear_inflections_with_#{scope.kind_of?(Array) ? "no_arguments" : scope}") do
diff --git a/activesupport/test/isolation_test.rb b/activesupport/test/isolation_test.rb
index 5a1f285476..7aecdb8009 100644
--- a/activesupport/test/isolation_test.rb
+++ b/activesupport/test/isolation_test.rb
@@ -1,7 +1,9 @@
require 'abstract_unit'
# Does awesome
-if ENV['CHILD']
+if defined?(MiniTest)
+ $stderr.puts "Umm, MiniTest not supported yet, mmkay?"
+elsif ENV['CHILD']
class ChildIsolationTest < ActiveSupport::TestCase
include ActiveSupport::Testing::Isolation
@@ -73,7 +75,7 @@ else
File.open(File.join(File.dirname(__FILE__), "fixtures", "isolation_test"), "w") {}
ENV["CHILD"] = "1"
- OUTPUT = `#{Gem.ruby} -I#{File.dirname(__FILE__)} #{File.expand_path(__FILE__)} -v`
+ OUTPUT = `#{Gem.ruby} -I#{File.dirname(__FILE__)} "#{File.expand_path(__FILE__)}" -v`
ENV.delete("CHILD")
def setup
@@ -153,4 +155,4 @@ else
end
end
-end \ No newline at end of file
+end
diff --git a/activesupport/test/json/decoding_test.rb b/activesupport/test/json/decoding_test.rb
index 4129a4fab6..05e420ae36 100644
--- a/activesupport/test/json/decoding_test.rb
+++ b/activesupport/test/json/decoding_test.rb
@@ -14,10 +14,10 @@ class TestJSONDecoding < ActiveSupport::TestCase
%({"a": "a's, b's and c's", "b": "5,000"}) => {"a" => "a's, b's and c's", "b" => "5,000"},
# multibyte
%({"matzue": "松江", "asakusa": "浅草"}) => {"matzue" => "松江", "asakusa" => "浅草"},
- %({"a": "2007-01-01"}) => {'a' => Date.new(2007, 1, 1)},
- %({"a": "2007-01-01 01:12:34 Z"}) => {'a' => Time.utc(2007, 1, 1, 1, 12, 34)},
+ %({"a": "2007-01-01"}) => {'a' => Date.new(2007, 1, 1)},
+ %({"a": "2007-01-01 01:12:34 Z"}) => {'a' => Time.utc(2007, 1, 1, 1, 12, 34)},
# no time zone
- %({"a": "2007-01-01 01:12:34"}) => {'a' => "2007-01-01 01:12:34"},
+ %({"a": "2007-01-01 01:12:34"}) => {'a' => "2007-01-01 01:12:34"},
# needs to be *exact*
%({"a": " 2007-01-01 01:12:34 Z "}) => {'a' => " 2007-01-01 01:12:34 Z "},
%({"a": "2007-01-01 : it's your birthday"}) => {'a' => "2007-01-01 : it's your birthday"},
@@ -29,6 +29,7 @@ class TestJSONDecoding < ActiveSupport::TestCase
%({"a": null}) => {"a" => nil},
%({"a": true}) => {"a" => true},
%({"a": false}) => {"a" => false},
+ %q({"bad":"\\\\","trailing":""}) => {"bad" => "\\", "trailing" => ""},
%q({"a": "http:\/\/test.host\/posts\/1"}) => {"a" => "http://test.host/posts/1"},
%q({"a": "\u003cunicode\u0020escape\u003e"}) => {"a" => "<unicode escape>"},
%q({"a": "\\\\u0020skip double backslashes"}) => {"a" => "\\u0020skip double backslashes"},
@@ -83,3 +84,4 @@ class TestJSONDecoding < ActiveSupport::TestCase
assert_raise(ActiveSupport::JSON::ParseError) { ActiveSupport::JSON.decode(%({: 1})) }
end
end
+
diff --git a/activesupport/test/multibyte_chars_test.rb b/activesupport/test/multibyte_chars_test.rb
index 661b33cc57..ed37a1a0da 100644
--- a/activesupport/test/multibyte_chars_test.rb
+++ b/activesupport/test/multibyte_chars_test.rb
@@ -1,5 +1,4 @@
# encoding: utf-8
-
require 'abstract_unit'
require 'multibyte_test_helpers'
@@ -184,7 +183,7 @@ class MultibyteCharsUTF8BehaviourTest < Test::Unit::TestCase
end
def test_sortability
- words = %w(builder armor zebra).map(&:mb_chars).sort
+ words = %w(builder armor zebra).sort_by { |s| s.mb_chars }
assert_equal %w(armor builder zebra), words
end
@@ -231,7 +230,19 @@ class MultibyteCharsUTF8BehaviourTest < Test::Unit::TestCase
assert_nil @chars.index('u')
assert_equal 0, @chars.index('こに')
assert_equal 2, @chars.index('ち')
+ assert_equal 2, @chars.index('ち', -2)
+ assert_equal nil, @chars.index('ち', -1)
assert_equal 3, @chars.index('わ')
+ assert_equal 5, 'ééxééx'.mb_chars.index('x', 4)
+ end
+
+ def test_rindex_should_return_character_offset
+ assert_nil @chars.rindex('u')
+ assert_equal 1, @chars.rindex('に')
+ assert_equal 2, @chars.rindex('ち', -2)
+ assert_nil @chars.rindex('ち', -3)
+ assert_equal 6, 'Café périferôl'.mb_chars.rindex('é')
+ assert_equal 13, 'Café périferôl'.mb_chars.rindex(/\w/u)
end
def test_indexed_insert_should_take_character_offsets