public void GoodCustomValues()
        {
            string configFile = Files.cr_fine;
            var    ci         = new ConfigInitializer(new string[] { }, configFile);

            ci.SetUp();

            string               expectedLogFile    = CombineWithDefaultLogFolder("./b.txt");
            string               expectedStreamFile = CombineWithDefaultLogFolder("./a.txt");
            LogLevel             expectedLogLevel   = LogLevel.Trace;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Full;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsFalse(ci.Errors.HasErrors);
            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
        }
        public void MissingFields()
        {
            string configFile = Files.cr_missingFields;
            var    ci         = new ConfigInitializer(new string[] { }, configFile);

            ci.SetUp();

            string               expectedLogFile    = defaultLog;
            string               expectedStreamFile = defaultStream;
            LogLevel             expectedLogLevel   = LogLevel.Error;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Incremental;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsFalse(ci.Errors.HasErrors, "has error mismatch");
            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
        }
        public void WrongLogPathType()
        {
            string configFile = Files.cr_wrongLogPathType;
            var    ci         = new ConfigInitializer(new string[] { }, configFile);

            ci.SetUp();

            string               expectedLogFile    = CombineWithDefaultLogFolder("../2");
            string               expectedStreamFile = defaultStream;
            LogLevel             expectedLogLevel   = LogLevel.Error;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Incremental;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsFalse(ci.Errors.HasErrors);
            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
        }
        public void NoFileExtension()
        {
            string configFile = Files.cr_noEnding;
            var    ci         = new ConfigInitializer(new string[] { }, configFile);

            ci.SetUp();

            string               expectedLogFile    = CombineWithDefaultLogFolder("StreamRedirection");
            string               expectedStreamFile = CombineWithDefaultLogFolder("Log");
            LogLevel             expectedLogLevel   = LogLevel.Error;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Incremental;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsFalse(ci.Errors.HasErrors);
            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
        }
        public void SameFiles()
        {
            string configFile = Files.cr_sameFiles;
            var    ci         = new ConfigInitializer(new string[] { }, configFile);

            ci.SetUp();

            string               expectedLogFile    = defaultLog;
            string               expectedStreamFile = defaultStream;
            LogLevel             expectedLogLevel   = LogLevel.Error;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Incremental;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsTrue(ci.Errors.HasErrors);
            Assert.IsTrue(ci.Errors.ErrorMessages.Contains("same files"));
            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
        }
        public void ExceedingLogLevelInArgs()
        {
            string configFile = Files.cr_default;

            var ci = new ConfigInitializer(new string[] { "/loglevel:55" }, configFile);

            ci.SetUp();

            string               expectedLogFile    = defaultLog;
            string               expectedStreamFile = defaultStream;
            LogLevel             expectedLogLevel   = LogLevel.Error;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Incremental;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsTrue(ci.Errors.HasErrors, "Error Mismatch");
            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
        }
        public void MissingCfGFile()
        {
            string configFile = Files.cr_default;

            var ci = new ConfigInitializer(new string[] { "/log:./Logs/a.txt", "/stream:./Logs/b.txt", "/loglevel:0" }, configFile);

            ci.SetUp();

            string               expectedLogFile    = CombineWithDefaultLogFolder("a.txt");
            string               expectedStreamFile = CombineWithDefaultLogFolder("b.txt");
            LogLevel             expectedLogLevel   = LogLevel.Trace;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Incremental;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsFalse(ci.Errors.HasErrors, "Error Mismatch");
            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
        }
        public void NoCfgFile()
        {
            string configFile = CombinePath("/", "abasdfasfdsa.json");
            var    ci         = new ConfigInitializer(new string[] { }, configFile);

            ci.SetUp();

            string               expectedLogFile    = defaultLog;
            string               expectedStreamFile = defaultStream;
            LogLevel             expectedLogLevel   = LogLevel.Error;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Incremental;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsTrue(ci.Errors.HasErrors, "Error Mismatch");
            Assert.IsTrue(ci.Errors.ErrorMessages.Contains("not be located"), "Errormsg not contained");
            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
        }
        public void ExceedingLogLevel()
        {
            string configFile = Files.cr_wrongLogLevel;
            var    ci         = new ConfigInitializer(new string[] { }, configFile);

            ci.SetUp();

            string               expectedLogFile    = defaultLog;
            string               expectedStreamFile = defaultStream;
            LogLevel             expectedLogLevel   = LogLevel.Error;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Incremental;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsTrue(ci.Errors.HasErrors, "error expectation mismatch");
            Assert.IsTrue(ci.Errors.ErrorMessages.Contains("Loglevel must be between"));
            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
        }
        public void IllegalArgument()
        {
            string configFile = Files.cr_default;

            var ci = new ConfigInitializer(new string[] { "/abc:ab" }, configFile);

            ci.SetUp();

            string               expectedLogFile    = defaultLog;
            string               expectedStreamFile = defaultStream;
            LogLevel             expectedLogLevel   = LogLevel.Error;
            TextDocumentSyncKind expectedSyncKind   = TextDocumentSyncKind.Incremental;

            Console.WriteLine(LanguageServerConfig.ToString());

            Assert.IsTrue(ci.Errors.HasErrors, "Error Mismatch");
            Assert.IsTrue(ci.Errors.ErrorMessages.Contains("Unknown switch"));

            Assert.AreEqual(expectedLogFile, LanguageServerConfig.LogFile);
            Assert.AreEqual(expectedStreamFile, LanguageServerConfig.RedirectedStreamFile);
            Assert.AreEqual(expectedSyncKind, LanguageServerConfig.SyncKind);
            Assert.AreEqual(expectedLogLevel, LanguageServerConfig.LogLevel);
        }
 private void ApplyDefaults()
 {
     LanguageServerConfig.ResetDefaults();
 }