using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Edge.Core.Test
{
    [TestClass]
    public class ExtentionMethodTest
    {
        [TestMethod]
        public void GetLocalizedContent_TestMethod1()
        {
            var source = "lang-zh-cn:稳Dart加油机lang-en-us:WayneDartPump";//.GetLocalizedContent("en-US,en;");
            var en_us_content = source.LocalizedContent("en-us");
            Assert.AreEqual("WayneDartPump", en_us_content);

            en_us_content = source.LocalizedContent("en");
            Assert.AreEqual("WayneDartPump", en_us_content);

            var zh_cn_content = source.LocalizedContent("zh-cn");
            Assert.AreEqual("稳Dart加油机", zh_cn_content);

            zh_cn_content = source.LocalizedContent("zh");
            Assert.AreEqual("稳Dart加油机", zh_cn_content);

            var unknown_local_content = source.LocalizedContent("xx-bb");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("xx");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("en-uu");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc_adfadfasdf");
            Assert.AreEqual("WayneDartPump", unknown_local_content);
        }

        [TestMethod]
        public void GetLocalizedContent_TestMethod2()
        {
            var source = "lang-zh-cn:稳Dart加油机lang-enus:WayneDartPump";//.GetLocalizedContent("en-US,en;");
            var en_us_content = source.LocalizedContent("en-us");
            Assert.AreEqual(source, en_us_content);

            en_us_content = source.LocalizedContent("en");
            Assert.AreEqual(source, en_us_content);

            var zh_cn_content = source.LocalizedContent("zh-cn");
            Assert.AreEqual("稳Dart加油机lang-enus:WayneDartPump", zh_cn_content);

            zh_cn_content = source.LocalizedContent("zh");
            Assert.AreEqual("稳Dart加油机lang-enus:WayneDartPump", zh_cn_content);

            var unknown_local_content = source.LocalizedContent("xx-bb");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("xx");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("en-uu");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc_adfadfasdf");
            Assert.AreEqual(source, unknown_local_content);
        }

        [TestMethod]
        public void GetLocalizedContent_TestMethod3()
        {
            var source = "lang-zh1-cn:稳Dart加油机lang-en2-us:WayneDartPump";//.GetLocalizedContent("en-US,en;");
            var en_us_content = source.LocalizedContent("en-us");
            Assert.AreEqual(source, en_us_content);

            en_us_content = source.LocalizedContent("en");
            Assert.AreEqual(source, en_us_content);

            var zh_cn_content = source.LocalizedContent("zh-cn");
            Assert.AreEqual(source, zh_cn_content);

            zh_cn_content = source.LocalizedContent("zh");
            Assert.AreEqual(source, zh_cn_content);

            var unknown_local_content = source.LocalizedContent("xx-bb");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("xx");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("en-uu");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc_adfadfasdf");
            Assert.AreEqual(source, unknown_local_content);
        }

        [TestMethod]
        public void GetLocalizedContent_TestMethod4()
        {
            var source = "soLazyDidNotLeaveAnyLocalizeContent";//.GetLocalizedContent("en-US,en;");
            var en_us_content = source.LocalizedContent("en-us");
            Assert.AreEqual(source, en_us_content);

            en_us_content = source.LocalizedContent("en");
            Assert.AreEqual(source, en_us_content);

            var zh_cn_content = source.LocalizedContent("zh-cn");
            Assert.AreEqual(source, zh_cn_content);

            zh_cn_content = source.LocalizedContent("zh");
            Assert.AreEqual(source, zh_cn_content);

            var unknown_local_content = source.LocalizedContent("xx-bb");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("xx");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("en-uu");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc");
            Assert.AreEqual(source, unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc_adfadfasdf");
            Assert.AreEqual(source, unknown_local_content);
        }

        [TestMethod]
        public void GetLocalizedContent_TestMethod5()
        {
            var source = "lang-zh:稳Dart加油机lang-en:WayneDartPump";//.GetLocalizedContent("en-US,en;");
            var en_us_content = source.LocalizedContent("en-us");
            Assert.AreEqual("WayneDartPump", en_us_content);

            en_us_content = source.LocalizedContent("en");
            Assert.AreEqual("WayneDartPump", en_us_content);

            var zh_cn_content = source.LocalizedContent("zh-cn");
            Assert.AreEqual("WayneDartPump", zh_cn_content);

            zh_cn_content = source.LocalizedContent("zh");
            Assert.AreEqual("稳Dart加油机", zh_cn_content);

            var unknown_local_content = source.LocalizedContent("xx-bb");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("xx");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("en-uu");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc_adfadfasdf");
            Assert.AreEqual("WayneDartPump", unknown_local_content);
        }

        [TestMethod]
        public void GetLocalizedContent_TestMethod6()
        {
            var source = "lang-zh:稳Dart加油机lang-en:WayneDartPumplang-zh:还来???";//.GetLocalizedContent("en-US,en;");

            var zh_cn_content = source.LocalizedContent("zh-cn");
            Assert.AreEqual("WayneDartPump", zh_cn_content);

            zh_cn_content = source.LocalizedContent("zh");
            Assert.AreEqual("稳Dart加油机", zh_cn_content);

            var unknown_local_content = source.LocalizedContent("xx-bb");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("xx");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("en-uu");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc");
            Assert.AreEqual("WayneDartPump", unknown_local_content);

            unknown_local_content = source.LocalizedContent("zh-cc_adfadfasdf");
            Assert.AreEqual("WayneDartPump", unknown_local_content);
        }

        [TestMethod]
        public void LocalizedTitle_TestMethod1()
        {
            var jsonSchemaSource = @"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                Environment.NewLine +
                @"""title"": ""lang-zh-cn:停止位lang-en-us:StopBits""";
            var en_us_content = jsonSchemaSource.LocalizedJsonSchema("en-us");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," + Environment.NewLine + @"""title"": ""StopBits""", en_us_content);

            en_us_content = jsonSchemaSource.LocalizedJsonSchema("en");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," + Environment.NewLine + @"""title"": ""StopBits""", en_us_content);

            var zh_cn_content = jsonSchemaSource.LocalizedJsonSchema("zh-cn");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," + Environment.NewLine + @"""title"": ""停止位""", zh_cn_content);

            var zh_content = jsonSchemaSource.LocalizedJsonSchema("zh");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," + Environment.NewLine + @"""title"": ""停止位""", zh_content);

            var unknown_local_content = jsonSchemaSource.LocalizedJsonSchema("xx");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," + Environment.NewLine + @"""title"": ""StopBits""", unknown_local_content);

            unknown_local_content = jsonSchemaSource.LocalizedJsonSchema("zh-xx");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," + Environment.NewLine + @"""title"": ""StopBits""", unknown_local_content);
        }

        [TestMethod]
        public void LocalizedTitle_TestMethod2()
        {
            var jsonSchemaSource = @"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                Environment.NewLine +
                @"""title"": ""lang-zh-cn:停止位lang-en-us:StopBits""," +
                Environment.NewLine +
                @"""type"": ""integer""";
            var en_us_content = jsonSchemaSource.LocalizedJsonSchema("en-us");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," + Environment.NewLine + @"""title"": ""StopBits""," + Environment.NewLine + @"""type"": ""integer""", en_us_content);
        }

        [TestMethod]
        public void LocalizedTitle_TestMethod3()
        {
            var jsonSchemaSource = @"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                Environment.NewLine +
                @"""title"": ""lang-zh-cn:停止位lang-en-us:StopBits""," +
                Environment.NewLine +
                @"""title"": ""lang-zh-cn:另外一个停止位lang-en-us:AnotherStopBits""," +
                Environment.NewLine +
                @"""type"": ""integer""";
            var en_us_content = jsonSchemaSource.LocalizedJsonSchema("en-us");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                Environment.NewLine +
                @"""title"": ""StopBits""," +
                Environment.NewLine +
                @"""title"": ""AnotherStopBits""," +
                Environment.NewLine +
                @"""type"": ""integer""", en_us_content);


            var unknown_local_content = jsonSchemaSource.LocalizedJsonSchema("xx");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                 Environment.NewLine +
                 @"""title"": ""StopBits""," +
                 Environment.NewLine +
                 @"""title"": ""AnotherStopBits""," +
                 Environment.NewLine +
                 @"""type"": ""integer""", unknown_local_content);

            var zh_cn_content = jsonSchemaSource.LocalizedJsonSchema("zh-cn");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                Environment.NewLine +
                @"""title"": ""停止位""," +
                Environment.NewLine +
                @"""title"": ""另外一个停止位""," +
                Environment.NewLine +
                @"""type"": ""integer""", zh_cn_content);
        }

        [TestMethod]
        public void LocalizedTitle_TestMethod4()
        {
            var jsonSchemaSource = @"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                Environment.NewLine +
                @"""title"": ""停止位""," +
                Environment.NewLine +
                @"""title"": ""AnotherStopBits""," +
                Environment.NewLine +
                @"""type"": ""integer""";
            var en_us_content = jsonSchemaSource.LocalizedJsonSchema("en-us");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                Environment.NewLine +
                @"""title"": ""停止位""," +
                Environment.NewLine +
                @"""title"": ""AnotherStopBits""," +
                Environment.NewLine +
                @"""type"": ""integer""", en_us_content);


            var unknown_local_content = jsonSchemaSource.LocalizedJsonSchema("xx");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                 Environment.NewLine +
                 @"""title"": ""停止位""," +
                 Environment.NewLine +
                 @"""title"": ""AnotherStopBits""," +
                 Environment.NewLine +
                 @"""type"": ""integer""", unknown_local_content);

            var zh_cn_content = jsonSchemaSource.LocalizedJsonSchema("zh-cn");
            Assert.AreEqual(@"""$schema"": ""http://json-schema.org/draft-04/schema""," +
                Environment.NewLine +
                @"""title"": ""停止位""," +
                Environment.NewLine +
                @"""title"": ""AnotherStopBits""," +
                Environment.NewLine +
                @"""type"": ""integer""", zh_cn_content);
        }
    }
}