2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / corlib / Test / System.Threading / TimerTest.cs
1 //
2 // TimerTest.cs - NUnit test cases for System.Threading.Timer
3 //
4 // Author:
5 //   Zoltan Varga (vargaz@freemail.hu)
6 //
7 // (C) 2004 Novell, Inc (http://www.novell.com)
8 //
9
10 using NUnit.Framework;
11 using System;
12 using System.Threading;
13
14 namespace MonoTests.System.Threading {
15
16         [TestFixture]
17         public class TimerTest : Assertion {
18
19                 public int counter;
20                 
21                 private void Callback (object foo) {
22                         counter ++;
23                 }
24
25                 public void TestDueTime ()
26                 {
27                         counter = 0;
28                         Timer t = new Timer (new TimerCallback (Callback), null, 200, Timeout.Infinite);
29                         Thread.Sleep (50);
30                         AssertEquals ("t0", 0, counter);
31                         Thread.Sleep (200);
32                         AssertEquals ("t1", 1, counter);
33                         Thread.Sleep (500);
34                         AssertEquals ("t2", 1, counter);
35                         
36                         t.Change (10, 10);
37                         Thread.Sleep (500);
38                         Assert ("t3", counter > 20);
39                         t.Dispose ();
40                 }
41                 
42                 public void TestChange ()
43                 {
44                         counter = 0;
45                         Timer t = new Timer (new TimerCallback (Callback), null, 1, 1);
46                         Thread.Sleep (500);
47                         int c = counter;
48                         Assert ("t1", c > 20);
49                         t.Change (100, 100);
50                         Thread.Sleep (500);
51                         Assert ("t2", counter <= c + 6);
52                         t.Dispose ();
53                 }
54
55                 public void TestZeroDueTime () {
56                         counter = 0;
57
58                         Timer t = new Timer (new TimerCallback (Callback), null, 0, Timeout.Infinite);
59                         Thread.Sleep (100);
60                         AssertEquals (1, counter);
61                         t.Change (0, Timeout.Infinite);
62                         Thread.Sleep (100);
63                         AssertEquals (2, counter);
64                         t.Dispose ();
65                 }
66                 
67                 public void TestDispose ()
68                 {
69                         counter = 0;
70                         Timer t = new Timer (new TimerCallback (CallbackTestDispose), null, 10, 10);
71                         Thread.Sleep (200);
72                         t.Dispose ();
73                         Thread.Sleep (20);
74                         int c = counter;
75                         Assert (counter > 5);
76                         Thread.Sleep (200);
77                         AssertEquals (c, counter);
78                 }
79                 
80                 private void CallbackTestDispose (object foo) {
81                         counter ++;
82                 }
83
84                 Timer t1;
85                 public void TestDisposeOnCallback () {
86                         counter = 0;
87                         t1 = new Timer (new TimerCallback (CallbackTestDisposeOnCallback), null, 0, 10);
88                         Thread.Sleep (200);
89                         AssertNull (t1);
90                         
91                         counter = 2;
92                         t1 = new Timer (new TimerCallback (CallbackTestDisposeOnCallback), null, 50, 0);
93                         Thread.Sleep (200);
94                         AssertNull (t1);
95                 }
96                 
97                 private void CallbackTestDisposeOnCallback (object foo)
98                 {
99                         if (++counter == 3) {
100                                 t1.Dispose ();
101                                 t1 = null;
102                         }
103                 }
104         }
105 }