diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs
index c757f4031..692e35c0d 100644
--- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs
+++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs
@@ -40,12 +40,6 @@ namespace Microsoft.OpenApi.Hidi
{
internal static class OpenApiService
{
- static OpenApiService()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yml, new OpenApiYamlReader());
- }
-
///
/// Implementation of the transform command
///
@@ -392,8 +386,10 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool
LoadExternalRefs = inlineExternal,
BaseUrl = openApiFile.StartsWith("http", StringComparison.OrdinalIgnoreCase) ?
new(openApiFile) :
- new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar)
+ new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar),
+ HttpClient = httpClient.Value
};
+ settings.AddYamlReader();
result = await OpenApiDocument.LoadAsync(stream, settings: settings, cancellationToken: cancellationToken).ConfigureAwait(false);
@@ -497,6 +493,11 @@ private static Dictionary> EnumerateJsonDocument(JsonElemen
return paths;
}
+ private static readonly Lazy httpClient = new(() => new HttpClient()
+ {
+ DefaultRequestVersion = HttpVersion.Version20
+ });
+
///
/// Reads stream from file system or makes HTTP request depending on the input string
///
@@ -512,11 +513,7 @@ private static async Task GetStreamAsync(string input, ILogger logger, C
{
try
{
- using var httpClient = new HttpClient
- {
- DefaultRequestVersion = HttpVersion.Version20
- };
- stream = await httpClient.GetStreamAsync(new Uri(input), cancellationToken).ConfigureAwait(false);
+ stream = await httpClient.Value.GetStreamAsync(new Uri(input), cancellationToken).ConfigureAwait(false);
}
catch (HttpRequestException ex)
{
diff --git a/src/Microsoft.OpenApi.Readers/OpenApiReaderSettingsExtensions.cs b/src/Microsoft.OpenApi.Readers/OpenApiReaderSettingsExtensions.cs
new file mode 100644
index 000000000..a60e051a8
--- /dev/null
+++ b/src/Microsoft.OpenApi.Readers/OpenApiReaderSettingsExtensions.cs
@@ -0,0 +1,22 @@
+using Microsoft.OpenApi.Interfaces;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Readers;
+
+namespace Microsoft.OpenApi.Reader;
+
+///
+/// Extensions for
+///
+public static class OpenApiReaderSettingsExtensions
+{
+ ///
+ /// Adds a reader for the specified format
+ ///
+ /// The settings to add the reader to.
+ public static void AddYamlReader(this OpenApiReaderSettings settings)
+ {
+ var yamlReader = new OpenApiYamlReader();
+ settings.TryAddReader(OpenApiConstants.Yaml, yamlReader);
+ settings.TryAddReader(OpenApiConstants.Yml, yamlReader);
+ }
+}
diff --git a/src/Microsoft.OpenApi.Workbench/MainModel.cs b/src/Microsoft.OpenApi.Workbench/MainModel.cs
index f5c0b2768..7cfbb0084 100644
--- a/src/Microsoft.OpenApi.Workbench/MainModel.cs
+++ b/src/Microsoft.OpenApi.Workbench/MainModel.cs
@@ -211,9 +211,6 @@ protected void OnPropertyChanged(string propertyName)
///
internal async Task ParseDocumentAsync()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yml, new OpenApiYamlReader());
-
Stream stream = null;
try
{
@@ -238,6 +235,7 @@ internal async Task ParseDocumentAsync()
{
RuleSet = ValidationRuleSet.GetDefaultRuleSet()
};
+ settings.AddYamlReader();
if (ResolveExternal && !string.IsNullOrWhiteSpace(_inputFile))
{
settings.BaseUrl = _inputFile.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? new(_inputFile)
diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
index 3504a92f7..9c8a9b2a7 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
@@ -562,10 +562,11 @@ public static ReadResult Load(MemoryStream stream,
///
/// The path to the OpenAPI file.
/// The OpenApi reader settings.
+ /// The cancellation token
///
- public static async Task LoadAsync(string url, OpenApiReaderSettings? settings = null)
+ public static async Task LoadAsync(string url, OpenApiReaderSettings? settings = null, CancellationToken token = default)
{
- return await OpenApiModelFactory.LoadAsync(url, settings);
+ return await OpenApiModelFactory.LoadAsync(url, settings, token).ConfigureAwait(false);
}
///
diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
index c86c014da..c30f16777 100644
--- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
+++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
@@ -4,7 +4,6 @@
using System;
using System.IO;
using System.Linq;
-using System.Net.Http;
using System.Security;
using System.Text;
using System.Threading;
@@ -21,13 +20,6 @@ namespace Microsoft.OpenApi.Reader
///
public static class OpenApiModelFactory
{
- private static readonly HttpClient _httpClient = new();
-
- static OpenApiModelFactory()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Json, new OpenApiJsonReader());
- }
-
///
/// Loads the input stream and parses it into an Open API document.
///
@@ -73,7 +65,8 @@ public static ReadResult Load(MemoryStream stream,
public static T Load(MemoryStream input, OpenApiSpecVersion version, string format, OpenApiDocument openApiDocument, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement
{
format ??= InspectStreamFormat(input);
- return OpenApiReaderRegistry.GetReader(format).ReadFragment(input, version, openApiDocument, out diagnostic, settings);
+ settings ??= DefaultReaderSettings.Value;
+ return settings.GetReader(format).ReadFragment(input, version, openApiDocument, out diagnostic, settings);
}
///
@@ -81,11 +74,12 @@ public static T Load(MemoryStream input, OpenApiSpecVersion version, string f
///
/// The path to the OpenAPI file
/// The OpenApi reader settings.
- ///
+ /// The cancellation token
///
public static async Task LoadAsync(string url, OpenApiReaderSettings settings = null, CancellationToken token = default)
{
- var (stream, format) = await RetrieveStreamAndFormatAsync(url, token).ConfigureAwait(false);
+ settings ??= DefaultReaderSettings.Value;
+ var (stream, format) = await RetrieveStreamAndFormatAsync(url, settings, token).ConfigureAwait(false);
return await LoadAsync(stream, format, settings, token).ConfigureAwait(false);
}
@@ -102,7 +96,8 @@ public static async Task LoadAsync(string url, OpenApiReaderSettings
/// The OpenAPI element.
public static async Task LoadAsync(string url, OpenApiSpecVersion version, OpenApiDocument openApiDocument, OpenApiReaderSettings settings = null, CancellationToken token = default) where T : IOpenApiElement
{
- var (stream, format) = await RetrieveStreamAndFormatAsync(url, token).ConfigureAwait(false);
+ settings ??= DefaultReaderSettings.Value;
+ var (stream, format) = await RetrieveStreamAndFormatAsync(url, settings, token).ConfigureAwait(false);
return await LoadAsync(stream, version, openApiDocument, format, settings, token);
}
@@ -239,14 +234,15 @@ public static T Parse(string input,
return Load(stream, version, format, openApiDocument, out diagnostic, settings);
}
- private static readonly OpenApiReaderSettings DefaultReaderSettings = new();
+ private static readonly Lazy DefaultReaderSettings = new(() => new OpenApiReaderSettings());
private static async Task InternalLoadAsync(Stream input, string format, OpenApiReaderSettings settings, CancellationToken cancellationToken = default)
{
- var reader = OpenApiReaderRegistry.GetReader(format);
+ settings ??= DefaultReaderSettings.Value;
+ var reader = settings.GetReader(format);
var readResult = await reader.ReadAsync(input, settings, cancellationToken).ConfigureAwait(false);
- if (settings?.LoadExternalRefs ?? DefaultReaderSettings.LoadExternalRefs)
+ if (settings.LoadExternalRefs)
{
var diagnosticExternalRefs = await LoadExternalRefsAsync(readResult.Document, settings, format, cancellationToken).ConfigureAwait(false);
// Merge diagnostics of external reference
@@ -267,14 +263,15 @@ private static async Task LoadExternalRefsAsync(OpenApiDocume
var openApiWorkSpace = new OpenApiWorkspace(baseUrl);
// Load this root document into the workspace
- var streamLoader = new DefaultStreamLoader(settings.BaseUrl);
+ var streamLoader = new DefaultStreamLoader(settings.BaseUrl, settings.HttpClient);
var workspaceLoader = new OpenApiWorkspaceLoader(openApiWorkSpace, settings.CustomExternalLoader ?? streamLoader, settings);
return await workspaceLoader.LoadAsync(new OpenApiReference() { ExternalResource = "/" }, document, format ?? OpenApiConstants.Json, null, token).ConfigureAwait(false);
}
private static ReadResult InternalLoad(MemoryStream input, string format, OpenApiReaderSettings settings)
{
- if (settings?.LoadExternalRefs ?? DefaultReaderSettings.LoadExternalRefs)
+ settings ??= DefaultReaderSettings.Value;
+ if (settings.LoadExternalRefs)
{
throw new InvalidOperationException("Loading external references are not supported when using synchronous methods.");
}
@@ -283,12 +280,12 @@ private static ReadResult InternalLoad(MemoryStream input, string format, OpenAp
throw new ArgumentException($"Cannot parse the stream: {nameof(input)} is empty or contains no elements.");
}
- var reader = OpenApiReaderRegistry.GetReader(format);
+ var reader = settings.GetReader(format);
var readResult = reader.Read(input, settings);
return readResult;
}
- private static async Task<(Stream, string)> RetrieveStreamAndFormatAsync(string url, CancellationToken token = default)
+ private static async Task<(Stream, string)> RetrieveStreamAndFormatAsync(string url, OpenApiReaderSettings settings, CancellationToken token = default)
{
if (!string.IsNullOrEmpty(url))
{
@@ -298,7 +295,7 @@ private static ReadResult InternalLoad(MemoryStream input, string format, OpenAp
if (url.StartsWith("http", StringComparison.OrdinalIgnoreCase)
|| url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
- var response = await _httpClient.GetAsync(url, token).ConfigureAwait(false);
+ var response = await settings.HttpClient.GetAsync(url, token).ConfigureAwait(false);
var mediaType = response.Content.Headers.ContentType.MediaType;
var contentType = mediaType.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[0];
format = contentType.Split('/').Last().Split('+').Last().Split('-').Last();
diff --git a/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs b/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs
deleted file mode 100644
index b86b5a9c6..000000000
--- a/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT license.
-
-using System;
-using System.Collections.Concurrent;
-using Microsoft.OpenApi.Interfaces;
-
-namespace Microsoft.OpenApi.Reader
-{
- ///
- /// Registry for managing different OpenAPI format providers.
- ///
- public static class OpenApiReaderRegistry
- {
- private static readonly ConcurrentDictionary _readers = new(StringComparer.OrdinalIgnoreCase);
-
- ///
- /// Defines a default OpenAPI reader.
- ///
- public static readonly IOpenApiReader DefaultReader = new OpenApiJsonReader();
-
- ///
- /// Registers an IOpenApiReader for a given OpenAPI format.
- ///
- /// The OpenApi file format.
- /// The reader instance.
- public static void RegisterReader(string format, IOpenApiReader reader)
- {
- _readers.AddOrUpdate(format, reader, (_, _) => reader);
- }
-
- ///
- /// Retrieves an IOpenApiReader for a given OpenAPI format.
- ///
- ///
- ///
- ///
- public static IOpenApiReader GetReader(string format)
- {
- if (_readers.TryGetValue(format, out var reader))
- {
- return reader;
- }
-
- throw new NotSupportedException($"Format '{format}' is not supported. Register your reader with the OpenApiReaderRegistry class.");
- }
- }
-}
diff --git a/src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs b/src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs
index c1a275009..2d24947b8 100644
--- a/src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs
+++ b/src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs
@@ -4,9 +4,11 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Net.Http;
using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.MicrosoftExtensions;
+using Microsoft.OpenApi.Models;
using Microsoft.OpenApi.Validations;
namespace Microsoft.OpenApi.Reader
@@ -16,6 +18,87 @@ namespace Microsoft.OpenApi.Reader
///
public class OpenApiReaderSettings
{
+ private static readonly Lazy httpClient = new(() => new HttpClient());
+ private HttpClient _httpClient;
+ ///
+ /// HttpClient to use for making requests and retrieve documents
+ ///
+ public HttpClient HttpClient
+ {
+ internal get
+ {
+ _httpClient ??= httpClient.Value;
+ return _httpClient;
+ }
+ init
+ {
+ _httpClient = value;
+ }
+ }
+ ///
+ /// Adds a reader for the specified format
+ ///
+ public void AddJsonReader()
+ {
+ TryAddReader(OpenApiConstants.Json, new OpenApiJsonReader());
+ }
+ ///
+ /// Gets the reader for the specified format
+ ///
+ /// Format to fetch the reader for
+ /// The retrieved reader
+ /// When no reader is registered for that format
+ internal IOpenApiReader GetReader(string format)
+ {
+ Utils.CheckArgumentNullOrEmpty(format);
+ if (Readers.TryGetValue(format, out var reader))
+ {
+ return reader;
+ }
+
+ throw new NotSupportedException($"Format '{format}' is not supported.");
+ }
+ ///
+ /// Adds a reader for the specified format.
+ /// This method is a no-op if the reader already exists.
+ /// This method is equivalent to TryAdd, is provided for compatibility reasons and TryAdd should be used instead when available.
+ ///
+ /// Format to add a reader for
+ /// Reader to add
+ /// True if the reader was added, false if it already existed
+ public bool TryAddReader(string format, IOpenApiReader reader)
+ {
+ Utils.CheckArgumentNullOrEmpty(format);
+ Utils.CheckArgumentNull(reader);
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP || NET5_0_OR_GREATER
+ return Readers.TryAdd(format, reader);
+#else
+ if (!Readers.ContainsKey(format))
+ {
+ Readers.Add(format, reader);
+ return true;
+ }
+ return false;
+#endif
+ }
+ private Dictionary _readers = new(StringComparer.OrdinalIgnoreCase)
+ {
+ { OpenApiConstants.Json, new OpenApiJsonReader() }
+ };
+ ///
+ /// Readers to use to parse the OpenAPI document
+ ///
+ public Dictionary Readers
+ {
+ get => _readers;
+ init
+ {
+ Utils.CheckArgumentNull(value);
+ _readers = value.Comparer is StringComparer stringComparer && stringComparer == StringComparer.OrdinalIgnoreCase ?
+ value :
+ new Dictionary(value, StringComparer.OrdinalIgnoreCase);
+ }
+ }
///
/// When external references are found, load them into a shared workspace
///
@@ -67,18 +150,21 @@ public class OpenApiReaderSettings
///
public void AddMicrosoftExtensionParsers()
{
- if (!ExtensionParsers.ContainsKey(OpenApiPagingExtension.Name))
- ExtensionParsers.Add(OpenApiPagingExtension.Name, static (i, _) => OpenApiPagingExtension.Parse(i));
- if (!ExtensionParsers.ContainsKey(OpenApiEnumValuesDescriptionExtension.Name))
- ExtensionParsers.Add(OpenApiEnumValuesDescriptionExtension.Name, static (i, _ ) => OpenApiEnumValuesDescriptionExtension.Parse(i));
- if (!ExtensionParsers.ContainsKey(OpenApiPrimaryErrorMessageExtension.Name))
- ExtensionParsers.Add(OpenApiPrimaryErrorMessageExtension.Name, static (i, _ ) => OpenApiPrimaryErrorMessageExtension.Parse(i));
- if (!ExtensionParsers.ContainsKey(OpenApiDeprecationExtension.Name))
- ExtensionParsers.Add(OpenApiDeprecationExtension.Name, static (i, _ ) => OpenApiDeprecationExtension.Parse(i));
- if (!ExtensionParsers.ContainsKey(OpenApiReservedParameterExtension.Name))
- ExtensionParsers.Add(OpenApiReservedParameterExtension.Name, static (i, _ ) => OpenApiReservedParameterExtension.Parse(i));
- if (!ExtensionParsers.ContainsKey(OpenApiEnumFlagsExtension.Name))
- ExtensionParsers.Add(OpenApiEnumFlagsExtension.Name, static (i, _ ) => OpenApiEnumFlagsExtension.Parse(i));
+ TryAddExtensionParser(OpenApiPagingExtension.Name, static (i, _) => OpenApiPagingExtension.Parse(i));
+ TryAddExtensionParser(OpenApiEnumValuesDescriptionExtension.Name, static (i, _ ) => OpenApiEnumValuesDescriptionExtension.Parse(i));
+ TryAddExtensionParser(OpenApiPrimaryErrorMessageExtension.Name, static (i, _ ) => OpenApiPrimaryErrorMessageExtension.Parse(i));
+ TryAddExtensionParser(OpenApiDeprecationExtension.Name, static (i, _ ) => OpenApiDeprecationExtension.Parse(i));
+ TryAddExtensionParser(OpenApiReservedParameterExtension.Name, static (i, _ ) => OpenApiReservedParameterExtension.Parse(i));
+ TryAddExtensionParser(OpenApiEnumFlagsExtension.Name, static (i, _ ) => OpenApiEnumFlagsExtension.Parse(i));
+ }
+ private void TryAddExtensionParser(string name, Func parser)
+ {
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP || NET5_0_OR_GREATER
+ ExtensionParsers.TryAdd(name, parser);
+#else
+ if (!ExtensionParsers.ContainsKey(name))
+ ExtensionParsers.Add(name, parser);
+#endif
}
}
}
diff --git a/src/Microsoft.OpenApi/Reader/Services/DefaultStreamLoader.cs b/src/Microsoft.OpenApi/Reader/Services/DefaultStreamLoader.cs
index ef00c496f..ad36e5554 100644
--- a/src/Microsoft.OpenApi/Reader/Services/DefaultStreamLoader.cs
+++ b/src/Microsoft.OpenApi/Reader/Services/DefaultStreamLoader.cs
@@ -18,15 +18,17 @@ namespace Microsoft.OpenApi.Reader.Services
public class DefaultStreamLoader : IStreamLoader
{
private readonly Uri baseUrl;
- private readonly HttpClient _httpClient = new();
+ private readonly HttpClient _httpClient;
///
/// The default stream loader
///
///
- public DefaultStreamLoader(Uri baseUrl)
+ /// The HttpClient to use to retrieve documents when needed
+ public DefaultStreamLoader(Uri baseUrl, HttpClient httpClient)
{
this.baseUrl = baseUrl;
+ _httpClient = Utils.CheckArgumentNull(httpClient);
}
///
diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs
index a3494ba13..513355b50 100644
--- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs
+++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs
@@ -5,6 +5,7 @@
using Microsoft.OpenApi.Models;
using Microsoft.OpenApi.Models.Interfaces;
using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Reader;
using Microsoft.OpenApi.Services;
using Microsoft.OpenApi.Tests.UtilityFiles;
using Moq;
@@ -232,7 +233,9 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly(
// Act
using var stream = File.OpenRead(filePath);
- var doc = (await OpenApiDocument.LoadAsync(stream, "yaml")).Document;
+ var settings = new OpenApiReaderSettings();
+ settings.AddYamlReader();
+ var doc = (await OpenApiDocument.LoadAsync(stream, "yaml", settings)).Document;
var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds);
var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate);
diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs
index b4a04c4ce..c23222eb6 100644
--- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs
+++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs
@@ -26,8 +26,6 @@ public sealed class OpenApiServiceTests : IDisposable
public OpenApiServiceTests()
{
_logger = new Logger(_loggerFactory);
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yml, new OpenApiYamlReader());
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
}
[Fact]
diff --git a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderSettingsExtensionsTests.cs b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderSettingsExtensionsTests.cs
new file mode 100644
index 000000000..2d69bcf73
--- /dev/null
+++ b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderSettingsExtensionsTests.cs
@@ -0,0 +1,32 @@
+using System;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Reader;
+using Xunit;
+
+namespace Microsoft.OpenApi.Readers.Tests;
+
+public class OpenApiReaderSettingsExtensionsTests
+{
+ [Fact]
+ public void AddsYamlReader()
+ {
+ var settings = new OpenApiReaderSettings();
+ Assert.Single(settings.Readers);
+ Assert.DoesNotContain(OpenApiConstants.Yaml, settings.Readers.Keys);
+ Assert.DoesNotContain(OpenApiConstants.Yml, settings.Readers.Keys);
+
+ settings.AddYamlReader();
+ Assert.Equal(3, settings.Readers.Count);
+ Assert.Contains(OpenApiConstants.Yaml, settings.Readers.Keys);
+ Assert.Contains(OpenApiConstants.Yml, settings.Readers.Keys);
+ Assert.IsType(settings.GetReader(OpenApiConstants.Yaml));
+ Assert.IsType(settings.GetReader(OpenApiConstants.Yml));
+ }
+ [Fact]
+ public void IsAvailableOnSameNamespace()
+ {
+ var settingsNS = typeof(OpenApiReaderSettings).Namespace;
+ var extensionsNS = typeof(OpenApiReaderSettingsExtensions).Namespace;
+ Assert.Equal(settingsNS, extensionsNS, StringComparer.Ordinal);
+ }
+}
diff --git a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiDiagnosticTests.cs b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiDiagnosticTests.cs
index 5e065a1e8..8e45891db 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiDiagnosticTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiDiagnosticTests.cs
@@ -15,15 +15,10 @@ namespace Microsoft.OpenApi.Readers.Tests.OpenApiReaderTests
[Collection("DefaultSettings")]
public class OpenApiDiagnosticTests
{
- public OpenApiDiagnosticTests()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- }
-
[Fact]
public async Task DetectedSpecificationVersionShouldBeV2_0()
{
- var actual = await OpenApiDocument.LoadAsync("V2Tests/Samples/basic.v2.yaml");
+ var actual = await OpenApiDocument.LoadAsync("V2Tests/Samples/basic.v2.yaml", SettingsFixture.ReaderSettings);
Assert.NotNull(actual.Diagnostic);
Assert.Equal(OpenApiSpecVersion.OpenApi2_0, actual.Diagnostic.SpecificationVersion);
@@ -32,7 +27,7 @@ public async Task DetectedSpecificationVersionShouldBeV2_0()
[Fact]
public async Task DetectedSpecificationVersionShouldBeV3_0()
{
- var actual = await OpenApiDocument.LoadAsync("V3Tests/Samples/OpenApiDocument/minimalDocument.yaml");
+ var actual = await OpenApiDocument.LoadAsync("V3Tests/Samples/OpenApiDocument/minimalDocument.yaml", SettingsFixture.ReaderSettings);
Assert.NotNull(actual.Diagnostic);
Assert.Equal(OpenApiSpecVersion.OpenApi3_0, actual.Diagnostic.SpecificationVersion);
@@ -48,6 +43,7 @@ public async Task DiagnosticReportMergedForExternalReferenceAsync()
CustomExternalLoader = new ResourceLoader(),
BaseUrl = new("fie://c:\\")
};
+ settings.AddYamlReader();
ReadResult result;
result = await OpenApiDocument.LoadAsync("OpenApiReaderTests/Samples/OpenApiDiagnosticReportMerged/TodoMain.yaml", settings);
diff --git a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs
index 37080252d..67fed8efe 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs
@@ -15,16 +15,12 @@ public class OpenApiStreamReaderTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiDocument/";
- public OpenApiStreamReaderTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task StreamShouldCloseIfLeaveStreamOpenSettingEqualsFalse()
{
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "petStore.yaml"));
var settings = new OpenApiReaderSettings { LeaveStreamOpen = false };
+ settings.AddYamlReader();
_ = await OpenApiDocument.LoadAsync(stream, settings: settings);
Assert.False(stream.CanRead);
}
@@ -34,6 +30,7 @@ public async Task StreamShouldNotCloseIfLeaveStreamOpenSettingEqualsTrue()
{
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "petStore.yaml"));
var settings = new OpenApiReaderSettings { LeaveStreamOpen = true };
+ settings.AddYamlReader();
_ = await OpenApiDocument.LoadAsync(stream, settings: settings);
Assert.True(stream.CanRead);
}
@@ -48,7 +45,9 @@ public async Task StreamShouldNotBeDisposedIfLeaveStreamOpenSettingIsTrueAsync()
memoryStream.Position = 0;
var stream = memoryStream;
- _ = await OpenApiDocument.LoadAsync(stream, settings: new OpenApiReaderSettings { LeaveStreamOpen = true });
+ var settings = new OpenApiReaderSettings { LeaveStreamOpen = true };
+ settings.AddYamlReader();
+ _ = await OpenApiDocument.LoadAsync(stream, settings: settings);
stream.Seek(0, SeekOrigin.Begin); // does not throw an object disposed exception
Assert.True(stream.CanRead);
}
@@ -64,7 +63,9 @@ public async Task StreamShouldReadWhenInitializedAsync()
var stream = await httpClient.GetStreamAsync("20fe7a7b720a0e48e5842d002ac418b12a8201df/tests/v3.0/pass/petstore.yaml");
// Read V3 as YAML
- var result = await OpenApiDocument.LoadAsync(stream);
+ var settings = new OpenApiReaderSettings();
+ settings.AddYamlReader();
+ var result = await OpenApiDocument.LoadAsync(stream, settings: settings);
Assert.NotNull(result.Document);
}
}
diff --git a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/UnsupportedSpecVersionTests.cs b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/UnsupportedSpecVersionTests.cs
index 83d7c33d5..428e86725 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/UnsupportedSpecVersionTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/UnsupportedSpecVersionTests.cs
@@ -16,7 +16,7 @@ public async Task ThrowOpenApiUnsupportedSpecVersionException()
{
try
{
- _ = await OpenApiDocument.LoadAsync("OpenApiReaderTests/Samples/unsupported.v1.yaml");
+ _ = await OpenApiDocument.LoadAsync("OpenApiReaderTests/Samples/unsupported.v1.yaml", SettingsFixture.ReaderSettings);
}
catch (OpenApiUnsupportedSpecVersionException exception)
{
diff --git a/test/Microsoft.OpenApi.Readers.Tests/OpenApiWorkspaceTests/OpenApiWorkspaceStreamTests.cs b/test/Microsoft.OpenApi.Readers.Tests/OpenApiWorkspaceTests/OpenApiWorkspaceStreamTests.cs
index a2badc7c8..720eade40 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/OpenApiWorkspaceTests/OpenApiWorkspaceStreamTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/OpenApiWorkspaceTests/OpenApiWorkspaceStreamTests.cs
@@ -11,13 +11,6 @@ namespace Microsoft.OpenApi.Readers.Tests.OpenApiWorkspaceTests
{
public class OpenApiWorkspaceStreamTests
{
- private const string SampleFolderPath = "V3Tests/Samples/OpenApiWorkspace/";
-
- public OpenApiWorkspaceStreamTests()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- }
-
// Use OpenApiWorkspace to load a document and a referenced document
[Fact]
@@ -30,6 +23,7 @@ public async Task LoadingDocumentWithResolveAllReferencesShouldLoadDocumentIntoW
CustomExternalLoader = new MockLoader(),
BaseUrl = new("file://c:\\")
};
+ settings.AddYamlReader();
var stream = new MemoryStream();
var doc = """
@@ -59,6 +53,7 @@ public async Task LoadDocumentWithExternalReferenceShouldLoadBothDocumentsIntoWo
CustomExternalLoader = new ResourceLoader(),
BaseUrl = new("file://c:\\"),
};
+ settings.AddYamlReader();
ReadResult result;
result = await OpenApiDocument.LoadAsync("V3Tests/Samples/OpenApiWorkspace/TodoMain.yaml", settings);
diff --git a/test/Microsoft.OpenApi.Readers.Tests/ParseNodeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/ParseNodeTests.cs
index e8d22a14a..8dfb20322 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/ParseNodeTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/ParseNodeTests.cs
@@ -12,11 +12,6 @@ namespace Microsoft.OpenApi.Tests
{
public class ParseNodeTests
{
- public ParseNodeTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public void BrokenSimpleList()
{
@@ -30,7 +25,7 @@ public void BrokenSimpleList()
paths: { }
""";
- var result = OpenApiDocument.Parse(input, "yaml");
+ var result = OpenApiDocument.Parse(input, "yaml", SettingsFixture.ReaderSettings);
Assert.Equivalent(new List() {
new OpenApiError(new OpenApiReaderException("Expected a value."))
@@ -56,7 +51,7 @@ public void BadSchema()
schema: asdasd
""";
- var res= OpenApiDocument.Parse(input, "yaml");
+ var res= OpenApiDocument.Parse(input, "yaml", SettingsFixture.ReaderSettings);
Assert.Equivalent(new List
{
diff --git a/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs b/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs
index 3edc9ac67..d32c9b46b 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs
@@ -16,17 +16,11 @@ namespace Microsoft.OpenApi.Readers.Tests.ReferenceService
public class TryLoadReferenceV2Tests
{
private const string SampleFolderPath = "ReferenceService/Samples/";
-
- public TryLoadReferenceV2Tests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task LoadParameterReference()
{
// Arrange
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "multipleReferences.v2.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "multipleReferences.v2.yaml"), SettingsFixture.ReaderSettings);
var reference = new OpenApiParameterReference("skipParam", result.Document);
// Assert
@@ -51,7 +45,7 @@ public async Task LoadParameterReference()
[Fact]
public async Task LoadSecuritySchemeReference()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "multipleReferences.v2.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "multipleReferences.v2.yaml"), SettingsFixture.ReaderSettings);
var reference = new OpenApiSecuritySchemeReference("api_key_sample", result.Document);
@@ -69,7 +63,7 @@ public async Task LoadSecuritySchemeReference()
[Fact]
public async Task LoadResponseReference()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "multipleReferences.v2.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "multipleReferences.v2.yaml"), SettingsFixture.ReaderSettings);
var reference = new OpenApiResponseReference("NotFound", result.Document);
@@ -89,7 +83,7 @@ public async Task LoadResponseReference()
[Fact]
public async Task LoadResponseAndSchemaReference()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "multipleReferences.v2.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "multipleReferences.v2.yaml"), SettingsFixture.ReaderSettings);
var reference = new OpenApiResponseReference("GeneralError", result.Document);
var expected = new OpenApiResponse
diff --git a/test/Microsoft.OpenApi.Readers.Tests/SettingsFixture.cs b/test/Microsoft.OpenApi.Readers.Tests/SettingsFixture.cs
new file mode 100644
index 000000000..21f434311
--- /dev/null
+++ b/test/Microsoft.OpenApi.Readers.Tests/SettingsFixture.cs
@@ -0,0 +1,7 @@
+using Microsoft.OpenApi.Reader;
+
+namespace Microsoft.OpenApi.Readers.Tests;
+public static class SettingsFixture
+{
+ public static OpenApiReaderSettings ReaderSettings { get { var settings = new OpenApiReaderSettings(); settings.AddYamlReader() ; return settings; } }
+}
diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
index 8de46ad64..c95378d5a 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
@@ -36,8 +36,8 @@ public void ParseCustomExtension()
};
} } }
};
+ settings.AddYamlReader();
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
var diag = new OpenApiDiagnostic();
var actual = OpenApiDocument.Parse(description, "yaml", settings: settings);
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/ComparisonTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/ComparisonTests.cs
index ae725bcb1..ab11f4b87 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/ComparisonTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/ComparisonTests.cs
@@ -21,11 +21,12 @@ public class ComparisonTests
//[InlineData("definitions")] //Currently broken due to V3 references not behaving the same as V2
public async Task EquivalentV2AndV3DocumentsShouldProduceEquivalentObjects(string fileName)
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
+ var settings = new OpenApiReaderSettings();
+ settings.AddYamlReader();
using var streamV2 = Resources.GetStream(Path.Combine(SampleFolderPath, $"{fileName}.v2.yaml"));
using var streamV3 = Resources.GetStream(Path.Combine(SampleFolderPath, $"{fileName}.v3.yaml"));
- var result1 = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, $"{fileName}.v2.yaml"));
- var result2 = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, $"{fileName}.v3.yaml"));
+ var result1 = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, $"{fileName}.v2.yaml"), SettingsFixture.ReaderSettings);
+ var result2 = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, $"{fileName}.v3.yaml"), SettingsFixture.ReaderSettings);
result2.Document.Should().BeEquivalentTo(result1.Document,
options => options.Excluding(x => x.Workspace).Excluding(y => y.BaseUri));
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs
index 136c46892..1059c3b02 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs
@@ -21,11 +21,6 @@ public class OpenApiDocumentTests
{
private const string SampleFolderPath = "V2Tests/Samples/";
- public OpenApiDocumentTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Theory]
[InlineData("en-US")]
[InlineData("hi-IN")]
@@ -56,7 +51,7 @@ public void ParseDocumentWithDifferentCultureShouldSucceed(string culture)
exclusiveMinimum: false
paths: {}
""",
- "yaml");
+ "yaml", SettingsFixture.ReaderSettings);
result.Document.Should().BeEquivalentTo(
new OpenApiDocument
@@ -313,6 +308,7 @@ public async Task ParseDocumentWithDefaultContentTypeSettingShouldSucceed()
{
DefaultContentType = ["application/json"]
};
+ settings.AddYamlReader();
var actual = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithEmptyProduces.yaml"), settings);
var mediaType = actual.Document.Paths["/example"].Operations[OperationType.Get].Responses["200"].Content;
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs
index 95452e6ad..23b6825b1 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs
@@ -7,11 +7,6 @@ namespace Microsoft.OpenApi.Readers.Tests.V2Tests
{
public class OpenApiServerTests
{
- public OpenApiServerTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public void NoServer()
{
@@ -24,7 +19,7 @@ public void NoServer()
paths: {}
""";
- var result = OpenApiDocument.Parse(input, "yaml");
+ var result = OpenApiDocument.Parse(input, "yaml", SettingsFixture.ReaderSettings);
Assert.Empty(result.Document.Servers);
}
@@ -42,7 +37,7 @@ public void JustSchemeNoDefault()
- http
paths: {}
""";
- var result = OpenApiDocument.Parse(input, "yaml");
+ var result = OpenApiDocument.Parse(input, "yaml", SettingsFixture.ReaderSettings);
Assert.Empty(result.Document.Servers);
}
@@ -59,7 +54,7 @@ public void JustHostNoDefault()
host: www.foo.com
paths: {}
""";
- var result = OpenApiDocument.Parse(input, "yaml");
+ var result = OpenApiDocument.Parse(input, "yaml", SettingsFixture.ReaderSettings);
var server = result.Document.Servers.First();
Assert.Single(result.Document.Servers);
@@ -84,6 +79,7 @@ public void NoBasePath()
{
BaseUrl = new("https://www.foo.com/spec.yaml")
};
+ settings.AddYamlReader();
var result = OpenApiDocument.Parse(input, "yaml", settings);
var server = result.Document.Servers.First();
@@ -103,7 +99,7 @@ public void JustBasePathNoDefault()
basePath: /baz
paths: {}
""";
- var result = OpenApiDocument.Parse(input, "yaml");
+ var result = OpenApiDocument.Parse(input, "yaml", SettingsFixture.ReaderSettings);
var server = result.Document.Servers.First();
Assert.Single(result.Document.Servers);
@@ -127,6 +123,7 @@ public void JustSchemeWithCustomHost()
{
BaseUrl = new("https://bing.com/foo")
};
+ settings.AddYamlReader();
var result = OpenApiDocument.Parse(input, "yaml", settings);
@@ -152,6 +149,7 @@ public void JustSchemeWithCustomHostWithEmptyPath()
{
BaseUrl = new("https://bing.com")
};
+ settings.AddYamlReader();
var result = OpenApiDocument.Parse(input, "yaml", settings);
@@ -176,6 +174,7 @@ public void JustBasePathWithCustomHost()
{
BaseUrl = new("https://bing.com")
};
+ settings.AddYamlReader();
var result = OpenApiDocument.Parse(input, "yaml", settings);
@@ -200,6 +199,7 @@ public void JustHostWithCustomHost()
{
BaseUrl = new("https://bing.com")
};
+ settings.AddYamlReader();
var result = OpenApiDocument.Parse(input, "yaml", settings);
@@ -225,6 +225,7 @@ public void JustHostWithCustomHostWithApi()
{
BaseUrl = new("https://dev.bing.com/api/description.yaml")
};
+ settings.AddYamlReader();
var result = OpenApiDocument.Parse(input, "yaml", settings);
var server = result.Document.Servers.First();
@@ -251,6 +252,7 @@ public void MultipleServers()
{
BaseUrl = new("https://dev.bing.com/api")
};
+ settings.AddYamlReader();
var result = OpenApiDocument.Parse(input, "yaml", settings);
var server = result.Document.Servers.First();
@@ -276,6 +278,7 @@ public void LocalHostWithCustomHost()
{
BaseUrl = new("https://bing.com")
};
+ settings.AddYamlReader();
var result = OpenApiDocument.Parse(input, "yaml", settings);
@@ -301,6 +304,7 @@ public void InvalidHostShouldYieldError()
{
BaseUrl = new("https://bing.com")
};
+ settings.AddYamlReader();
var result = OpenApiDocument.Parse(input, "yaml", settings);
Assert.Empty(result.Document.Servers);
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs
index e5523a08c..f1dc5640c 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs
@@ -20,16 +20,11 @@ public class OpenApiDocumentTests
{
private const string SampleFolderPath = "V31Tests/Samples/OpenApiDocument/";
- public OpenApiDocumentTests()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseDocumentWithWebhooksShouldSucceed()
{
// Arrange and Act
- var actual = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "documentWithWebhooks.yaml"));
+ var actual = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "documentWithWebhooks.yaml"), SettingsFixture.ReaderSettings);
var petSchema = new OpenApiSchemaReference("petSchema", actual.Document);
var newPetSchema = new OpenApiSchemaReference("newPetSchema", actual.Document);
@@ -224,7 +219,7 @@ public async Task ParseDocumentWithWebhooksShouldSucceed()
public async Task ParseDocumentsWithReusablePathItemInWebhooksSucceeds()
{
// Arrange && Act
- var actual = await OpenApiDocument.LoadAsync("V31Tests/Samples/OpenApiDocument/documentWithReusablePaths.yaml");
+ var actual = await OpenApiDocument.LoadAsync("V31Tests/Samples/OpenApiDocument/documentWithReusablePaths.yaml", SettingsFixture.ReaderSettings);
var components = new OpenApiComponents
{
@@ -434,7 +429,7 @@ public async Task ParseDocumentWithExampleInSchemaShouldSucceed()
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = false });
// Act
- var actual = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithExample.yaml"));
+ var actual = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithExample.yaml"), SettingsFixture.ReaderSettings);
actual.Document.SerializeAsV31(writer);
// Assert
@@ -445,7 +440,7 @@ public async Task ParseDocumentWithExampleInSchemaShouldSucceed()
public async Task ParseDocumentWithPatternPropertiesInSchemaWorks()
{
// Arrange and Act
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithPatternPropertiesInSchema.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithPatternPropertiesInSchema.yaml"), SettingsFixture.ReaderSettings);
var actualSchema = result.Document.Paths["/example"].Operations[OperationType.Get].Responses["200"].Content["application/json"].Schema;
var expectedSchema = new OpenApiSchema
@@ -502,7 +497,7 @@ public async Task ParseDocumentWithPatternPropertiesInSchemaWorks()
public async Task ParseDocumentWithReferenceByIdGetsResolved()
{
// Arrange and Act
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithReferenceById.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithReferenceById.yaml"), SettingsFixture.ReaderSettings);
var responseSchema = result.Document.Paths["/resource"].Operations[OperationType.Get].Responses["200"].Content["application/json"].Schema;
var requestBodySchema = result.Document.Paths["/resource"].Operations[OperationType.Post].RequestBody.Content["application/json"].Schema;
@@ -525,6 +520,7 @@ public async Task ExternalDocumentDereferenceToOpenApiDocumentUsingJsonPointerWo
LoadExternalRefs = true,
BaseUrl = new(path),
};
+ settings.AddYamlReader();
// Act
var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "externalRefByJsonPointer.yaml"), settings);
@@ -546,10 +542,11 @@ public async Task ParseExternalDocumentDereferenceToOpenApiDocumentByIdWorks()
LoadExternalRefs = true,
BaseUrl = new(path),
};
+ settings.AddYamlReader();
// Act
var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "externalRefById.yaml"), settings);
- var doc2 = (await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "externalResource.yaml"))).Document;
+ var doc2 = (await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "externalResource.yaml"), SettingsFixture.ReaderSettings)).Document;
var requestBodySchema = result.Document.Paths["/resource"].Operations[OperationType.Get].Parameters[0].Schema;
result.Document.Workspace.RegisterComponents(doc2);
@@ -562,7 +559,7 @@ public async Task ParseExternalDocumentDereferenceToOpenApiDocumentByIdWorks()
public async Task ParseDocumentWith31PropertiesWorks()
{
var path = Path.Combine(SampleFolderPath, "documentWith31Properties.yaml");
- var doc = (await OpenApiDocument.LoadAsync(path)).Document;
+ var doc = (await OpenApiDocument.LoadAsync(path, SettingsFixture.ReaderSettings)).Document;
var outputStringWriter = new StringWriter();
doc.SerializeAsV31(new OpenApiYamlWriter(outputStringWriter));
await outputStringWriter.FlushAsync();
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs
index f7c30f65e..b32840020 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs
@@ -32,11 +32,6 @@ public static MemoryStream GetMemoryStream(string fileName)
return new MemoryStream(fileBytes);
}
- public OpenApiSchemaTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseBasicV31SchemaShouldSucceed()
{
@@ -109,7 +104,7 @@ public async Task ParseBasicV31SchemaShouldSucceed()
// Act
var schema = await OpenApiModelFactory.LoadAsync(
- Path.Combine(SampleFolderPath, "jsonSchema.json"), OpenApiSpecVersion.OpenApi3_1, new());
+ Path.Combine(SampleFolderPath, "jsonSchema.json"), OpenApiSpecVersion.OpenApi3_1, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(expectedObject, schema);
@@ -182,7 +177,7 @@ public async Task ParseV31SchemaShouldSucceed()
var path = Path.Combine(SampleFolderPath, "schema.yaml");
// Act
- var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new());
+ var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new(), SettingsFixture.ReaderSettings);
var expectedSchema = new OpenApiSchema
{
Type = JsonSchemaType.Object,
@@ -205,7 +200,7 @@ public async Task ParseAdvancedV31SchemaShouldSucceed()
{
// Arrange and Act
var path = Path.Combine(SampleFolderPath, "advancedSchema.yaml");
- var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new());
+ var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new(), SettingsFixture.ReaderSettings);
var expectedSchema = new OpenApiSchema
{
@@ -296,7 +291,7 @@ public void ParseSchemaWithExamplesShouldSucceed()
- ubuntu
";
// Act
- var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, new(), out _, "yaml");
+ var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, new(), out _, "yaml", SettingsFixture.ReaderSettings);
// Assert
Assert.Equal(2, schema.Examples.Count);
@@ -335,7 +330,7 @@ public async Task SerializeV31SchemaWithMultipleTypesAsV3Works()
var path = Path.Combine(SampleFolderPath, "schemaWithTypeArray.yaml");
// Act
- var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new());
+ var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new(), SettingsFixture.ReaderSettings);
var writer = new StringWriter();
schema.SerializeAsV3(new OpenApiYamlWriter(writer));
@@ -354,7 +349,7 @@ public async Task SerializeV31SchemaWithMultipleTypesAsV2Works()
var path = Path.Combine(SampleFolderPath, "schemaWithTypeArray.yaml");
// Act
- var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new());
+ var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new(), SettingsFixture.ReaderSettings);
var writer = new StringWriter();
schema.SerializeAsV2(new OpenApiYamlWriter(writer));
@@ -374,7 +369,7 @@ public async Task SerializeV3SchemaWithNullableAsV31Works()
var path = Path.Combine(SampleFolderPath, "schemaWithNullable.yaml");
// Act
- var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_0, new());
+ var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
var writer = new StringWriter();
schema.SerializeAsV31(new OpenApiYamlWriter(writer));
@@ -395,7 +390,7 @@ public async Task SerializeV2SchemaWithNullableExtensionAsV31Works()
var path = Path.Combine(SampleFolderPath, "schemaWithNullableExtension.yaml");
// Act
- var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi2_0, new());
+ var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi2_0, new(), SettingsFixture.ReaderSettings);
var writer = new StringWriter();
schema.SerializeAsV31(new OpenApiYamlWriter(writer));
@@ -414,7 +409,7 @@ public void SerializeSchemaWithTypeArrayAndNullableDoesntEmitType()
var expected = @"{ }";
- var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, new(), out _, "yaml");
+ var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, new(), out _, "yaml", SettingsFixture.ReaderSettings);
var writer = new StringWriter();
schema.SerializeAsV2(new OpenApiYamlWriter(writer));
@@ -432,7 +427,7 @@ public async Task LoadSchemaWithNullableExtensionAsV31Works(string filePath)
var path = Path.Combine(SampleFolderPath, filePath);
// Act
- var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new());
+ var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equal(JsonSchemaType.String | JsonSchemaType.Null, schema.Type);
@@ -472,7 +467,7 @@ public async Task SerializeSchemaWithJsonSchemaKeywordsWorks()
var path = Path.Combine(SampleFolderPath, "schemaWithJsonSchemaKeywords.yaml");
// Act
- var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new());
+ var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new(), SettingsFixture.ReaderSettings);
// serialization
var writer = new StringWriter();
@@ -516,7 +511,7 @@ public async Task ParseSchemaWithConstWorks()
var path = Path.Combine(SampleFolderPath, "schemaWithConst.json");
// Act
- var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new());
+ var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new(), SettingsFixture.ReaderSettings);
Assert.Equal("active", schema.Properties["status"].Const);
Assert.Equal("admin", schema.Properties["user"].Properties["role"].Const);
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs
index 5aabe43d3..cca7e002d 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs
@@ -16,16 +16,11 @@ namespace Microsoft.OpenApi.Readers.Tests.V3Tests
public class OpenApiCallbackTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiCallback/";
- public OpenApiCallbackTests()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseBasicCallbackShouldSucceed()
{
// Act
- var callback = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicCallback.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var callback = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicCallback.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -68,7 +63,7 @@ public async Task ParseCallbackWithReferenceShouldSucceed()
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "callbackWithReference.yaml"));
// Act
- var result = await OpenApiModelFactory.LoadAsync(stream, OpenApiConstants.Yaml);
+ var result = await OpenApiModelFactory.LoadAsync(stream, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings);
// Assert
var path = result.Document.Paths.First().Value;
@@ -118,7 +113,7 @@ public async Task ParseCallbackWithReferenceShouldSucceed()
public async Task ParseMultipleCallbacksWithReferenceShouldSucceed()
{
// Act
- var result = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "multipleCallbacksWithReference.yaml"));
+ var result = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "multipleCallbacksWithReference.yaml"), SettingsFixture.ReaderSettings);
// Assert
var path = result.Document.Paths.First().Value;
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs
index 6ab83bf3c..1629e1939 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs
@@ -14,11 +14,6 @@ public class OpenApiDiscriminatorTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiDiscriminator/";
- public OpenApiDiscriminatorTests()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseBasicDiscriminatorShouldSucceed()
{
@@ -30,7 +25,7 @@ public async Task ParseBasicDiscriminatorShouldSucceed()
memoryStream.Position = 0;
// Act
- var discriminator = OpenApiModelFactory.Load(memoryStream, OpenApiSpecVersion.OpenApi3_0, OpenApiConstants.Yaml, new(), out var diagnostic);
+ var discriminator = OpenApiModelFactory.Load(memoryStream, OpenApiSpecVersion.OpenApi3_0, OpenApiConstants.Yaml, new(), out var diagnostic, SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs
index 5359162bf..c54ecb628 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs
@@ -28,11 +28,6 @@ public class OpenApiDocumentTests
private const string SampleFolderPath = "V3Tests/Samples/OpenApiDocument/";
private const string codacyApi = "https://api.codacy.com/api/api-docs/swagger.yaml";
- public OpenApiDocumentTests()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- }
-
private static async Task CloneAsync(T element) where T : class, IOpenApiSerializable
{
using var stream = new MemoryStream();
@@ -60,7 +55,7 @@ public void ParseDocumentFromInlineStringShouldSucceed()
title: Simple Document
version: 0.9.1
paths: {}",
- OpenApiConstants.Yaml);
+ OpenApiConstants.Yaml, SettingsFixture.ReaderSettings);
result.Document.Should().BeEquivalentTo(
new OpenApiDocument
@@ -91,7 +86,7 @@ public void ParseInlineStringWithoutProvidingFormatSucceeds()
paths: {}
""";
- var readResult = OpenApiDocument.Parse(stringOpenApiDoc);
+ var readResult = OpenApiDocument.Parse(stringOpenApiDoc, settings: SettingsFixture.ReaderSettings);
Assert.Equal("Sample API", readResult.Document.Info.Title);
}
@@ -99,7 +94,7 @@ public void ParseInlineStringWithoutProvidingFormatSucceeds()
public async Task ParseBasicDocumentWithMultipleServersShouldSucceed()
{
var path = Path.Combine(SampleFolderPath, "basicDocumentWithMultipleServers.yaml");
- var result = await OpenApiDocument.LoadAsync(path);
+ var result = await OpenApiDocument.LoadAsync(path, SettingsFixture.ReaderSettings);
Assert.Empty(result.Diagnostic.Errors);
result.Document.Should().BeEquivalentTo(
@@ -135,7 +130,7 @@ public async Task ParseBrokenMinimalDocumentShouldYieldExpectedDiagnostic()
await stream.CopyToAsync(memoryStream);
memoryStream.Position = 0;
- var result = await OpenApiDocument.LoadAsync(memoryStream);
+ var result = await OpenApiDocument.LoadAsync(memoryStream, settings: SettingsFixture.ReaderSettings);
result.Document.Should().BeEquivalentTo(
new OpenApiDocument
@@ -161,7 +156,7 @@ public async Task ParseBrokenMinimalDocumentShouldYieldExpectedDiagnostic()
[Fact]
public async Task ParseMinimalDocumentShouldSucceed()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "minimalDocument.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "minimalDocument.yaml"), SettingsFixture.ReaderSettings);
result.Document.Should().BeEquivalentTo(
new OpenApiDocument
@@ -185,7 +180,7 @@ public async Task ParseMinimalDocumentShouldSucceed()
public async Task ParseStandardPetStoreDocumentShouldSucceed()
{
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "petStore.yaml"));
- var actual = await OpenApiDocument.LoadAsync(stream, OpenApiConstants.Yaml);
+ var actual = await OpenApiDocument.LoadAsync(stream, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings);
var components = new OpenApiComponents
{
@@ -571,7 +566,7 @@ public async Task ParseStandardPetStoreDocumentShouldSucceed()
public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed()
{
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "petStoreWithTagAndSecurity.yaml"));
- var actual = await OpenApiDocument.LoadAsync(stream, OpenApiConstants.Yaml);
+ var actual = await OpenApiDocument.LoadAsync(stream, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings);
var components = new OpenApiComponents
{
@@ -1044,7 +1039,7 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed()
[Fact]
public async Task ParsePetStoreExpandedShouldSucceed()
{
- var actual = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "petStoreExpanded.yaml"));
+ var actual = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "petStoreExpanded.yaml"), SettingsFixture.ReaderSettings);
// TODO: Create the object in memory and compare with the one read from YAML file.
@@ -1055,7 +1050,7 @@ public async Task ParsePetStoreExpandedShouldSucceed()
[Fact]
public async Task GlobalSecurityRequirementShouldReferenceSecurityScheme()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "securedApi.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "securedApi.yaml"), SettingsFixture.ReaderSettings);
var securityRequirement = result.Document.SecurityRequirements[0];
@@ -1065,7 +1060,7 @@ public async Task GlobalSecurityRequirementShouldReferenceSecurityScheme()
[Fact]
public async Task HeaderParameterShouldAllowExample()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "apiWithFullHeaderComponent.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "apiWithFullHeaderComponent.yaml"), SettingsFixture.ReaderSettings);
var exampleHeader = result.Document.Components?.Headers?["example-header"];
Assert.NotNull(exampleHeader);
@@ -1127,7 +1122,7 @@ public async Task HeaderParameterShouldAllowExample()
public async Task ParseDocumentWithReferencedSecuritySchemeWorks()
{
// Act
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithSecuritySchemeReference.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithSecuritySchemeReference.yaml"), SettingsFixture.ReaderSettings);
var securityScheme = result.Document.Components.SecuritySchemes["OAuth2"];
// Assert
@@ -1141,7 +1136,7 @@ public async Task ParseDocumentWithJsonSchemaReferencesWorks()
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "docWithJsonSchema.yaml"));
// Act
- var result = await OpenApiDocument.LoadAsync(stream, OpenApiConstants.Yaml);
+ var result = await OpenApiDocument.LoadAsync(stream, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings);
var actualSchema = result.Document.Paths["/users/{userId}"].Operations[OperationType.Get].Responses["200"].Content["application/json"].Schema;
@@ -1154,7 +1149,7 @@ public async Task ParseDocumentWithJsonSchemaReferencesWorks()
public async Task ValidateExampleShouldNotHaveDataTypeMismatch()
{
// Act
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "documentWithDateExampleInSchema.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "documentWithDateExampleInSchema.yaml"), SettingsFixture.ReaderSettings);
// Assert
var warnings = result.Diagnostic.Warnings;
@@ -1242,7 +1237,7 @@ public async Task ParseDocWithRefsUsingProxyReferencesSucceeds()
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "minifiedPetStore.yaml"));
// Act
- var doc = (await OpenApiDocument.LoadAsync(stream)).Document;
+ var doc = (await OpenApiDocument.LoadAsync(stream, settings: SettingsFixture.ReaderSettings)).Document;
var actualParam = doc.Paths["/pets"].Operations[OperationType.Get].Parameters[0];
var outputDoc = (await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0)).MakeLineBreaksEnvironmentNeutral();
var expectedParam = expected.Paths["/pets"].Operations[OperationType.Get].Parameters[0];
@@ -1276,7 +1271,7 @@ public void ParseBasicDocumentWithServerVariableShouldSucceed()
default: v2
enum: [v1, v2]
paths: {}
- """, "yaml");
+ """, "yaml", SettingsFixture.ReaderSettings);
var expected = new OpenApiDocument
{
@@ -1324,7 +1319,7 @@ public void ParseBasicDocumentWithServerVariableAndNoDefaultShouldFail()
version:
enum: [v1, v2]
paths: {}
- """, "yaml");
+ """, "yaml", SettingsFixture.ReaderSettings);
Assert.NotEmpty(result.Diagnostic.Errors);
}
@@ -1332,7 +1327,7 @@ public void ParseBasicDocumentWithServerVariableAndNoDefaultShouldFail()
[Fact]
public async Task ParseDocumentWithEmptyPathsSucceeds()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithEmptyPaths.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithEmptyPaths.yaml"), SettingsFixture.ReaderSettings);
Assert.Empty(result.Diagnostic.Errors);
}
@@ -1340,7 +1335,7 @@ public async Task ParseDocumentWithEmptyPathsSucceeds()
public async Task ParseDocumentWithExampleReferencesPasses()
{
// Act & Assert: Ensure no NullReferenceException is thrown
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithExampleReferences.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithExampleReferences.yaml"), SettingsFixture.ReaderSettings);
Assert.Empty(result.Diagnostic.Errors);
}
@@ -1348,7 +1343,7 @@ public async Task ParseDocumentWithExampleReferencesPasses()
public async Task ParseDocumentWithNonStandardMIMETypePasses()
{
// Act & Assert: Ensure NotSupportedException is not thrown for non-standard MIME type: text/x-yaml
- var result = await OpenApiDocument.LoadAsync(codacyApi);
+ var result = await OpenApiDocument.LoadAsync(codacyApi, SettingsFixture.ReaderSettings);
Assert.NotNull(result.Document);
}
}
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs
index bee674bfc..91d2a6059 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs
@@ -14,16 +14,11 @@ public class OpenApiEncodingTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiEncoding/";
- public OpenApiEncodingTests()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseBasicEncodingShouldSucceed()
{
// Act
- var encoding = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicEncoding.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var encoding = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicEncoding.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -39,7 +34,7 @@ public async Task ParseAdvancedEncodingShouldSucceed()
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "advancedEncoding.yaml"));
// Act
- var encoding = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new());
+ var encoding = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs
index 2a8691ab3..4ddd902e8 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs
@@ -16,15 +16,10 @@ public class OpenApiExampleTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiExample/";
- public OpenApiExampleTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseAdvancedExampleShouldSucceed()
{
- var example = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "advancedExample.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var example = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "advancedExample.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
var expected = new OpenApiExample
{
Value = new JsonObject
@@ -76,7 +71,7 @@ public async Task ParseAdvancedExampleShouldSucceed()
[Fact]
public async Task ParseExampleForcedStringSucceed()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "explicitString.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "explicitString.yaml"), SettingsFixture.ReaderSettings);
Assert.Empty(result.Diagnostic.Errors);
}
}
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs
index 9a11ef5c3..8e5cb6389 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs
@@ -18,16 +18,11 @@ public class OpenApiInfoTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiInfo/";
- public OpenApiInfoTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseAdvancedInfoShouldSucceed()
{
// Act
- var openApiInfo = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "advancedInfo.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var openApiInfo = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "advancedInfo.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
openApiInfo.Should().BeEquivalentTo(
@@ -84,7 +79,7 @@ public async Task ParseAdvancedInfoShouldSucceed()
public async Task ParseBasicInfoShouldSucceed()
{
// Act
- var openApiInfo = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicInfo.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var openApiInfo = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicInfo.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -114,7 +109,7 @@ public async Task ParseMinimalInfoShouldSucceed()
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "minimalInfo.yaml"));
// Act
- var openApiInfo = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new());
+ var openApiInfo = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs
index 2905266fc..f60ec2820 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs
@@ -19,16 +19,11 @@ public class OpenApiMediaTypeTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiMediaType/";
- public OpenApiMediaTypeTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseMediaTypeWithExampleShouldSucceed()
{
// Act
- var mediaType = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "mediaTypeWithExample.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var mediaType = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "mediaTypeWithExample.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
mediaType.Should().BeEquivalentTo(
@@ -49,7 +44,7 @@ public async Task ParseMediaTypeWithExampleShouldSucceed()
public async Task ParseMediaTypeWithExamplesShouldSucceed()
{
// Act
- var mediaType = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "mediaTypeWithExamples.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var mediaType = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "mediaTypeWithExamples.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
mediaType.Should().BeEquivalentTo(
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs
index c7a2317dc..661ca508d 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs
@@ -19,15 +19,10 @@ public class OpenApiOperationTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiOperation/";
- public OpenApiOperationTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task OperationWithSecurityRequirementShouldReferenceSecurityScheme()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "securedOperation.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "securedOperation.yaml"), SettingsFixture.ReaderSettings);
var securityScheme = result.Document.Paths["/"].Operations[OperationType.Get].Security[0].Keys.First();
Assert.Equivalent(result.Document.Components.SecuritySchemes.First().Value, securityScheme);
@@ -41,7 +36,7 @@ public async Task ParseOperationWithParameterWithNoLocationShouldSucceed()
Tags = new HashSet { new() { Name = "user" } }
};
// Act
- var operation = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "operationWithParameterWithNoLocation.json"), OpenApiSpecVersion.OpenApi3_0, openApiDocument);
+ var operation = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "operationWithParameterWithNoLocation.json"), OpenApiSpecVersion.OpenApi3_0, openApiDocument, SettingsFixture.ReaderSettings);
var expectedOp = new OpenApiOperation
{
Tags = new HashSet()
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs
index efdb87110..33ebb0267 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs
@@ -19,11 +19,6 @@ public class OpenApiParameterTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiParameter/";
- public OpenApiParameterTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParsePathParameterShouldSucceed()
{
@@ -31,7 +26,7 @@ public async Task ParsePathParameterShouldSucceed()
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "pathParameter.yaml"));
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -52,7 +47,7 @@ public async Task ParsePathParameterShouldSucceed()
public async Task ParseQueryParameterShouldSucceed()
{
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameter.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameter.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -79,7 +74,7 @@ public async Task ParseQueryParameterShouldSucceed()
public async Task ParseQueryParameterWithObjectTypeShouldSucceed()
{
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameterWithObjectType.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameterWithObjectType.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -106,7 +101,7 @@ public async Task ParseQueryParameterWithObjectTypeAndContentShouldSucceed()
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "queryParameterWithObjectTypeAndContent.yaml"));
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -147,7 +142,7 @@ public async Task ParseQueryParameterWithObjectTypeAndContentShouldSucceed()
public async Task ParseHeaderParameterShouldSucceed()
{
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "headerParameter.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "headerParameter.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -175,7 +170,7 @@ public async Task ParseHeaderParameterShouldSucceed()
public async Task ParseParameterWithNullLocationShouldSucceed()
{
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithNullLocation.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithNullLocation.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -199,7 +194,7 @@ public async Task ParseParameterWithNoLocationShouldSucceed()
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "parameterWithNoLocation.yaml"));
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -223,7 +218,7 @@ public async Task ParseParameterWithUnknownLocationShouldSucceed()
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "parameterWithUnknownLocation.yaml"));
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -244,7 +239,7 @@ public async Task ParseParameterWithUnknownLocationShouldSucceed()
public async Task ParseParameterWithExampleShouldSucceed()
{
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithExample.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithExample.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
parameter.Should().BeEquivalentTo(
@@ -267,7 +262,7 @@ public async Task ParseParameterWithExampleShouldSucceed()
public async Task ParseParameterWithExamplesShouldSucceed()
{
// Act
- var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithExamples.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithExamples.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
parameter.Should().BeEquivalentTo(
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiResponseTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiResponseTests.cs
index 2d41ed2e2..788dc2609 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiResponseTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiResponseTests.cs
@@ -16,15 +16,10 @@ public class OpenApiResponseTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiResponse/";
- public OpenApiResponseTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task ResponseWithReferencedHeaderShouldReferenceComponent()
{
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "responseWithHeaderReference.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "responseWithHeaderReference.yaml"), SettingsFixture.ReaderSettings);
var response = result.Document.Components.Responses["Test"];
var expected = response.Headers.First().Value;
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs
index 04d6de97d..7d57294c2 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs
@@ -24,11 +24,6 @@ public class OpenApiSchemaTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiSchema/";
- public OpenApiSchemaTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public void ParsePrimitiveSchemaShouldSucceed()
{
@@ -67,7 +62,7 @@ public void ParseExampleStringFragmentShouldSucceed()
}";
// Act
- var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic);
+ var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic, settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(new OpenApiDiagnostic(), diagnostic);
@@ -90,7 +85,7 @@ public void ParseEnumFragmentShouldSucceed()
]";
// Act
- var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic);
+ var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic, settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(new OpenApiDiagnostic(), diagnostic);
@@ -115,7 +110,7 @@ public void ParsePathFragmentShouldSucceed()
";
// Act
- var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic, "yaml");
+ var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic, "yaml", SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(new OpenApiDiagnostic(), diagnostic);
@@ -230,7 +225,7 @@ public void ParseBasicSchemaWithExampleShouldSucceed()
public async Task ParseBasicSchemaWithReferenceShouldSucceed()
{
// Act
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "basicSchemaWithReference.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "basicSchemaWithReference.yaml"), SettingsFixture.ReaderSettings);
// Assert
var components = result.Document.Components;
@@ -296,7 +291,7 @@ public async Task ParseBasicSchemaWithReferenceShouldSucceed()
public async Task ParseAdvancedSchemaWithReferenceShouldSucceed()
{
// Act
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "advancedSchemaWithReference.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "advancedSchemaWithReference.yaml"), SettingsFixture.ReaderSettings);
var expectedComponents = new OpenApiComponents
{
@@ -393,7 +388,7 @@ public async Task ParseAdvancedSchemaWithReferenceShouldSucceed()
public async Task ParseExternalReferenceSchemaShouldSucceed()
{
// Act
- var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "externalReferencesSchema.yaml"));
+ var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "externalReferencesSchema.yaml"), SettingsFixture.ReaderSettings);
// Assert
var components = result.Document.Components;
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs
index b0f02270c..ed864d240 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs
@@ -14,16 +14,11 @@ namespace Microsoft.OpenApi.Readers.Tests.V3Tests
public class OpenApiSecuritySchemeTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiSecurityScheme/";
- public OpenApiSecuritySchemeTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseHttpSecuritySchemeShouldSucceed()
{
// Act
- var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "httpSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "httpSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -38,7 +33,7 @@ public async Task ParseHttpSecuritySchemeShouldSucceed()
public async Task ParseApiKeySecuritySchemeShouldSucceed()
{
// Act
- var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "apiKeySecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "apiKeySecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -54,7 +49,7 @@ public async Task ParseApiKeySecuritySchemeShouldSucceed()
public async Task ParseBearerSecuritySchemeShouldSucceed()
{
// Act
- var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "bearerSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "bearerSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -70,7 +65,7 @@ public async Task ParseBearerSecuritySchemeShouldSucceed()
public async Task ParseOAuth2SecuritySchemeShouldSucceed()
{
// Act
- var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "oauth2SecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "oauth2SecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
@@ -96,7 +91,7 @@ public async Task ParseOAuth2SecuritySchemeShouldSucceed()
public async Task ParseOpenIdConnectSecuritySchemeShouldSucceed()
{
// Act
- var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "openIdConnectSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new());
+ var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "openIdConnectSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs
index 6485aad21..825a90574 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs
@@ -15,16 +15,11 @@ public class OpenApiXmlTests
{
private const string SampleFolderPath = "V3Tests/Samples/OpenApiXml/";
- public OpenApiXmlTests()
- {
- OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
- }
-
[Fact]
public async Task ParseBasicXmlShouldSucceed()
{
// Act
- var xml = await OpenApiModelFactory.LoadAsync(Resources.GetStream(Path.Combine(SampleFolderPath, "basicXml.yaml")), OpenApiSpecVersion.OpenApi3_0, new());
+ var xml = await OpenApiModelFactory.LoadAsync(Resources.GetStream(Path.Combine(SampleFolderPath, "basicXml.yaml")), OpenApiSpecVersion.OpenApi3_0, new(), settings: SettingsFixture.ReaderSettings);
// Assert
Assert.Equivalent(
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs
index 35e52cc59..39ca7b8ab 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs
@@ -24,11 +24,6 @@ namespace Microsoft.OpenApi.Tests.Models
[Collection("DefaultSettings")]
public class OpenApiDocumentTests
{
- public OpenApiDocumentTests()
- {
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- }
-
public static readonly OpenApiComponents TopLevelReferencingComponents = new OpenApiComponents()
{
Schemas =
@@ -1687,7 +1682,7 @@ And reading in similar documents(one has a whitespace) yields the same hash code
private static async Task ParseInputFileAsync(string filePath)
{
- var openApiDoc = (await OpenApiDocument.LoadAsync(filePath)).Document;
+ var openApiDoc = (await OpenApiDocument.LoadAsync(filePath, SettingsFixture.ReaderSettings)).Document;
return openApiDoc;
}
@@ -1990,7 +1985,7 @@ public async Task SerializeV31DocumentWithRefsInWebhooksWorks()
items:
type: object";
- var doc = (await OpenApiDocument.LoadAsync("Models/Samples/docWithReusableWebhooks.yaml")).Document;
+ var doc = (await OpenApiDocument.LoadAsync("Models/Samples/docWithReusableWebhooks.yaml", SettingsFixture.ReaderSettings)).Document;
var stringWriter = new StringWriter();
var writer = new OpenApiYamlWriter(stringWriter, new OpenApiWriterSettings { InlineLocalReferences = true });
@@ -2044,7 +2039,7 @@ public async Task SerializeDocWithDollarIdInDollarRefSucceeds()
radius:
type: number
";
- var doc = (await OpenApiDocument.LoadAsync("Models/Samples/docWithDollarId.yaml")).Document;
+ var doc = (await OpenApiDocument.LoadAsync("Models/Samples/docWithDollarId.yaml", SettingsFixture.ReaderSettings)).Document;
var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1);
Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral());
}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs
index 34284b9bd..b9f31f9e9 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs
@@ -132,9 +132,8 @@ public class OpenApiCallbackReferenceTests
public OpenApiCallbackReferenceTests()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- OpenApiDocument openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml).Document;
- OpenApiDocument openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml).Document;
+ OpenApiDocument openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
+ OpenApiDocument openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
openApiDoc.Workspace.AddDocumentId("https://myserver.com/beta", openApiDoc_2.BaseUri);
openApiDoc.Workspace.RegisterComponents(openApiDoc_2);
_externalCallbackReference = new("callbackEvent", openApiDoc, "https://myserver.com/beta");
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs
index a52c027f9..4e2ff6c3e 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs
@@ -111,9 +111,8 @@ public class OpenApiExampleReferenceTests
public OpenApiExampleReferenceTests()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml).Document;
- _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml).Document;
+ _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
+ _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
_openApiDoc.Workspace.AddDocumentId("https://myserver.com/beta", _openApiDoc_2.BaseUri);
_openApiDoc.Workspace.RegisterComponents(_openApiDoc_2);
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs
index 9b3c6c544..99c90916a 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs
@@ -80,9 +80,8 @@ public class OpenApiHeaderReferenceTests
public OpenApiHeaderReferenceTests()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml).Document;
- _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml).Document;
+ _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
+ _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
_openApiDoc.Workspace.AddDocumentId("https://myserver.com/beta", _openApiDoc_2.BaseUri);
_openApiDoc.Workspace.RegisterComponents(_openApiDoc_2);
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs
index 44822454f..d898dd0b6 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs
@@ -123,9 +123,8 @@ public class OpenApiLinkReferenceTests
public OpenApiLinkReferenceTests()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml).Document;
- _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml).Document;
+ _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
+ _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
_openApiDoc.Workspace.AddDocumentId("https://myserver.com/beta", _openApiDoc_2.BaseUri);
_openApiDoc.Workspace.RegisterComponents(_openApiDoc_2);
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs
index 8afc96f04..8078bdbe7 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs
@@ -81,9 +81,8 @@ public class OpenApiParameterReferenceTests
public OpenApiParameterReferenceTests()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml).Document;
- _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml).Document;
+ _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
+ _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
_openApiDoc.Workspace.AddDocumentId("https://myserver.com/beta", _openApiDoc_2.BaseUri);
_openApiDoc.Workspace.RegisterComponents(_openApiDoc_2);
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs
index 55c5bc7b5..a6930cf8c 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs
@@ -78,9 +78,8 @@ public class OpenApiPathItemReferenceTests
public OpenApiPathItemReferenceTests()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml).Document;
- _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml).Document;
+ _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
+ _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
_openApiDoc.Workspace.AddDocumentId("https://myserver.com/beta", _openApiDoc_2.BaseUri);
_openApiDoc.Workspace.RegisterComponents(_openApiDoc_2);
_openApiDoc_2.Workspace.RegisterComponents(_openApiDoc_2);
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs
index ef9bea785..118552c2a 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs
@@ -86,9 +86,8 @@ public class OpenApiRequestBodyReferenceTests
public OpenApiRequestBodyReferenceTests()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml).Document;
- _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml).Document;
+ _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
+ _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
_openApiDoc.Workspace.AddDocumentId("https://myserver.com/beta", _openApiDoc_2.BaseUri);
_openApiDoc.Workspace.RegisterComponents(_openApiDoc_2);
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs
index 785ea5e55..ec72f1fda 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs
@@ -69,9 +69,8 @@ public class OpenApiResponseReferenceTest
public OpenApiResponseReferenceTest()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml).Document;
- _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml).Document;
+ _openApiDoc = OpenApiDocument.Parse(OpenApi, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
+ _openApiDoc_2 = OpenApiDocument.Parse(OpenApi_2, OpenApiConstants.Yaml, SettingsFixture.ReaderSettings).Document;
_openApiDoc.Workspace.AddDocumentId("https://myserver.com/beta", _openApiDoc_2.BaseUri);
_openApiDoc.Workspace.RegisterComponents(_openApiDoc_2);
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs
index 56b7e6d07..3b5100825 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs
@@ -43,8 +43,7 @@ public class OpenApiSecuritySchemeReferenceTests
public OpenApiSecuritySchemeReferenceTests()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- var result = OpenApiDocument.Parse(OpenApi, "yaml");
+ var result = OpenApiDocument.Parse(OpenApi, "yaml", SettingsFixture.ReaderSettings);
_openApiSecuritySchemeReference = new("mySecurityScheme", result.Document);
}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs
index 250f8ee53..bed3500d3 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs
@@ -63,8 +63,7 @@ public class OpenApiTagReferenceTest
public OpenApiTagReferenceTest()
{
- OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
- var result = OpenApiDocument.Parse(OpenApi, "yaml");
+ var result = OpenApiDocument.Parse(OpenApi, "yaml", SettingsFixture.ReaderSettings);
_openApiTagReference = new("user", result.Document);
}
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index 6686f1446..76697d7ae 100644
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -733,7 +733,7 @@ namespace Microsoft.OpenApi.Models
public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
public void SetReferenceHostDocument() { }
public static Microsoft.OpenApi.Reader.ReadResult Load(System.IO.MemoryStream stream, string? format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) { }
- public static System.Threading.Tasks.Task LoadAsync(string url, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) { }
+ public static System.Threading.Tasks.Task LoadAsync(string url, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null, System.Threading.CancellationToken token = default) { }
public static System.Threading.Tasks.Task LoadAsync(System.IO.Stream stream, string? format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null, System.Threading.CancellationToken cancellationToken = default) { }
public static Microsoft.OpenApi.Reader.ReadResult Parse(string input, string? format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) { }
}
@@ -1490,12 +1490,6 @@ namespace Microsoft.OpenApi.Reader
public static T Parse(string input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, string format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null)
where T : Microsoft.OpenApi.Interfaces.IOpenApiElement { }
}
- public static class OpenApiReaderRegistry
- {
- public static readonly Microsoft.OpenApi.Interfaces.IOpenApiReader DefaultReader;
- public static Microsoft.OpenApi.Interfaces.IOpenApiReader GetReader(string format) { }
- public static void RegisterReader(string format, Microsoft.OpenApi.Interfaces.IOpenApiReader reader) { }
- }
public class OpenApiReaderSettings
{
public OpenApiReaderSettings() { }
@@ -1503,10 +1497,14 @@ namespace Microsoft.OpenApi.Reader
public Microsoft.OpenApi.Interfaces.IStreamLoader CustomExternalLoader { get; set; }
public System.Collections.Generic.List DefaultContentType { get; set; }
public System.Collections.Generic.Dictionary> ExtensionParsers { get; set; }
+ public System.Net.Http.HttpClient HttpClient { init; }
public bool LeaveStreamOpen { get; set; }
public bool LoadExternalRefs { get; set; }
+ public System.Collections.Generic.Dictionary Readers { get; init; }
public Microsoft.OpenApi.Validations.ValidationRuleSet RuleSet { get; set; }
+ public void AddJsonReader() { }
public void AddMicrosoftExtensionParsers() { }
+ public bool TryAddReader(string format, Microsoft.OpenApi.Interfaces.IOpenApiReader reader) { }
}
public static class OpenApiVersionExtensionMethods
{
@@ -1551,7 +1549,7 @@ namespace Microsoft.OpenApi.Reader.Services
{
public class DefaultStreamLoader : Microsoft.OpenApi.Interfaces.IStreamLoader
{
- public DefaultStreamLoader(System.Uri baseUrl) { }
+ public DefaultStreamLoader(System.Uri baseUrl, System.Net.Http.HttpClient httpClient) { }
public System.Threading.Tasks.Task LoadAsync(System.Uri uri, System.Threading.CancellationToken cancellationToken = default) { }
}
}
diff --git a/test/Microsoft.OpenApi.Tests/Reader/OpenApiReaderSettingsTests.cs b/test/Microsoft.OpenApi.Tests/Reader/OpenApiReaderSettingsTests.cs
new file mode 100644
index 000000000..b01289c1d
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Reader/OpenApiReaderSettingsTests.cs
@@ -0,0 +1,78 @@
+using System;
+using Microsoft.OpenApi.MicrosoftExtensions;
+using Microsoft.OpenApi.Models;
+using Xunit;
+
+namespace Microsoft.OpenApi.Reader.Tests;
+
+public class OpenApiReaderSettingsTests
+{
+ [Fact]
+ public void Defensive()
+ {
+ var settings = new OpenApiReaderSettings();
+ Assert.Throws(() => settings.GetReader(null));
+ Assert.Throws(() => settings.GetReader(string.Empty));
+
+ Assert.Throws(() => settings.TryAddReader(null, null));
+ Assert.Throws(() => settings.TryAddReader(string.Empty, null));
+ Assert.Throws(() => settings.TryAddReader(null, new OpenApiJsonReader()));
+ Assert.Throws(() => settings.TryAddReader(string.Empty, new OpenApiJsonReader()));
+ Assert.Throws(() => settings.TryAddReader("json", null));
+ }
+
+ [Fact]
+ public void Defaults()
+ {
+ var settings = new OpenApiReaderSettings();
+ Assert.NotNull(settings.HttpClient);
+
+ Assert.IsType(settings.GetReader(OpenApiConstants.Json));
+ Assert.Throws(() =>settings.GetReader(OpenApiConstants.Yaml));
+ Assert.Single(settings.Readers);
+
+ Assert.Equal(StringComparer.OrdinalIgnoreCase, settings.Readers.Comparer);
+
+ Assert.False(settings.TryAddReader("json", new OpenApiJsonReader()));
+ Assert.Empty(settings.ExtensionParsers);
+ }
+ [Fact]
+ public void InitializesReadersWithComparer()
+ {
+ var settings = new OpenApiReaderSettings
+ {
+ Readers = []
+ };
+
+ Assert.Equal(StringComparer.OrdinalIgnoreCase, settings.Readers.Comparer);
+ }
+ [Fact]
+ public void AddsMicrosoftExtensions()
+ {
+ var settings = new OpenApiReaderSettings();
+ Assert.Empty(settings.ExtensionParsers);
+ settings.AddMicrosoftExtensionParsers();
+
+ Assert.NotEmpty(settings.ExtensionParsers);
+ Assert.Contains(OpenApiPagingExtension.Name, settings.ExtensionParsers.Keys);
+ Assert.Contains(OpenApiEnumValuesDescriptionExtension.Name, settings.ExtensionParsers.Keys);
+ Assert.Contains(OpenApiPrimaryErrorMessageExtension.Name, settings.ExtensionParsers.Keys);
+ Assert.Contains(OpenApiDeprecationExtension.Name, settings.ExtensionParsers.Keys);
+ Assert.Contains(OpenApiReservedParameterExtension.Name, settings.ExtensionParsers.Keys);
+ Assert.Contains(OpenApiEnumFlagsExtension.Name, settings.ExtensionParsers.Keys);
+ }
+ [Fact]
+ public void AddsJsonReader()
+ {
+ var settings = new OpenApiReaderSettings()
+ {
+ Readers = []
+ };
+
+ Assert.Empty(settings.Readers);
+
+ settings.AddJsonReader();
+ Assert.Single(settings.Readers);
+ Assert.IsType(settings.GetReader(OpenApiConstants.Json));
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/SettingsFixture.cs b/test/Microsoft.OpenApi.Tests/SettingsFixture.cs
new file mode 100644
index 000000000..96ca4cbe8
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/SettingsFixture.cs
@@ -0,0 +1,7 @@
+using Microsoft.OpenApi.Reader;
+
+namespace Microsoft.OpenApi.Tests;
+public static class SettingsFixture
+{
+ public static OpenApiReaderSettings ReaderSettings { get { var settings = new OpenApiReaderSettings(); settings.AddYamlReader() ; return settings; } }
+}