Skip to content

Commit 0646b23

Browse files
Merge pull request #1736 from martincostello/fix-example-clone
Fix copy constructor for arrays and objects
2 parents 0f93f39 + d0829ab commit 0646b23

File tree

4 files changed

+47
-4
lines changed

4 files changed

+47
-4
lines changed

src/Microsoft.OpenApi/Any/OpenApiAnyCloneHelper.cs

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

4-
using System.Reflection;
5-
64
namespace Microsoft.OpenApi.Any
75
{
86
/// <summary>

src/Microsoft.OpenApi/Any/OpenApiArray.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ public OpenApiArray() { }
2727
public OpenApiArray(OpenApiArray array)
2828
{
2929
AnyType = array.AnyType;
30+
foreach (var item in array)
31+
{
32+
Add(OpenApiAnyCloneHelper.CloneFromCopyConstructor(item));
33+
}
3034
}
3135

3236
/// <summary>

src/Microsoft.OpenApi/Any/OpenApiObject.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ public OpenApiObject() { }
2727
public OpenApiObject(OpenApiObject obj)
2828
{
2929
AnyType = obj.AnyType;
30+
foreach (var key in obj.Keys)
31+
{
32+
this[key] = OpenApiAnyCloneHelper.CloneFromCopyConstructor(obj[key]);
33+
}
3034
}
3135

3236
/// <summary>

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

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

4-
using System;
54
using System.Collections.Generic;
65
using System.Globalization;
76
using System.IO;
8-
using System.Linq;
97
using System.Threading.Tasks;
108
using FluentAssertions;
119
using Microsoft.OpenApi.Any;
@@ -485,6 +483,45 @@ public void OpenApiSchemaCopyConstructorSucceeds()
485483
Assert.True(actualSchema.Nullable);
486484
}
487485

486+
public static TheoryData<IOpenApiAny> SchemaExamples()
487+
{
488+
return new()
489+
{
490+
new OpenApiArray() { new OpenApiString("example") },
491+
new OpenApiBinary([0, 1, 2]),
492+
new OpenApiBoolean(true),
493+
new OpenApiByte(42),
494+
new OpenApiDate(new(2024, 07, 19, 12, 34, 56)),
495+
new OpenApiDateTime(new(2024, 07, 19, 12, 34, 56, new(01, 00, 00))),
496+
new OpenApiDouble(42.37),
497+
new OpenApiFloat(42.37f),
498+
new OpenApiInteger(42),
499+
new OpenApiLong(42),
500+
new OpenApiNull(),
501+
new OpenApiObject() { ["prop"] = new OpenApiString("example") },
502+
new OpenApiPassword("secret"),
503+
new OpenApiString("example"),
504+
};
505+
}
506+
507+
[Theory]
508+
[MemberData(nameof(SchemaExamples))]
509+
public void CloningSchemaExamplesWorks(IOpenApiAny example)
510+
{
511+
// Arrange
512+
var schema = new OpenApiSchema
513+
{
514+
Example = example
515+
};
516+
517+
// Act && Assert
518+
var schemaCopy = new OpenApiSchema(schema);
519+
Assert.NotNull(schemaCopy.Example);
520+
521+
// Act && Assert
522+
Assert.Equivalent(schema.Example, schemaCopy.Example);
523+
}
524+
488525
[Fact]
489526
public void CloningSchemaExtensionsWorks()
490527
{

0 commit comments

Comments
 (0)