public void TestExpandTemplate()
        {
            var engine = new TemplateEngine().AddFile(GetExampleFilePath("Expand.lg"));

            // without scope
            var evaled = engine.ExpandTemplate("FinalGreeting");

            Assert.AreEqual(4, evaled.Count);
            var expectedResults = new List <string>()
            {
                "Hi Morning", "Hi Evening", "Hello Morning", "Hello Evening"
            };

            expectedResults.ForEach(x => Assert.AreEqual(true, evaled.Contains(x)));

            // with scope
            evaled = engine.ExpandTemplate("TimeOfDayWithCondition", new { time = "evening" });
            Assert.AreEqual(2, evaled.Count);
            expectedResults = new List <string>()
            {
                "Hi Evening", "Hello Evening"
            };
            expectedResults.ForEach(x => Assert.AreEqual(true, evaled.Contains(x)));

            // with scope
            evaled = engine.ExpandTemplate("greetInAWeek", new { day = "Sunday" });
            Assert.AreEqual(2, evaled.Count);
            expectedResults = new List <string>()
            {
                "Nice Sunday!", "Happy Sunday!"
            };
            expectedResults.ForEach(x => Assert.AreEqual(true, evaled.Contains(x)));
        }
        public void TestExpandTemplateWithStructuredLG()
        {
            var engine = new TemplateEngine().AddFile(GetExampleFilePath("StructuredTemplate.lg"));

            // without scope
            var evaled = engine.ExpandTemplate("AskForAge.prompt");

            Assert.AreEqual(4, evaled.Count);
            var expectedResults = new List <string>()
            {
                "{\"lgType\":\"Activity\",\"text\":\"how old are you?\",\"speak\":\"how old are you?\"}",
                "{\"lgType\":\"Activity\",\"text\":\"how old are you?\",\"speak\":\"what's your age?\"}",
                "{\"lgType\":\"Activity\",\"text\":\"what's your age?\",\"speak\":\"how old are you?\"}",
                "{\"lgType\":\"Activity\",\"text\":\"what's your age?\",\"speak\":\"what's your age?\"}"
            };

            expectedResults.ForEach(x => Assert.AreEqual(true, evaled.Contains(x)));

            evaled = engine.ExpandTemplate("ExpanderT1");
            Assert.AreEqual(4, evaled.Count);
            expectedResults = new List <string>()
            {
                "{\"lgType\":\"MyStruct\",\"text\":\"Hi\",\"speak\":\"how old are you?\"}",
                "{\"lgType\":\"MyStruct\",\"text\":\"Hi\",\"speak\":\"what's your age?\"}",
                "{\"lgType\":\"MyStruct\",\"text\":\"Hello\",\"speak\":\"how old are you?\"}",
                "{\"lgType\":\"MyStruct\",\"text\":\"Hello\",\"speak\":\"what's your age?\"}"
            };

            expectedResults.ForEach(x => Assert.AreEqual(true, evaled.Contains(x)));
        }
        public void TestExpandTemplateWithRefInMultiLine()
        {
            var engine = new TemplateEngine().AddFile(GetExampleFilePath("Expand.lg"));

            var alarms = new[]
            {
                new
                {
                    time = "7 am",
                    date = "tomorrow"
                },
                new
                {
                    time = "8 pm",
                    date = "tomorrow"
                }
            };

            var evaled = engine.ExpandTemplate("ShowAlarmsWithMultiLine", new { alarms = alarms });

            Assert.AreEqual(2, evaled.Count);
            var eval1Options = new List <string>()
            {
                "\r\nYou have 2 alarms.\r\nThey are 8 pm at tomorrow\r\n", "\nYou have 2 alarms.\nThey are 8 pm at tomorrow\n"
            };
            var eval2Options = new List <string>()
            {
                "\r\nYou have 2 alarms.\r\nThey are 8 pm of tomorrow\r\n", "\nYou have 2 alarms.\nThey are 8 pm of tomorrow\n"
            };

            Assert.AreEqual(true, eval1Options.Contains(evaled[0]));
            Assert.AreEqual(true, eval2Options.Contains(evaled[1]));
        }
        public void TestExpandTemplateWithFunction()
        {
            var engine = new TemplateEngine().AddFile(GetExampleFilePath("Expand.lg"));

            var alarms = new[]
            {
                new
                {
                    time = "7 am",
                    date = "tomorrow"
                },
                new
                {
                    time = "8 pm",
                    date = "tomorrow"
                }
            };

            var evaled      = engine.ExpandTemplate("ShowAlarmsWithForeach", new { alarms = alarms });
            var evalOptions = new List <string>()
            {
                "You have 2 alarms, 7 am at tomorrow and 8 pm at tomorrow",
                "You have 2 alarms, 7 am at tomorrow and 8 pm of tomorrow",
                "You have 2 alarms, 7 am of tomorrow and 8 pm at tomorrow",
                "You have 2 alarms, 7 am of tomorrow and 8 pm of tomorrow"
            };

            Assert.AreEqual(1, evaled.Count);
            Assert.AreEqual(true, evalOptions.Contains(evaled[0]));

            evaled = engine.ExpandTemplate("T2");
            Assert.AreEqual(1, evaled.Count);
            Assert.AreEqual(true, evaled[0] == "3" || evaled[0] == "5");

            evaled = engine.ExpandTemplate("T3");
            Assert.AreEqual(1, evaled.Count);
            Assert.AreEqual(true, evaled[0] == "3" || evaled[0] == "5");

            evaled = engine.ExpandTemplate("T4");
            Assert.AreEqual(1, evaled.Count);
            Assert.AreEqual(true, evaled[0] == "ey" || evaled[0] == "el");
        }
        public void TestExpandTemplateWithRef()
        {
            var engine = new TemplateEngine().AddFile(GetExampleFilePath("Expand.lg"));

            var alarms = new[]
            {
                new
                {
                    time = "7 am",
                    date = "tomorrow"
                },
                new
                {
                    time = "8 pm",
                    date = "tomorrow"
                }
            };

            var evaled = engine.ExpandTemplate("ShowAlarmsWithLgTemplate", new { alarms = alarms });

            Assert.AreEqual(2, evaled.Count);
            Assert.AreEqual("You have 2 alarms, they are 8 pm at tomorrow", evaled[0]);
            Assert.AreEqual("You have 2 alarms, they are 8 pm of tomorrow", evaled[1]);
        }