Skip to content

Commit d32b56b

Browse files
authored
Update OGTypeID layoutDescription (#76)
1 parent 4720fcf commit d32b56b

File tree

5 files changed

+81
-4
lines changed

5 files changed

+81
-4
lines changed

Package.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,15 @@ let openGraphShimsTarget = Target.target(
3232
swiftSettings: sharedSwiftSettings
3333
)
3434

35+
let openGraphShimsTestTarget = Target.testTarget(
36+
name: "OpenGraphShimsTests",
37+
dependencies: [
38+
"OpenGraphShims",
39+
],
40+
exclude: ["README.md"],
41+
swiftSettings: sharedSwiftSettings
42+
)
43+
3544
let openGraphTestTarget = Target.testTarget(
3645
name: "OpenGraphTests",
3746
dependencies: [
@@ -146,6 +155,8 @@ if swiftTestingCondition {
146155
package.targets.append(openGraphCompatibilityTestTarget)
147156
addTestDependency(openGraphTempTestTarget)
148157
package.targets.append(openGraphTempTestTarget)
158+
addTestDependency(openGraphShimsTestTarget)
159+
package.targets.append(openGraphShimsTestTarget)
149160
}
150161

151162
let compatibilityTestCondition = envEnable("OPENGRAPH_COMPATIBILITY_TEST")

Sources/OpenGraphShims/OGTypeID+Debug.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ extension OGTypeID {
4343
write(&result, string: "enum \(type) {", level: level)
4444
_ = forEachField(options: [._4]) { name, offset, type in // anything contains ._4 will work here
4545
let fieldName = String(cString: name)
46-
write(&result, string: "case \(fieldName)(\(type)) // offset = \(offset)", level: level+1)
46+
write(&result, string: "case \(fieldName)(\(type)) // offset = \(offset.hex)", level: level+1)
4747
if recursive {
4848
OGTypeID(type)._layoutDescription(&result, recursive: true, level: level+1)
4949
}
@@ -53,7 +53,7 @@ extension OGTypeID {
5353
case .optional:
5454
_ = forEachField(options: [._4]) { name, offset, type in // anything contains ._4 will work here
5555
let fieldName = String(cString: name)
56-
write(&result, string: "case \(fieldName)(\(type)) // offset = \(offset)", level: level+1)
56+
write(&result, string: "case \(fieldName)(\(type)) // offset = \(offset.hex)", level: level+1)
5757
if recursive {
5858
OGTypeID(type)._layoutDescription(&result, recursive: true, level: level+1)
5959
}
@@ -63,7 +63,7 @@ extension OGTypeID {
6363
write(&result, string: "struct \(type) {", level: level)
6464
_ = forEachField(options: []) { name, offset, type in // only [] and [._2] will work here
6565
let fieldName = String(cString: name)
66-
write(&result, string: "var \(fieldName): \(type) // offset = \(offset)", level: level+1)
66+
write(&result, string: "var \(fieldName): \(type) // offset = \(offset.hex)", level: level+1)
6767
if recursive {
6868
OGTypeID(type)._layoutDescription(&result, recursive: true, level: level+1)
6969
}
@@ -75,7 +75,8 @@ extension OGTypeID {
7575
write(&result, string: "class \(type) {", level: level)
7676
_ = forEachField(options: [._1]) { name, offset, type in // anything contains ._1 will work here
7777
let fieldName = String(cString: name)
78-
write(&result, string: "var \(fieldName): \(type) // offset = \(offset)", level: level+1)
78+
79+
write(&result, string: "var \(fieldName): \(type) // offset = \(offset.hex)", level: level+1)
7980
if recursive {
8081
OGTypeID(type)._layoutDescription(&result, recursive: true, level: level+1)
8182
}
@@ -86,3 +87,9 @@ extension OGTypeID {
8687
}
8788
}
8889
}
90+
91+
extension Int {
92+
fileprivate var hex: String {
93+
"0x\(String(format:"%X", self))"
94+
}
95+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// OGTypeIDDebugTests.swift
3+
// OpenGraphTests
4+
5+
@_spi(Debug) import OpenGraphShims
6+
import Testing
7+
8+
@Suite(.disabled(if: !attributeGraphEnabled, "forEachField is not implemented for OG"))
9+
struct OGTypeIDDebugTests {
10+
struct Demo1 {
11+
var a: Int = .zero
12+
var b: Double = .zero
13+
}
14+
15+
class Demo2 {
16+
var a: Int = .zero
17+
var b: Double = .zero
18+
}
19+
20+
@Test
21+
func layout() {
22+
#expect(OGTypeID(Demo1.self).layoutDescription == #"""
23+
struct Demo1 {
24+
\#tvar a: Int // offset = 0x0
25+
\#tvar b: Double // offset = 0x8
26+
}
27+
28+
"""#)
29+
30+
#expect(OGTypeID(Demo2.self).layoutDescription == #"""
31+
class Demo2 {
32+
\#tvar a: Int // offset = 0x10
33+
\#tvar b: Double // offset = 0x18
34+
}
35+
36+
"""#)
37+
}
38+
39+
}

Tests/OpenGraphShimsTests/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## OpenGraphShimsTests
2+
3+
Test OpenGraphShims Debug API
4+
5+
```swift
6+
@_spi(Debug) import OpenGraphShims
7+
```
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// Scaffolding.swift
3+
// OpenGraphShimsTests
4+
5+
import Testing
6+
import XCTest
7+
8+
// See https://github.com/apple/swift-testing/issues/329
9+
//final class AllTests: XCTestCase {
10+
// func testAll() async {
11+
// await XCTestScaffold.runAllTests(hostedBy: self)
12+
// }
13+
//}

0 commit comments

Comments
 (0)