public void GetInstance_null_returns_current()
        {
            var info = ConsoleFormatInfo.GetInstance(null);

            info.Should()
            .BeSameAs(ConsoleFormatInfo.CurrentInfo);
        }
        public void GetFormat_returns_null()
        {
            var info = new ConsoleFormatInfo();

            info.GetFormat(typeof(NumberFormatInfo))
            .Should()
            .BeNull();
        }
        public void GetFormat_returns_instance()
        {
            var info = new ConsoleFormatInfo();

            info.GetFormat(typeof(ConsoleFormatInfo))
            .Should()
            .BeSameAs(info);
        }
        public void GetInstance_returns_same()
        {
            var info = new ConsoleFormatInfo();

            var instance = ConsoleFormatInfo.GetInstance(info);

            instance.Should().BeSameAs(info);
            instance.Should().NotBeSameAs(ConsoleFormatInfo.CurrentInfo);
        }
        public void GetInstance_calls_GetFormat_on_provider()
        {
            var info     = new ConsoleFormatInfo();
            var provider = new MockFormatProvider()
            {
                TestInfo = info
            };

            var instance = ConsoleFormatInfo.GetInstance(provider);

            instance.Should().BeSameAs(info);
            instance.Should().NotBeSameAs(ConsoleFormatInfo.CurrentInfo);

            provider.GetFormatCallCount.Should().Be(1);
        }
        public void Can_create_modify_and_readonly_format_info()
        {
            var info = new ConsoleFormatInfo();

            info.IsReadOnly.Should().BeFalse();

            info.SupportsAnsiCodes = true;
            info.SupportsAnsiCodes.Should().BeTrue();

            var readonlyInfo = ConsoleFormatInfo.ReadOnly(info);

            readonlyInfo.IsReadOnly.Should().BeTrue();

            Assert.Throws <InvalidOperationException>(() => readonlyInfo.SupportsAnsiCodes = false);
        }
        public void Control_codes_respect_ConsoleFormatInfo(bool supportsAnsiCodes)
        {
            IFormattable code = new AnsiControlCode($"{Ansi.Esc}[s");

            IFormatProvider provider = new ConsoleFormatInfo()
            {
                SupportsAnsiCodes = supportsAnsiCodes
            };
            string output = code.ToString(null, provider);

            if (supportsAnsiCodes)
            {
                output.Should().Contain(Ansi.Esc);
            }
            else
            {
                output.Should().BeEmpty();
            }
        }
        public void Set_current_throws_argnull()
        {
            var info = new ConsoleFormatInfo();

            Assert.Throws <ArgumentNullException>(() => ConsoleFormatInfo.CurrentInfo = null);
        }
 public void ReadOnly_throws_argnull()
 {
     Assert.Throws <ArgumentNullException>(() => ConsoleFormatInfo.ReadOnly(null));
 }