예제 #1
0
        public void Cells_are_wrapped_in_an_instance_of_MdSingleLineSpan_when_necessary()
        {
            var row = new MdTableRow(new MdTextSpan("Cell 1"));

            row.Add("Cell 2");

            Assert.All(row.Cells, cell => Assert.IsType <MdSingleLineSpan>(cell));
        }
예제 #2
0
        public static MdTableRow AddIf(this MdTableRow row, bool condition, MdSpan cell)
        {
            if (condition)
            {
                row.Add(cell);
            }

            return(row);
        }
예제 #3
0
        public void Initialization_of_MdTableRow_using_constructor()
        {
            _ = new MdTableRow();

            _ = new MdTableRow("Cell 1", "Cell2");
            _ = new MdTableRow(new MdTextSpan("Cell 1"), new MdTextSpan("Cell2"));
            _ = new MdTableRow(new[] { new MdTextSpan("Cell 1"), new MdTextSpan("Cell2") });
            _ = new MdTableRow(new MdCompositeSpan("Cell 1", "Cell 1 continued"));
        }
예제 #4
0
        public void Cells_are_not_wrapped_in_an_instance_of_MdSingleLineSpan_if_span_already_is_a_SingleLineSPan()
        {
            var cell1 = new MdSingleLineSpan(new MdTextSpan("Cell 1"));
            var cell2 = new MdSingleLineSpan(new MdTextSpan("Cell 2"));

            var row = new MdTableRow(cell1);

            row.Add(cell2);

            Assert.All(row.Cells, cell => Assert.True(ReferenceEquals(cell, cell1) || ReferenceEquals(cell, cell2)));
        }
예제 #5
0
        public void DeepEquals_returns_expected_value()
        {
            var instance1 = new MdTableRow("Some Text");
            var instance2 = new MdTableRow("Some Text");
            var instance3 = new MdTableRow("Other", "text");

            Assert.True(instance1.DeepEquals(instance1));
            Assert.True(instance1.DeepEquals(instance2));

            Assert.False(instance1.DeepEquals(null));
            Assert.False(instance1.DeepEquals(instance3));
        }
예제 #6
0
        public void Insert_inserts_a_row_at_the_specifed_index_01()
        {
            // ARRANGE
            var instance = new MdTable(new MdTableRow(MdEmptySpan.Instance));
            var row      = new MdTableRow(MdEmptySpan.Instance);

            // ACT
            instance.Insert(0, row);

            // ASSERT
            Assert.Equal(1, instance.RowCount);
            Assert.Same(row, instance.Rows.Single());
        }
예제 #7
0
        public void MdTableRow_can_be_initialized_with_string_content_01()
        {
            var row = new MdTableRow("Content");

            Assert.Single(row.Cells);

            Assert.IsType <MdSingleLineSpan>(row.Cells.Single());
            var singleLineSpan = (MdSingleLineSpan)row.Cells.Single();

            Assert.IsType <MdTextSpan>(singleLineSpan.Content);
            var textSpan = (MdTextSpan)singleLineSpan.Content;

            Assert.Equal("Content", textSpan.Text);
        }
예제 #8
0
        public void MdTableRow_can_be_initialized_with_string_content_02()
        {
            var row = new MdTableRow("Content1", "Content2");

            Assert.Equal(2, row.ColumnCount);
            Assert.IsType <MdSingleLineSpan>(row[0]);
            Assert.IsType <MdSingleLineSpan>(row[1]);

            var singleLineSpan1 = (MdSingleLineSpan)row[0];
            var singleLineSpan2 = (MdSingleLineSpan)row[1];

            var textSpan1 = Assert.IsType <MdTextSpan>(singleLineSpan1.Content);
            var textSpan2 = Assert.IsType <MdTextSpan>(singleLineSpan2.Content);

            Assert.Equal("Content1", textSpan1.Text);
            Assert.Equal("Content2", textSpan2.Text);
        }
예제 #9
0
        public void Insert_inserts_a_row_at_the_specifed_index_03(int insertAt)
        {
            // ARRANGE
            var instance = new MdTable(new MdTableRow(MdEmptySpan.Instance))
            {
                new MdTableRow(MdEmptySpan.Instance),
                new MdTableRow(MdEmptySpan.Instance)
            };

            var row = new MdTableRow(MdEmptySpan.Instance);

            // ACT
            instance.Insert(insertAt, row);

            // ASSERT
            Assert.Equal(3, instance.RowCount);
            Assert.Same(row, instance.Rows.Skip(insertAt).First());
        }
예제 #10
0
        protected override MdBlock ConvertToBlock()
        {
            MdSpan GetLinkOrEmptySpan(string?text, string uri, bool italic = false)
            {
                return((text == null || String.IsNullOrEmpty(text))
                    ? (MdSpan)MdEmptySpan.Instance
                    : new MdLinkSpan(italic ? new MdEmphasisSpan(text) : (MdSpan)text, uri));
            }

            // only include the "Name" column, if any option has a 'long' name
            var addNameColumn = m_Model.NamedParameters.Any(x => x.HasName) || m_Model.SwitchParameters.Any(x => x.HasName);
            // only include the "Short Name" column if option has a short name
            var addShortNameColumn = m_Model.NamedParameters.Any(x => x.HasShortName) || m_Model.SwitchParameters.Any(x => x.HasShortName);
            // only include the position column if the command has any unnamed parameters
            var addPositionColumn = m_Model.PositionalParameters.Any();
            // only add "Required" column if at least on option or value is mandatory
            var addRequiredColumn = m_Model.NamedParameters.Any(x => x.Required) || m_Model.PositionalParameters.Any(x => x.Required);

            // create empty table with header row
            var headerRow = new MdTableRow();

            headerRow.AddIf(addPositionColumn, "Position");
            headerRow.AddIf(addNameColumn, "Name");
            headerRow.AddIf(addShortNameColumn && !addNameColumn, "Name");
            headerRow.AddIf(addShortNameColumn && addNameColumn, "Short Name");
            headerRow.AddIf(addRequiredColumn, "Required");
            headerRow.Add("Description");

            var table = new MdTable(headerRow);

            // add a row for every positional parameter
            foreach (var positionalParameter in m_Model.PositionalParameters.OrderBy(x => x.Position))
            {
                var link = "#" + m_GetPositionalParameterAnchor(positionalParameter);

                var row = new MdTableRow();

                // add index and link to details anchor
                row.Add(GetLinkOrEmptySpan(positionalParameter.Position.ToString(), link));

                // add name (if a name of the value was specified) and link to details anchor
                row.AddIf(addNameColumn, GetLinkOrEmptySpan(positionalParameter.InformationalName, link, italic: true));

                // if "Name" column was skipped, add the name in the "Short Name" column and link to details anchor,
                // if the name was already added to the name column, add an empty cell
                row.AddIf(addShortNameColumn && !addNameColumn, GetLinkOrEmptySpan(positionalParameter.InformationalName, link, italic: true));
                row.AddIf(addShortNameColumn && addNameColumn, MdEmptySpan.Instance);

                // add value for "Required" column
                row.AddIf(addRequiredColumn, positionalParameter.Required ? "Yes" : "No");

                // add help text to "Description" column
                row.Add(positionalParameter.Description ?? "");

                table.Add(row);
            }

            // Add a row for every named parameter
            foreach (var namedParameter in m_Model.NamedParameters)
            {
                var link = "#" + m_GetNamedParameterAnchor(namedParameter);

                var row = new MdTableRow();

                // add empty cell for position because option has no position
                row.AddIf(addPositionColumn, MdEmptySpan.Instance);

                // if specified, add name and link to details anchor
                row.AddIf(addNameColumn, GetLinkOrEmptySpan(namedParameter.Name, link));

                // if specified, add shot name and link to details anchor
                row.AddIf(addShortNameColumn, GetLinkOrEmptySpan(namedParameter.ShortName?.ToString(), link));

                // add value for "Required" column
                row.AddIf(addRequiredColumn, namedParameter.Required ? "Yes" : "No");

                // add help text to "Description" column
                row.Add(namedParameter.Description ?? "");

                table.Add(row);
            }

            // Add a row for every switch parameter
            foreach (var switchParameter in m_Model.SwitchParameters)
            {
                var link = "#" + m_GetSwitchParameterAnchor(switchParameter);

                var row = new MdTableRow();

                // add empty cell for position because option has no position
                row.AddIf(addPositionColumn, MdEmptySpan.Instance);

                // if specified, add name and link to details anchor
                row.AddIf(addNameColumn, GetLinkOrEmptySpan(switchParameter.Name, link));

                // if specified, add shot name and link to details anchor
                row.AddIf(addShortNameColumn, GetLinkOrEmptySpan(switchParameter.ShortName?.ToString(), link));

                // add value for "Required" column (switch parameters are never required)
                row.AddIf(addRequiredColumn, "No");

                // add help text to "Description" column
                row.Add(switchParameter.Description ?? "");

                table.Add(row);
            }



            return(table);
        }
예제 #11
0
        public void Line_breaks_are_removed_from_cells(string rawValue, string expectedValue)
        {
            var row = new MdTableRow(rawValue);

            Assert.Equal(expectedValue, row.Cells.Single().ToString());
        }
예제 #12
0
        public void Cell_contents_are_escaped(string rawValue, string expectedValue)
        {
            var row = new MdTableRow(rawValue);

            Assert.Equal(expectedValue, row.Cells.Single().ToString());
        }