Skip to content

Commit

Permalink
chore: add ManagedReference YAML roundtrip tests
Browse files Browse the repository at this point in the history
  • Loading branch information
filzrev committed Sep 27, 2024
1 parent 19e7a97 commit 750bb7d
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 7 deletions.
4 changes: 3 additions & 1 deletion src/Docfx.Common/Json/JsonUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,11 @@ private static bool IsSupported()
switch (fullName)
{
case "Docfx.Build.Engine.XRefMap":
case "Docfx.DataContracts.ManagedReference.PageViewModel":
return true;

case "Docfx.DataContracts.ManagedReference.PageViewModel":
return true; // TODO: Need to support ExtensionData

// Intermediate types for tests. it's expected to be removed later (And return true by default).
case "Docfx.Plugins.MarkdownServiceProperties":
return true;
Expand Down
20 changes: 20 additions & 0 deletions src/Docfx.DataContracts.Common/JTokenConverter.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Reflection;
using System.Text.Json;
using Docfx.Common;
using Newtonsoft.Json.Linq;

namespace Docfx.DataContracts.Common;
Expand All @@ -18,6 +21,23 @@ public static T Convert<T>(object obj)
{
return jToken.ToObject<T>();
}


var type = typeof(T);

// Try to convert `List<object>` to T (`ObjectToInferredTypesConverter`)
// Currently `ObjectToInferredTypesConverter` convert item to List<object>. So it need to convert type.
if (obj is List<object> list
&& type.GetTypeInfo().IsGenericType
&& type.GetGenericTypeDefinition() == typeof(List<>))
{
// TODO: performance optimization.
var json = JsonUtility.Serialize(list);
var result = JsonUtility.Deserialize<T>(new StringReader(json));
return result;
}


throw new InvalidCastException();
}
}
14 changes: 12 additions & 2 deletions src/Docfx.DataContracts.Common/ReferenceViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,17 +86,27 @@ public class ReferenceViewModel
[YamlIgnore]
[Newtonsoft.Json.JsonExtensionData]
[System.Text.Json.Serialization.JsonExtensionData]
[System.Text.Json.Serialization.JsonInclude]
[UniqueIdentityReferenceIgnore]
[MarkdownContentIgnore]
public CompositeDictionary AdditionalJson =>
CompositeDictionary
public CompositeDictionary AdditionalJson
{
get
{
return CompositeDictionary
.CreateBuilder()
.Add(Constants.ExtensionMemberPrefix.Name, NameInDevLangs, JTokenConverter.Convert<string>)
.Add(Constants.ExtensionMemberPrefix.NameWithType, NameWithTypeInDevLangs, JTokenConverter.Convert<string>)
.Add(Constants.ExtensionMemberPrefix.FullName, FullNameInDevLangs, JTokenConverter.Convert<string>)
.Add(Constants.ExtensionMemberPrefix.Spec, Specs, JTokenConverter.Convert<List<SpecViewModel>>)
.Add(string.Empty, Additional)
.Create();
}
private init
{
// init or getter is required for deserialize data with System.Text.Json.
}
}

public ReferenceViewModel Clone()
{
Expand Down
14 changes: 12 additions & 2 deletions src/Docfx.Dotnet/ManagedReference/Models/ItemViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -378,14 +378,24 @@ public string FullNameForVB
[YamlIgnore]
[Newtonsoft.Json.JsonExtensionData]
[System.Text.Json.Serialization.JsonExtensionData]
[System.Text.Json.Serialization.JsonInclude]
[UniqueIdentityReferenceIgnore]
[MarkdownContentIgnore]
public IDictionary<string, object> ExtensionData =>
CompositeDictionary
public IDictionary<string, object> ExtensionData
{
get
{
return CompositeDictionary
.CreateBuilder()
.Add(Constants.ExtensionMemberPrefix.Name, Names, JTokenConverter.Convert<string>)
.Add(Constants.ExtensionMemberPrefix.NameWithType, NamesWithType, JTokenConverter.Convert<string>)
.Add(Constants.ExtensionMemberPrefix.FullName, FullNames, JTokenConverter.Convert<string>)
.Add(string.Empty, Metadata)
.Create();
}
private init
{
// init or getter is required for deserialize data with System.Text.Json.
}
}
}
14 changes: 12 additions & 2 deletions src/Docfx.Dotnet/ManagedReference/Models/SyntaxDetailViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,21 @@ public string ContentForVB
[YamlIgnore]
[Newtonsoft.Json.JsonExtensionData]
[System.Text.Json.Serialization.JsonExtensionData]
[System.Text.Json.Serialization.JsonInclude]
[UniqueIdentityReferenceIgnore]
[MarkdownContentIgnore]
public IDictionary<string, object> ExtensionData =>
CompositeDictionary
public IDictionary<string, object> ExtensionData
{
get
{
return CompositeDictionary
.CreateBuilder()
.Add(Constants.ExtensionMemberPrefix.Content, Contents, JTokenConverter.Convert<string>)
.Create();
}
private init
{
// init or getter is required for deserialize data with System.Text.Json.
}
}
}
3 changes: 3 additions & 0 deletions test/docfx.Tests/Api.verified.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2503,6 +2503,7 @@ public ReferenceViewModel() { }
[Docfx.DataContracts.Common.UniqueIdentityReferenceIgnore]
[Newtonsoft.Json.JsonExtensionData]
[System.Text.Json.Serialization.JsonExtensionData]
[System.Text.Json.Serialization.JsonInclude]
[YamlDotNet.Serialization.YamlIgnore]
public Docfx.Common.CompositeDictionary AdditionalJson { get; }
[Newtonsoft.Json.JsonProperty("commentId")]
Expand Down Expand Up @@ -2877,6 +2878,7 @@ public ItemViewModel() { }
[Docfx.DataContracts.Common.UniqueIdentityReferenceIgnore]
[Newtonsoft.Json.JsonExtensionData]
[System.Text.Json.Serialization.JsonExtensionData]
[System.Text.Json.Serialization.JsonInclude]
[YamlDotNet.Serialization.YamlIgnore]
public System.Collections.Generic.IDictionary<string, object> ExtensionData { get; }
[Docfx.Common.EntityMergers.MergeOption(Docfx.Common.EntityMergers.MergeOption.Ignore)]
Expand Down Expand Up @@ -3152,6 +3154,7 @@ public SyntaxDetailViewModel() { }
[Docfx.DataContracts.Common.UniqueIdentityReferenceIgnore]
[Newtonsoft.Json.JsonExtensionData]
[System.Text.Json.Serialization.JsonExtensionData]
[System.Text.Json.Serialization.JsonInclude]
[YamlDotNet.Serialization.YamlIgnore]
public System.Collections.Generic.IDictionary<string, object> ExtensionData { get; }
[Newtonsoft.Json.JsonProperty("parameters")]
Expand Down

0 comments on commit 750bb7d

Please sign in to comment.