AutoResetEventTest.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. [TestFixture]
  19. public class AutoResetEventTest : Assertion {
  20. [Test]
  21. public void MultipleSet ()
  22. {
  23. AutoResetEvent evt = new AutoResetEvent (true);
  24. Assertion.AssertEquals ("#01", true, evt.WaitOne (1000, false));
  25. evt.Set ();
  26. evt.Set ();
  27. Assertion.AssertEquals ("#02", true, evt.WaitOne (1000, false));
  28. Assertion.AssertEquals ("#03", false, evt.WaitOne (1000, false));
  29. }
  30. }
  31. #if NET_2_0
  32. [TestFixture]
  33. public class AutoResetEvent_SafeHandles : Assertion {
  34. //
  35. // Verifies that the safe SafeWaitHandle is used even when Handle is set
  36. //
  37. [Test]
  38. public void SafeWaitHandleIdentity ()
  39. {
  40. AutoResetEvent are1 = new AutoResetEvent (false);
  41. AutoResetEvent are2 = new AutoResetEvent (false);
  42. SafeWaitHandle swh1 = are1.SafeWaitHandle;
  43. Assertion.AssertEquals ("#A1:", false, swh1.IsClosed);
  44. Assertion.AssertEquals ("#A2:", false, swh1.IsInvalid);
  45. IntPtr dummyHandle = (IntPtr) 2;
  46. are1.Handle = dummyHandle;
  47. Assertion.AssertEquals ("#A3:", true, (are1.Handle == dummyHandle));
  48. Assertion.AssertEquals ("#A4:", false, swh1.IsClosed);
  49. Assertion.AssertEquals ("#A5:", false, swh1.IsClosed);
  50. Assertion.AssertEquals ("#A6:", false, swh1.IsInvalid);
  51. Assertion.AssertEquals ("#A7:", false, are1.SafeWaitHandle.IsClosed);
  52. Assertion.AssertEquals ("#A8:", false, are1.SafeWaitHandle.IsInvalid);
  53. are1.Close ();
  54. are2.Close ();
  55. swh1.Dispose ();
  56. }
  57. [Test]
  58. public void Test2 ()
  59. {
  60. AutoResetEvent are1 = new AutoResetEvent (false);
  61. are1.SafeWaitHandle = null;
  62. Assertion.AssertEquals ("#B1:", true, (are1.SafeWaitHandle != null));
  63. Assertion.AssertEquals ("#B2:", true, (((int) are1.Handle) == -1));
  64. Assertion.AssertEquals ("#B3:", true, are1.SafeWaitHandle.IsInvalid);
  65. Assertion.AssertEquals ("#B4:", false, are1.SafeWaitHandle.IsClosed);
  66. }
  67. [Test]
  68. public void Test3 ()
  69. {
  70. AutoResetEvent are1 = new AutoResetEvent (false);
  71. AutoResetEvent are2 = new AutoResetEvent (false);
  72. SafeWaitHandle swh1 = are1.SafeWaitHandle;
  73. SafeWaitHandle swh2 = are2.SafeWaitHandle;
  74. Assertion.AssertEquals ("#C1:", true, (swh1 != swh2));
  75. Assertion.AssertEquals ("#C2:", true, (are1.SafeWaitHandle == swh1));
  76. are1.Handle = are2.Handle;
  77. Assertion.AssertEquals ("#C3:", true, (are1.SafeWaitHandle != swh1));
  78. Assertion.AssertEquals ("#C4:", false, swh1.IsClosed);
  79. Assertion.AssertEquals ("#C5:", false, swh1.IsInvalid);
  80. swh1.Dispose ();
  81. are1.Close ();
  82. are2.Close ();
  83. }
  84. [Test]
  85. public void Test4 ()
  86. {
  87. AutoResetEvent are1 = new AutoResetEvent (false);
  88. SafeWaitHandle swh1 = are1.SafeWaitHandle;
  89. are1.Handle = (IntPtr) (-1);
  90. Assertion.AssertEquals ("#D1:" , true, swh1 != are1.SafeWaitHandle);
  91. Assertion.AssertEquals ("#D2:" , false, are1.SafeWaitHandle.IsClosed);
  92. Assertion.AssertEquals ("#D3:" , true, are1.SafeWaitHandle.IsInvalid);
  93. are1.Close ();
  94. swh1.Dispose ();
  95. }
  96. [Test]
  97. public void Test5 ()
  98. {
  99. AutoResetEvent are1 = new AutoResetEvent (false);
  100. AutoResetEvent are2 = new AutoResetEvent (false);
  101. SafeWaitHandle swh1 = are1.SafeWaitHandle;
  102. Assertion.AssertEquals ("#E1:", false, swh1.IsClosed);
  103. Assertion.AssertEquals ("#E2:", false, swh1.IsInvalid);
  104. are1.Handle = IntPtr.Zero;
  105. Assertion.AssertEquals ("#E3:", false, swh1.IsClosed);
  106. Assertion.AssertEquals ("#E4:", false, swh1.IsInvalid);
  107. Assertion.AssertEquals ("#E5:", false, are1.SafeWaitHandle.IsClosed);
  108. Assertion.AssertEquals ("#E6:", true, are1.SafeWaitHandle.IsInvalid);
  109. are1.Close ();
  110. are2.Close ();
  111. swh1.Dispose ();
  112. }
  113. }
  114. #endif
  115. }