mirror of https://github.com/rails/rails
48 lines
1.8 KiB
Ruby
48 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative "abstract_unit"
|
|
require "active_support/execution_context/test_helper"
|
|
|
|
class ExecutionContextTest < ActiveSupport::TestCase
|
|
# ExecutionContext is automatically reset in Rails app via executor hooks set in railtie
|
|
# But not in Active Support's own test suite.
|
|
include ActiveSupport::ExecutionContext::TestHelper
|
|
|
|
test "#set restore the modified keys when the block exits" do
|
|
assert_nil ActiveSupport::ExecutionContext.to_h[:foo]
|
|
ActiveSupport::ExecutionContext.set(foo: "bar") do
|
|
assert_equal "bar", ActiveSupport::ExecutionContext.to_h[:foo]
|
|
ActiveSupport::ExecutionContext.set(foo: "plop") do
|
|
assert_equal "plop", ActiveSupport::ExecutionContext.to_h[:foo]
|
|
end
|
|
assert_equal "bar", ActiveSupport::ExecutionContext.to_h[:foo]
|
|
|
|
ActiveSupport::ExecutionContext[:direct_assignment] = "present"
|
|
ActiveSupport::ExecutionContext.set(multi_assignment: "present")
|
|
end
|
|
|
|
assert_nil ActiveSupport::ExecutionContext.to_h[:foo]
|
|
|
|
assert_equal "present", ActiveSupport::ExecutionContext.to_h[:direct_assignment]
|
|
assert_equal "present", ActiveSupport::ExecutionContext.to_h[:multi_assignment]
|
|
end
|
|
|
|
test "#set coerce keys to symbol" do
|
|
ActiveSupport::ExecutionContext.set("foo" => "bar") do
|
|
assert_equal "bar", ActiveSupport::ExecutionContext.to_h[:foo]
|
|
end
|
|
end
|
|
|
|
test "#[]= coerce keys to symbol" do
|
|
ActiveSupport::ExecutionContext["symbol_key"] = "symbolized"
|
|
assert_equal "symbolized", ActiveSupport::ExecutionContext.to_h[:symbol_key]
|
|
end
|
|
|
|
test "#to_h returns a copy of the context" do
|
|
ActiveSupport::ExecutionContext[:foo] = 42
|
|
context = ActiveSupport::ExecutionContext.to_h
|
|
context[:foo] = 43
|
|
assert_equal 42, ActiveSupport::ExecutionContext.to_h[:foo]
|
|
end
|
|
end
|