Skip to content

Commit 8fefc84

Browse files
committed
Clean up code and refactor failing tests
1 parent 483cd7b commit 8fefc84

File tree

15 files changed

+252
-337
lines changed

15 files changed

+252
-337
lines changed

src/Microsoft.OpenApi.Readers/ParseNodes/MapNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ public override JsonNode CreateAny()
204204
{
205205
apiObject.Add(node.Name, node.Value.CreateAny());
206206
}
207-
207+
208208
return apiObject;
209209
}
210210
}

src/Microsoft.OpenApi.Readers/ParseNodes/OpenApiAnyConverter.cs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
using System;
55
using System.Globalization;
66
using System.Text;
7+
using System.Text.Json;
78
using System.Text.Json.Nodes;
9+
using System.Xml.Linq;
810
using Microsoft.OpenApi.Models;
911

1012
namespace Microsoft.OpenApi.Readers.ParseNodes
@@ -24,7 +26,16 @@ public static JsonNode GetSpecificOpenApiAny(JsonNode jsonNode, OpenApiSchema sc
2426
var newArray = new JsonArray();
2527
foreach (var element in jsonArray)
2628
{
27-
newArray.Add(GetSpecificOpenApiAny(element, schema?.Items));
29+
if(element.Parent != null)
30+
{
31+
var newNode = element.Deserialize<JsonNode>();
32+
newArray.Add(GetSpecificOpenApiAny(newNode, schema?.Items));
33+
34+
}
35+
else
36+
{
37+
newArray.Add(GetSpecificOpenApiAny(element, schema?.Items));
38+
}
2839
}
2940

3041
return newArray;
@@ -37,11 +48,28 @@ public static JsonNode GetSpecificOpenApiAny(JsonNode jsonNode, OpenApiSchema sc
3748
{
3849
if (schema?.Properties != null && schema.Properties.TryGetValue(property.Key, out var propertySchema))
3950
{
40-
newObject[property.Key] = GetSpecificOpenApiAny(jsonObject[property.Key], propertySchema);
51+
if (jsonObject[property.Key].Parent != null)
52+
{
53+
var node = jsonObject[property.Key].Deserialize<JsonNode>();
54+
newObject.Add(property.Key, GetSpecificOpenApiAny(node, propertySchema));
55+
}
56+
else
57+
{
58+
newObject.Add(property.Key, GetSpecificOpenApiAny(property.Value, propertySchema));
59+
60+
}
4161
}
4262
else
4363
{
44-
newObject[property.Key] = GetSpecificOpenApiAny(jsonObject[property.Key], schema?.AdditionalProperties);
64+
if (jsonObject[property.Key].Parent != null)
65+
{
66+
var node = jsonObject[property.Key].Deserialize<JsonNode>();
67+
newObject[property.Key] = GetSpecificOpenApiAny(node, schema?.AdditionalProperties);
68+
}
69+
else
70+
{
71+
newObject[property.Key] = GetSpecificOpenApiAny(jsonObject[property.Key], schema?.AdditionalProperties);
72+
}
4573
}
4674
}
4775

src/Microsoft.OpenApi.Readers/ParseNodes/ValueNode.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ public ValueNode(ParsingContext context, JsonNode node) : base(
2020
_node = scalarNode;
2121
}
2222

23-
public override string GetScalarValue() => _node.GetScalarValue();
23+
public override string GetScalarValue()
24+
{
25+
return _node.ToString();
26+
}
2427

2528
/// <summary>
2629
/// Create a <see cref="JsonNode"/>

src/Microsoft.OpenApi.Readers/ParsingContext.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ private static string GetVersion(RootNode rootNode)
117117

118118
if (versionNode != null)
119119
{
120-
return versionNode.GetScalarValue();
120+
return versionNode.GetScalarValue().Replace("\"", "");
121121
}
122122

123123
versionNode = rootNode.Find(new JsonPointer("/swagger"));
124124

125-
return versionNode?.GetScalarValue();
125+
return versionNode?.GetScalarValue().Replace("\"", "");
126126
}
127127

128128
/// <summary>

src/Microsoft.OpenApi.Readers/YamlHelper.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,11 @@ public static string GetScalarValue(this JsonNode node)
2222
//throw new OpenApiException($"Expected scalar at line {node.Start.Line}");
2323
}
2424

25-
return scalarNode.ToJsonString();
25+
return scalarNode.ToString();
2626
}
2727

2828
public static JsonNode ParseJsonString(string yamlString)
2929
{
30-
//var jsonDoc = JsonDocument.Parse(jsonString);
31-
//var node = jsonDoc.RootElement.Deserialize<JsonObject>();
32-
//return node;
33-
3430
var reader = new StringReader(yamlString);
3531
var yamlStream = new YamlStream();
3632
yamlStream.Load(reader);

src/Microsoft.OpenApi/Models/OpenApiSchema.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Globalization;
67
using System.Linq;
78
using System.Text.Json.Nodes;
89
using Microsoft.OpenApi.Helpers;
@@ -422,7 +423,8 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe
422423
writer.WriteOptionalCollection(OpenApiConstants.Required, Required, (w, s) => w.WriteValue(s));
423424

424425
// enum
425-
writer.WriteOptionalCollection(OpenApiConstants.Enum, (IEnumerable<string>)Enum, (nodeWriter, s) => nodeWriter.WriteAny(s));
426+
var enumValues = Enum.Cast<JsonNode>().Select(node => node.ToString());
427+
writer.WriteOptionalCollection(OpenApiConstants.Enum, enumValues, (nodeWriter, s) => nodeWriter.WriteAny(s));
426428

427429
// type
428430
writer.WriteProperty(OpenApiConstants.Type, Type);
@@ -645,7 +647,8 @@ internal void WriteAsItemsProperties(IOpenApiWriter writer)
645647
writer.WriteProperty(OpenApiConstants.MinItems, MinItems);
646648

647649
// enum
648-
writer.WriteOptionalCollection(OpenApiConstants.Enum, (IEnumerable<string>)Enum, (w, s) => w.WriteAny(s));
650+
var enumValues = Enum.Cast<JsonNode>().Select(static node => node.ToString());
651+
writer.WriteOptionalCollection(OpenApiConstants.Enum, enumValues, (w, s) => w.WriteAny(s));
649652

650653
// multipleOf
651654
writer.WriteProperty(OpenApiConstants.MultipleOf, MultipleOf);
@@ -726,7 +729,8 @@ internal void WriteAsSchemaProperties(
726729
writer.WriteOptionalCollection(OpenApiConstants.Required, Required, (w, s) => w.WriteValue(s));
727730

728731
// enum
729-
writer.WriteOptionalCollection(OpenApiConstants.Enum, (IEnumerable<string>)Enum, (w, s) => w.WriteAny(s));
732+
var enumValues = Enum.Cast<JsonNode>().Select(static node => node.ToString());
733+
writer.WriteOptionalCollection(OpenApiConstants.Enum, enumValues, (w, s) => w.WriteAny(s));
730734

731735
// type
732736
writer.WriteProperty(OpenApiConstants.Type, Type);

src/Microsoft.OpenApi/Models/RuntimeExpressionAnyWrapper.cs

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,52 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Text.Json.Nodes;
45
using Microsoft.OpenApi.Expressions;
6+
using Microsoft.OpenApi.Helpers;
57
using Microsoft.OpenApi.Interfaces;
68
using Microsoft.OpenApi.Writers;
79

810
namespace Microsoft.OpenApi.Models
911
{
1012
/// <summary>
11-
/// The wrapper for <see cref="RuntimeExpression"/>
13+
/// The wrapper either for <see cref="JsonNode"/> or <see cref="RuntimeExpression"/>
1214
/// </summary>
1315
public class RuntimeExpressionAnyWrapper : IOpenApiElement
1416
{
15-
//private IOpenApiAny _any;
17+
private JsonNode _any;
1618
private RuntimeExpression _expression;
1719

1820
/// <summary>
1921
/// Parameterless constructor
2022
/// </summary>
21-
public RuntimeExpressionAnyWrapper() {}
23+
public RuntimeExpressionAnyWrapper() { }
2224

2325
/// <summary>
2426
/// Initializes a copy of an <see cref="RuntimeExpressionAnyWrapper"/> object
2527
/// </summary>
2628
public RuntimeExpressionAnyWrapper(RuntimeExpressionAnyWrapper runtimeExpressionAnyWrapper)
2729
{
30+
Any = JsonNodeCloneHelper.Clone(runtimeExpressionAnyWrapper?.Any);
2831
Expression = runtimeExpressionAnyWrapper?.Expression;
2932
}
3033

34+
/// <summary>
35+
/// Gets/Sets the <see cref="JsonNode"/>
36+
/// </summary>
37+
public JsonNode Any
38+
{
39+
get
40+
{
41+
return _any;
42+
}
43+
set
44+
{
45+
_expression = null;
46+
_any = value;
47+
}
48+
}
49+
3150
/// <summary>
3251
/// Gets/Set the <see cref="RuntimeExpression"/>
3352
/// </summary>
@@ -39,6 +58,7 @@ public RuntimeExpression Expression
3958
}
4059
set
4160
{
61+
_any = null;
4262
_expression = value;
4363
}
4464
}
@@ -53,7 +73,11 @@ public void WriteValue(IOpenApiWriter writer)
5373
throw Error.ArgumentNull(nameof(writer));
5474
}
5575

56-
if (_expression != null)
76+
if (_any != null)
77+
{
78+
writer.WriteAny(_any);
79+
}
80+
else if (_expression != null)
5781
{
5882
writer.WriteValue(_expression.Expression);
5983
}

src/Microsoft.OpenApi/Services/OpenApiReferenceResolver.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Microsoft Corporation. All rights reserved.
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

44
using System;
@@ -180,7 +180,6 @@ public override void Visit(OpenApiParameter parameter)
180180
ResolveMap(parameter.Examples);
181181
}
182182

183-
184183
/// <summary>
185184
/// Resolve all references to links
186185
/// </summary>

test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs

Lines changed: 0 additions & 55 deletions
This file was deleted.

test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,12 @@
254254
<EmbeddedResource Include="V3Tests\Samples\OpenApiSecurityScheme\openIdConnectSecurityScheme.yaml">
255255
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
256256
</EmbeddedResource>
257-
<EmbeddedResource Include="V3Tests\Samples\OpenApiWorkspace\TodoComponents.yaml" />
258-
<EmbeddedResource Include="V3Tests\Samples\OpenApiWorkspace\TodoMain.yaml" />
257+
<EmbeddedResource Include="V3Tests\Samples\OpenApiWorkspace\TodoComponents.yaml">
258+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
259+
</EmbeddedResource>
260+
<EmbeddedResource Include="V3Tests\Samples\OpenApiWorkspace\TodoMain.yaml">
261+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
262+
</EmbeddedResource>
259263
<EmbeddedResource Include="V3Tests\Samples\OpenApiXml\basicXml.yaml">
260264
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
261265
</EmbeddedResource>

0 commit comments

Comments
 (0)