Implemented clock logic.
[kaya.git] / test / test_clock.rb
blob01e07b6d54fc848664a984fbbbfa2cd39ba771de
1 require 'test/unit'
2 require 'clock'
4 class TestClock < Test::Unit::TestCase
5   class FakeTimer
6     def on(*args)
7     end
8     
9     def single_shot=(val)
10     end
11     
12     def start(ms)
13     end
14     
15     def stop
16     end
17   end
19   def test_main
20     elapsed = false
21     timer = nil
22     
23     # 2 seconds main time
24     clock = Clock.new(2, 0, nil, FakeTimer)
25     clock.observe(:timer) {|timer|}
26     clock.observe(:elapsed) { elapsed = true }
27     clock.start
28     
29     clock.tick
30     assert ! elapsed
31     assert_nil timer
32     
33     8.times { clock.tick }
34     assert ! elapsed
35     assert_nil timer
36     
37     clock.tick
38     assert ! elapsed
39     assert_equal({ :main => 1 }, timer)
40     timer = nil
41     
42     9.times { clock.tick }
43     assert ! elapsed
44     assert_nil timer
45     
46     clock.tick
47     assert elapsed
48     assert_nil timer
49   end
50   
51   def test_increment
52     elapsed = false
53     timer = nil
54     
55     # 10 seconds main time, 1 second increment
56     clock = Clock.new(10, 1, nil, FakeTimer)
57     clock.observe(:timer) {|timer|}
58     clock.observe(:elapsed) { elapsed = true }
59     clock.start
60     
61     80.times { clock.tick }
62     assert ! elapsed
63     assert_equal({:main => 2}, timer)
64     timer = nil
65     
66     clock.stop
67     assert ! elapsed
68     assert_equal({:main => 3}, timer)
69     clock.resume
70     
71     15.times { clock.tick }
72     assert ! elapsed
73     assert_equal({:main => 2}, timer)
74     timer = nil
75     
76     14.times { clock.tick }
77     assert ! elapsed
78     assert_equal({:main => 1}, timer)
79     timer = nil
80     
81     clock.tick
82     assert elapsed
83     assert_nil timer
84   end
85   
86   def test_byoyomi
87     elapsed = false
88     timer = nil
89     
90     # 10 seconds main time, 1 second byoyomi, 2 periods
91     clock = Clock.new(10, 0, Clock::ByoYomi.new(1, 2), FakeTimer)
92     clock.observe(:timer) {|timer|}
93     clock.observe(:elapsed) { elapsed = true }
94     clock.start
95     
96     80.times { clock.tick }
97     assert ! elapsed
98     assert_equal({:main => 2}, timer)
100     25.times { clock.tick }
101     assert ! elapsed
102     assert_equal({:byoyomi => Clock::ByoYomi.new(1, 2)}, timer)
103     
104     10.times { clock.tick }
105     assert ! elapsed
106     assert_equal({:byoyomi => Clock::ByoYomi.new(1, 1) }, timer)
107     
108     5.times { clock.tick }
109     assert elapsed
110   end