Backported de09752972bd6e1c8a68d8c1d06c3311721dc1bd.
[kaya.git] / test / test_clock.rb
blobc2b70ca5216600211c9230986fc79cb19fccd30f
1 # Copyright (c) 2009 Paolo Capriotti <p.capriotti@gmail.com>
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
8 require 'test/unit'
9 require 'clock'
11 class TestClock < Test::Unit::TestCase
12   class FakeTimer
13     def on(*args)
14     end
15     
16     def single_shot=(val)
17     end
18     
19     def start(ms)
20     end
21     
22     def stop
23     end
24   end
26   def test_main
27     elapsed = false
28     timer = nil
29     
30     # 2 seconds main time
31     clock = Clock.new(2, 0, nil, FakeTimer)
32     clock.observe(:timer) {|timer|}
33     clock.observe(:elapsed) { elapsed = true }
34     clock.start
35     
36     clock.tick
37     assert ! elapsed
38     assert_nil timer
39     
40     8.times { clock.tick }
41     assert ! elapsed
42     assert_nil timer
43     
44     clock.tick
45     assert ! elapsed
46     assert_equal({ :main => 1 }, timer)
47     timer = nil
48     
49     9.times { clock.tick }
50     assert ! elapsed
51     assert_nil timer
52     
53     clock.tick
54     assert elapsed
55     assert_nil timer
56   end
57   
58   def test_increment
59     elapsed = false
60     timer = nil
61     
62     # 10 seconds main time, 1 second increment
63     clock = Clock.new(10, 1, nil, FakeTimer)
64     clock.observe(:timer) {|timer|}
65     clock.observe(:elapsed) { elapsed = true }
66     clock.start
67     
68     80.times { clock.tick }
69     assert ! elapsed
70     assert_equal({:main => 2}, timer)
71     timer = nil
72     
73     clock.stop
74     assert ! elapsed
75     assert_equal({:main => 3}, timer)
76     clock.start
77     
78     15.times { clock.tick }
79     assert ! elapsed
80     assert_equal({:main => 2}, timer)
81     timer = nil
82     
83     14.times { clock.tick }
84     assert ! elapsed
85     assert_equal({:main => 1}, timer)
86     timer = nil
87     
88     clock.tick
89     assert elapsed
90     assert_nil timer
91   end
92   
93   def test_byoyomi
94     elapsed = false
95     timer = nil
96     
97     # 10 seconds main time, 1 second byoyomi, 2 periods
98     clock = Clock.new(10, 0, Clock::ByoYomi.new(1, 2), FakeTimer)
99     clock.observe(:timer) {|timer|}
100     clock.observe(:elapsed) { elapsed = true }
101     clock.start
102     
103     80.times { clock.tick }
104     assert ! elapsed
105     assert_equal({:main => 2}, timer)
107     25.times { clock.tick }
108     assert ! elapsed
109     assert_equal({:byoyomi => Clock::ByoYomi.new(1, 2)}, timer)
110     
111     10.times { clock.tick }
112     assert ! elapsed
113     assert_equal({:byoyomi => Clock::ByoYomi.new(1, 1) }, timer)
114     
115     5.times { clock.tick }
116     assert elapsed
117   end