示例#1
0
        public static async Task DialogTask_Frame_Scoring_Throws_Out_Of_Range(double score)
        {
            var state    = new object();
            var item     = new Activity();
            var token    = new CancellationTokenSource().Token;
            var scorable = MockScorable(item, state, score, token);

            var        innerLoop     = new Mock <IEventLoop>();
            var        innerProducer = new Mock <IEventProducer <IActivity> >();
            var        queue         = new EventQueue <IActivity>();
            IEventLoop loop          = new ScoringEventLoop <double>(innerLoop.Object, innerProducer.Object, queue, new TraitsScorable <IActivity, double>(NormalizedTraits.Instance, Comparer <double> .Default, new[] { scorable.Object }));

            try
            {
                IEventProducer <IActivity> producer = queue;
                producer.Post(item);
                await loop.PollAsync(token);

                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException)
            {
            }

            scorable.Verify();
        }
示例#2
0
        public async Task DialogTask_Frame_Scoring_Stops_At_Maximum()
        {
            var state1    = new object();
            var item      = new Activity();
            var token     = new CancellationTokenSource().Token;
            var scorable1 = MockScorable(item, state1, 1.0, token);
            var scorable2 = new Mock <IScorable <object, double> >(MockBehavior.Strict);

            var        innerLoop     = new Mock <IEventLoop>();
            var        innerProducer = new Mock <IEventProducer <IActivity> >();
            var        queue         = new EventQueue <IActivity>();
            IEventLoop loop          = new ScoringEventLoop <double>(innerLoop.Object, innerProducer.Object, queue, new TraitsScorable <IActivity, double>(NormalizedTraits.Instance, Comparer <double> .Default, new[] { scorable1.Object, scorable2.Object }));

            scorable1
            .Setup(s => s.PostAsync(item, state1, token))
            .Returns(Task.FromResult(0));

            IEventProducer <IActivity> producer = queue;

            producer.Post(item);
            await loop.PollAsync(token);

            scorable1.Verify();
            scorable2.Verify();
        }
示例#3
0
        public static async Task DialogTask_Frame_Scoring_Allows_Value(double score)
        {
            var state    = new object();
            var item     = new Activity();
            var token    = new CancellationTokenSource().Token;
            var scorable = MockScorable(item, state, score, token);

            var        innerLoop     = new Mock <IEventLoop>();
            var        innerProducer = new Mock <IEventProducer <IActivity> >();
            var        queue         = new EventQueue <IActivity>();
            IEventLoop loop          = new ScoringEventLoop <double>(innerLoop.Object, innerProducer.Object, queue, new TraitsScorable <IActivity, double>(NormalizedTraits.Instance, Comparer <double> .Default, new[] { scorable.Object }));

            scorable
            .Setup(s => s.PostAsync(item, state, token))
            .Returns(Task.FromResult(0));

            IEventProducer <IActivity> producer = queue;

            producer.Post(item);
            await loop.PollAsync(token);

            scorable.Verify();
        }
        public async Task DialogTaskManager_TwoParallelDialogTasks()
        {
            var dialog            = new Mock <DialogTaskTests.IDialogFrames <string> >(MockBehavior.Strict);
            var secondStackDialog = new Mock <DialogTaskTests.IDialogFrames <object> >(MockBehavior.Strict);

            dialog
            .Setup(d => d.StartAsync(It.IsAny <IDialogContext>()))
            .Returns <IDialogContext>(async context => { context.Wait(dialog.Object.ItemReceived); });

            dialog
            .Setup(d => d.ItemReceived(It.IsAny <IDialogContext>(), It.IsAny <IAwaitable <IMessageActivity> >()))
            .Returns <IDialogContext, IAwaitable <IMessageActivity> >(async(context, message) =>
            {
                var msg = await message;
                await context.PostAsync(msg.Text);
                context.Wait(dialog.Object.ItemReceived);
            });


            var promptMessage = "Say something!";

            secondStackDialog
            .Setup(d => d.StartAsync(It.IsAny <IDialogContext>()))
            .Returns <IDialogContext>(
                async context =>
                { context.Wait(secondStackDialog.Object.ItemReceived <IMessageActivity>); });

            secondStackDialog
            .Setup(d => d.ItemReceived(It.IsAny <IDialogContext>(), It.IsAny <IAwaitable <IMessageActivity> >()))
            .Returns <IDialogContext, IAwaitable <IMessageActivity> >(async(context, message) =>
            {
                PromptDialog.Text(context, secondStackDialog.Object.ItemReceived, promptMessage);
            });

            secondStackDialog
            .Setup(d => d.ItemReceived(It.IsAny <IDialogContext>(), It.IsAny <IAwaitable <string> >()))
            .Returns <IDialogContext, IAwaitable <string> >(async(context, message) =>
            {
                await context.PostAsync($"from prompt {await message}");
                context.Wait(secondStackDialog.Object.ItemReceived <IMessageActivity>);
            });

            Func <IDialog <object> > makeRoot            = () => dialog.Object;
            Func <IDialog <object> > secondStackMakeRoot = () => secondStackDialog.Object;
            var toBot = MakeTestMessage();

            using (new FiberTestBase.ResolveMoqAssembly(dialog.Object, secondStackDialog.Object))
                using (var container = Build(Options.MockConnectorFactory, dialog.Object, secondStackDialog.Object))
                {
                    string foo = "foo";
                    string bar = "bar";
                    Queue <IMessageActivity> queue;
                    using (var scope = DialogModule.BeginLifetimeScope(container, toBot))
                    {
                        toBot.Text = foo;
                        DialogModule_MakeRoot.Register(scope, makeRoot);
                        await scope.Resolve <IPostToBot>().PostAsync(toBot, CancellationToken.None);

                        var botData = scope.Resolve <IBotData>();
                        await botData.LoadAsync(CancellationToken.None);

                        var dialogTaskManager = scope.Resolve <IDialogTaskManager>();

                        //create second dialog task
                        var        secondDialogTask   = dialogTaskManager.CreateDialogTask();
                        var        reactiveDialogTask = new ReactiveDialogTask(secondDialogTask, secondStackMakeRoot);
                        IEventLoop loop = reactiveDialogTask;
                        await loop.PollAsync(CancellationToken.None);

                        IEventProducer <IActivity> producer = reactiveDialogTask;
                        producer.Post(toBot);
                        await loop.PollAsync(CancellationToken.None);

                        await botData.FlushAsync(CancellationToken.None);

                        queue = scope.Resolve <Queue <IMessageActivity> >();
                        Assert.AreEqual(foo, queue.Dequeue().Text);
                        Assert.AreEqual(promptMessage, queue.Dequeue().Text);
                    }

                    using (var scope = DialogModule.BeginLifetimeScope(container, toBot))
                    {
                        toBot.Text = bar;
                        DialogModule_MakeRoot.Register(scope, makeRoot);
                        await scope.Resolve <IPostToBot>().PostAsync(toBot, CancellationToken.None);

                        var dialogTaskManager = scope.Resolve <IDialogTaskManager>();
                        Assert.AreEqual(2, dialogTaskManager.DialogTasks.Count);
                        var secondDialogTask = dialogTaskManager.DialogTasks[1];
                        await secondDialogTask.PollAsync(CancellationToken.None);

                        secondDialogTask.Post(toBot);
                        await secondDialogTask.PollAsync(CancellationToken.None);

                        queue = scope.Resolve <Queue <IMessageActivity> >();
                        Assert.AreEqual(bar, queue.Dequeue().Text);
                        Assert.AreEqual($"from prompt {bar}", queue.Dequeue().Text);
                    }
                }
        }