65
65
66
66
[ TestFixture ]
67
67
public class TestSharedQueue {
68
+
69
+ public delegate void Thunk ( ) ;
70
+
68
71
public class DelayedEnqueuer
69
72
{
70
73
public SharedQueue m_q ;
@@ -85,6 +88,13 @@ public static void EnqueueAfter(int delayMs, SharedQueue q, object v) {
85
88
new Thread ( new ThreadStart ( de . Run ) ) . Start ( ) ;
86
89
}
87
90
91
+ public static void ExpectEof ( Thunk thunk ) {
92
+ try {
93
+ thunk ( ) ;
94
+ Assert . Fail ( "expected System.IO.EndOfStreamException" ) ;
95
+ } catch ( System . IO . EndOfStreamException ) { }
96
+ }
97
+
88
98
public DateTime m_startTime ;
89
99
90
100
public void ResetTimer ( ) {
@@ -248,4 +258,44 @@ public void TestDoublePoll() {
248
258
Assert . IsTrue ( r ) ;
249
259
Assert . AreEqual ( 123 , v ) ;
250
260
}
261
+
262
+ [ Test ]
263
+ public void TestCloseWhenEmpty ( ) {
264
+ SharedQueue q = new SharedQueue ( ) ;
265
+ object v ;
266
+ q . Close ( ) ;
267
+ ExpectEof ( delegate ( ) { q . Enqueue ( 1 ) ; } ) ;
268
+ ExpectEof ( delegate ( ) { q . Dequeue ( ) ; } ) ;
269
+ ExpectEof ( delegate ( ) { q . DequeueNoWait ( 0 ) ; } ) ;
270
+ ExpectEof ( delegate ( ) { q . Dequeue ( 1 , out v ) ; } ) ;
271
+ }
272
+
273
+ [ Test ]
274
+ public void TestCloseWhenFull ( ) {
275
+ SharedQueue q = new SharedQueue ( ) ;
276
+ object v ;
277
+ q . Enqueue ( 1 ) ;
278
+ q . Enqueue ( 2 ) ;
279
+ q . Enqueue ( 3 ) ;
280
+ q . Close ( ) ;
281
+ ExpectEof ( delegate ( ) { q . Enqueue ( 4 ) ; } ) ;
282
+ Assert . AreEqual ( 1 , q . Dequeue ( ) ) ;
283
+ Assert . AreEqual ( 2 , q . DequeueNoWait ( 0 ) ) ;
284
+ bool r = q . Dequeue ( 1 , out v ) ;
285
+ Assert . IsTrue ( r ) ;
286
+ Assert . AreEqual ( 3 , v ) ;
287
+ ExpectEof ( delegate ( ) { q . Dequeue ( ) ; } ) ;
288
+ }
289
+
290
+ [ Test ]
291
+ public void TestCloseWhenWaiting ( ) {
292
+ SharedQueue q = new SharedQueue ( ) ;
293
+ Thread t = new Thread ( delegate ( ) {
294
+ ExpectEof ( delegate ( ) { q . Dequeue ( ) ; } ) ;
295
+ } ) ;
296
+ t . Start ( ) ;
297
+ Thread . Sleep ( 10 ) ;
298
+ q . Close ( ) ;
299
+ t . Join ( ) ;
300
+ }
251
301
}
0 commit comments