X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FTest%2FSystem.Threading%2FTimerTest.cs;h=b9ae6d1709ad07c3bd99073e4271bb4947271360;hb=8fdae0685f9ba54ff85d01a7106a6dcbdd82e894;hp=2ed3b6003c7a440cbfb529a6dbd78b5002aa1ed2;hpb=a341404ecdd3b5ca2ed0ab1e9a5bcb9b5ccd2566;p=mono.git diff --git a/mcs/class/corlib/Test/System.Threading/TimerTest.cs b/mcs/class/corlib/Test/System.Threading/TimerTest.cs index 2ed3b6003c7..b9ae6d1709a 100644 --- a/mcs/class/corlib/Test/System.Threading/TimerTest.cs +++ b/mcs/class/corlib/Test/System.Threading/TimerTest.cs @@ -19,6 +19,7 @@ namespace MonoTests.System.Threading { // this bucket is used to avoid non-theadlocal issues class Bucket { public int count; + public ManualResetEventSlim mre = new ManualResetEventSlim (false); } [SetUp] @@ -36,37 +37,52 @@ namespace MonoTests.System.Threading { { } + private void Callback2 (object foo) + { + Bucket b = foo as Bucket; + Interlocked.Increment (ref b.count); + b.mre.Set (); + } + + [Test] public void TestDueTime () { Bucket bucket = new Bucket(); - using (Timer t = new Timer (o => Callback (o), bucket, 200, Timeout.Infinite)) { - Thread.Sleep (50); - Assert.AreEqual (0, bucket.count, "#1"); - Thread.Sleep (200); - Assert.AreEqual (1, bucket.count, "#2"); - Thread.Sleep (500); - Assert.AreEqual (1, bucket.count, "#3"); - t.Change (10, 10); - Thread.Sleep (1000); - Assert.IsTrue(bucket.count > 20, "#4"); + using (Timer t = new Timer (o => Callback2 (o), bucket, 200, Timeout.Infinite)) { + Assert.IsTrue (bucket.mre.Wait (5000), "#-1"); + Assert.AreEqual (1, bucket.count, "#1"); } } + [Test] + public void TestDispose () + { + Bucket bucket = new Bucket(); + + using (Timer t = new Timer (o => Callback2 (o), bucket, 10, 10)) { + Assert.IsTrue (bucket.mre.Wait (5000), "#-1"); + } + //If the callback is called after dispose, it will NRE and be reported + bucket.mre = null; + int c = bucket.count; + Assert.IsTrue (c > 0, "#1"); + } + [Test] public void TestChange () { Bucket bucket = new Bucket(); - using (Timer t = new Timer (o => Callback (o), bucket, 10, 10)) { - Thread.Sleep (500); + using (Timer t = new Timer (o => Callback2 (o), bucket, 10, 10)) { + Assert.IsTrue (bucket.mre.Wait (5000), "#-1"); int c = bucket.count; - Assert.IsTrue (c > 20, "#1 " + c.ToString ()); - t.Change (100, 100); + Assert.IsTrue (c > 0, "#1 " + c); + t.Change (100000, 1000000); c = bucket.count; Thread.Sleep (500); - Assert.IsTrue (bucket.count <= c + 20, "#2 " + c.ToString ()); + Assert.IsTrue (bucket.count <= c + 1, "#2 " + c); } } @@ -75,35 +91,20 @@ namespace MonoTests.System.Threading { { Bucket bucket = new Bucket(); - using (Timer t = new Timer (o => Callback (o), bucket, 0, Timeout.Infinite)) { - Thread.Sleep (100); + using (Timer t = new Timer (o => Callback2 (o), bucket, 0, Timeout.Infinite)) { + Assert.IsTrue (bucket.mre.Wait (5000), "#-1"); + bucket.mre.Reset (); Assert.AreEqual (1, bucket.count, "#1"); t.Change (0, Timeout.Infinite); - Thread.Sleep (100); + Assert.IsTrue (bucket.mre.Wait (5000), "#1.5"); Assert.AreEqual (2, bucket.count, "#2"); } } - [Test] - public void TestDispose () - { - Bucket bucket = new Bucket(); - - using (Timer t = new Timer (o => Callback (o), bucket, 10, 10)) { - Thread.Sleep (200); - } - - Thread.Sleep (20); - int c = bucket.count; - Assert.IsTrue (bucket.count > 5, "#1"); - Thread.Sleep (200); - Assert.AreEqual (c, bucket.count, "#2"); - } - [Test] // bug #320950 public void TestDispose2 () { - Timer t = new Timer (o => Callback (o), null, 10, 10); + Timer t = new Timer (o => DoNothing (o), null, 10, 10); t.Dispose (); t.Dispose (); }