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); }
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>"); }
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); }
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(); } } }
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); }
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())); }
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()); }
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); }
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}"); } }
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); } }
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()); }
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 ); }
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); }
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); }
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 ); } }
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); }
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(); }