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
|
# frozen_string_literal: true
require "abstract_unit"
class ReloaderTest < ActiveSupport::TestCase
def test_prepare_callback
prepared = completed = false
reloader.to_prepare { prepared = true }
reloader.to_complete { completed = true }
assert_not prepared
assert_not completed
reloader.prepare!
assert prepared
assert_not completed
prepared = false
reloader.wrap do
assert prepared
prepared = false
end
assert_not prepared
end
def test_prepend_prepare_callback
i = 10
reloader.to_prepare { i += 1 }
reloader.to_prepare(prepend: true) { i = 0 }
reloader.prepare!
assert_equal 1, i
end
def test_only_run_when_check_passes
r = new_reloader { true }
invoked = false
r.to_run { invoked = true }
r.wrap { }
assert invoked
r = new_reloader { false }
invoked = false
r.to_run { invoked = true }
r.wrap { }
assert_not invoked
end
def test_full_reload_sequence
called = []
reloader.to_prepare { called << :prepare }
reloader.to_run { called << :reloader_run }
reloader.to_complete { called << :reloader_complete }
reloader.executor.to_run { called << :executor_run }
reloader.executor.to_complete { called << :executor_complete }
reloader.wrap { }
assert_equal [:executor_run, :reloader_run, :prepare, :reloader_complete, :executor_complete], called
called = []
reloader.reload!
assert_equal [:executor_run, :reloader_run, :prepare, :reloader_complete, :executor_complete, :prepare], called
reloader.check = lambda { false }
called = []
reloader.wrap { }
assert_equal [:executor_run, :executor_complete], called
called = []
reloader.reload!
assert_equal [:executor_run, :reloader_run, :prepare, :reloader_complete, :executor_complete, :prepare], called
end
def test_class_unload_block
called = []
reloader.before_class_unload { called << :before_unload }
reloader.after_class_unload { called << :after_unload }
reloader.to_run do
class_unload! do
called << :unload
end
end
reloader.wrap { called << :body }
assert_equal [:before_unload, :unload, :after_unload, :body], called
end
private
def new_reloader(&check)
Class.new(ActiveSupport::Reloader).tap do |r|
r.check = check
r.executor = Class.new(ActiveSupport::Executor)
end
end
def reloader
@reloader ||= new_reloader { true }
end
end
|