AutoResetEventTest.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. #if NET_2_0
  15. using Microsoft.Win32.SafeHandles;
  16. #endif
  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. #if NET_2_0
  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. [Test] // bug #81529
  51. public void SafeWaitHandle_Null ()
  52. {
  53. AutoResetEvent are1 = new AutoResetEvent (false);
  54. SafeWaitHandle swh1 = are1.SafeWaitHandle;
  55. are1.SafeWaitHandle = null;
  56. Assert.IsNotNull (are1.SafeWaitHandle, "#1");
  57. Assert.AreEqual (-1, (int) are1.Handle, "#2");
  58. Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#3");
  59. Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
  60. Assert.IsFalse (swh1.IsClosed, "#5");
  61. Assert.IsFalse (swh1.IsInvalid, "#6");
  62. }
  63. [Test] // bug #81529
  64. // Causes a Attempting to unref unused handle 0x2 warning
  65. [Category ("NotWorking")]
  66. public void Handle_Valid ()
  67. {
  68. AutoResetEvent are1 = new AutoResetEvent (false);
  69. SafeWaitHandle swh1 = are1.SafeWaitHandle;
  70. Assert.IsFalse (swh1.IsClosed, "#1");
  71. Assert.IsFalse (swh1.IsInvalid, "#2");
  72. IntPtr dummyHandle = (IntPtr) 2;
  73. are1.Handle = dummyHandle;
  74. Assert.AreEqual (are1.Handle, dummyHandle, "#3");
  75. Assert.IsFalse (swh1.IsClosed, "#4");
  76. Assert.IsFalse (swh1.IsClosed, "#5");
  77. Assert.IsFalse (swh1.IsInvalid, "#6");
  78. Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#7");
  79. Assert.IsFalse (are1.SafeWaitHandle.IsInvalid, "#8");
  80. are1.Close ();
  81. swh1.Dispose ();
  82. }
  83. [Test] // bug #81529
  84. public void Handle_Invalid ()
  85. {
  86. AutoResetEvent are1 = new AutoResetEvent (false);
  87. SafeWaitHandle swh1 = are1.SafeWaitHandle;
  88. are1.Handle = (IntPtr) (-1);
  89. Assert.IsTrue (swh1 != are1.SafeWaitHandle, "#1");
  90. Assert.IsFalse (swh1.IsClosed, "#2");
  91. Assert.IsFalse (swh1.IsInvalid, "#3");
  92. Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
  93. Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#5");
  94. are1.Close ();
  95. swh1.Dispose ();
  96. }
  97. [Test] // bug #81529
  98. public void Handle_ZeroPtr ()
  99. {
  100. AutoResetEvent are1 = new AutoResetEvent (false);
  101. SafeWaitHandle swh1 = are1.SafeWaitHandle;
  102. are1.Handle = IntPtr.Zero;
  103. Assert.IsTrue (swh1 != are1.SafeWaitHandle, "#1");
  104. Assert.IsFalse (swh1.IsClosed, "#2");
  105. Assert.IsFalse (swh1.IsInvalid, "#3");
  106. Assert.IsFalse (are1.SafeWaitHandle.IsClosed, "#4");
  107. Assert.IsTrue (are1.SafeWaitHandle.IsInvalid, "#5");
  108. are1.Close ();
  109. swh1.Dispose ();
  110. }
  111. #endif
  112. }
  113. }