1 $:.unshift File.join(File.dirname(__FILE__), '../lib')
10 include Irc::Bot::Plugins
12 class TestRealBotModule < BotModule
17 class MockModule < BotModule
18 attr_reader :test_called_at
19 attr_reader :test_arg_called_at
20 attr_reader :connect_called_at
21 attr_reader :test_arg_val
25 @test_arg_called_at = []
26 @connect_called_at = []
32 @test_called_at << Time.new
37 @test_arg_called_at << Time.new
40 # an connect fast-delegate event
42 @connect_called_at << Time.new
50 class PluginsPriorityTest < Test::Unit::TestCase
54 @mock1 = MockModule.new(1)
55 @mock2 = MockModule.new(2)
56 @mock3 = MockModule.new(3)
57 @mock4 = MockModule.new(4)
58 @mock5 = MockModule.new(5)
60 # This whole thing is a PITA because PluginManagerClass is a singleton
62 @@manager = PluginManagerClass.instance
64 # this is needed because debug is setup in the rbot starter
65 def @@manager.debug(m); puts m; end
66 def @@manager.error(m); puts m; end
67 @@manager.instance_eval { alias real_sort_modules sort_modules }
68 def @@manager.sort_modules
69 @sort_call_count ||= 0
74 @@manager.instance_eval { @sort_call_count = nil }
75 @@manager.mark_priorities_dirty
77 # We add the modules to the lists in the wrong order
78 # on purpose to make sure the sort is working
79 @@manager.plugins.clear
80 @@manager.core_modules.clear
81 @@manager.plugins << @mock1
82 @@manager.plugins << @mock4
83 @@manager.plugins << @mock3
84 @@manager.plugins << @mock2
85 @@manager.plugins << @mock5
87 dlist = @@manager.instance_eval {@delegate_list['connect'.intern]}
97 @@manager.delegate('test', :above => 3)
99 assert_equal 0, @mock1.test_called_at.size
100 assert_equal 0, @mock2.test_called_at.size
101 assert_equal 0, @mock3.test_called_at.size
102 assert_equal 1, @mock4.test_called_at.size
103 assert_equal 1, @mock5.test_called_at.size
107 @@manager.delegate('test', :below => 3)
109 assert_equal 1, @mock1.test_called_at.size
110 assert_equal 1, @mock2.test_called_at.size
111 assert_equal 0, @mock3.test_called_at.size
112 assert_equal 0, @mock4.test_called_at.size
113 assert_equal 0, @mock5.test_called_at.size
116 def test_fast_delagate_above
117 @@manager.delegate('connect', :above => 3)
119 assert_equal 0, @mock1.connect_called_at.size
120 assert_equal 0, @mock2.connect_called_at.size
121 assert_equal 0, @mock3.connect_called_at.size
122 assert_equal 1, @mock4.connect_called_at.size
123 assert_equal 1, @mock5.connect_called_at.size
126 def test_fast_delagate_below
127 @@manager.delegate('connect', :below => 3)
129 assert_equal 1, @mock1.connect_called_at.size
130 assert_equal 1, @mock2.connect_called_at.size
131 assert_equal 0, @mock3.connect_called_at.size
132 assert_equal 0, @mock4.connect_called_at.size
133 assert_equal 0, @mock5.connect_called_at.size
136 def test_call_with_args
137 @@manager.delegate('test_arg', 1, :above => 3)
139 assert_equal 0, @mock3.test_arg_called_at.size
140 assert_equal 1, @mock4.test_arg_called_at.size
141 assert_equal 1, @mock4.test_arg_val