public async Task EventDispatcher_NonCoalesced() { var waitDispatched = new AutoResetEvent(false); var executor = new MockJavaScriptExecutor { OnCallFunctionReturnFlushedQueue = (p0, p1, p2) => { waitDispatched.Set(); return(EmptyResponse); }, OnFlushQueue = () => EmptyResponse, OnInvokeCallbackAndReturnFlushedQueue = (_, __) => EmptyResponse }; var context = await CreateContextAsync(executor); var dispatcher = new EventDispatcher(context); await DispatcherHelpers.RunOnDispatcherAsync(dispatcher.OnResume); var e1 = new NonCoalescedEvent(42, "Foo"); var e2 = new NonCoalescedEvent(42, "Foo"); using (BlockJavaScriptThread(context)) { dispatcher.DispatchEvent(e1); dispatcher.DispatchEvent(e2); } Assert.IsTrue(waitDispatched.WaitOne()); Assert.IsTrue(waitDispatched.WaitOne()); await DispatcherHelpers.CallOnDispatcherAsync(context.DisposeAsync); }
public async Task EventDispatcher_NonCoalesced() { // TODO: (#288) Check for non-determinism. var waitDispatched = new AutoResetEvent(false); var executor = new MockJavaScriptExecutor((p0, p1, p2) => { if (p1 == "callFunctionReturnFlushedQueue") { waitDispatched.Set(); } return(JArray.Parse("[[],[],[]]")); }); var context = await CreateContextAsync(executor); var dispatcher = new EventDispatcher(context); await DispatcherHelpers.RunOnDispatcherAsync(dispatcher.OnResume); var e1 = new NonCoalescedEvent(42, TimeSpan.Zero, "Foo"); var e2 = new NonCoalescedEvent(42, TimeSpan.Zero, "Foo"); using (BlockJavaScriptThread(context)) { dispatcher.DispatchEvent(e1); dispatcher.DispatchEvent(e2); } Assert.IsTrue(waitDispatched.WaitOne()); Assert.IsTrue(waitDispatched.WaitOne()); await DispatcherHelpers.RunOnDispatcherAsync(context.Dispose); }