public void reponseTest()
        {
            SyncTriggerSystem system = createSystem();
            SyncTask          task   = system.request(1, new EventContext("discover")
            {
                { "cards", new int[] { 1, 2, 3 } }
            }, 3, ALambda.doNothing, new FLambda <bool>(game =>
            {
                EventContext context = game.trigger.currentTask.context;
                int[] cards          = context.getVar <int[]>("cards");
                int card             = context.getVar <int>("card");
                return(cards.Contains(card));
            }));

            task = system.response(1, new EventContext("discover")
            {
                { "card", 4 }
            });
            Assert.AreEqual(SyncTaskState.paused, task.state);
            task = system.response(2, new EventContext("discover")
            {
                { "card", 3 }
            });
            Assert.AreEqual(SyncTaskState.paused, task.state);
            task = system.response(1, new EventContext("discover")
            {
                { "card", 3 }
            });
            Assert.AreEqual(SyncTaskState.finished, task.state);
        }
        public void askAndGetRequestsTest()
        {
            SyncTriggerSystem system = createSystem();
            SyncTask          task   = system.request(1, new EventContext("discover")
            {
                { "cards", new int[] { 1, 2, 3 } }
            }, float.MaxValue, null);

            Assert.AreEqual(SyncTaskState.paused, task.state);
            Assert.AreEqual(task, system.getAllRequestTasks()[0]);
        }
        public IEnumerator timeoutTest()
        {
            SyncTriggerSystem system = createSystem();
            bool     flag            = false;
            SyncTask task            = system.request(1, new EventContext("discover")
            {
                { "cards", new int[] { 1, 2, 3 } }
            }, 3, new ALambda(game => flag = true));

            yield return(new WaitForSeconds(3));

            Assert.AreEqual(SyncTaskState.finished, task.state);
            Assert.AreEqual(0, system.getAllRequestTasks().Length);
            Assert.True(flag);
        }
        public IEnumerator getRemainedTimeTest()
        {
            SyncTriggerSystem system = createSystem();
            SyncTask          task   = system.request(1, new EventContext("discover")
            {
                { "cards", new int[] { 1, 2, 3 } }
            }, 3, ALambda.doNothing);

            yield return(new WaitForSeconds(1));

            Assert.True(1 < system.getRemainedTime(task) && system.getRemainedTime(task) <= 2);

            yield return(new WaitForSeconds(3));

            Assert.AreEqual(0, system.getRemainedTime(task));
        }
        public IEnumerator timeoutResponseTest()
        {
            SyncTriggerSystem system = createSystem();
            SyncTask          task   = system.request(0, new EventContext("discover")
            {
                { "cards", new int[] { 1, 2, 3 } }
            }, 3, ALambda.doNothing);

            Assert.AreEqual(task, system.getPausedTasks()[0]);
            yield return(new WaitForSeconds(3));

            Assert.AreEqual(0, system.getPausedTasks().Length);
            system.response(0, new EventContext("discover")
            {
                { "card", 3 }
            });
            Assert.AreEqual(0, system.getPausedTasks().Length);
        }
        public IEnumerator delayedResponseTest()
        {
            SyncTriggerSystem system = createSystem();
            SyncTask          task   = system.request(0, new EventContext("discover")
            {
                { "cards", new int[] { 1, 2, 3 } }
            }, 3, ALambda.doNothing);

            Assert.AreEqual(task, system.getPausedTasks()[0]);
            yield return(new WaitForSeconds(1));

            system.response(0, new EventContext("discover")
            {
                { "card", 3 }
            });
            Assert.False(system.getPausedTasks().Contains(task));
            Assert.AreEqual(SyncTaskState.finished, task.state);
        }