public async Task TestResourceMultiLanguageGenerator()
        {
            var lg = new ResourceMultiLanguageGenerator("test.lg");

            // test targeted in each language
            Assert.AreEqual("english-us", await lg.GenerateAsync(GetDialogContext("en-us", lg), "${test()}", null));
            Assert.AreEqual("english-us", await lg.GenerateAsync(GetDialogContext("en-us", lg), "${test()}", new { country = "us" }));
            Assert.AreEqual("english-gb", await lg.GenerateAsync(GetDialogContext("en-gb", lg), "${test()}", null));
            Assert.AreEqual("english", await lg.GenerateAsync(GetDialogContext("en", lg), "${test()}", null));
            Assert.AreEqual("default", await lg.GenerateAsync(GetDialogContext(string.Empty, lg), "${test()}", null));
            Assert.AreEqual("default", await lg.GenerateAsync(GetDialogContext("foo", lg), "${test()}", null));

            // test fallback for en-us -> en -> default
            //Assert.AreEqual("default2", await lg.Generate(GetTurnContext("en-us", lg), "${test2()}", null));
            Assert.AreEqual("default2", await lg.GenerateAsync(GetDialogContext("en-gb", lg), "${test2()}", null));
            Assert.AreEqual("default2", await lg.GenerateAsync(GetDialogContext("en", lg), "${test2()}", null));
            Assert.AreEqual("default2", await lg.GenerateAsync(GetDialogContext(string.Empty, lg), "${test2()}", null));
            Assert.AreEqual("default2", await lg.GenerateAsync(GetDialogContext("foo", lg), "${test2()}", null));
        }
        public async Task TestResourceMultiLanguageGenerator()
        {
            var lg = new ResourceMultiLanguageGenerator("test.lg");

            // Configure last locale fallback to be non-overlapping with the explicitly set languages so we can
            // verify that when zero locale information is provided we default to it
            Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ar");

            // test targeted in each language
            Assert.Equal("english-us", await lg.GenerateAsync(GetDialogContext("en-us", lg), "${test()}", null));
            Assert.Equal("english-us", await lg.GenerateAsync(GetDialogContext("en-us", lg), "${test()}", new { country = "us" }));
            Assert.Equal("english-gb", await lg.GenerateAsync(GetDialogContext("en-gb", lg), "${test()}", null));
            Assert.Equal("english", await lg.GenerateAsync(GetDialogContext("en", lg), "${test()}", null));
            Assert.Equal("default", await lg.GenerateAsync(GetDialogContext(string.Empty, lg), "${test()}", null));
            Assert.Equal("default", await lg.GenerateAsync(GetDialogContext("foo", lg), "${test()}", null));

            // test fallback for en-us -> en -> default
            //Assert.Equal("default2", await lg.Generate(GetTurnContext("en-us", lg), "${test2()}", null));
            Assert.Equal("default2", await lg.GenerateAsync(GetDialogContext("en-gb", lg), "${test2()}", null));
            Assert.Equal("default2", await lg.GenerateAsync(GetDialogContext("en", lg), "${test2()}", null));
            Assert.Equal("default2", await lg.GenerateAsync(GetDialogContext(string.Empty, lg), "${test2()}", null));
            Assert.Equal("default2", await lg.GenerateAsync(GetDialogContext("foo", lg), "${test2()}", null));
        }