diff --git a/Tests/OpenAPIKitTests/ContentTests.swift b/Tests/OpenAPIKitTests/ContentTests.swift index 7e70e6e4a..bea50b851 100644 --- a/Tests/OpenAPIKitTests/ContentTests.swift +++ b/Tests/OpenAPIKitTests/ContentTests.swift @@ -97,7 +97,7 @@ extension ContentTests { let content = OpenAPI.Content(schema: .init(.external("hello.json#/world"))) let encodedContent = try! testStringFromEncoding(of: content) - XCTAssertEqual(encodedContent, + assertJSONEquivalent(encodedContent, """ { "schema" : { @@ -126,7 +126,7 @@ extension ContentTests { let content = OpenAPI.Content(schema: .init(.string)) let encodedContent = try! testStringFromEncoding(of: content) - XCTAssertEqual(encodedContent, + assertJSONEquivalent(encodedContent, """ { "schema" : { @@ -156,7 +156,7 @@ extension ContentTests { example: [ "hello": "world" ]) let encodedContent = try! testStringFromEncoding(of: content) - XCTAssertEqual(encodedContent, + assertJSONEquivalent(encodedContent, """ { "example" : { @@ -210,7 +210,7 @@ extension ContentTests { examples: ["hello": .b(OpenAPI.Example(value: .init([ "hello": "world" ])))]) let encodedContent = try! testStringFromEncoding(of: content) - XCTAssertEqual(encodedContent, + assertJSONEquivalent(encodedContent, """ { "examples" : { @@ -303,7 +303,7 @@ extension ContentTests { encoding: ["json": .init(contentType: .json)]) let encodedContent = try! testStringFromEncoding(of: content) - XCTAssertEqual(encodedContent, + assertJSONEquivalent(encodedContent, """ { "encoding" : { @@ -346,7 +346,7 @@ extension ContentTests { let encodedContent = try! testStringFromEncoding(of: content) - XCTAssertEqual(encodedContent, + assertJSONEquivalent(encodedContent, """ { "schema" : { @@ -366,7 +366,7 @@ extension ContentTests { let encodedContent = try! testStringFromEncoding(of: content) - XCTAssertEqual(encodedContent, + assertJSONEquivalent(encodedContent, """ { "schema" : { @@ -449,7 +449,7 @@ extension ContentTests { let encodedEncoding = try! testStringFromEncoding(of: encoding) - XCTAssertEqual(encodedEncoding, + assertJSONEquivalent(encodedEncoding, """ { @@ -473,7 +473,7 @@ extension ContentTests { let encodedEncoding = try! testStringFromEncoding(of: encoding) - XCTAssertEqual(encodedEncoding, + assertJSONEquivalent(encodedEncoding, """ { "contentType" : "text\\/csv" @@ -501,7 +501,7 @@ extension ContentTests { let encodedEncoding = try! testStringFromEncoding(of: encoding) - XCTAssertEqual(encodedEncoding, + assertJSONEquivalent(encodedEncoding, """ { "headers" : { @@ -544,7 +544,7 @@ extension ContentTests { let encodedEncoding = try! testStringFromEncoding(of: encoding) - XCTAssertEqual(encodedEncoding, + assertJSONEquivalent(encodedEncoding, """ { "style" : "pipeDelimited" @@ -573,7 +573,7 @@ extension ContentTests { let encodedEncoding = try! testStringFromEncoding(of: encoding) - XCTAssertEqual(encodedEncoding, + assertJSONEquivalent(encodedEncoding, """ { "explode" : false @@ -602,7 +602,7 @@ extension ContentTests { let encodedEncoding = try! testStringFromEncoding(of: encoding) - XCTAssertEqual(encodedEncoding, + assertJSONEquivalent(encodedEncoding, """ { "allowReserved" : true diff --git a/Tests/OpenAPIKitTests/DiscriminatorTests.swift b/Tests/OpenAPIKitTests/DiscriminatorTests.swift index 4bdeb6cfd..9e9021747 100644 --- a/Tests/OpenAPIKitTests/DiscriminatorTests.swift +++ b/Tests/OpenAPIKitTests/DiscriminatorTests.swift @@ -28,7 +28,7 @@ extension DiscriminatorTests { let discriminator = OpenAPI.Discriminator(propertyName: "hello") let encodedDiscriminator = try! testStringFromEncoding(of: discriminator) - XCTAssertEqual(encodedDiscriminator, + assertJSONEquivalent(encodedDiscriminator, """ { "propertyName" : "hello" @@ -54,7 +54,7 @@ extension DiscriminatorTests { mapping: ["hello": "world"]) let encodedDiscriminator = try! testStringFromEncoding(of: discriminator) - XCTAssertEqual(encodedDiscriminator, + assertJSONEquivalent(encodedDiscriminator, """ { "mapping" : { diff --git a/Tests/OpenAPIKitTests/DocumentInfoTests.swift b/Tests/OpenAPIKitTests/DocumentInfoTests.swift index 9b66f64a9..22331aa2c 100644 --- a/Tests/OpenAPIKitTests/DocumentInfoTests.swift +++ b/Tests/OpenAPIKitTests/DocumentInfoTests.swift @@ -40,7 +40,7 @@ extension DocumentInfoTests { let encodedLicense = try testStringFromEncoding(of: license) - XCTAssertEqual(encodedLicense, + assertJSONEquivalent(encodedLicense, """ { "name" : "MIT" @@ -69,7 +69,7 @@ extension DocumentInfoTests { let encodedLicense = try testStringFromEncoding(of: license) - XCTAssertEqual(encodedLicense, + assertJSONEquivalent(encodedLicense, """ { "name" : "MIT", @@ -100,7 +100,7 @@ extension DocumentInfoTests { let encodedContact = try testStringFromEncoding(of: contact) - XCTAssertEqual(encodedContact, + assertJSONEquivalent(encodedContact, """ { "name" : "contact" @@ -129,7 +129,7 @@ extension DocumentInfoTests { let encodedContact = try testStringFromEncoding(of: contact) - XCTAssertEqual(encodedContact, + assertJSONEquivalent(encodedContact, """ { "url" : "http:\\/\\/google.com" @@ -158,7 +158,7 @@ extension DocumentInfoTests { let encodedContact = try testStringFromEncoding(of: contact) - XCTAssertEqual(encodedContact, + assertJSONEquivalent(encodedContact, """ { "email" : "email" @@ -187,7 +187,7 @@ extension DocumentInfoTests { let encodedInfo = try testStringFromEncoding(of: info) - XCTAssertEqual(encodedInfo, + assertJSONEquivalent(encodedInfo, """ { "title" : "title", @@ -222,7 +222,7 @@ extension DocumentInfoTests { let encodedInfo = try testStringFromEncoding(of: info) - XCTAssertEqual(encodedInfo, + assertJSONEquivalent(encodedInfo, """ { "description" : "description", @@ -263,7 +263,7 @@ extension DocumentInfoTests { let encodedInfo = try testStringFromEncoding(of: info) - XCTAssertEqual(encodedInfo, + assertJSONEquivalent(encodedInfo, """ { "termsOfService" : "http:\\/\\/google.com", @@ -304,7 +304,7 @@ extension DocumentInfoTests { let encodedInfo = try testStringFromEncoding(of: info) - XCTAssertEqual(encodedInfo, + assertJSONEquivalent(encodedInfo, """ { "contact" : { @@ -349,7 +349,7 @@ extension DocumentInfoTests { let encodedInfo = try testStringFromEncoding(of: info) - XCTAssertEqual(encodedInfo, + assertJSONEquivalent(encodedInfo, """ { "license" : { diff --git a/Tests/OpenAPIKitTests/DocumentTests.swift b/Tests/OpenAPIKitTests/DocumentTests.swift index 6b03af389..a67b1fb31 100644 --- a/Tests/OpenAPIKitTests/DocumentTests.swift +++ b/Tests/OpenAPIKitTests/DocumentTests.swift @@ -69,7 +69,7 @@ final class DocumentTests: XCTestCase { XCTFail("Expected data corrupted decoding error") return } - XCTAssertEqual(context.debugDescription, "Each key found in a Security Requirement dictionary must refer to a Security Scheme present in the Components dictionary.") + assertJSONEquivalent(context.debugDescription, "Each key found in a Security Requirement dictionary must refer to a Security Scheme present in the Components dictionary.") } } } @@ -86,7 +86,7 @@ extension DocumentTests { ) let encodedDocument = try testStringFromEncoding(of: document) - XCTAssertEqual( + assertJSONEquivalent( encodedDocument, """ { diff --git a/Tests/OpenAPIKitTests/ExampleTests.swift b/Tests/OpenAPIKitTests/ExampleTests.swift index f43d389c7..14774e63c 100644 --- a/Tests/OpenAPIKitTests/ExampleTests.swift +++ b/Tests/OpenAPIKitTests/ExampleTests.swift @@ -46,7 +46,7 @@ extension ExampleTests { value: .init(URL(string: "https://google.com")!)) let encodedExample = try! testStringFromEncoding(of: example) - XCTAssertEqual(encodedExample, + assertJSONEquivalent(encodedExample, """ { "externalValue" : "https:\\/\\/google.com", @@ -75,7 +75,7 @@ extension ExampleTests { value: .init("world")) let encodedExample = try! testStringFromEncoding(of: example) - XCTAssertEqual(encodedExample, + assertJSONEquivalent(encodedExample, """ { "description" : "hello", @@ -104,7 +104,7 @@ extension ExampleTests { vendorExtensions: ["x-hello": 10]) let encodedExample = try! testStringFromEncoding(of: example) - XCTAssertEqual(encodedExample, + assertJSONEquivalent(encodedExample, """ { "value" : "world", @@ -132,7 +132,7 @@ extension ExampleTests { let example = OpenAPI.Example(value: .init("world")) let encodedExample = try! testStringFromEncoding(of: example) - XCTAssertEqual(encodedExample, + assertJSONEquivalent(encodedExample, """ { "value" : "world" @@ -157,7 +157,7 @@ extension ExampleTests { let example = OpenAPI.Example(value: .init(URL(string: "https://google.com")!)) let encodedExample = try! testStringFromEncoding(of: example) - XCTAssertEqual(encodedExample, + assertJSONEquivalent(encodedExample, """ { "externalValue" : "https:\\/\\/google.com" diff --git a/Tests/OpenAPIKitTests/ExternalDocTests.swift b/Tests/OpenAPIKitTests/ExternalDocTests.swift index 299561cd2..20e2244de 100644 --- a/Tests/OpenAPIKitTests/ExternalDocTests.swift +++ b/Tests/OpenAPIKitTests/ExternalDocTests.swift @@ -27,7 +27,7 @@ extension ExternalDocTests { let encodedExternalDoc = try! testStringFromEncoding(of: externalDoc) - XCTAssertEqual(encodedExternalDoc, + assertJSONEquivalent(encodedExternalDoc, """ { "description" : "hello world", @@ -56,7 +56,7 @@ extension ExternalDocTests { let encodedExternalDoc = try! testStringFromEncoding(of: externalDoc) - XCTAssertEqual(encodedExternalDoc, + assertJSONEquivalent(encodedExternalDoc, """ { "url" : "http:\\/\\/google.com" diff --git a/Tests/OpenAPIKitTests/HeaderTests.swift b/Tests/OpenAPIKitTests/HeaderTests.swift index 50e38af5a..2b16772fa 100644 --- a/Tests/OpenAPIKitTests/HeaderTests.swift +++ b/Tests/OpenAPIKitTests/HeaderTests.swift @@ -52,7 +52,7 @@ extension HeaderTests { let headerEncoding = try testStringFromEncoding(of: header) - XCTAssertEqual(headerEncoding, + assertJSONEquivalent(headerEncoding, """ { "content" : { @@ -95,7 +95,7 @@ extension HeaderTests { let headerEncoding = try testStringFromEncoding(of: header) - XCTAssertEqual(headerEncoding, + assertJSONEquivalent(headerEncoding, """ { "schema" : { @@ -133,7 +133,7 @@ extension HeaderTests { let headerEncoding = try testStringFromEncoding(of: header) - XCTAssertEqual(headerEncoding, + assertJSONEquivalent(headerEncoding, """ { "content" : { @@ -186,7 +186,7 @@ extension HeaderTests { let headerEncoding = try testStringFromEncoding(of: header) - XCTAssertEqual(headerEncoding, + assertJSONEquivalent(headerEncoding, """ { "content" : { @@ -239,7 +239,7 @@ extension HeaderTests { let headerEncoding = try testStringFromEncoding(of: header) - XCTAssertEqual(headerEncoding, + assertJSONEquivalent(headerEncoding, """ { "content" : { diff --git a/Tests/OpenAPIKitTests/RequestTests.swift b/Tests/OpenAPIKitTests/RequestTests.swift index 7a269a4aa..d40181eeb 100644 --- a/Tests/OpenAPIKitTests/RequestTests.swift +++ b/Tests/OpenAPIKitTests/RequestTests.swift @@ -49,7 +49,7 @@ extension RequestTests { let request = OpenAPI.Request(content: content) let encodedString = try! testStringFromEncoding(of: request) - XCTAssertEqual(encodedString, "{\n \"content\" : {\n\n }\n}") + assertJSONEquivalent(encodedString, "{\n \"content\" : {\n\n }\n}") } func test_onlyEmptyContent_decode() { @@ -65,7 +65,7 @@ extension RequestTests { ]) let encodedString = try! testStringFromEncoding(of: request) - XCTAssertEqual(encodedString, + assertJSONEquivalent(encodedString, """ { "content" : { @@ -100,7 +100,7 @@ extension RequestTests { ]) let encodedString = try! testStringFromEncoding(of: request) - XCTAssertEqual(encodedString, + assertJSONEquivalent(encodedString, """ { "content" : { @@ -154,7 +154,7 @@ extension RequestTests { content: [:]) let encodedString = try! testStringFromEncoding(of: request) - XCTAssertEqual(encodedString, + assertJSONEquivalent(encodedString, """ { "content" : { @@ -186,7 +186,7 @@ extension RequestTests { required: true) let encodedString = try! testStringFromEncoding(of: request) - XCTAssertEqual(encodedString, + assertJSONEquivalent(encodedString, """ { "content" : { @@ -227,7 +227,7 @@ extension RequestTests { ]) let encodedString = try! testStringFromEncoding(of: request) - XCTAssertEqual(encodedString, + assertJSONEquivalent(encodedString, """ { "content" : { @@ -287,7 +287,7 @@ extension RequestTests { ]) let encodedString = try! testStringFromEncoding(of: request) - XCTAssertEqual(encodedString, + assertJSONEquivalent(encodedString, """ { "content" : { diff --git a/Tests/OpenAPIKitTests/ResponseTests.swift b/Tests/OpenAPIKitTests/ResponseTests.swift index 3c6e8ed0a..7718adde6 100644 --- a/Tests/OpenAPIKitTests/ResponseTests.swift +++ b/Tests/OpenAPIKitTests/ResponseTests.swift @@ -77,7 +77,7 @@ extension ResponseTests { let response = OpenAPI.Response(description: "", content: [:]) let encodedResponse = try! testStringFromEncoding(of: response) - XCTAssertEqual(encodedResponse, + assertJSONEquivalent(encodedResponse, """ { "description" : "" @@ -88,7 +88,7 @@ extension ResponseTests { let response2 = OpenAPI.Response(description: "", headers: [:], content: [:]) let encodedResponse2 = try! testStringFromEncoding(of: response2) - XCTAssertEqual(encodedResponse2, + assertJSONEquivalent(encodedResponse2, """ { "description" : "", @@ -144,7 +144,7 @@ extension ResponseTests { let encodedResponse = try! testStringFromEncoding(of: response) - XCTAssertEqual(encodedResponse, + assertJSONEquivalent(encodedResponse, """ { "content" : { @@ -200,7 +200,7 @@ extension ResponseTests { let status = StatusCodeWrapper(status: .default) let encodedStatus = try! testStringFromEncoding(of: status) - XCTAssertEqual(encodedStatus, + assertJSONEquivalent(encodedStatus, """ { "status" : "default" @@ -224,7 +224,7 @@ extension ResponseTests { let status = StatusCodeWrapper(status: 123) let encodedStatus = try! testStringFromEncoding(of: status) - XCTAssertEqual(encodedStatus, + assertJSONEquivalent(encodedStatus, """ { "status" : "123" diff --git a/Tests/OpenAPIKitTests/Schema Object/SchemaObjectInternalTests.swift b/Tests/OpenAPIKitTests/Schema Object/SchemaObjectInternalTests.swift index 480b1243d..fd1abb0f5 100644 --- a/Tests/OpenAPIKitTests/Schema Object/SchemaObjectInternalTests.swift +++ b/Tests/OpenAPIKitTests/Schema Object/SchemaObjectInternalTests.swift @@ -18,18 +18,18 @@ class SchemaObjectInternalTests: XCTestCase { func test_fragmentValue() { let f1 = JSONSchema.fragmentString(from: true) - XCTAssertEqual(f1, "true") + assertJSONEquivalent(f1, "true") let f2 = JSONSchema.fragmentString(from: 10) - XCTAssertEqual(f2, "10") + assertJSONEquivalent(f2, "10") let f3 = JSONSchema.fragmentString(from: 11.3) - XCTAssertEqual(f3, "11.3") + assertJSONEquivalent(f3, "11.3") let f4 = JSONSchema.fragmentString(from: Float(3.4)) - XCTAssertEqual(f4, "3.4") + assertJSONEquivalent(f4, "3.4") let f5 = JSONSchema.fragmentString(from: "hello world") - XCTAssertEqual(f5, "\"hello world\"") + assertJSONEquivalent(f5, "\"hello world\"") } } diff --git a/Tests/OpenAPIKitTests/Schema Object/SchemaObjectTests.swift b/Tests/OpenAPIKitTests/Schema Object/SchemaObjectTests.swift index 44dc2064d..b4f0f8d82 100644 --- a/Tests/OpenAPIKitTests/Schema Object/SchemaObjectTests.swift +++ b/Tests/OpenAPIKitTests/Schema Object/SchemaObjectTests.swift @@ -438,7 +438,7 @@ final class SchemaObjectTests: XCTestCase { let not = JSONSchema.not(.string) let ref = JSONSchema.reference(.external("hello.yml")) - XCTAssertEqual(object.example, "{\n\n}") + assertJSONEquivalent(object.example, "{\n\n}") XCTAssertNil(all.example) XCTAssertNil(one.example) @@ -476,8 +476,8 @@ final class SchemaObjectTests: XCTestCase { XCTAssertThrowsError(try JSONSchema.reference(.external("hello/world.json#/hello")) .with(example: ["hello"], using: testEncoder)) - XCTAssertEqual(object.example, "{\n\n}") - XCTAssertEqual(array.example, "[\n \"hello\"\n]") + assertJSONEquivalent(object.example, "{\n\n}") + assertJSONEquivalent(array.example, "[\n \"hello\"\n]") XCTAssertEqual(boolean.example, "true") XCTAssertEqual(double.example, "10.5") @@ -3231,14 +3231,14 @@ extension SchemaObjectTests { } } -private func testEncodingPropertyLines(entity: T, propertyLines: [String]) { +private func testEncodingPropertyLines(entity: T, propertyLines: [String], file: StaticString = #file, line: UInt = #line) { var expectedString = "{\n" for line in propertyLines { expectedString += " " + line + "\n" } expectedString += "}" - XCTAssertEqual(try? testStringFromEncoding(of: entity), expectedString) + assertJSONEquivalent(try? testStringFromEncoding(of: entity), expectedString, file: file, line: line) } private func testAllSharedSimpleContextEncoding( diff --git a/Tests/OpenAPIKitTests/ServerTests.swift b/Tests/OpenAPIKitTests/ServerTests.swift index deffea129..f8d34f5c8 100644 --- a/Tests/OpenAPIKitTests/ServerTests.swift +++ b/Tests/OpenAPIKitTests/ServerTests.swift @@ -66,7 +66,7 @@ extension ServerTests { let server = Server(url: URL(string: "https://hello.com")!) let encodedServer = try! testStringFromEncoding(of: server) - XCTAssertEqual(encodedServer, + assertJSONEquivalent(encodedServer, """ { "url" : "https:\\/\\/hello.com" @@ -112,7 +112,7 @@ extension ServerTests { ]) let encodedServer = try! testStringFromEncoding(of: server) - XCTAssertEqual(encodedServer, + assertJSONEquivalent(encodedServer, """ { "description" : "hello world", diff --git a/Tests/OpenAPIKitTests/TagTests.swift b/Tests/OpenAPIKitTests/TagTests.swift index c7da52993..6a94dcf8e 100644 --- a/Tests/OpenAPIKitTests/TagTests.swift +++ b/Tests/OpenAPIKitTests/TagTests.swift @@ -32,7 +32,7 @@ extension TagTests { let tag = OpenAPI.Tag(name: "hello") let encodedTag = try! testStringFromEncoding(of: tag) - XCTAssertEqual(encodedTag, + assertJSONEquivalent(encodedTag, """ { "name" : "hello" @@ -58,7 +58,7 @@ extension TagTests { description: "world") let encodedTag = try! testStringFromEncoding(of: tag) - XCTAssertEqual(encodedTag, + assertJSONEquivalent(encodedTag, """ { "description" : "world", @@ -87,7 +87,7 @@ extension TagTests { externalDocs: .init(url: URL(string: "http://google.com")!)) let encodedTag = try! testStringFromEncoding(of: tag) - XCTAssertEqual(encodedTag, + assertJSONEquivalent(encodedTag, """ { "description" : "world", diff --git a/Tests/OpenAPIKitTests/TestHelpers.swift b/Tests/OpenAPIKitTests/TestHelpers.swift index 472c89ff5..1d95835fc 100644 --- a/Tests/OpenAPIKitTests/TestHelpers.swift +++ b/Tests/OpenAPIKitTests/TestHelpers.swift @@ -6,6 +6,7 @@ // import Foundation +import XCTest let testEncoder = { () -> JSONEncoder in let encoder = JSONEncoder() @@ -38,3 +39,24 @@ let testDecoder = { () -> JSONDecoder in #endif return decoder }() + +func assertJSONEquivalent(_ str1: String?, _ str2: String?, file: StaticString = #file, line: UInt = #line) { + + // when testing on Linux, pretty printing has slightly different + // meaning so the tests pass on OS X as written but need whitespace + // stripped to pass on Linux + #if os(Linux) + var str1 = str1 + var str2 = str2 + + str1?.removeAll { $0.isWhitespace } + str2?.removeAll { $0.isWhitespace } + #endif + + XCTAssertEqual( + str1, + str2, + file: file, + line: line + ) +} diff --git a/Tests/OpenAPIKitTests/VendorExtendableTests.swift b/Tests/OpenAPIKitTests/VendorExtendableTests.swift index fa3670029..da735a7bf 100644 --- a/Tests/OpenAPIKitTests/VendorExtendableTests.swift +++ b/Tests/OpenAPIKitTests/VendorExtendableTests.swift @@ -95,7 +95,7 @@ extension VendorExtendableTests { let encoded = try testStringFromEncoding(of: test) - XCTAssertEqual(encoded, + assertJSONEquivalent(encoded, """ { "one" : "world", diff --git a/Tests/OpenAPIKitTests/XMLTests.swift b/Tests/OpenAPIKitTests/XMLTests.swift index d35f0cc61..a15592125 100644 --- a/Tests/OpenAPIKitTests/XMLTests.swift +++ b/Tests/OpenAPIKitTests/XMLTests.swift @@ -27,7 +27,7 @@ extension XMLTests { let xml = OpenAPI.XML() let encodedXML = try testStringFromEncoding(of: xml) - XCTAssertEqual( + assertJSONEquivalent( encodedXML, """ { @@ -63,7 +63,7 @@ extension XMLTests { ) let encodedXML = try testStringFromEncoding(of: xml) - XCTAssertEqual( + assertJSONEquivalent( encodedXML, """ {