Beispiel #1
0
        public void TestEventQueue_GetEventsCalled()
        {
            /* PRECONDITIONS */
            Debug.Assert(mockStrategy != null);
            Debug.Assert(queue != null);

            /* GIVEN */
            using var autoResetEvent = new AutoResetEvent(false);
            var outputEvent = Enumerable.Repeat(new TestEvent(), 50).ToArray();
            var num         = 0;

#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
            async IAsyncEnumerable <TestEvent> CallEvent()
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
            {
                foreach (var innerEvent in outputEvent)
                {
                    yield return(innerEvent);
                }
            }

            mockStrategy
            .Setup(mock => mock.GetEvents(It.IsAny <CancellationToken>()))?
            .Returns(CallEvent);

            /* WHEN */
            async void AwaitEach()
            {
                await foreach (var @event in queue.GetEvents())
                {
                    Assert.AreSame(outputEvent[num], @event);
                    num++;
                }

                autoResetEvent.Set();
            }

            AwaitEach();

            /* THEN */
            Assert.IsTrue(autoResetEvent.WaitOne(maxWaitTime));
            mockStrategy.Verify(mock => mock.GetEvents(It.IsAny <CancellationToken>()), Times.Once);
        }
Beispiel #2
0
        private static void ExpectOutput <T>(EventQueue <T> queue, Func <T, bool> predicate, Action completeAction = null) where T : Event
        {
            using var awaitThreadStartEvent = new ManualResetEvent(false);
            var thread = new Thread(async() =>
            {
                await foreach (var @event in Awaitable.Await(queue.GetEvents(), awaitThreadStartEvent))
                {
                    if (predicate.Invoke(@event))
                    {
                        break;
                    }
                }

                completeAction?.Invoke();
            });

            thread.Start();
            Assert.IsTrue(awaitThreadStartEvent.WaitOne(maxWaitTime), "Thread did not start in time!");
        }