f6c8ae269495c10c1f9cc2ce007c222a06467178
[god.git] / test / test_timer.rb
blobf6c8ae269495c10c1f9cc2ce007c222a06467178
1 require File.dirname(__FILE__) + '/helper'
3 class TestTimer < Test::Unit::TestCase
4   def setup
5     Timer.reset
6     @t = Timer.get
7   end
8   
9   def test_new_timer_should_have_no_events
10     assert_equal 0, @t.events.size
11   end
12   
13   def test_schedule_should_queue_event
14     Time.stubs(:now).returns(0)
15     
16     w = Watch.new
17     @t.schedule(stub(:interval => 20))
18     
19     assert_equal 1, @t.events.size
20   end
21   
22   def test_timer_should_remove_expired_events
23     @t.schedule(stub(:interval => 0))
24     sleep(0.3)
25     assert_equal 0, @t.events.size
26   end
27   
28   def test_timer_should_remove_only_expired_events
29     @t.schedule(stub(:interval => 0))
30     @t.schedule(stub(:interval => 1000))
31     sleep(0.3)
32     assert_equal 1, @t.events.size
33   end
34   
35   def test_timer_should_sort_timer_events
36     @t.schedule(stub(:interval => 1000))
37     @t.schedule(stub(:interval => 800))
38     @t.schedule(stub(:interval => 900))
39     @t.schedule(stub(:interval => 100))
40     sleep(0.3)
41     assert_equal [100, 800, 900, 1000], @t.events.map { |x| x.condition.interval }
42   end
43   
44   def test_unschedule_should_remove_conditions
45     a = stub()
46     b = stub()
47     @t.schedule(a, 100)
48     @t.schedule(b, 200)
49     assert_equal 2, @t.events.size
50     @t.unschedule(a)
51     assert_equal 1, @t.events.size
52   end
53   
54   def test_time_should_recover_from_exceptions
55     @t.expects(:trigger).raises(Exception.new)
56     no_stdout do
57       @t.schedule(stub(:interval => 0))
58       sleep(0.3)
59       @t.schedule(stub(:interval => 0))
60     end
61   end
62   
63   # join
64   
65   def test_join_should_join
66     Thread.any_instance.expects(:join)
67     @t.join
68   end
69 end