public void OpenApiWorkspacesShouldNormalizeDocumentLocations() { var workspace = new OpenApiWorkspace(); workspace.AddDocument("hello", new OpenApiDocument()); workspace.AddDocument("hi", new OpenApiDocument()); Assert.True(workspace.Contains("./hello")); Assert.True(workspace.Contains("./foo/../hello")); Assert.True(workspace.Contains("file://" + Environment.CurrentDirectory + "/./foo/../hello")); Assert.False(workspace.Contains("./goodbye")); }
internal async Task LoadAsync(OpenApiReference reference, OpenApiDocument document) { _workspace.AddDocument(reference.ExternalResource, document); document.Workspace = _workspace; // Collect remote references by walking document var referenceCollector = new OpenApiRemoteReferenceCollector(document); var collectorWalker = new OpenApiWalker(referenceCollector); collectorWalker.Walk(document); var reader = new OpenApiStreamReader(_readerSettings); // Walk references foreach (var item in referenceCollector.References) { // If not already in workspace, load it and process references if (!_workspace.Contains(item.ExternalResource)) { var input = await _loader.LoadAsync(new Uri(item.ExternalResource, UriKind.RelativeOrAbsolute)); var result = await reader.ReadAsync(input); // TODO merge _diagnositics await LoadAsync(item, result.OpenApiDocument); } } }