File: deprecators_test.rb

package info (click to toggle)
rails 2%3A7.2.2.1%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 43,352 kB
  • sloc: ruby: 349,799; javascript: 30,703; yacc: 46; sql: 43; sh: 29; makefile: 27
file content (135 lines) | stat: -rw-r--r-- 4,187 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# frozen_string_literal: true

require_relative "../abstract_unit"

class DeprecationTest < ActiveSupport::TestCase
  setup do
    @deprecator_names = [:fubar, :foo, :bar]
    @deprecators = ActiveSupport::Deprecation::Deprecators.new
    @deprecator_names.each do |name|
      @deprecators[name] = ActiveSupport::Deprecation.new("2.0", name.to_s)
    end
  end

  test "#[] gets an individual deprecator" do
    @deprecator_names.each do |name|
      assert_equal name.to_s, @deprecators[name].gem_name
    end
  end

  test "#each iterates over each deprecator" do
    gem_names = []
    @deprecators.each { |deprecator| gem_names << deprecator.gem_name }

    assert_equal @deprecator_names.map(&:to_s).sort, gem_names.sort
  end

  test "#each without block returns an Enumerator" do
    assert_kind_of Enumerator, @deprecators.each
    assert_equal @deprecator_names.map(&:to_s).sort, @deprecators.each.map(&:gem_name).sort
  end

  test "#silenced= applies to each deprecator" do
    @deprecators.each { |deprecator| assert_not_predicate deprecator, :silenced }

    @deprecators.silenced = true
    @deprecators.each { |deprecator| assert_predicate deprecator, :silenced }

    @deprecators.silenced = false
    @deprecators.each { |deprecator| assert_not_predicate deprecator, :silenced }
  end

  test "#debug= applies to each deprecator" do
    @deprecators.each { |deprecator| assert_not_predicate deprecator, :debug }

    @deprecators.debug = true
    @deprecators.each { |deprecator| assert_predicate deprecator, :debug }

    @deprecators.debug = false
    @deprecators.each { |deprecator| assert_not_predicate deprecator, :debug }
  end

  test "#behavior= applies to each deprecator" do
    callback = proc { }

    @deprecators.behavior = callback
    @deprecators.each { |deprecator| assert_equal [callback], deprecator.behavior }
  end

  test "#disallowed_behavior= applies to each deprecator" do
    callback = proc { }

    @deprecators.disallowed_behavior = callback
    @deprecators.each { |deprecator| assert_equal [callback], deprecator.disallowed_behavior }
  end

  test "#disallowed_warnings= applies to each deprecator" do
    @deprecators.disallowed_warnings = :all
    @deprecators.each { |deprecator| assert_equal :all, deprecator.disallowed_warnings }
  end

  test "#silence silences each deprecator" do
    @deprecators.each { |deprecator| assert_not_silencing(deprecator) }

    @deprecators.silence do
      @deprecators.each { |deprecator| assert_silencing(deprecator) }
    end

    @deprecators.each { |deprecator| assert_not_silencing(deprecator) }
  end

  test "#silence returns the result of the block" do
    assert_equal 123, @deprecators.silence { 123 }
  end

  test "#silence ensures silencing is reverted after an error is raised" do
    assert_raises do
      @deprecators.silence { raise }
    end

    @deprecators.each { |deprecator| assert_not_silencing(deprecator) }
  end

  test "#silence blocks can be nested" do
    @deprecators.each { |deprecator| assert_not_silencing(deprecator) }

    @deprecators.silence do
      @deprecators.each { |deprecator| assert_silencing(deprecator) }

      @deprecators.silence do
        @deprecators.each { |deprecator| assert_silencing(deprecator) }
      end

      @deprecators.each { |deprecator| assert_silencing(deprecator) }
    end

    @deprecators.each { |deprecator| assert_not_silencing(deprecator) }
  end

  test "#silence only affects the current thread" do
    @deprecators.silence do
      @deprecators.each { |deprecator| assert_silencing(deprecator) }

      Thread.new do
        @deprecators.each { |deprecator| assert_not_silencing(deprecator) }

        @deprecators.silence do
          @deprecators.each { |deprecator| assert_silencing(deprecator) }
        end

        @deprecators.each { |deprecator| assert_not_silencing(deprecator) }
      end.join

      @deprecators.each { |deprecator| assert_silencing(deprecator) }
    end
  end

  private
    def assert_silencing(deprecator)
      assert_not_deprecated(deprecator) { deprecator.warn }
    end

    def assert_not_silencing(deprecator)
      assert_deprecated(deprecator) { deprecator.warn }
    end
end