public void TestSynchronous() { Instruction <string, string> invokePing = (ct, rp, arg) => { var mainWindow = AutomationElement.RootElement.WaitForFirstChild(arg); var pingButton = mainWindow.WaitForFirstChild("Ping"); pingButton.Invoke(); return("Pinged"); }; Instruction <string, Tuple <string, string> > invokePong = (ct, rp, arg) => { var mainWindow = AutomationElement.RootElement.WaitForFirstChild("PongApp"); var pongButton = mainWindow.WaitForFirstChild("Pong"); pongButton.Invoke(); return(new Tuple <string, string>(arg, "Ponged")); }; for (int i = 0; i < 2; i++) { var result = Coordinator.Do(_onWorkerOne.Do(invokePing), "PingApp").ThenDo(_onWorkerTwo.Do(invokePong)).ResultValue; var expectedResult = new Tuple <string, string>("Pinged", "Ponged"); Assert.AreEqual(result, expectedResult); } }
public void TestAsynchronous() { TwoPartInstruction <Guid, Guid> waitForPing = (ct, rp, p1, arg) => { var mainWindow = AutomationElement.RootElement.WaitForFirstChild("PingApp"); var pingButton = mainWindow.WaitForFirstChild("Ping"); p1(); while (!pingButton.IsEnabled()) { ct.ThrowIfCancellationRequested(); Thread.Sleep(TimeSpan.FromMilliseconds(250)); } return(arg); }; Instruction <Guid, Guid> invokePing = (ct, rp, arg) => { var mainWindow = AutomationElement.RootElement.WaitForFirstChild("PingApp"); var pingButton = mainWindow.WaitForFirstChild("Ping"); pingButton.Invoke(); return(arg); }; TwoPartInstruction <Guid, Guid> waitForPong = (ct, rp, p1, arg) => { var mainWindow = AutomationElement.RootElement.WaitForFirstChild("PongApp"); var pongButton = mainWindow.WaitForFirstChild("Pong"); p1(); while (!pongButton.IsEnabled()) { ct.ThrowIfCancellationRequested(); Thread.Sleep(TimeSpan.FromMilliseconds(250)); } return(arg); }; Instruction <Guid, Guid> invokePong = (ct, rp, arg) => { var mainWindow = AutomationElement.RootElement.WaitForFirstChild("PongApp"); var pongButton = mainWindow.WaitForFirstChild("Pong"); pongButton.Invoke(); return(arg); }; Guid guid = Guid.NewGuid(); // Workers need to do simple first or else throw a null reference exception Instruction <Guid, Guid> identity = (ct, rp, arg) => arg; Coordinator.Do(_onWorkerOne.Do(identity), guid).ThenDo(_onWorkerTwo.Do(identity)); var step = Coordinator.Do(_onWorkerTwo.Do(waitForPing), guid); step = step.ThenDo(_onWorkerOne.Do(invokePing)); step = step.ThenDo(_onWorkerTwo.GetAsyncResult <Guid>()); step = step.ThenDo(_onWorkerOne.Do(waitForPong)); step = step.ThenDo(_onWorkerTwo.Do(invokePong)); step = step.ThenDo(_onWorkerOne.GetAsyncResult <Guid>()); var actual = step.ResultValue; Assert.That(actual, Is.EqualTo(guid)); }