]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - test/test_plugins_threshold.rb
test: fix shadowed test method
[user/henk/code/ruby/rbot.git] / test / test_plugins_threshold.rb
1 $:.unshift File.join(File.dirname(__FILE__), '../lib')
2
3 require 'test/unit'
4 require 'rbot/config'
5 require 'rbot/plugins'
6 require 'rbot/message'
7
8 require 'pp'
9
10 include Irc::Bot::Plugins
11
12 class TestRealBotModule < BotModule
13   def initialize
14   end
15 end
16
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
22
23   def initialize(prio)
24     @test_called_at = []
25     @test_arg_called_at = []
26     @connect_called_at = []
27     @priority = prio
28     @test_arg_val = nil
29   end
30
31   def test
32     @test_called_at << Time.new
33   end
34
35   def test_arg a
36     @test_arg_val = a
37     @test_arg_called_at << Time.new
38   end
39
40   # an connect fast-delegate event
41   def connect
42     @connect_called_at << Time.new
43   end
44
45   def botmodule_class
46     :CoreBotModule
47   end
48 end
49
50 class PluginsPriorityTest < Test::Unit::TestCase
51   @@manager = nil
52
53   def setup
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)
59
60     # This whole thing is a PITA because PluginManagerClass is a singleton
61     unless @@manager
62       @@manager = PluginManagerClass.instance
63
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
70         @sort_call_count += 1
71         real_sort_modules
72       end
73     end
74     @@manager.instance_eval { @sort_call_count = nil }
75     @@manager.mark_priorities_dirty
76
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
86
87     dlist = @@manager.instance_eval {@delegate_list['connect'.intern]}
88     dlist.clear
89     dlist << @mock1
90     dlist << @mock4
91     dlist << @mock3
92     dlist << @mock2
93     dlist << @mock5
94   end
95
96   def test_above
97     @@manager.delegate('test', :above => 3)
98
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
104   end
105
106   def test_below
107     @@manager.delegate('test', :below => 3)
108
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
114   end
115
116   def test_fast_delagate_above
117     @@manager.delegate('connect', :above => 3)
118
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
124   end
125
126   def test_fast_delagate_below
127     @@manager.delegate('connect', :below => 3)
128
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
134   end
135
136   def test_call_with_args
137     @@manager.delegate('test_arg', 1, :above => 3)
138
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
142   end
143 end
144