Skip to content

Commit

Permalink
Add TS generator jsdoc link test
Browse files Browse the repository at this point in the history
  • Loading branch information
jasongin committed Jan 19, 2024
1 parent 438be6e commit 6ce857b
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 6 deletions.
8 changes: 6 additions & 2 deletions src/NodeApi.Generator/TypeDefinitionsGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -975,7 +975,7 @@ private static bool IsExcludedMember(PropertyInfo property)
private static bool IsExcludedMember(MethodBase method)
{
// Exclude "special" methods like property get/set and event add/remove.
if (method.IsSpecialName)
if (method is MethodInfo && method.IsSpecialName)
{
return true;
}
Expand Down Expand Up @@ -1613,7 +1613,11 @@ private static string FormatDocText(XNode? node)
}
else
{
return string.Join(" ", element.Nodes().Select(FormatDocText));
return string.Join(" ", element.Nodes().Select(FormatDocText))
.Replace("} ,", "},")
.Replace("} .", "}.")
.Replace("` ,", "`,")
.Replace("` .", "`.");
}
}

Expand Down
42 changes: 38 additions & 4 deletions test/TypeDefsGeneratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,37 @@ namespace Microsoft.JavaScript.NodeApi.Test;
public class TypeDefsGeneratorTests
{
private static TypeDefinitionsGenerator CreateTypeDefinitionsGenerator(
Dictionary<string, string> docs)
IEnumerable<KeyValuePair<string, string>> docs)
{
return CreateTypeDefinitionsGenerator(docs.Select((pair) =>
new KeyValuePair<string, XElement>(pair.Key, new XElement("summary", pair.Value))));
}

private static TypeDefinitionsGenerator CreateTypeDefinitionsGenerator(
IEnumerable<KeyValuePair<string, XElement>> docs)
{
string ns = typeof(TypeDefsGeneratorTests).FullName + "+";
XDocument docsXml = new(new XElement("root", new XElement("members",
docs.Select((pair) => new XElement("member",
new XAttribute("name", pair.Key.Insert(2, ns)),
new XElement("summary", pair.Value))))));
pair.Value)))));
return new TypeDefinitionsGenerator(
typeof(TypeDefsGeneratorTests).Assembly,
assemblyDoc: docsXml,
referenceAssemblies: new Dictionary<string, Assembly>(),
suppressWarnings: true);
}

private string GenerateTypeDefinition(Type type, Dictionary<string, string> docs)
private string GenerateTypeDefinition(Type type, IDictionary<string, string> docs)
=> CreateTypeDefinitionsGenerator(docs).GenerateTypeDefinition(type).TrimEnd();

private string GenerateMemberDefinition(MemberInfo member, Dictionary<string, string> docs)
private string GenerateMemberDefinition(MemberInfo member, IDictionary<string, string> docs)
=> CreateTypeDefinitionsGenerator(docs).GenerateMemberDefinition(member).TrimEnd();

private string GenerateTypeDefinition(Type type, IDictionary<string, XElement> docs)
=> CreateTypeDefinitionsGenerator(docs).GenerateTypeDefinition(type).TrimEnd();

private string GenerateMemberDefinition(MemberInfo member, IDictionary<string, XElement> docs)
=> CreateTypeDefinitionsGenerator(docs).GenerateMemberDefinition(member).TrimEnd();

private interface SimpleInterface
Expand Down Expand Up @@ -267,6 +280,27 @@ export interface GenericDelegate$$1<T> {
["T:GenericDelegate`1"] = "generic-delegate",
}));
}

[Fact]
public void GenerateJSDocLink()
{
Assert.Equal("""
/** Link to {@link SimpleClass}. */
export interface SimpleInterface {
TestProperty: string;
TestMethod(): string;
}
""".ReplaceLineEndings(),
GenerateTypeDefinition(typeof(SimpleInterface), new Dictionary<string, XElement>
{
["T:SimpleInterface"] = new XElement("summary",
"Link to ",
new XElement("see", new XAttribute("cref", "SimpleClass")),
"."),
}));
}
}

#endif // !NETFRAMEWORK

0 comments on commit 6ce857b

Please sign in to comment.