コード例 #1
0
        public void Intents_TopIntentsOrdering()
        {
            string small  = "small";
            string medium = "medium";
            string large  = "large";

            List <Intent> intents = new List <Intent>
            {
                new Intent {
                    Name = small, Score = 0.0
                },
                new Intent {
                    Name = medium, Score = 0.5
                },
                new Intent {
                    Name = large, Score = 1.0
                }
            };

            for (int i = 0; i < 100; i++)
            {
                Shuffle(intents);
                Assert.IsTrue(IntentRecognizerMiddleware.FindTopIntent(intents).Name == large, "Not the top intent");
            }
        }
コード例 #2
0
        public async Task Intents_ValidateFilterOrder()
        {
            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();
            string shouldRun             = null;

            /*
             *  Filters are required to run in reverse order. This code validates that by registering 3 filters and
             *  running a simple state machine across them.
             */
            m.OnFilter(async(context, intentList) =>
            {
                Assert.IsTrue(shouldRun == "third", "1st filter did not run last");
                shouldRun = "done";
            });

            m.OnFilter(async(context, intentList) =>
            {
                Assert.IsTrue(shouldRun == "second", "2nd filter did not run second");
                shouldRun = "third";
            });

            m.OnFilter(async(context, intentList) =>
            {
                Assert.IsTrue(shouldRun == "first", "last filter did not run first");
                shouldRun = "second";
            });

            TurnContext bc = TestUtilities.CreateEmptyContext();

            shouldRun = "first";

            var resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(shouldRun == "done", "Final filter did not run");
        }
コード例 #3
0
        public async Task Intents_RegognizeTwoIntents()
        {
            string targetName1 = Guid.NewGuid().ToString();
            string targetName2 = Guid.NewGuid().ToString();

            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();

            m.OnRecognize(async(context) =>
            {
                return(new List <Intent>
                {
                    new Intent()
                    {
                        Name = targetName1
                    },
                    new Intent()
                    {
                        Name = targetName2
                    }
                });
            });

            TurnContext bc = TestUtilities.CreateEmptyContext();
            var         resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(resultingIntents.Count == 2, "Expected exactly 2 intents");
            Assert.IsTrue(resultingIntents[0].Name == targetName1, $"Unexpected Intent Name. Expected {targetName1}");
            Assert.IsTrue(resultingIntents[1].Name == targetName2, $"Unexpected Intent Name. Expected {targetName2}");
        }
コード例 #4
0
        public async Task Intents_RecognizeZeroIntentsViaNullReturn()
        {
            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();

            m.OnRecognize(async(context) =>
            {
                return(null);
            });

            TurnContext bc = TestUtilities.CreateEmptyContext();
            var         resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(resultingIntents.Count == 0, "Expected zero intents");
        }
コード例 #5
0
        public async Task Intents_ValidateRecognizerOrder()
        {
            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();

            /*
             *  Filters are required to run in reverse order. This code validates that by registering 3 filters and
             *  running a simple state machine across them.
             */
            m.OnRecognize(async(context) =>
            {
                Assert.IsTrue(context.ToBotContext()["shouldRun"] == "first", "1st recognizer did not run first");
                context.ToBotContext()["shouldRun"] = "second";

                return(new List <Intent>());
            });

            m.OnRecognize(async(context) =>
            {
                Assert.IsTrue(context.ToBotContext()["shouldRun"] == "second", "2st recognizer did not run second");
                context.ToBotContext()["shouldRun"] = "third";

                return(new List <Intent>());
            });

            m.OnRecognize(async(context) =>
            {
                Assert.IsTrue(context.ToBotContext()["shouldRun"] == "third", "3rd recognizer did not run last");
                context.ToBotContext()["shouldRun"] = "done";

                return(new List <Intent>());
            });


            BotContext bc = TestUtilities.CreateEmptyContext();

            bc["shouldRun"] = "first";

            var resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(bc["shouldRun"] == "done", "Final recognizer did not run");
        }
コード例 #6
0
        public async Task Intents_MutateIntentResult()
        {
            string targetName   = Guid.NewGuid().ToString();
            string replacedName = Guid.NewGuid().ToString();

            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();

            m.OnRecognize(async(context) =>
            {
                return(new List <Intent>
                {
                    new Intent()
                    {
                        Name = targetName
                    },
                });
            });

            m.OnFilter(async(context, intentList) =>
            {
                // When this code is called, the intent should already have been recognized. This code, as "filter code"
                // has the oppertunity to manipulate that intent.

                Assert.IsTrue(intentList.Count == 1, "Expecting exactly 1 intent");
                Assert.IsTrue(intentList.First().Name == targetName, $"Unexpected Intent Name. Expected {targetName}");

                // replace the name of the intent. Do this via the Context to vette paremeter passing
                intentList[0].Name = context.ToBotContext()["replacedName"];
            });

            BotContext bc = TestUtilities.CreateEmptyContext();

            // Test that the Intent comes back has been "filtered" to have the revised name

            bc["replacedName"] = replacedName; // put the "revised" intent name into the context to vette parameter passing
            var resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(resultingIntents.Count == 1, "Expected exactly 1 intent");
            Assert.IsTrue(resultingIntents.First().Name == replacedName, $"Unexpected Intent Name. Expected {replacedName}");
        }
コード例 #7
0
        public async Task Intents_DisableIntent()
        {
            string targetName = Guid.NewGuid().ToString();

            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();

            m.OnRecognize(async(context) =>
            {
                return(new List <Intent>
                {
                    new Intent()
                    {
                        Name = targetName
                    },
                });
            });
            bool enabled = false;

            m.OnEnabled(async(context) =>
            {
                return(enabled);
            });

            TurnContext bc = TestUtilities.CreateEmptyContext();

            // Test that the Intent comes back when the OnEnabled method returns true
            enabled = true;
            var resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(resultingIntents.Count == 1, "Expected exactly 1 intent");
            Assert.IsTrue(resultingIntents.First().Name == targetName, $"Unexpected Intent Name. Expected {targetName}");

            // Test that NO Intent comes back when the OnEnabled method returns false
            enabled = false;
            var resultingIntents2 = await m.Recognize(bc);

            Assert.IsTrue(resultingIntents2.Count == 0, "Expected exactly 0 intent");
        }
コード例 #8
0
        public async Task Intents_RemoveIntentViaFilter()
        {
            string intentToKeep   = Guid.NewGuid().ToString();
            string intentToRemove = Guid.NewGuid().ToString();

            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();

            m.OnRecognize(async(context) =>
            {
                return(new List <Intent>
                {
                    new Intent()
                    {
                        Name = intentToKeep
                    },
                    new Intent()
                    {
                        Name = intentToRemove
                    }
                });
            });

            m.OnFilter(async(context, intentList) =>
            {
                Assert.IsTrue(intentList.Count == 2, "Expecting exactly 2 intents");
                Assert.IsTrue(intentList[0].Name == intentToKeep, $"Unexpected Intent Name. Expected {intentToKeep}");
                Assert.IsTrue(intentList[1].Name == intentToRemove, $"Unexpected Intent Name. Expected {intentToRemove}");

                intentList.RemoveAt(1);
            });

            TurnContext bc = TestUtilities.CreateEmptyContext();
            var         resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(resultingIntents.Count == 1, "Expected exactly 1 intent");
            Assert.IsTrue(resultingIntents.First().Name == intentToKeep, $"Unexpected Intent Name. Expected {intentToKeep}");
        }
コード例 #9
0
        public async Task Intents_RecognizeSingleIntent()
        {
            string targetName = Guid.NewGuid().ToString();

            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();

            m.OnRecognize(async(context) =>
            {
                IList <Intent> result = new List <Intent>
                {
                    new Intent()
                    {
                        Name = targetName
                    }
                };
                return(result);
            });

            TurnContext bc = TestUtilities.CreateEmptyContext();
            var         resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(resultingIntents.Count == 1, "Expected a sigle intent");
            Assert.IsTrue(resultingIntents.First().Name == targetName, "Unexpected Intent Name");
        }