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] MultipleSet()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 SafeWaitHandle()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 SafeWaitHandle_Null()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")] Handle_Valid()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 Handle_Invalid()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.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"); 97 are1.Close (); 98 swh1.Dispose (); 99 } 100 101 [Test] // bug #81529 Handle_ZeroPtr()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 } 117