Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions src/Microsoft.OpenApi/Services/OpenApiAnyComparer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

using System;
using System.IO;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Writers;

namespace Microsoft.OpenApi.Services
{
/// <summary>
/// Defines behavior for comparing properties of <see cref="IOpenApiAny"/>.
/// </summary>
public class OpenApiAnyComparer : OpenApiComparerBase<IOpenApiAny>
{
/// <summary>
/// Executes comparision against source and target <see cref="IOpenApiAny"/>.
/// </summary>
/// <param name="source">The source.</param>
/// <param name="target">The target.</param>
/// <param name="comparisonContext">Context under which to compare the source and target.</param>
public override void Compare(
IOpenApiAny source,
IOpenApiAny target,
ComparisonContext comparisonContext)
{
if (source == null && target == null)
{
return;
}

if (source == null || target == null)
{
comparisonContext.AddOpenApiDifference(
new OpenApiDifference
{
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Update,
SourceValue = source,
TargetValue = target,
OpenApiComparedElementType = typeof(IOpenApiAny),
Pointer = comparisonContext.PathString
});

return;
}

var sourceStringWriter = new StringWriter();
var sourceWriter = new OpenApiJsonWriter(sourceStringWriter);

source.Write(sourceWriter, OpenApiSpecVersion.OpenApi3_0);
var sourceValue = sourceStringWriter.GetStringBuilder().ToString();

var targetStringWriter = new StringWriter();
var targetWriter = new OpenApiJsonWriter(targetStringWriter);

target.Write(targetWriter, OpenApiSpecVersion.OpenApi3_0);
var targetValue = targetStringWriter.GetStringBuilder().ToString();

if (string.Compare(sourceValue, targetValue, StringComparison.InvariantCulture) != 0)
{
comparisonContext.AddOpenApiDifference(new OpenApiDifference
{
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Update,
OpenApiComparedElementType = typeof(IOpenApiAny),
SourceValue = source,
TargetValue = target,
Pointer = comparisonContext.PathString
});
}
}
}
}
6 changes: 5 additions & 1 deletion src/Microsoft.OpenApi/Services/OpenApiComparerFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using System;
using System.Collections.Generic;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;

namespace Microsoft.OpenApi.Services
Expand Down Expand Up @@ -55,7 +56,10 @@ public class OpenApiComparerFactory
{typeof(IList<OpenApiTag>), new OpenApiOrderedListComparer<OpenApiTag>()},
{typeof(OpenApiExternalDocs), new OpenApiExternalDocsComparer()},
{typeof(OpenApiTag), new OpenApiTagComparer()},
{typeof(OpenApiSecurityScheme), new OpenApiSecuritySchemeComparer()}
{typeof(OpenApiSecurityScheme), new OpenApiSecuritySchemeComparer()},
{typeof(OpenApiExample), new OpenApiExampleComparer()},
{typeof(IDictionary<string, OpenApiExample>), new OpenApiDictionaryComparer<OpenApiExample>()},
{typeof(IOpenApiAny), new OpenApiAnyComparer()}
};

private readonly Dictionary<Type, object> _typeToComparerMap = new Dictionary<Type, object>();
Expand Down
9 changes: 7 additions & 2 deletions src/Microsoft.OpenApi/Services/OpenApiComponentsComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,15 @@ public override void Compare(
.GetComparer<IDictionary<string, OpenApiSecurityScheme>>()
.Compare(sourceComponents.SecuritySchemes, targetComponents.SecuritySchemes, comparisonContext));

// To Do compare Examples
WalkAndCompare(
comparisonContext,
OpenApiConstants.Examples,
() => comparisonContext
.GetComparer<IDictionary<string, OpenApiExample>>()
.Compare(sourceComponents.Examples, targetComponents.Examples, comparisonContext));

// To Do compare Links
// To Do compare Callbacks
// To Do compare Extensions
}
}
}
2 changes: 0 additions & 2 deletions src/Microsoft.OpenApi/Services/OpenApiEncodingComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,6 @@ public override void Compare(
() => comparisonContext
.GetComparer<IDictionary<string, OpenApiHeader>>()
.Compare(sourceEncoding.Headers, targetEncoding.Headers, comparisonContext));

// To Do Compare Extensions
}
}
}
65 changes: 65 additions & 0 deletions src/Microsoft.OpenApi/Services/OpenApiExampleComparer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;

namespace Microsoft.OpenApi.Services
{
/// <summary>
/// Defines behavior for comparing properties of <see cref="OpenApiExample"/>.
/// </summary>
public class OpenApiExampleComparer : OpenApiComparerBase<OpenApiExample>
{
/// <summary>
/// Executes comparision against source and target <see cref="OpenApiExample"/>.
/// </summary>
/// <param name="sourceExample">The source.</param>
/// <param name="targetExample">The target.</param>
/// <param name="comparisonContext">Context under which to compare the source and target.</param>
public override void Compare(
OpenApiExample sourceExample,
OpenApiExample targetExample,
ComparisonContext comparisonContext)
{
if (sourceExample == null && targetExample == null)
{
return;
}

if (sourceExample == null || targetExample == null)
{
comparisonContext.AddOpenApiDifference(
new OpenApiDifference
{
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Update,
SourceValue = sourceExample,
TargetValue = targetExample,
OpenApiComparedElementType = typeof(OpenApiExample),
Pointer = comparisonContext.PathString
});

return;
}

new OpenApiReferenceComparer<OpenApiExample>()
.Compare(sourceExample.Reference, targetExample.Reference, comparisonContext);

WalkAndCompare(comparisonContext, OpenApiConstants.Description,
() => Compare(sourceExample.Description, targetExample.Description, comparisonContext));

WalkAndCompare(comparisonContext, OpenApiConstants.Summary,
() => Compare(sourceExample.Summary, targetExample.Summary, comparisonContext));

WalkAndCompare(comparisonContext, OpenApiConstants.ExternalValue,
() => Compare(sourceExample.ExternalValue, targetExample.ExternalValue, comparisonContext));

WalkAndCompare(
comparisonContext,
OpenApiConstants.Value,
() => comparisonContext
.GetComparer<IOpenApiAny>()
.Compare(sourceExample.Value, targetExample.Value, comparisonContext));
}
}
}
17 changes: 14 additions & 3 deletions src/Microsoft.OpenApi/Services/OpenApiHeaderComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT license.

using System.Collections.Generic;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;

namespace Microsoft.OpenApi.Services
Expand Down Expand Up @@ -104,9 +105,19 @@ public override void Compare(
.GetComparer<OpenApiSchema>()
.Compare(sourceHeader.Schema, targetHeader.Schema, comparisonContext));

// To do compare example
// To do compare examples
// To do compare extensions
WalkAndCompare(
comparisonContext,
OpenApiConstants.Examples,
() => comparisonContext
.GetComparer<IDictionary<string, OpenApiExample>>()
.Compare(sourceHeader.Examples, targetHeader.Examples, comparisonContext));

WalkAndCompare(
comparisonContext,
OpenApiConstants.Example,
() => comparisonContext
.GetComparer<IOpenApiAny>()
.Compare(sourceHeader.Example, targetHeader.Example, comparisonContext));
}
}
}
19 changes: 15 additions & 4 deletions src/Microsoft.OpenApi/Services/OpenApiMediaTypeComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT license.

using System.Collections.Generic;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;

namespace Microsoft.OpenApi.Services
Expand Down Expand Up @@ -47,7 +48,7 @@ public override void Compare(
OpenApiConstants.Schema,
() => comparisonContext
.GetComparer<OpenApiSchema>()
.Compare( sourceMediaType.Schema, targetMediaType.Schema, comparisonContext ) );
.Compare(sourceMediaType.Schema, targetMediaType.Schema, comparisonContext));

WalkAndCompare(
comparisonContext,
Expand All @@ -56,9 +57,19 @@ public override void Compare(
.GetComparer<IDictionary<string, OpenApiEncoding>>()
.Compare(sourceMediaType.Encoding, sourceMediaType.Encoding, comparisonContext));

// To Do Compare Example
// To Do Compare Examples
// To Do Compare Extensions
WalkAndCompare(
comparisonContext,
OpenApiConstants.Examples,
() => comparisonContext
.GetComparer<IDictionary<string, OpenApiExample>>()
.Compare(sourceMediaType.Examples, targetMediaType.Examples, comparisonContext));

WalkAndCompare(
comparisonContext,
OpenApiConstants.Example,
() => comparisonContext
.GetComparer<IOpenApiAny>()
.Compare(sourceMediaType.Example, targetMediaType.Example, comparisonContext));
}
}
}
16 changes: 14 additions & 2 deletions src/Microsoft.OpenApi/Services/OpenApiParameterComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT license.

using System.Collections.Generic;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;

namespace Microsoft.OpenApi.Services
Expand Down Expand Up @@ -86,8 +87,19 @@ public override void Compare(
.GetComparer<OpenApiSchema>()
.Compare(sourceParameter.Schema, targetParameter.Schema, comparisonContext));

// To Do Compare Examples
// To Do Compare parameter as IOpenApiExtensible
WalkAndCompare(
comparisonContext,
OpenApiConstants.Examples,
() => comparisonContext
.GetComparer<IDictionary<string, OpenApiExample>>()
.Compare(sourceParameter.Examples, targetParameter.Examples, comparisonContext));

WalkAndCompare(
comparisonContext,
OpenApiConstants.Example,
() => comparisonContext
.GetComparer<IOpenApiAny>()
.Compare(sourceParameter.Example, targetParameter.Example, comparisonContext));
}
}
}
2 changes: 0 additions & 2 deletions src/Microsoft.OpenApi/Services/OpenApiPathItemComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@ public override void Compare(
() => comparisonContext
.GetComparer<IList<OpenApiServer>>()
.Compare(sourcePathItem?.Servers, targetPathItem?.Servers, comparisonContext));

// To Do Compare Extensions
}
}
}
2 changes: 0 additions & 2 deletions src/Microsoft.OpenApi/Services/OpenApiRequestBodyComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ public override void Compare(
() => comparisonContext
.GetComparer<IDictionary<string, OpenApiMediaType>>()
.Compare(sourceRequestBody.Content, targetRequestBody.Content, comparisonContext));

//To Do Compare Extensions
}
}
}
1 change: 0 additions & 1 deletion src/Microsoft.OpenApi/Services/OpenApiResponseComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ public override void Compare(
.Compare(sourceResponse.Headers, targetResponse.Headers, comparisonContext));

// To Do Compare Link
// To Do Compare Extensions
}
}
}
11 changes: 9 additions & 2 deletions src/Microsoft.OpenApi/Services/OpenApiSchemaComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT license.

using System.Collections.Generic;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;

namespace Microsoft.OpenApi.Services
Expand Down Expand Up @@ -157,11 +158,17 @@ public override void Compare(
OpenApiConstants.ExternalDocs,
() => comparisonContext
.GetComparer<OpenApiExternalDocs>()
.Compare(sourceSchema?.ExternalDocs, targetSchema?.ExternalDocs, comparisonContext));
.Compare(sourceSchema.ExternalDocs, targetSchema.ExternalDocs, comparisonContext));

WalkAndCompare(
comparisonContext,
OpenApiConstants.Example,
() => comparisonContext
.GetComparer<IOpenApiAny>()
.Compare(sourceSchema.Example, targetSchema.Example, comparisonContext));

// To Do Compare schema.AllOf
// To Do Compare schema.AnyOf
// To Do compare schema as IOpenApiExtensible

comparisonContext.SourceSchemaLoop.Pop();
comparisonContext.TargetSchemaLoop.Pop();
Expand Down
2 changes: 0 additions & 2 deletions src/Microsoft.OpenApi/Services/OpenApiServerComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,6 @@ public override void Compare(
() => comparisonContext
.GetComparer<IDictionary<string, OpenApiServerVariable>>()
.Compare(sourceServer.Variables, sourceServer.Variables, comparisonContext));

// To Do compare extensions
Copy link
Copy Markdown
Contributor

@PerthCharern PerthCharern Oct 15, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we removing these "// To Do compare extensions" comments? #Resolved

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i will be tracking this work as an issue on github instead of adding these ToDo


In reply to: 225337695 [](ancestors = 225337695)

}
}
}
Loading