Skip to content

Commit 18cd8da

Browse files
authored
Add OpenSwiftUICore and OpenSwiftUICoreTests (#110)
* Update Package.swift to add OpenSwiftUICore * Remove duplicated Color declaration * Fix ContentResponder implementation * Add BitVectorTests for OpenSwiftUICoreTests
1 parent 8501b3f commit 18cd8da

File tree

9 files changed

+204
-42
lines changed

9 files changed

+204
-42
lines changed

Package.swift

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,18 @@ if warningsAsErrorsCondition {
8181
sharedSwiftSettings.append(.unsafeFlags(["-warnings-as-errors"]))
8282
}
8383

84+
let openSwiftUICoreTarget = Target.target(
85+
name: "OpenSwiftUICore",
86+
dependencies: [
87+
.product(name: "OpenGraphShims", package: "OpenGraph"),
88+
],
89+
swiftSettings: sharedSwiftSettings
90+
)
8491
let openSwiftUITarget = Target.target(
8592
name: "OpenSwiftUI",
8693
dependencies: [
8794
"COpenSwiftUI",
95+
"OpenSwiftUICore",
8896
.target(name: "CoreServices", condition: .when(platforms: [.iOS])),
8997
.product(name: "OpenGraphShims", package: "OpenGraph"),
9098
],
@@ -97,6 +105,14 @@ let openSwiftUIExtensionTarget = Target.target(
97105
],
98106
swiftSettings: sharedSwiftSettings
99107
)
108+
let openSwiftUICoreTestTarget = Target.testTarget(
109+
name: "OpenSwiftUICoreTests",
110+
dependencies: [
111+
"OpenSwiftUICore",
112+
],
113+
exclude: ["README.md"],
114+
swiftSettings: sharedSwiftSettings
115+
)
100116
let openSwiftUITestTarget = Target.testTarget(
101117
name: "OpenSwiftUITests",
102118
dependencies: [
@@ -148,6 +164,7 @@ let package = Package(
148164
]
149165
),
150166
.binaryTarget(name: "CoreServices", path: "PrivateFrameworks/CoreServices.xcframework"),
167+
openSwiftUICoreTarget,
151168
openSwiftUITarget,
152169
openSwiftUIExtensionTarget,
153170
]
@@ -164,15 +181,37 @@ extension Target {
164181
// FIXME: Weird SwiftPM behavior for test Target. Otherwize we'll get the following error message
165182
// "could not determine executable path for bundle 'AttributeGraph.framework'"
166183
dependencies.append(.product(name: "AttributeGraph", package: "OpenGraph"))
167-
168184
var swiftSettings = swiftSettings ?? []
169185
swiftSettings.append(.define("OPENGRAPH_ATTRIBUTEGRAPH"))
170186
self.swiftSettings = swiftSettings
171187
}
188+
189+
func addOpenCombineSettings() {
190+
dependencies.append(.product(name: "OpenCombine", package: "OpenCombine"))
191+
var swiftSettings = swiftSettings ?? []
192+
swiftSettings.append(.define("OPENSWIFTUI_OPENCOMBINE"))
193+
self.swiftSettings = swiftSettings
194+
}
195+
196+
func addSwiftLogSettings() {
197+
dependencies.append(.product(name: "Logging", package: "swift-log"))
198+
var swiftSettings = swiftSettings ?? []
199+
swiftSettings.append(.define("OPENSWIFTUI_SWIFT_LOG"))
200+
self.swiftSettings = swiftSettings
201+
}
202+
203+
func addSwiftTestingSettings() {
204+
dependencies.append(.product(name: "Testing", package: "swift-testing"))
205+
var swiftSettings = swiftSettings ?? []
206+
swiftSettings.append(.define("OPENSWIFTUI_SWIFT_TESTING"))
207+
self.swiftSettings = swiftSettings
208+
}
172209
}
173210

174211
if attributeGraphCondition {
212+
openSwiftUICoreTarget.addAGSettings()
175213
openSwiftUITarget.addAGSettings()
214+
openSwiftUICoreTestTarget.addAGSettings()
176215
openSwiftUITestTarget.addAGSettings()
177216
openSwiftUITempTestTarget.addAGSettings()
178217
openSwiftUICompatibilityTestTarget.addAGSettings()
@@ -187,12 +226,8 @@ if openCombineCondition {
187226
package.dependencies.append(
188227
.package(url: "https://github.com/OpenSwiftUIProject/OpenCombine.git", from: "0.15.0")
189228
)
190-
openSwiftUITarget.dependencies.append(
191-
.product(name: "OpenCombine", package: "OpenCombine")
192-
)
193-
var swiftSettings: [SwiftSetting] = (openSwiftUITarget.swiftSettings ?? [])
194-
swiftSettings.append(.define("OPENSWIFTUI_OPENCOMBINE"))
195-
openSwiftUITarget.swiftSettings = swiftSettings
229+
openSwiftUICoreTarget.addOpenCombineSettings()
230+
openSwiftUITarget.addOpenCombineSettings()
196231
}
197232

198233
#if os(macOS)
@@ -204,12 +239,8 @@ if swiftLogCondition {
204239
package.dependencies.append(
205240
.package(url: "https://github.com/apple/swift-log", from: "1.5.3")
206241
)
207-
openSwiftUITarget.dependencies.append(
208-
.product(name: "Logging", package: "swift-log")
209-
)
210-
var swiftSettings: [SwiftSetting] = (openSwiftUITarget.swiftSettings ?? [])
211-
swiftSettings.append(.define("OPENSWIFTUI_SWIFT_LOG"))
212-
openSwiftUITarget.swiftSettings = swiftSettings
242+
openSwiftUICoreTarget.addSwiftLogSettings()
243+
openSwiftUITarget.addSwiftLogSettings()
213244
}
214245

215246
// Remove the check when swift-testing reaches 1.0.0
@@ -219,19 +250,14 @@ if swiftTestingCondition {
219250
// Fix it to be 0.3.0 before we bump to Swift 5.10
220251
.package(url: "https://github.com/apple/swift-testing", exact: "0.6.0")
221252
)
222-
openSwiftUITestTarget.dependencies.append(
223-
.product(name: "Testing", package: "swift-testing")
224-
)
253+
openSwiftUICoreTestTarget.addSwiftTestingSettings()
254+
openSwiftUITestTarget.addSwiftTestingSettings()
255+
openSwiftUITempTestTarget.addSwiftTestingSettings()
256+
openSwiftUICompatibilityTestTarget.addSwiftTestingSettings()
257+
258+
package.targets.append(openSwiftUICoreTestTarget)
225259
package.targets.append(openSwiftUITestTarget)
226-
227-
openSwiftUITempTestTarget.dependencies.append(
228-
.product(name: "Testing", package: "swift-testing")
229-
)
230260
package.targets.append(openSwiftUITempTestTarget)
231-
232-
openSwiftUICompatibilityTestTarget.dependencies.append(
233-
.product(name: "Testing", package: "swift-testing")
234-
)
235261
package.targets.append(openSwiftUICompatibilityTestTarget)
236262
}
237263

Sources/OpenSwiftUI/Data/Other/BitVector64.swift

Lines changed: 0 additions & 10 deletions
This file was deleted.

Sources/OpenSwiftUI/EventHandling/InputEvent/HitTesting/ContentResponder.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import Foundation
99
internal import COpenSwiftUI
10+
@_spi(ForOpenSwiftUIOnly) import OpenSwiftUICore
1011

1112
protocol ContentResponder {
1213
func contains(points: [CGPoint], size: CGSize) -> BitVector64
@@ -17,11 +18,8 @@ protocol ContentResponder {
1718
extension ContentResponder {
1819
func contains(points: [CGPoint], size: CGSize) -> BitVector64 {
1920
guard !points.isEmpty else { return BitVector64() }
20-
#if OPENSWIFTUI_RELEASE_2024
21-
// TODO: mapBool
22-
#else
23-
fatalError("TODO")
24-
#endif
21+
let rect = CGRect(origin: .zero, size: size)
22+
return points.mapBool { rect.contains($0) }
2523
}
2624

2725
func contentPath(size: CGSize) -> Path {

Sources/OpenSwiftUI/Export.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@_exported import OpenSwiftUICore

Sources/OpenSwiftUI/View/Toggle/Switch.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@
99
#if os(iOS)
1010
import UIKit
1111

12-
// FIXME
13-
struct Color {}
14-
1512
private struct Switch: UIViewRepresentable {
1613
typealias UIViewType = UISwitch
1714
typealias Coordinator = PlatformSwitchCoordinator
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
//
2+
// BitVector64Tests.swift
3+
// OpenSwiftUICoreTests
4+
5+
@testable import OpenSwiftUICore
6+
@_spi(ForOpenSwiftUIOnly) import OpenSwiftUICore
7+
import Testing
8+
9+
struct BitVector64Tests {
10+
@Test
11+
func testInit() {
12+
let bitVector = BitVector64()
13+
#expect(bitVector.rawValue == 0)
14+
}
15+
16+
@Test(arguments: [
17+
(rawValue: 0x1, index: 0),
18+
(rawValue: 0x2, index: 1),
19+
(rawValue: 0x4, index: 2),
20+
(rawValue: 0x8, index: 3),
21+
(rawValue: 0x10, index: 4),
22+
(rawValue: 0x20, index: 5),
23+
(rawValue: 0x40, index: 6),
24+
(rawValue: 0x80, index: 7),
25+
(rawValue: 0x100, index: 8),
26+
(rawValue: 0x200, index: 9),
27+
])
28+
func testSubscriptGetter(rawValue: UInt64, index: Int) {
29+
let bitVector = BitVector64(rawValue: rawValue)
30+
for i in 0..<64 {
31+
if i == index {
32+
#expect(bitVector[i] == true)
33+
} else {
34+
#expect(bitVector[i] == false)
35+
}
36+
}
37+
}
38+
39+
@Test
40+
func testSubscriptSetter() {
41+
var bitVector = BitVector64(rawValue: 0)
42+
bitVector.rawValue = 4
43+
#expect(bitVector[0] == false)
44+
#expect(bitVector[1] == false)
45+
#expect(bitVector[2] == true)
46+
47+
bitVector[0] = true
48+
#expect(bitVector[0] == true)
49+
#expect(bitVector[1] == false)
50+
#expect(bitVector[2] == true)
51+
#expect(bitVector.rawValue == 5)
52+
53+
bitVector[1] = true
54+
#expect(bitVector[0] == true)
55+
#expect(bitVector[1] == true)
56+
#expect(bitVector[2] == true)
57+
#expect(bitVector.rawValue == 7)
58+
59+
bitVector[2] = false
60+
#expect(bitVector[0] == true)
61+
#expect(bitVector[1] == true)
62+
#expect(bitVector[2] == false)
63+
#expect(bitVector.rawValue == 3)
64+
}
65+
66+
@Test
67+
func testMapBool() {
68+
let array = [Bool.random(), Bool.random(), Bool.random(), Bool.random()]
69+
let bitVector = array.mapBool { $0 }
70+
for i in 0..<array.count {
71+
#expect(bitVector[i] == array[i])
72+
}
73+
}
74+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
//
2+
// BitVectorTests.swift
3+
// OpenSwiftUICoreTests
4+
5+
@testable import OpenSwiftUICore
6+
import Testing
7+
8+
struct BitVectorTests {
9+
@Test(arguments: [0, 1, 60, 64])
10+
func testInlineKind(count: Int) {
11+
var bitVector = BitVector(count: count)
12+
#expect(bitVector.count == count)
13+
#expect(bitVector.vector.rawValue == 0)
14+
#expect(bitVector.array == [])
15+
16+
for (index, value) in bitVector.enumerated() {
17+
#expect(value == false)
18+
bitVector[index] = true
19+
}
20+
for value in bitVector {
21+
#expect(value == true)
22+
}
23+
24+
if count == 0 {
25+
#expect(bitVector.vector.rawValue == 0)
26+
} else {
27+
#expect(bitVector.vector.rawValue > 0)
28+
}
29+
#expect(bitVector.array == [])
30+
}
31+
32+
@Test(arguments: [
33+
(count: 65, arrayCount: 2),
34+
(count: 128, arrayCount: 2),
35+
(count: 129, arrayCount: 3),
36+
])
37+
func testArrayKind(count: Int, arrayCount: Int) {
38+
var bitVector = BitVector(count: count)
39+
#expect(bitVector.count == count)
40+
#expect(bitVector.vector.rawValue == 0)
41+
#expect(bitVector.array.count == arrayCount)
42+
for (index, value) in bitVector.enumerated() {
43+
#expect(value == false)
44+
bitVector[index] = true
45+
}
46+
for value in bitVector {
47+
#expect(value == true)
48+
}
49+
50+
#expect(bitVector.vector.rawValue == 0)
51+
#expect(bitVector.array.map(\.rawValue).allSatisfy { $0 > 0 })
52+
}
53+
}

Tests/OpenSwiftUICoreTests/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
## OpenSwiftUICoreTests
2+
3+
Test internal API of OpenSwiftUICore
4+
5+
```swift
6+
@testable import OpenSwiftUICore
7+
@_spi(ForOpenSwiftUIOnly) import OpenSwiftUICore
8+
```
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//
2+
// Scaffolding.swift
3+
//
4+
//
5+
// Created by Kyle on 2023/11/8.
6+
//
7+
8+
import Testing
9+
import XCTest
10+
11+
final class AllTests: XCTestCase {
12+
func testAll() async {
13+
await XCTestScaffold.runAllTests(hostedBy: self)
14+
}
15+
}

0 commit comments

Comments
 (0)