diff options
| author | Yasuo Honda <yasuo.honda@gmail.com> | 2017-12-19 21:14:55 +0000 | 
|---|---|---|
| committer | Yasuo Honda <yasuo.honda@gmail.com> | 2017-12-20 11:52:01 +0000 | 
| commit | 01efbc128d1379d02dd14acf324d011944a1c429 (patch) | |
| tree | f423627193befc7de8cf689ce6bbf62f3e088b60 | |
| parent | 053a4c699043ea5449effaba0549b2f8a5821228 (diff) | |
| download | rails-01efbc128d1379d02dd14acf324d011944a1c429.tar.gz rails-01efbc128d1379d02dd14acf324d011944a1c429.tar.bz2 rails-01efbc128d1379d02dd14acf324d011944a1c429.zip | |
Handle `FrozenError` if it is available
This pull request handles `FrozenError` introduced by Ruby 2.5.
Refer https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/61131
Since `FrozenError` is a subclass of `RuntimeError` minitest used by master
branch can handle it, though it would be better to handle `FrozenError`
explicitly if possible.
`FrozenError` does not exist in Ruby 2.4 or lower, `frozen_error_class`
handles which exception is expected to be raised.
This pull request is intended to be merged to master,
then backported to `5-1-stable` to address #31508
| -rw-r--r-- | activerecord/test/cases/aggregations_test.rb | 2 | ||||
| -rw-r--r-- | activerecord/test/cases/query_cache_test.rb | 2 | ||||
| -rw-r--r-- | activerecord/test/cases/test_case.rb | 4 | ||||
| -rw-r--r-- | activerecord/test/cases/transactions_test.rb | 2 | ||||
| -rw-r--r-- | activesupport/test/abstract_unit.rb | 4 | ||||
| -rw-r--r-- | activesupport/test/core_ext/hash_ext_test.rb | 2 | ||||
| -rw-r--r-- | railties/test/application/middleware_test.rb | 2 | ||||
| -rw-r--r-- | railties/test/isolation/abstract_unit.rb | 4 | 
8 files changed, 17 insertions, 5 deletions
| diff --git a/activerecord/test/cases/aggregations_test.rb b/activerecord/test/cases/aggregations_test.rb index 7f654ec6f6..fbdf2ada4b 100644 --- a/activerecord/test/cases/aggregations_test.rb +++ b/activerecord/test/cases/aggregations_test.rb @@ -27,7 +27,7 @@ class AggregationsTest < ActiveRecord::TestCase    def test_immutable_value_objects      customers(:david).balance = Money.new(100) -    assert_raise(RuntimeError) { customers(:david).balance.instance_eval { @amount = 20 } } +    assert_raise(frozen_error_class) { customers(:david).balance.instance_eval { @amount = 20 } }    end    def test_inferred_mapping diff --git a/activerecord/test/cases/query_cache_test.rb b/activerecord/test/cases/query_cache_test.rb index 46f90b0bca..ad05f70933 100644 --- a/activerecord/test/cases/query_cache_test.rb +++ b/activerecord/test/cases/query_cache_test.rb @@ -283,7 +283,7 @@ class QueryCacheTest < ActiveRecord::TestCase        payload[:sql].downcase!      end -    assert_raises RuntimeError do +    assert_raises frozen_error_class do        ActiveRecord::Base.cache do          assert_queries(1) { Task.find(1); Task.find(1) }        end diff --git a/activerecord/test/cases/test_case.rb b/activerecord/test/cases/test_case.rb index 06a8693a7d..d8c96316ed 100644 --- a/activerecord/test/cases/test_case.rb +++ b/activerecord/test/cases/test_case.rb @@ -77,6 +77,10 @@ module ActiveRecord        model.reset_column_information        model.column_names.include?(column_name.to_s)      end + +    def frozen_error_class +      Object.const_defined?(:FrozenError) ? FrozenError : RuntimeError +    end    end    class PostgreSQLTestCase < TestCase diff --git a/activerecord/test/cases/transactions_test.rb b/activerecord/test/cases/transactions_test.rb index 5c8ae4d3cb..c110fa2f7d 100644 --- a/activerecord/test/cases/transactions_test.rb +++ b/activerecord/test/cases/transactions_test.rb @@ -576,7 +576,7 @@ class TransactionTest < ActiveRecord::TestCase    def test_rollback_when_saving_a_frozen_record      topic = Topic.new(title: "test")      topic.freeze -    e = assert_raise(RuntimeError) { topic.save } +    e = assert_raise(frozen_error_class) { topic.save }      # Not good enough, but we can't do much      # about it since there is no specific error      # for frozen objects. diff --git a/activesupport/test/abstract_unit.rb b/activesupport/test/abstract_unit.rb index 3ac11e0fe0..f214898145 100644 --- a/activesupport/test/abstract_unit.rb +++ b/activesupport/test/abstract_unit.rb @@ -38,4 +38,8 @@ class ActiveSupport::TestCase    private def jruby_skip(message = "")      skip message if defined?(JRUBY_VERSION)    end + +  def frozen_error_class +    Object.const_defined?(:FrozenError) ? FrozenError : RuntimeError +  end  end diff --git a/activesupport/test/core_ext/hash_ext_test.rb b/activesupport/test/core_ext/hash_ext_test.rb index 746d7ad416..17952e9fc7 100644 --- a/activesupport/test/core_ext/hash_ext_test.rb +++ b/activesupport/test/core_ext/hash_ext_test.rb @@ -446,7 +446,7 @@ class HashExtTest < ActiveSupport::TestCase      original.freeze      assert_nothing_raised { original.except(:a) } -    assert_raise(RuntimeError) { original.except!(:a) } +    assert_raise(frozen_error_class) { original.except!(:a) }    end    def test_except_does_not_delete_values_in_original diff --git a/railties/test/application/middleware_test.rb b/railties/test/application/middleware_test.rb index 470a5326c6..d59384e982 100644 --- a/railties/test/application/middleware_test.rb +++ b/railties/test/application/middleware_test.rb @@ -249,7 +249,7 @@ module ApplicationTests      test "can't change middleware after it's built" do        boot! -      assert_raise RuntimeError do +      assert_raise frozen_error_class do          app.config.middleware.use Rack::Config        end      end diff --git a/railties/test/isolation/abstract_unit.rb b/railties/test/isolation/abstract_unit.rb index 96c6f21395..0ca0de5e6f 100644 --- a/railties/test/isolation/abstract_unit.rb +++ b/railties/test/isolation/abstract_unit.rb @@ -406,6 +406,10 @@ class ActiveSupport::TestCase    include TestHelpers::Rack    include TestHelpers::Generation    include ActiveSupport::Testing::Stream + +  def frozen_error_class +    Object.const_defined?(:FrozenError) ? FrozenError : RuntimeError +  end  end  # Create a scope and build a fixture rails app | 
