class DeprecationTest

Public Class Methods

new(deprecator) click to toggle source
# File activesupport/test/deprecation_test.rb, line 350
def initialize(deprecator)
  @request = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(self, :request, :@request, deprecator)
  @_request = :a_request
end

Public Instance Methods

deprecated_method() click to toggle source
# File activesupport/test/deprecation_test.rb, line 385
def deprecated_method
  warn(deprecated_method_warning(:deprecated_method, "You are calling deprecated method"))
end
deprecated_method_warning(method_name, message = nil) click to toggle source
# File activesupport/test/deprecation_test.rb, line 390
def deprecated_method_warning(method_name, message = nil)
  message || "#{method_name} is deprecated and will be removed from This Library"
end
method() click to toggle source
# File activesupport/test/deprecation_test.rb, line 304
def method
end
old_request() click to toggle source
# File activesupport/test/deprecation_test.rb, line 355
def old_request; @request end
request() click to toggle source
# File activesupport/test/deprecation_test.rb, line 354
def request; @_request end
setup() click to toggle source
# File activesupport/test/deprecation_test.rb, line 55
def setup
  # Track the last warning.
  @old_behavior = ActiveSupport::Deprecation.behavior
  @last_message = nil
  ActiveSupport::Deprecation.behavior = Proc.new { |message| @last_message = message }

  @dtc = Deprecatee.new
end
teardown() click to toggle source
# File activesupport/test/deprecation_test.rb, line 64
def teardown
  ActiveSupport::Deprecation.behavior = @old_behavior
end
test_assert_deprecated_matches_any_warning() click to toggle source
# File activesupport/test/deprecation_test.rb, line 227
def test_assert_deprecated_matches_any_warning
  assert_deprecated "abc" do
    ActiveSupport::Deprecation.warn "abc"
    ActiveSupport::Deprecation.warn "def"
  end
rescue Minitest::Assertion
  flunk "assert_deprecated should match any warning in block, not just the last one"
end
test_assert_deprecated_raises_when_method_not_deprecated() click to toggle source
# File activesupport/test/deprecation_test.rb, line 213
def test_assert_deprecated_raises_when_method_not_deprecated
  assert_raises(Minitest::Assertion) { assert_deprecated { @dtc.not } }
end
test_assert_deprecated_returns_result_of_block() click to toggle source
# File activesupport/test/deprecation_test.rb, line 240
def test_assert_deprecated_returns_result_of_block
  result = assert_deprecated("abc") do
    ActiveSupport::Deprecation.warn "abc"
    123
  end
  assert_equal 123, result
end
test_assert_deprecated_warn_work_with_default_behavior() click to toggle source
# File activesupport/test/deprecation_test.rb, line 248
def test_assert_deprecated_warn_work_with_default_behavior
  ActiveSupport::Deprecation.instance_variable_set("@behavior", nil)
  assert_deprecated("abc") do
    ActiveSupport::Deprecation.warn "abc"
  end
end
test_assert_deprecation_without_match() click to toggle source
# File activesupport/test/deprecation_test.rb, line 221
def test_assert_deprecation_without_match
  assert_deprecated do
    @dtc.partially
  end
end
test_assert_not_deprecated() click to toggle source
# File activesupport/test/deprecation_test.rb, line 217
def test_assert_not_deprecated
  assert_raises(Minitest::Assertion) { assert_not_deprecated { @dtc.partially } }
end
test_assert_not_deprecated_returns_result_of_block() click to toggle source
# File activesupport/test/deprecation_test.rb, line 236
def test_assert_not_deprecated_returns_result_of_block
  assert_equal 123, assert_not_deprecated { 123 }
end
test_custom_gem_name() click to toggle source
# File activesupport/test/deprecation_test.rb, line 412
def test_custom_gem_name
  deprecator = ActiveSupport::Deprecation.new("2.0", "Custom")

  deprecator.send(:deprecated_method_warning, :deprecated_method, "You are calling deprecated method").tap do |message|
    assert_match(/is deprecated and will be removed from Custom/, message)
  end
end
test_default_deprecation_horizon_should_always_bigger_than_current_quails_version() click to toggle source
# File activesupport/test/deprecation_test.rb, line 400
def test_default_deprecation_horizon_should_always_bigger_than_current_quails_version
  assert_operator ActiveSupport::Deprecation.new.deprecation_horizon, :>, ActiveSupport::VERSION::STRING
end
test_default_gem_name() click to toggle source
# File activesupport/test/deprecation_test.rb, line 404
def test_default_gem_name
  deprecator = ActiveSupport::Deprecation.new

  deprecator.send(:deprecated_method_warning, :deprecated_method, "You are calling deprecated method").tap do |message|
    assert_match(/is deprecated and will be removed from Quails/, message)
  end
end
test_default_notify_behavior() click to toggle source
# File activesupport/test/deprecation_test.rb, line 164
def test_default_notify_behavior
  ActiveSupport::Deprecation.behavior = :notify
  behavior = ActiveSupport::Deprecation.behavior.first

  begin
    events = []
    ActiveSupport::Notifications.subscribe("deprecation.my_gem_custom") { |_, **args|
      events << args
    }

    assert_nil behavior.call("Some error!", ["call stack!"], "horizon", "MyGem::Custom")
    assert_equal 1, events.size
    assert_equal "Some error!", events.first[:message]
    assert_equal ["call stack!"], events.first[:callstack]
    assert_equal "horizon", events.first[:deprecation_horizon]
    assert_equal "MyGem::Custom", events.first[:gem_name]
  ensure
    ActiveSupport::Notifications.unsubscribe("deprecation.my_gem_custom")
  end
end
test_default_silence_behavior() click to toggle source
# File activesupport/test/deprecation_test.rb, line 154
def test_default_silence_behavior
  ActiveSupport::Deprecation.behavior = :silence
  behavior = ActiveSupport::Deprecation.behavior.first

  stderr_output = capture(:stderr) {
    assert_nil behavior.call("Some error!", ["call stack!"], "horizon", "gem")
  }
  assert stderr_output.empty?
end
test_default_stderr_behavior() click to toggle source
# File activesupport/test/deprecation_test.rb, line 132
def test_default_stderr_behavior
  ActiveSupport::Deprecation.behavior = :stderr
  behavior = ActiveSupport::Deprecation.behavior.first

  content = capture(:stderr) {
    assert_nil behavior.call("Some error!", ["call stack!"], "horizon", "gem")
  }
  assert_match(/Some error!/, content)
  assert_match(/call stack!/, content)
end
test_default_stderr_behavior_with_warn_method() click to toggle source
# File activesupport/test/deprecation_test.rb, line 143
def test_default_stderr_behavior_with_warn_method
  ActiveSupport::Deprecation.behavior = :stderr

  content = capture(:stderr) {
    ActiveSupport::Deprecation.warn("Instance error!", ["instance call stack!"])
  }

  assert_match(/Instance error!/, content)
  assert_match(/instance call stack!/, content)
end
test_delegate_deprecator_instance() click to toggle source
# File activesupport/test/deprecation_test.rb, line 376
def test_delegate_deprecator_instance
  klass = Class.new do
    attr_reader :last_message
    delegate :warn, :behavior=, to: ActiveSupport::Deprecation

    def initialize
      self.behavior = [Proc.new { |message| @last_message = message }]
    end

    def deprecated_method
      warn(deprecated_method_warning(:deprecated_method, "You are calling deprecated method"))
    end

    private
      def deprecated_method_warning(method_name, message = nil)
        message || "#{method_name} is deprecated and will be removed from This Library"
      end
  end

  object = klass.new
  object.deprecated_method
  assert_match(/You are calling deprecated method/, object.last_message)
end
test_deprecate_class_method() click to toggle source
# File activesupport/test/deprecation_test.rb, line 80
def test_deprecate_class_method
  assert_deprecated(/none is deprecated/) do
    assert_equal 1, @dtc.none
  end

  assert_deprecated(/one is deprecated/) do
    assert_equal 1, @dtc.one(1)
  end

  assert_deprecated(/multi is deprecated/) do
    assert_equal [1, 2, 3], @dtc.multi(1, 2, 3)
  end
end
test_deprecate_object() click to toggle source
# File activesupport/test/deprecation_test.rb, line 94
def test_deprecate_object
  deprecated_object = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(Object.new, ":bomb:")
  assert_deprecated(/:bomb:/) { deprecated_object.to_s }
end
test_deprecate_with_custom_deprecator() click to toggle source
# File activesupport/test/deprecation_test.rb, line 313
def test_deprecate_with_custom_deprecator
  custom_deprecator = Struct.new(:deprecation_warning).new

  assert_called_with(custom_deprecator, :deprecation_warning, [:method, nil]) do
    klass = Class.new do
      def method
      end
      deprecate :method, deprecator: custom_deprecator
    end

    klass.new.method
  end
end
test_deprecated_constant_accessor() click to toggle source
# File activesupport/test/deprecation_test.rb, line 202
def test_deprecated_constant_accessor
  assert_not_deprecated { DeprecateeWithAccessor::B::C }
  assert_deprecated("DeprecateeWithAccessor::A") { assert_equal DeprecateeWithAccessor::B::C, DeprecateeWithAccessor::A }
end
test_deprecated_constant_accessor_exception() click to toggle source
# File activesupport/test/deprecation_test.rb, line 207
def test_deprecated_constant_accessor_exception
  raise DeprecateeWithAccessor::NewException.new("Test")
rescue DeprecateeWithAccessor::OldException => e
  assert_kind_of DeprecateeWithAccessor::NewException, e
end
test_deprecated_constant_proxy() click to toggle source
# File activesupport/test/deprecation_test.rb, line 196
def test_deprecated_constant_proxy
  assert_not_deprecated { Deprecatee::B::C }
  assert_deprecated("Deprecatee::A") { assert_equal Deprecatee::B::C, Deprecatee::A }
  assert_not_deprecated { assert_equal Deprecatee::B::C.class, Deprecatee::A.class }
end
test_deprecated_constant_with_custom_message() click to toggle source
# File activesupport/test/deprecation_test.rb, line 336
def test_deprecated_constant_with_custom_message
  deprecator = deprecator_with_messages

  klass = Class.new
  klass.const_set(:OLD, ActiveSupport::Deprecation::DeprecatedConstantProxy.new("klass::OLD", "Object", deprecator, message: "foo"))

  klass::OLD.to_s
  assert_match "foo", deprecator.messages.last
end
test_deprecated_constant_with_deprecator_given() click to toggle source
# File activesupport/test/deprecation_test.rb, line 327
def test_deprecated_constant_with_deprecator_given
  deprecator = deprecator_with_messages
  klass = Class.new
  klass.const_set(:OLD, ActiveSupport::Deprecation::DeprecatedConstantProxy.new("klass::OLD", "Object", deprecator))
  assert_difference("deprecator.messages.size") do
    klass::OLD.to_s
  end
end
test_deprecated_instance_variable_proxy() click to toggle source
# File activesupport/test/deprecation_test.rb, line 185
def test_deprecated_instance_variable_proxy
  assert_not_deprecated { @dtc.request.size }

  assert_deprecated("@request.size") { assert_equal @dtc.request.size, @dtc.old_request.size }
  assert_deprecated("@request.to_s") { assert_equal @dtc.request.to_s, @dtc.old_request.to_s }
end
test_deprecated_instance_variable_proxy_shouldnt_warn_on_inspect() click to toggle source
# File activesupport/test/deprecation_test.rb, line 192
def test_deprecated_instance_variable_proxy_shouldnt_warn_on_inspect
  assert_not_deprecated { assert_equal @dtc.request.inspect, @dtc.old_request.inspect }
end
test_deprecated_instance_variable_with_given_deprecator() click to toggle source
# File activesupport/test/deprecation_test.rb, line 361
def test_deprecated_instance_variable_with_given_deprecator
  deprecator = deprecator_with_messages

  klass = Class.new do
    define_method(:initialize) do
      @request = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(self, :request, :@request, deprecator)
      @_request = :a_request
    end
    def request; @_request end
    def old_request; @request end
  end

  assert_difference("deprecator.messages.size") { klass.new.old_request.to_s }
end
test_deprecated_instance_variable_with_instance_deprecator() click to toggle source
# File activesupport/test/deprecation_test.rb, line 346
def test_deprecated_instance_variable_with_instance_deprecator
  deprecator = deprecator_with_messages

  klass = Class.new() do
    def initialize(deprecator)
      @request = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(self, :request, :@request, deprecator)
      @_request = :a_request
    end
    def request; @_request end
    def old_request; @request end
  end

  assert_difference("deprecator.messages.size") { klass.new(deprecator).old_request.to_s }
end
test_deprecated_method_with_custom_method_warning() click to toggle source
# File activesupport/test/deprecation_test.rb, line 293
def test_deprecated_method_with_custom_method_warning
  deprecator = deprecator_with_messages

  class << deprecator
    private
      def deprecated_method_warning(method, message)
        "deprecator.deprecated_method_warning.#{method}"
      end
  end

  deprecatee = Class.new do
    def method
    end
    deprecate :method, deprecator: deprecator
  end

  deprecatee.new.method
  assert deprecator.messages.first.match("DEPRECATION WARNING: deprecator.deprecated_method_warning.method")
end
test_deprecation_in_other_object() click to toggle source
# File activesupport/test/deprecation_test.rb, line 279
def test_deprecation_in_other_object
  messages = []

  klass = Class.new do
    delegate :warn, :behavior=, to: ActiveSupport::Deprecation
  end

  o = klass.new
  o.behavior = Proc.new { |message, callstack| messages << message }
  assert_difference("messages.size") do
    o.warn("warning")
  end
end
test_deprecation_with_alternate_method() click to toggle source
# File activesupport/test/deprecation_test.rb, line 271
def test_deprecation_with_alternate_method
  assert_deprecated(/use e instead/) { @dtc.c }
end
test_deprecation_with_explicit_message() click to toggle source
# File activesupport/test/deprecation_test.rb, line 275
def test_deprecation_with_explicit_message
  assert_deprecated(/you now need to do something extra for this one/) { @dtc.d }
end
test_deprecation_without_explanation() click to toggle source
# File activesupport/test/deprecation_test.rb, line 265
def test_deprecation_without_explanation
  assert_deprecated { @dtc.a }
  assert_deprecated { @dtc.b }
  assert_deprecated { @dtc.f = :foo }
end
test_inline_deprecation_warning() click to toggle source
# File activesupport/test/deprecation_test.rb, line 68
def test_inline_deprecation_warning
  assert_deprecated(/foo=nil/) do
    @dtc.partially
  end
end
test_nil_behavior_is_ignored() click to toggle source
# File activesupport/test/deprecation_test.rb, line 99
def test_nil_behavior_is_ignored
  ActiveSupport::Deprecation.behavior = nil
  assert_deprecated(/foo=nil/) { @dtc.partially }
end
test_raise_behaviour() click to toggle source
# File activesupport/test/deprecation_test.rb, line 119
def test_raise_behaviour
  ActiveSupport::Deprecation.behavior = :raise

  message   = "Revise this deprecated stuff now!"
  callstack = caller_locations

  e = assert_raise ActiveSupport::DeprecationException do
    ActiveSupport::Deprecation.behavior.first.call(message, callstack, "horizon", "gem")
  end
  assert_equal message, e.message
  assert_equal callstack.map(&:to_s), e.backtrace.map(&:to_s)
end
test_several_behaviors() click to toggle source
# File activesupport/test/deprecation_test.rb, line 104
def test_several_behaviors
  @a, @b, @c = nil, nil, nil

  ActiveSupport::Deprecation.behavior = [
    lambda { |msg, callstack, horizon, gem| @a = msg },
    lambda { |msg, callstack| @b = msg },
    lambda { |*args| @c = args },
  ]

  @dtc.partially
  assert_match(/foo=nil/, @a)
  assert_match(/foo=nil/, @b)
  assert_equal 4, @c.size
end
test_silence() click to toggle source
# File activesupport/test/deprecation_test.rb, line 255
def test_silence
  ActiveSupport::Deprecation.silence do
    assert_not_deprecated { @dtc.partially }
  end

  ActiveSupport::Deprecation.silenced = true
  assert_not_deprecated { @dtc.partially }
  ActiveSupport::Deprecation.silenced = false
end
test_undeprecated() click to toggle source
# File activesupport/test/deprecation_test.rb, line 74
def test_undeprecated
  assert_not_deprecated do
    assert_equal 2, @dtc.not
  end
end

Private Instance Methods

deprecator_with_messages() click to toggle source
# File activesupport/test/deprecation_test.rb, line 421
def deprecator_with_messages
  klass = Class.new(ActiveSupport::Deprecation)
  deprecator = klass.new
  deprecator.behavior = Proc.new { |message, callstack| deprecator.messages << message }
  def deprecator.messages
    @messages ||= []
  end
  deprecator
end