Skip to content

Commit cf00a1e

Browse files
Copilotdesjoerd
andcommitted
Fix PR review comments: replace Enum.IsDefined with power-of-2 check and use JsonNode.DeepEquals in tests
Co-authored-by: desjoerd <2460430+desjoerd@users.noreply.github.com>
1 parent f9984c9 commit cf00a1e

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

src/Microsoft.OpenApi/Models/OpenApiSchema.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,9 @@ private static (IList<IOpenApiSchema>? effective, JsonSchemaType? inferredType,
884884
commonType |= schema.Type.GetValueOrDefault() & ~JsonSchemaType.Null;
885885
}
886886

887-
if (System.Enum.IsDefined(commonType))
887+
// Check if commonType is a single flag (power of 2) indicating all schemas share the same type
888+
var isSingleType = commonType != 0 && (commonType & (commonType - 1)) == 0;
889+
if (isSingleType)
888890
{
889891
// Single common type
890892
return (nonNullSchemas, commonType, true);

test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ public async Task SerializeOneOfWithNullAsV3ShouldUseNullableAsync()
814814
schema.SerializeAsV3(writer);
815815
await writer.FlushAsync();
816816

817-
var v3Schema = outputStringWriter.GetStringBuilder().ToString().MakeLineBreaksEnvironmentNeutral();
817+
var v3Schema = outputStringWriter.GetStringBuilder().ToString();
818818

819819
var expectedV3Schema =
820820
"""
@@ -828,10 +828,10 @@ public async Task SerializeOneOfWithNullAsV3ShouldUseNullableAsync()
828828
],
829829
"nullable": true
830830
}
831-
""".MakeLineBreaksEnvironmentNeutral();
831+
""";
832832

833833
// Assert
834-
Assert.Equal(expectedV3Schema, v3Schema);
834+
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
835835
}
836836

837837
[Fact]
@@ -855,7 +855,7 @@ public async Task SerializeOneOfWithNullAndMultipleSchemasAsV3ShouldMarkItAsNull
855855
schema.SerializeAsV3(writer);
856856
await writer.FlushAsync();
857857

858-
var v3Schema = outputStringWriter.GetStringBuilder().ToString().MakeLineBreaksEnvironmentNeutral();
858+
var v3Schema = outputStringWriter.GetStringBuilder().ToString();
859859

860860
var expectedV3Schema =
861861
"""
@@ -870,10 +870,10 @@ public async Task SerializeOneOfWithNullAndMultipleSchemasAsV3ShouldMarkItAsNull
870870
],
871871
"nullable": true
872872
}
873-
""".MakeLineBreaksEnvironmentNeutral();
873+
""";
874874

875875
// Assert
876-
Assert.Equal(expectedV3Schema, v3Schema);
876+
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
877877
}
878878

879879
[Fact]
@@ -903,7 +903,7 @@ public async Task SerializeAnyOfWithNullAsV3ShouldUseNullableAsync()
903903
schema.SerializeAsV3(writer);
904904
await writer.FlushAsync();
905905

906-
var v3Schema = outputStringWriter.GetStringBuilder().ToString().MakeLineBreaksEnvironmentNeutral();
906+
var v3Schema = outputStringWriter.GetStringBuilder().ToString();
907907

908908
var expectedV3Schema =
909909
"""
@@ -921,8 +921,9 @@ public async Task SerializeAnyOfWithNullAsV3ShouldUseNullableAsync()
921921
],
922922
"nullable": true
923923
}
924-
""".MakeLineBreaksEnvironmentNeutral(); // Assert
925-
Assert.Equal(expectedV3Schema, v3Schema);
924+
""";
925+
// Assert
926+
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
926927
}
927928

928929
[Fact]
@@ -946,7 +947,7 @@ public async Task SerializeAnyOfWithNullAndMultipleSchemasAsV3ShouldApplyNullabl
946947
schema.SerializeAsV3(writer);
947948
await writer.FlushAsync();
948949

949-
var v3Schema = outputStringWriter.GetStringBuilder().ToString().MakeLineBreaksEnvironmentNeutral();
950+
var v3Schema = outputStringWriter.GetStringBuilder().ToString();
950951

951952
var expectedV3Schema =
952953
"""
@@ -962,10 +963,10 @@ public async Task SerializeAnyOfWithNullAndMultipleSchemasAsV3ShouldApplyNullabl
962963
],
963964
"nullable": true
964965
}
965-
""".MakeLineBreaksEnvironmentNeutral();
966+
""";
966967

967968
// Assert
968-
Assert.Equal(expectedV3Schema, v3Schema);
969+
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
969970
}
970971

971972
[Fact]
@@ -987,17 +988,17 @@ public async Task SerializeOneOfWithOnlyNullAsV3ShouldJustBeNullableAsync()
987988
schema.SerializeAsV3(writer);
988989
await writer.FlushAsync();
989990

990-
var v3Schema = outputStringWriter.GetStringBuilder().ToString().MakeLineBreaksEnvironmentNeutral();
991+
var v3Schema = outputStringWriter.GetStringBuilder().ToString();
991992

992993
var expectedV3Schema =
993994
"""
994995
{
995996
"nullable": true
996997
}
997-
""".MakeLineBreaksEnvironmentNeutral();
998+
""";
998999

9991000
// Assert
1000-
Assert.Equal(expectedV3Schema, v3Schema);
1001+
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
10011002
}
10021003

10031004
[Fact]
@@ -1020,7 +1021,7 @@ public async Task SerializeOneOfWithNullAsV31ShouldNotChangeAsync()
10201021
schema.SerializeAsV31(writer);
10211022
await writer.FlushAsync();
10221023

1023-
var v31Schema = outputStringWriter.GetStringBuilder().ToString().MakeLineBreaksEnvironmentNeutral();
1024+
var v31Schema = outputStringWriter.GetStringBuilder().ToString();
10241025

10251026
var expectedV31Schema =
10261027
"""
@@ -1034,10 +1035,10 @@ public async Task SerializeOneOfWithNullAsV31ShouldNotChangeAsync()
10341035
}
10351036
]
10361037
}
1037-
""".MakeLineBreaksEnvironmentNeutral();
1038+
""";
10381039

10391040
// Assert
1040-
Assert.Equal(expectedV31Schema, v31Schema);
1041+
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV31Schema), JsonNode.Parse(v31Schema)));
10411042
}
10421043

10431044
[Fact]
@@ -1084,7 +1085,7 @@ public async Task SerializeOneOfWithNullAndRefAsV3ShouldUseNullableAsync()
10841085
schema.SerializeAsV3(writer);
10851086
await writer.FlushAsync();
10861087

1087-
var v3Schema = outputStringWriter.GetStringBuilder().ToString().MakeLineBreaksEnvironmentNeutral();
1088+
var v3Schema = outputStringWriter.GetStringBuilder().ToString();
10881089

10891090
var expectedV3Schema =
10901091
"""
@@ -1097,10 +1098,10 @@ public async Task SerializeOneOfWithNullAndRefAsV3ShouldUseNullableAsync()
10971098
],
10981099
"nullable": true
10991100
}
1100-
""".MakeLineBreaksEnvironmentNeutral();
1101+
""";
11011102

11021103
// Assert
1103-
Assert.Equal(expectedV3Schema, v3Schema);
1104+
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
11041105
}
11051106

11061107
internal class SchemaVisitor : OpenApiVisitorBase

0 commit comments

Comments
 (0)