Merge pull request #901 from Blewzman/FixAggregateExceptionGetBaseException
[mono.git] / mcs / class / corlib / Test / System.Threading / AutoResetEventTest.cs
1 //
2 // AutoResetEventTest.cs - NUnit test cases for System.Threading.AutoResetEvent
3 //
4 // Author:
5 //      Gonzalo Paniagua Javier (gonzalo@ximian.com)
6 //      Gert Driesen <gert.driesen@telenet.be>
7 //
8 // Copyright 2005 Novell, Inc (http://www.novell.com)
9 // Copyright 2007 Gert Driesen
10 //
11
12 using NUnit.Framework;
13 using System;
14 using System.Threading;
15 #if NET_2_0
16 using Microsoft.Win32.SafeHandles;
17 #endif
18
19 namespace MonoTests.System.Threading
20 {
21         [TestFixture]
22         public class AutoResetEventTest
23         {
24                 [Test]
25                 public void MultipleSet ()
26                 {
27                         AutoResetEvent evt = new AutoResetEvent (true);
28                         Assert.IsTrue (evt.WaitOne (1000, false), "#1");
29                         evt.Set ();
30                         evt.Set ();
31                         Assert.IsTrue (evt.WaitOne (1000, false), "#2");
32                         Assert.IsFalse (evt.WaitOne (1000, false), "#3");
33                 }
34
35 #if NET_2_0
36                 [Test] // bug #81529
37                 public void SafeWaitHandle ()
38                 {
39                         AutoResetEvent are1 = new AutoResetEvent (false);
40                         AutoResetEvent are2 = new AutoResetEvent (false);
41                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
42                         SafeWaitHandle swh2 = are2.SafeWaitHandle;
43                         are1.SafeWaitHandle = are2.SafeWaitHandle;
44                         Assert.AreSame (are1.SafeWaitHandle, are2.SafeWaitHandle, "#1");
45                         Assert.AreEqual (are1.Handle, are2.Handle, "#2");
46                         Assert.IsFalse (are1.SafeWaitHandle.IsInvalid, "#3");
47                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
48                         Assert.IsFalse (swh1.IsClosed, "#5");
49                         Assert.IsFalse (swh1.IsInvalid, "#6");
50                         swh1.Dispose ();
51                         are1.Close ();
52                 }
53
54                 [Test] // bug #81529
55                 public void SafeWaitHandle_Null ()
56                 {
57                         AutoResetEvent are1 = new AutoResetEvent (false);
58                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
59                         are1.SafeWaitHandle = null;
60                         Assert.IsNotNull (are1.SafeWaitHandle, "#1");
61                         Assert.AreEqual (-1, (int) are1.Handle, "#2");
62                         Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#3");
63                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
64                         Assert.IsFalse (swh1.IsClosed, "#5");
65                         Assert.IsFalse (swh1.IsInvalid, "#6");
66                 }
67
68                 [Test] // bug #81529
69                 // Causes a Attempting to unref unused handle 0x2 warning
70                 [Category ("NotWorking")]
71                 public void Handle_Valid ()
72                 {
73                         AutoResetEvent are1 = new AutoResetEvent (false);
74                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
75                         Assert.IsFalse (swh1.IsClosed, "#1");
76                         Assert.IsFalse (swh1.IsInvalid, "#2");
77                         IntPtr dummyHandle = (IntPtr) 2;
78                         are1.Handle = dummyHandle;
79                         Assert.AreEqual (are1.Handle, dummyHandle, "#3");
80                         Assert.IsFalse (swh1.IsClosed, "#4");
81                         Assert.IsFalse (swh1.IsClosed, "#5");
82                         Assert.IsFalse (swh1.IsInvalid, "#6");
83                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#7");
84                         Assert.IsFalse (are1.SafeWaitHandle.IsInvalid, "#8");
85                         are1.Close ();
86                         swh1.Dispose ();
87                 }
88
89                 [Test] // bug #81529
90                 public void Handle_Invalid ()
91                 {
92                         AutoResetEvent are1 = new AutoResetEvent (false);
93                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
94                         are1.Handle = (IntPtr) (-1);
95                         Assert.IsTrue (swh1 != are1.SafeWaitHandle, "#1");
96                         Assert.IsFalse (swh1.IsClosed, "#2");
97                         Assert.IsFalse (swh1.IsInvalid, "#3");
98                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
99                         Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#5");
100                         are1.Close ();
101                         swh1.Dispose ();
102                 }
103
104                 [Test] // bug #81529
105                 public void Handle_ZeroPtr ()
106                 {
107                         AutoResetEvent are1 = new AutoResetEvent (false);
108                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
109                         are1.Handle = IntPtr.Zero;
110                         Assert.IsTrue (swh1 != are1.SafeWaitHandle, "#1");
111                         Assert.IsFalse (swh1.IsClosed, "#2");
112                         Assert.IsFalse (swh1.IsInvalid, "#3");
113                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
114                         Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#5");
115                         are1.Close ();
116                         swh1.Dispose ();
117                 }
118 #endif
119         }
120 }