예제 #1
0
        private MdTable GetDetailsTable()
        {
            // TODO: Type

            var table = new MdTable(new MdTableRow("", ""));

            if (!String.IsNullOrWhiteSpace(m_Model.InformationalName))
            {
                table.Add(new MdTableRow("Informational Name:", m_Model.InformationalName));
            }

            table.Add(new MdTableRow("Position:", m_Model.Position.ToString()));

            table.Add(new MdTableRow("Required:", m_Model.Required ? "Yes" : "No"));

            if (!String.IsNullOrWhiteSpace(m_Model.ValuePlaceHolderName))
            {
                table.Add(new MdTableRow("Value:", m_Model.ValuePlaceHolderName));
            }

            if (m_Model.AcceptedValues != null)
            {
                table.Add(new MdTableRow("Accepted values:", m_Model.AcceptedValues.Select(x => new MdCodeSpan(x)).Join(", ")));
            }

            if (m_Model.DefaultValue != null)
            {
                table.Add(new MdTableRow("Default value:", m_Model.DefaultValue));
            }
            else
            {
                table.Add(new MdTableRow("Default value:", new MdEmphasisSpan("None")));
            }
            return(table);
        }
예제 #2
0
        public void SerializeHtmlTable(MdTable table)
        {
            // Begin table
            m_Writer.WriteLine("<table>");

            // table head
            m_Writer.WriteLine("  <thead>");
            m_Writer.WriteLine("    <tr>");
            foreach (var cell in table.HeaderRow)
            {
                m_Writer.WriteLine($"      <th>{cell.ToString(m_Options)}</th>");
            }
            m_Writer.WriteLine("    </tr>");
            m_Writer.WriteLine("  </thead>");

            // table body
            m_Writer.WriteLine("  <tbody>");
            foreach (var row in table.Rows)
            {
                m_Writer.WriteLine("    <tr>");
                foreach (var cell in row)
                {
                    m_Writer.WriteLine($"      <td>{cell.ToString(m_Options)}</td>");
                }
                m_Writer.WriteLine("    </tr>");
            }
            m_Writer.WriteLine("  </tbody>");

            // End table
            m_Writer.WriteLine("</table>");
        }
예제 #3
0
        private MdTable GetDetailsTable()
        {
            // TODO: Type

            var table = new MdTable(new MdTableRow("", ""));

            if (m_Model.HasName)
            {
                table.Add(new MdTableRow("Name:", m_Model.Name));
            }

            if (m_Model.HasShortName)
            {
                if (!m_Model.HasName)
                {
                    table.Add(new MdTableRow("Name:", m_Model.ShortName));
                }
                else
                {
                    table.Add(new MdTableRow("Short name:", m_Model.ShortName));
                }
            }

            table.Add(new MdTableRow("Position:", new MdEmphasisSpan("None (Switch Parameter)")));

            table.Add(new MdTableRow("Required:", new MdEmphasisSpan("No (Switch Parameter)")));

            table.Add(new MdTableRow("Default value:", new MdCodeSpan("false")));

            return(table);
        }
예제 #4
0
        public void Visit(ListElement listElement)
        {
            // end the current paragraph
            EndParagraph();

            if (listElement.Type == ListType.Table)
            {
                MdTableRow CreateRow(ListItemElement?itemElement)
                {
                    if (itemElement == null)
                    {
                        return(new MdTableRow("", ""));
                    }

                    var term = itemElement.Term.IsEmpty
                        ? MdEmptySpan.Instance
                        : TextBlockToMarkdownConverter.ConvertToSpan(itemElement.Term, m_SpanFactory);

                    var description = itemElement.Description.IsEmpty
                        ? MdEmptySpan.Instance
                        : TextBlockToMarkdownConverter.ConvertToSpan(itemElement.Description, m_SpanFactory);

                    return(new MdTableRow(term, description));
                }

                var table = new MdTable(
                    CreateRow(listElement.ListHeader),
                    listElement.Items.Select(CreateRow)
                    );

                CurrentBlock.Add(table);
            }
            else
            {
                var list = listElement.Type == ListType.Number ? new MdOrderedList() : (MdList) new MdBulletList();

                // add list to current block
                CurrentBlock.Add(list);

                foreach (var listItemElement in listElement.Items)
                {
                    // create a new list item and add it to the list
                    var listItem = new MdListItem();
                    list.Add(listItem);

                    // make the list item the new current block
                    m_Blocks.Push(listItem);

                    // visit list item
                    listItemElement.Accept(this);

                    // end the current paragraph and restore previous current block
                    EndParagraph();
                    m_Blocks.Pop();
                }
            }
        }
예제 #5
0
        public void Insert_throws_expected_exceptions()
        {
            // ARRANGE
            var instance = new MdTable(new MdTableRow(MdEmptySpan.Instance));

            // ACT / ASSERT
            Assert.Throws <ArgumentNullException>(() => instance.Insert(0, null !));
            Assert.Throws <ArgumentOutOfRangeException>(() => instance.Insert(-1, new MdTableRow(MdEmptySpan.Instance)));
            Assert.Throws <ArgumentOutOfRangeException>(() => instance.Insert(2, new MdTableRow(MdEmptySpan.Instance)));
        }
        // todo: Fix this test
        //[Fact]
        public void TestMockingPeopleFromAnonymous()
        {
            var mocker = EntityMocker.Create(new
            {
                PersonId   = default(int?),
                GivenName  = "",
                MiddleName = "",
                FamilyName = "",
                BirthDate  = default(DateTime?),
                Gender     = ""
            });

            var count = 20;

            mocker
            .MockProperty(p => p.PersonId, GetId)
            .MockProperty(p => p.Gender, PersonMocks.Genders)
            .When("M", p => p.GivenName, PersonMocks.MaleGivenNames)
            .When("M", p => p.MiddleName, PersonMocks.MaleMiddleNames)
            .When("F", p => p.GivenName, PersonMocks.FemaleGivenNames)
            .When("F", p => p.MiddleName, PersonMocks.FemaleMiddleNames)
            .MockProperty(p => p.FamilyName, PersonMocks.FamilyNames)
            .MockProperty(p => p.BirthDate, GetBirthDate);

            var people = mocker
                         .CreateAnonymousMocks(count)
                         .ToList()
                         .OrderBy(item => item.Gender)
                         .ThenBy(item => item.GivenName)
                         .ThenBy(item => item.MiddleName)
                         .ThenBy(item => item.FamilyName);

            var readme = new MdDocument();

            readme.H1("People");

            readme.WriteLine("This file contains people from mocking action!:");

            var table = new MdTable
            {
                Header = new MdTableHeader("ID", "Given Name", "Middle Name", "Family Name", "Gender", "Birth Date")
            };

            foreach (var person in people)
            {
                table.Rows.Add(new MdTableRow(person.PersonId.ToString(), person.GivenName, person.MiddleName, person.FamilyName, person.Gender, person.BirthDate.ToString()));
            }

            readme.Write(table);

            File.WriteAllText("C:\\Temp\\CatFactory.SqlServer\\anonymous.entitymocker.md", readme.ToString());

            Assert.True(people.Count() == count);
        }
예제 #7
0
        public void DeepEquals_returns_expected_value()
        {
            var instance1 = new MdTable(new MdTableRow(MdEmptySpan.Instance));
            var instance2 = new MdTable(new MdTableRow(MdEmptySpan.Instance));
            var instance3 = new MdTable(new MdTableRow(MdEmptySpan.Instance), new MdTableRow(new MdTextSpan("Text")));

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

            Assert.False(instance1.DeepEquals(null));
            Assert.False(instance1.DeepEquals(instance3));
            Assert.False(instance1.DeepEquals(new MdParagraph()));
        }
예제 #8
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());
        }
예제 #9
0
        private MdTable GetCommandsTable()
        {
            var table = new MdTable(new MdTableRow("Name", "Description"));

            foreach (var command in m_Model.Commands)
            {
                var commandPage = m_DocumentSet[m_PathProvider.GetPath(command)];

                var link = m_DocumentSet.GetLink(this, commandPage, command.Name);

                table.Add(new MdTableRow(link, command.Description ?? ""));
            }
            return(table);
        }
예제 #10
0
        public void Visit(MdTable table)
        {
            switch (m_Options.TableStyle)
            {
            case MdTableStyle.GFM:
                SerializeGFMTable(table);
                break;

            case MdTableStyle.Html:
                SerializeHtmlTable(table);
                break;

            default:
                throw new ArgumentException($"Unsupported table style: {m_Options.TableStyle}");
            }
        }
예제 #11
0
        private void AddSimpleMembersSection(MdContainerBlock block, string sectionHeading, IEnumerable <SimpleMemberDocumentation> members)
        {
            if (members.Any())
            {
                block.Add(new MdHeading(sectionHeading, 2));

                var table = new MdTable(new MdTableRow("Name", "Description"));
                foreach (var member in members.OrderBy(x => x.Name, StringComparer.Ordinal))
                {
                    table.Add(
                        new MdTableRow(
                            CreateLink(member.MemberId, member.Name),
                            ConvertToSpan(member.Summary)
                            ));
                }
                block.Add(table);
            }
        }
예제 #12
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());
        }
예제 #13
0
        protected void AddOverloadsTableSection(MdContainerBlock block, IEnumerable <TOverload> overloads, int headingLevel)
        {
            var table = new MdTable(new MdTableRow("Signature", "Description"));

            foreach (var overload in overloads)
            {
                // optimization: we know the section we're linking to is on the same page
                // so we can create the link to the anchor without going through PageBase.CreateLink()
                var link = new MdLinkSpan(overload.Signature, "#" + m_Headings.Value[overload.MemberId].Anchor);
                table.Add(
                    new MdTableRow(link, ConvertToSpan(overload.Summary))
                    );
            }

            block.Add(
                new MdHeading("Overloads", headingLevel),
                table
                );
        }
예제 #14
0
        private void AddTypeTable(MdContainerBlock block, string heading, IEnumerable <TypeDocumentation> types)
        {
            if (!types.Any())
            {
                return;
            }

            block.Add(new MdHeading(2, heading));

            var table = new MdTable(new MdTableRow("Name", "Description"));

            foreach (var type in types.OrderBy(x => x.DisplayName, StringComparer.Ordinal))
            {
                table.Add(
                    new MdTableRow(
                        CreateLink(type.MemberId, type.DisplayName),
                        ConvertToSpan(type.Summary)
                        ));
            }
            block.Add(table);
        }
예제 #15
0
        private void AddNestedTypesSection(MdContainerBlock block)
        {
            if (Model.NestedTypes.Count == 0)
            {
                return;
            }

            block.Add(new MdHeading(2, "Nested Types"));

            var table = new MdTable(new MdTableRow("Name", "Description"));

            foreach (var type in Model.NestedTypes.OrderBy(x => x.DisplayName, StringComparer.Ordinal))
            {
                table.Add(
                    new MdTableRow(
                        CreateLink(type.MemberId, type.DisplayName),
                        ConvertToSpan(type.Summary)
                        ));
            }
            block.Add(table);
        }
예제 #16
0
        private void AddOverloadableMembersSection(MdContainerBlock block, string sectionHeading, IEnumerable <OverloadDocumentation> overloads)
        {
            if (overloads.Any())
            {
                var table = new MdTable(new MdTableRow("Name", "Description"));

                foreach (var ctor in overloads.OrderBy(x => x.Signature, StringComparer.Ordinal))
                {
                    table.Add(
                        new MdTableRow(
                            CreateLink(ctor.MemberId, ctor.Signature),
                            ConvertToSpan(ctor.Summary)
                            ));
                }

                block.Add(
                    new MdHeading(sectionHeading, 2),
                    table
                    );
            }
        }
예제 #17
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);
        }
예제 #18
0
        public void SerializeGFMTable(MdTable table)
        {
            // convert table to string
            var tableAsString = new[] { table.HeaderRow }.Union(table.Rows)
            .Select(row =>
                    row.Cells
                    .Select(c => c.ToString(m_Options))
                    .ToArray())
            .ToArray();

            // determine the maximum width of every column
            var columnWidths = new int[table.ColumnCount];

            for (var rowIndex = 0; rowIndex < tableAsString.Length; rowIndex++)
            {
                for (var columnIndex = 0; columnIndex < tableAsString[rowIndex].Length; columnIndex++)
                {
                    columnWidths[columnIndex] = Math.Max(
                        columnWidths[columnIndex],
                        tableAsString[rowIndex][columnIndex].Length);
                }
            }

            // helper functions that writes a single row to the output
            void SaveRow(string[] row)
            {
                var lineBuilder = new StringBuilder();

                lineBuilder.Append("|");
                for (var i = 0; i < columnWidths.Length; i++)
                {
                    // current row has a cell for column i
                    if (i < row.Length)
                    {
                        lineBuilder.Append(" ");
                        lineBuilder.Append(row[i].PadRight(columnWidths[i]));
                        lineBuilder.Append(" ");
                    }
                    // row has less columns than the table => write out empty cell
                    else
                    {
                        lineBuilder.AppendRepeat(' ', columnWidths[i] + 2);
                    }

                    lineBuilder.Append("|");
                }
                m_Writer.WriteLine(lineBuilder.ToString());
            }

            m_Writer.RequestBlankLine();

            // save header row
            SaveRow(tableAsString[0]);

            // write separator between header and table
            var separatorLineBuilder = new StringBuilder();

            separatorLineBuilder.Append("|");
            for (var i = 0; i < columnWidths.Length; i++)
            {
                separatorLineBuilder.Append(' ');
                separatorLineBuilder.AppendRepeat('-', columnWidths[i]);
                separatorLineBuilder.Append(' ');
                separatorLineBuilder.Append("|");
            }
            m_Writer.WriteLine(separatorLineBuilder.ToString());

            // write table rows
            foreach (var row in tableAsString.Skip(1))
            {
                SaveRow(row);
            }

            m_Writer.RequestBlankLine();
        }