public void UseDefaultSettings_IfNoSettings()
        {
            Arrange(Settings.Default, "123");
            File.Delete("settings.xml");

            ConverterProgram.Main();

            Assert.That(log.Logs[0], Does.Match("Файл настроек .* отсутствует."));
            Assert.That(log.Logs.Count, Is.EqualTo(1));
            Assert.IsTrue(File.Exists("text.txt.out"));
        }
        public void Fail_IfSettingslIncorrect()
        {
            File.WriteAllText("settings.xml", "NOT XML AT ALL!");

            ConverterProgram.Main();

            var errorMessage = log.Logs[0];

            Assert.That(errorMessage, Does.Match("Не удалось прочитать файл настроек"));
            Assert.That(errorMessage, Does.Match("XmlException"));
            Assert.That(log.Logs.Count, Is.EqualTo(1));
        }
        public void FailOn(string input)
        {
            Arrange(Settings.Default, input);

            ConverterProgram.Main();

            var errorMessage = log.Logs[0];

            Assert.That(errorMessage, Does.Not.Match("AggregateException"));
            Assert.That(errorMessage, Does.Match("Некорректная строка"));
            Assert.AreEqual(1, log.Logs.Count);
        }
        public void ConvertFast(string input)
        {
            #region warm_up
            ConverterProgram.ConvertLine(input);
            DateTime.TryParse(input, out var d1);
            #endregion

            var time  = Measure(input, s => DateTime.TryParse(s, out var d) ? d.ToString() : s);
            var time2 = Measure(input, ConverterProgram.ConvertLine);
            Console.WriteLine(time);
            Console.WriteLine(time2);
            Assert.Less(time2.TotalMilliseconds, 10 * time.TotalMilliseconds, "ConvertLine is too slow! (more than 10 times slower than just DateTime.TryParse)");
        }
        public void Fail_WhenNoFile()
        {
            Arrange(Settings.Default, "123");
            var filename = Guid.NewGuid().ToString();

            ConverterProgram.Main(filename);

            var errorMessage = log.Logs[0];

            Assert.That(errorMessage, Does.Match($"Не удалось сконвертировать {filename}"));
            Assert.That(errorMessage, Does.Match("FileNotFoundException"));
            Assert.AreEqual(1, log.Logs.Count);
        }
        public void UseDefaultSettings_IfNoSettings()
        {
            Arrange(Settings.Default, "123");
            File.Delete("settings.xml");

            ConverterProgram.Main();

            //Должно быть понятное предупреждение:
            Assert.That(log.Logs[0], Does.Match("Файл настроек .* отсутствует."));
            Assert.That(log.Logs.Count, Is.EqualTo(1));
            //Но программа должна отработать с настройками по умолчанию:
            Assert.IsTrue(File.Exists("text.txt.out"));
        }
        public void Convert(string sourceCulture, string input)
        {
            Arrange(
                new Settings {
                SourceCultureName = sourceCulture, Verbose = false
            },
                input
                );

            ConverterProgram.Main("text.txt");

            Assert.IsTrue(File.Exists("text.txt.out"));
            Assert.IsEmpty(log.Logs);
        }
        public void FailOn(string input)
        {
            Arrange(Settings.Default, input);

            ConverterProgram.Main();

            // Не должно быть трэша:
            var errorMessage = log.Logs[0];

            Assert.That(errorMessage, Does.Not.Match("AggregateException"));
            // Должны быть подробности про ошибку формата:
            Assert.That(errorMessage, Does.Match("Некорректная строка"));
            Assert.AreEqual(1, log.Logs.Count);
        }
        public void Fail_IfSettingslIncorrect()
        {
            File.WriteAllText("settings.xml", "NOT XML AT ALL!");

            ConverterProgram.Main();

            var errorMessage = log.Logs[0];

            // должно быть понятное сообщение:
            Assert.That(errorMessage, Does.Match("Не удалось прочитать файл настроек"));
            // и технические подробности:
            Assert.That(errorMessage, Does.Match("XmlException"));
            Assert.That(log.Logs.Count, Is.EqualTo(1));
        }