Пример #1
0
        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);
            }
        }
Пример #2
0
        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));
        }