[bcl] Remove more NET_2_0 checks from class libs
[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 using Microsoft.Win32.SafeHandles;
16
17 namespace MonoTests.System.Threading
18 {
19         [TestFixture]
20         public class AutoResetEventTest
21         {
22                 [Test]
23                 public void MultipleSet ()
24                 {
25                         AutoResetEvent evt = new AutoResetEvent (true);
26                         Assert.IsTrue (evt.WaitOne (1000, false), "#1");
27                         evt.Set ();
28                         evt.Set ();
29                         Assert.IsTrue (evt.WaitOne (1000, false), "#2");
30                         Assert.IsFalse (evt.WaitOne (1000, false), "#3");
31                 }
32
33                 [Test] // bug #81529
34                 public void SafeWaitHandle ()
35                 {
36                         AutoResetEvent are1 = new AutoResetEvent (false);
37                         AutoResetEvent are2 = new AutoResetEvent (false);
38                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
39                         SafeWaitHandle swh2 = are2.SafeWaitHandle;
40                         are1.SafeWaitHandle = are2.SafeWaitHandle;
41                         Assert.AreSame (are1.SafeWaitHandle, are2.SafeWaitHandle, "#1");
42                         Assert.AreEqual (are1.Handle, are2.Handle, "#2");
43                         Assert.IsFalse (are1.SafeWaitHandle.IsInvalid, "#3");
44                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
45                         Assert.IsFalse (swh1.IsClosed, "#5");
46                         Assert.IsFalse (swh1.IsInvalid, "#6");
47                         swh1.Dispose ();
48                         are1.Close ();
49                 }
50
51                 [Test] // bug #81529
52                 public void SafeWaitHandle_Null ()
53                 {
54                         AutoResetEvent are1 = new AutoResetEvent (false);
55                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
56                         are1.SafeWaitHandle = null;
57                         Assert.IsNotNull (are1.SafeWaitHandle, "#1");
58                         Assert.AreEqual (-1, (int) are1.Handle, "#2");
59                         Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#3");
60                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
61                         Assert.IsFalse (swh1.IsClosed, "#5");
62                         Assert.IsFalse (swh1.IsInvalid, "#6");
63                 }
64
65                 [Test] // bug #81529
66                 // Causes a Attempting to unref unused handle 0x2 warning
67                 [Category ("NotWorking")]
68                 public void Handle_Valid ()
69                 {
70                         AutoResetEvent are1 = new AutoResetEvent (false);
71                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
72                         Assert.IsFalse (swh1.IsClosed, "#1");
73                         Assert.IsFalse (swh1.IsInvalid, "#2");
74                         IntPtr dummyHandle = (IntPtr) 2;
75                         are1.Handle = dummyHandle;
76                         Assert.AreEqual (are1.Handle, dummyHandle, "#3");
77                         Assert.IsFalse (swh1.IsClosed, "#4");
78                         Assert.IsFalse (swh1.IsClosed, "#5");
79                         Assert.IsFalse (swh1.IsInvalid, "#6");
80                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#7");
81                         Assert.IsFalse (are1.SafeWaitHandle.IsInvalid, "#8");
82                         are1.Close ();
83                         swh1.Dispose ();
84                 }
85
86                 [Test] // bug #81529
87                 public void Handle_Invalid ()
88                 {
89                         AutoResetEvent are1 = new AutoResetEvent (false);
90                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
91                         are1.Handle = (IntPtr) (-1);
92                         Assert.IsTrue (swh1 != are1.SafeWaitHandle, "#1");
93                         Assert.IsFalse (swh1.IsClosed, "#2");
94                         Assert.IsFalse (swh1.IsInvalid, "#3");
95                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
96                         Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#5");
97                         are1.Close ();
98                         swh1.Dispose ();
99                 }
100
101                 [Test] // bug #81529
102                 public void Handle_ZeroPtr ()
103                 {
104                         AutoResetEvent are1 = new AutoResetEvent (false);
105                         SafeWaitHandle swh1 = are1.SafeWaitHandle;
106                         are1.Handle = IntPtr.Zero;
107                         Assert.IsTrue (swh1 != are1.SafeWaitHandle, "#1");
108                         Assert.IsFalse (swh1.IsClosed, "#2");
109                         Assert.IsFalse (swh1.IsInvalid, "#3");
110                         Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
111                         Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#5");
112                         are1.Close ();
113                         swh1.Dispose ();
114                 }
115         }
116 }