コード例 #1
0
        public void SimpleUsage()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append("Hello");
            builder.Append(", world");

            builder.ToString().Should().Be("Hello, world");
        }
コード例 #2
0
        public void AppendingMultipleMultistrings()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append("Foo");
            builder.Append(CreateCMS(", bar", ", baz!"));

            builder.ToString().Should().Be("Foo, bar, baz!");
        }
コード例 #3
0
        public void AppendingMultipleStrings()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(new ColoredString[] { "Hello, ", "world" });

            builder.ToString().Should().Be("Hello, world");
        }
コード例 #4
0
        public void TestAppendingZeroCharsHasNoEffect()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyChar, 0);

            builder.ShouldBeEmpty();
        }
コード例 #5
0
        public void TestAppendingBareStringYieldsColorlessMultistring()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyString);

            builder.ShouldProduce(new ColoredString(anyString, null, null));
        }
コード例 #6
0
        public void TestRemovingAllCharsLeavesEmptyBuilder()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Remove(0, builder.Length);
            builder.ShouldBeEmpty();
        }
コード例 #7
0
        public void TestInsertingAfterEndOfStringThrows()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Invoking(b => b.Insert(builder.Length + 1, anyChar))
            .Should().Throw <ArgumentOutOfRangeException>();
        }
コード例 #8
0
        public void TestRemovingZeroLengthPreservesBuilderContent()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Remove(0, 0);

            builder.ShouldProduce(anyArrayOfMultipleColoredStrings);
        }
コード例 #9
0
        public void TestTruncationToTooLongLengthThrows()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            Action truncate = () => builder.Truncate(builder.Length + 1);

            truncate.Should().Throw <ArgumentOutOfRangeException>();
        }
コード例 #10
0
        public void TestTruncationToZeroLengthDropsContent()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Truncate(0);

            builder.ShouldBeEmpty();
        }
コード例 #11
0
        public void TestClearingNonEmptyBuilderDropsAllContent()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Clear();

            builder.ShouldBeEmpty();
        }
コード例 #12
0
        public void TestAppendingMultipleCharsAppendsSingleColorlessString()
        {
            const int anyCharCount = 3;

            var builder = new ColoredMultistringBuilder();

            builder.Append(anyChar, anyCharCount);

            builder.ShouldProduce(new ColoredString(new string(anyChar, anyCharCount)));
        }
コード例 #13
0
        public void TestCopyToThrowsWhenOutputBufferTooSmall()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            char[] buffer = new char[1];

            builder.Invoking(b => b.CopyTo(0, buffer, 0, builder.Length))
            .Should().Throw <ArgumentOutOfRangeException>();
        }
コード例 #14
0
        public void TestStringInsertionAtStartOfBuilder()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Insert(0, anyString);

            builder.ShouldProduce(
                new ColoredString[] { anyString }.Concat(anyArrayOfMultipleColoredStrings));
        }
コード例 #15
0
        public void TestStringInsertionAtEndOfBuilder()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Insert(builder.Length, anyString);

            builder.ShouldProduce(
                anyArrayOfMultipleColoredStrings.Concat(new ColoredString[] { anyString }));
        }
コード例 #16
0
        public void TestRemovingAcrossPieces()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Remove(1, builder.Length - 2);
            builder.ShouldProduce(
                anyArrayOfMultipleColoredStrings[0].Substring(0, 1),
                anyArrayOfMultipleColoredStrings.Last().Substring(anyArrayOfMultipleColoredStrings.Last().Length - 1));
        }
コード例 #17
0
        public void TestRemoveThrowsOnTooLargeCount()
        {
            const int anyValidStartIndex = 0;

            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Invoking(b => b.Remove(anyValidStartIndex, builder.Length + 1))
            .Should().Throw <ArgumentOutOfRangeException>();
        }
コード例 #18
0
        public void TestAppendingMultistringAddsItsPieces()
        {
            var anyColoredStrings = anyArrayOfMultipleColoredStrings;
            var anyMultistring    = new ColoredMultistring(anyColoredStrings);

            var builder = new ColoredMultistringBuilder();

            builder.Append(anyMultistring);

            builder.ShouldProduce(anyMultistring.Content);
        }
コード例 #19
0
        public void TestAppendingMultiplePiecesInOneOperationYieldsSameAsMultipleAppends()
        {
            var anyStrings        = anyArrayOfMultipleStrings;
            var mergedString      = string.Join(string.Empty, anyStrings);
            var anyColoredStrings = anyArrayOfMultipleColoredStrings;

            var builder = new ColoredMultistringBuilder();

            builder.Append(anyColoredStrings);

            builder.ShouldProduce(anyColoredStrings);
        }
コード例 #20
0
        public void TestTruncationThrowsOnNegativeLength()
        {
            const int anyNegativeLength = -1;

            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            Action truncate = () => builder.Truncate(anyNegativeLength);

            truncate.Should().Throw <ArgumentOutOfRangeException>();
        }
コード例 #21
0
        public void TestIndexSetOperationThrowsOnTooLargeIndex()
        {
            var anyColoredString = AnyColoredString();

            var builder = new ColoredMultistringBuilder();

            builder.Append(anyColoredString);

            Action readOp = () => { builder[anyColoredString.Length] = anyChar; };

            readOp.Should().Throw <ArgumentOutOfRangeException>();
        }
コード例 #22
0
        public void TestStringInsertionInMiddleOfPieceWithSameColor()
        {
            var cs = new ColoredString("abc");

            var builder = new ColoredMultistringBuilder();

            builder.Append(cs);

            builder.Insert(1, "de");

            builder.ShouldProduce("adebc");
        }
コード例 #23
0
        public void TestTruncationTrimsContentFromLastPiece()
        {
            var anyFirstCs  = AnyColoredString("ab");
            var anySecondCs = AnyColoredString("cde");

            var builder = new ColoredMultistringBuilder();

            builder.Append(new[] { anyFirstCs, anySecondCs });

            builder.Truncate(3);
            builder.ShouldProduce(
                anyFirstCs,
                anySecondCs.WithContent("c"));
        }
コード例 #24
0
        private ParameterEntry GetEnumValueInfo(IArgumentValue value)
        {
            var syntaxBuilder = new ColoredMultistringBuilder();

            if (_options.Arguments.ShortName == ArgumentShortNameHelpMode.IncludeWithLongName &&
                !string.IsNullOrEmpty(value.ShortName))
            {
                syntaxBuilder.Append(new ColoredString(value.ShortName, _options.Arguments?.ArgumentNameColor));
                syntaxBuilder.Append(", ");
            }

            syntaxBuilder.Append(new ColoredString(value.DisplayName, _options.Arguments?.ArgumentNameColor));

            var descBuilder = new ColoredMultistringBuilder();

            if (!string.IsNullOrEmpty(value.Description))
            {
                descBuilder.Append(value.Description);
            }

            if (_options.Arguments.ShortName == ArgumentShortNameHelpMode.AppendToDescription &&
                !string.IsNullOrEmpty(value.ShortName))
            {
                descBuilder.Append(" [");
                descBuilder.Append(new ColoredString(Strings.UsageInfoShortForm, _options.Arguments.MetadataColor));
                descBuilder.Append(" ");
                descBuilder.Append(new ColoredString(value.ShortName, _options.Arguments?.ArgumentNameColor));
                descBuilder.Append("]");
            }

            return(new ParameterEntry
            {
                Syntax = syntaxBuilder.ToMultistring(),
                Description = descBuilder.ToMultistring(),
                InlineEnumEntries = null
            });
        }
コード例 #25
0
        private IEnumerable <IEnumerable <ColoredMultistring> > FormatParameterEntriesInOneColumn(
            IReadOnlyList <ParameterEntry> entries) =>
        entries.Select(e =>
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(e.Syntax);

            if (!e.Description.IsEmpty())
            {
                builder.Append(" - ");
                builder.Append(e.Description);
            }

            IEnumerable <ColoredMultistring> composed = new[] { builder.ToMultistring() };

            if (e.InlineEnumEntries != null)
            {
                if (_options.Arguments.BlankLinesBetweenArguments > 0)
                {
                    var insertion = new[]
                    {
                        new ColoredMultistring(
                            Enumerable.Repeat(new ColoredString(Environment.NewLine), _options.Arguments.BlankLinesBetweenArguments))
                    };

                    composed = composed.Concat(insertion);
                }

                // TODO: Let section hanging indent override.
                var indent = new string(' ', _options.SectionEntryHangingIndentWidth);
                composed   = composed.Concat(e.InlineEnumEntries.Select(iee => indent + iee));
            }

            return(composed);
        });
コード例 #26
0
        public void TestCopyToExtractsCorrectCharacters()
        {
            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            char[] buffer = new char[8];
            for (var i = 0; i < buffer.Length; ++i)
            {
                buffer[i] = ' ';
            }

            builder.CopyTo(1, buffer, 3, 5);
            buffer.Should().Equal(new[] { ' ', ' ', ' ', 'e', 'l', 'l', 'o', ':', });
        }
コード例 #27
0
        public void TestStringInsertionInMiddleOfPieceWithDifferentColor()
        {
            var cs = AnyColoredString("abc");

            var builder = new ColoredMultistringBuilder();

            builder.Append(cs);

            builder.Insert(1, "de");

            builder.ShouldProduce(
                cs.Transform(_ => "a"),
                "de",
                cs.Transform(_ => "bc"));
        }
コード例 #28
0
        public void TestCharInsertionInMiddleOfPieceWithDifferentColor()
        {
            var cs = AnyColoredString("abc");

            var builder = new ColoredMultistringBuilder();

            builder.Append(cs);

            builder.Insert(1, 'x');

            builder.ShouldProduce(
                cs.WithContent("a"),
                new ColoredString("x"),
                cs.WithContent("bc"));
        }
コード例 #29
0
        public void TestRemoveThrowsOnNegativeIndexOrCount()
        {
            const int anyNegativeIndex   = -1;
            const int anyCount           = 1;
            const int anyValidStartIndex = 0;

            var builder = new ColoredMultistringBuilder();

            builder.Append(anyArrayOfMultipleColoredStrings);

            builder.Invoking(b => b.Remove(anyNegativeIndex, anyCount))
            .Should().Throw <ArgumentOutOfRangeException>();

            builder.Invoking(b => b.Remove(anyValidStartIndex, anyNegativeIndex))
            .Should().Throw <ArgumentOutOfRangeException>();
        }
コード例 #30
0
        public void TestIterativelyAppendingMultiplePiecesWithSameColorMergesStrings()
        {
            var anyStrings        = anyArrayOfMultipleStrings;
            var mergedString      = string.Join(string.Empty, anyStrings);
            var anyColoredStrings = anyArrayOfMultipleColoredStrings;

            var builder = new ColoredMultistringBuilder();

            foreach (var cs in anyColoredStrings)
            {
                builder.Append(cs);
            }

            builder.Length.Should().Be(mergedString.Length);
            builder.ToString().Should().Be(mergedString);
            builder.ShouldProduce(anyColoredStrings);
        }