diff --git a/Package.swift b/Package.swift index 2e83e625..4698e25b 100644 --- a/Package.swift +++ b/Package.swift @@ -32,6 +32,15 @@ let openGraphShimsTarget = Target.target( swiftSettings: sharedSwiftSettings ) +let openGraphShimsTestTarget = Target.testTarget( + name: "OpenGraphShimsTests", + dependencies: [ + "OpenGraphShims", + ], + exclude: ["README.md"], + swiftSettings: sharedSwiftSettings +) + let openGraphTestTarget = Target.testTarget( name: "OpenGraphTests", dependencies: [ @@ -146,6 +155,8 @@ if swiftTestingCondition { package.targets.append(openGraphCompatibilityTestTarget) addTestDependency(openGraphTempTestTarget) package.targets.append(openGraphTempTestTarget) + addTestDependency(openGraphShimsTestTarget) + package.targets.append(openGraphShimsTestTarget) } let compatibilityTestCondition = envEnable("OPENGRAPH_COMPATIBILITY_TEST") diff --git a/Sources/OpenGraphShims/OGTypeID+Debug.swift b/Sources/OpenGraphShims/OGTypeID+Debug.swift index 65bd116f..bac11cb3 100644 --- a/Sources/OpenGraphShims/OGTypeID+Debug.swift +++ b/Sources/OpenGraphShims/OGTypeID+Debug.swift @@ -43,7 +43,7 @@ extension OGTypeID { write(&result, string: "enum \(type) {", level: level) _ = forEachField(options: [._4]) { name, offset, type in // anything contains ._4 will work here let fieldName = String(cString: name) - write(&result, string: "case \(fieldName)(\(type)) // offset = \(offset)", level: level+1) + write(&result, string: "case \(fieldName)(\(type)) // offset = \(offset.hex)", level: level+1) if recursive { OGTypeID(type)._layoutDescription(&result, recursive: true, level: level+1) } @@ -53,7 +53,7 @@ extension OGTypeID { case .optional: _ = forEachField(options: [._4]) { name, offset, type in // anything contains ._4 will work here let fieldName = String(cString: name) - write(&result, string: "case \(fieldName)(\(type)) // offset = \(offset)", level: level+1) + write(&result, string: "case \(fieldName)(\(type)) // offset = \(offset.hex)", level: level+1) if recursive { OGTypeID(type)._layoutDescription(&result, recursive: true, level: level+1) } @@ -63,7 +63,7 @@ extension OGTypeID { write(&result, string: "struct \(type) {", level: level) _ = forEachField(options: []) { name, offset, type in // only [] and [._2] will work here let fieldName = String(cString: name) - write(&result, string: "var \(fieldName): \(type) // offset = \(offset)", level: level+1) + write(&result, string: "var \(fieldName): \(type) // offset = \(offset.hex)", level: level+1) if recursive { OGTypeID(type)._layoutDescription(&result, recursive: true, level: level+1) } @@ -75,7 +75,8 @@ extension OGTypeID { write(&result, string: "class \(type) {", level: level) _ = forEachField(options: [._1]) { name, offset, type in // anything contains ._1 will work here let fieldName = String(cString: name) - write(&result, string: "var \(fieldName): \(type) // offset = \(offset)", level: level+1) + + write(&result, string: "var \(fieldName): \(type) // offset = \(offset.hex)", level: level+1) if recursive { OGTypeID(type)._layoutDescription(&result, recursive: true, level: level+1) } @@ -86,3 +87,9 @@ extension OGTypeID { } } } + +extension Int { + fileprivate var hex: String { + "0x\(String(format:"%X", self))" + } +} diff --git a/Tests/OpenGraphShimsTests/OGTypeIDDebugTests.swift b/Tests/OpenGraphShimsTests/OGTypeIDDebugTests.swift new file mode 100644 index 00000000..087bfff3 --- /dev/null +++ b/Tests/OpenGraphShimsTests/OGTypeIDDebugTests.swift @@ -0,0 +1,39 @@ +// +// OGTypeIDDebugTests.swift +// OpenGraphTests + +@_spi(Debug) import OpenGraphShims +import Testing + +@Suite(.disabled(if: !attributeGraphEnabled, "forEachField is not implemented for OG")) +struct OGTypeIDDebugTests { + struct Demo1 { + var a: Int = .zero + var b: Double = .zero + } + + class Demo2 { + var a: Int = .zero + var b: Double = .zero + } + + @Test + func layout() { + #expect(OGTypeID(Demo1.self).layoutDescription == #""" + struct Demo1 { + \#tvar a: Int // offset = 0x0 + \#tvar b: Double // offset = 0x8 + } + + """#) + + #expect(OGTypeID(Demo2.self).layoutDescription == #""" + class Demo2 { + \#tvar a: Int // offset = 0x10 + \#tvar b: Double // offset = 0x18 + } + + """#) + } + +} diff --git a/Tests/OpenGraphShimsTests/README.md b/Tests/OpenGraphShimsTests/README.md new file mode 100644 index 00000000..4981dc84 --- /dev/null +++ b/Tests/OpenGraphShimsTests/README.md @@ -0,0 +1,7 @@ +## OpenGraphShimsTests + +Test OpenGraphShims Debug API + +```swift +@_spi(Debug) import OpenGraphShims +``` diff --git a/Tests/OpenGraphShimsTests/Scaffolding.swift b/Tests/OpenGraphShimsTests/Scaffolding.swift new file mode 100644 index 00000000..ce1ee729 --- /dev/null +++ b/Tests/OpenGraphShimsTests/Scaffolding.swift @@ -0,0 +1,13 @@ +// +// Scaffolding.swift +// OpenGraphShimsTests + +import Testing +import XCTest + +// See https://github.com/apple/swift-testing/issues/329 +//final class AllTests: XCTestCase { +// func testAll() async { +// await XCTestScaffold.runAllTests(hostedBy: self) +// } +//}