2 // AutoResetEventTest.cs - NUnit test cases for System.Threading.AutoResetEvent
5 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
6 // Gert Driesen <gert.driesen@telenet.be>
8 // Copyright 2005 Novell, Inc (http://www.novell.com)
9 // Copyright 2007 Gert Driesen
12 using NUnit.Framework;
14 using System.Threading;
15 using Microsoft.Win32.SafeHandles;
17 namespace MonoTests.System.Threading
20 public class AutoResetEventTest
23 public void MultipleSet ()
25 AutoResetEvent evt = new AutoResetEvent (true);
26 Assert.IsTrue (evt.WaitOne (1000, false), "#1");
29 Assert.IsTrue (evt.WaitOne (1000, false), "#2");
30 Assert.IsFalse (evt.WaitOne (1000, false), "#3");
34 public void SafeWaitHandle ()
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");
52 public void SafeWaitHandle_Null ()
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");
66 // Causes a Attempting to unref unused handle 0x2 warning
67 [Category ("NotWorking")]
68 public void Handle_Valid ()
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");
87 public void Handle_Invalid ()
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.IsTrue (swh1.IsClosed, "#2"); // After testing on Windows/.NET, IsClosed returns true
94 Assert.IsFalse (swh1.IsInvalid, "#3");
95 Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
96 Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#5");
102 public void Handle_ZeroPtr ()
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");