AutoResetEventTest.cs 3.5 KB

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