Skip to content

Commit 262257e

Browse files
authored
Add more build and test actions to the CI (#16)
* Add more build and test actions to the CI * Make HelloWorldTests pass
1 parent 747dae5 commit 262257e

File tree

8 files changed

+47
-125
lines changed

8 files changed

+47
-125
lines changed

.github/workflows/ci.yaml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,19 @@ jobs:
1717
run: "sudo xcode-select -s /Applications/Xcode_$XCODE_VERSION.app"
1818
- name: Checkout
1919
uses: actions/checkout@v4
20-
- name: Build project
20+
- name: Lint Swift files
21+
run: swift format lint Sources/ Tests/ Example/ --recursive
22+
- name: Build sourcekit-bazel-bsp (debug)
2123
run: swift build
22-
- name: Run tests
24+
- name: Test sourcekit-bazel-bsp
2325
run: swift test
24-
- name: Build example iOS app
26+
- name: Build sourcekit-bazel-bsp (release)
27+
run: swift build -c release
28+
- name: Build example //HelloWorld iOS app
2529
run: |
2630
cd Example
27-
bazel build //HelloWorld
28-
# TODO: add test target to the example iOS app
29-
# - name: Test example iOS app
30-
# run: |
31-
# cd Example
32-
# bazel test //HelloWorld/HelloWorldTests/...
31+
bazelisk build //HelloWorld
32+
- name: Test example //HelloWorld iOS app
33+
run: |
34+
cd Example
35+
bazelisk test //HelloWorld:HelloWorldTests

Example/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
/.settings
1212
/bazel.iml
1313
/bazel-*
14+
/custom-*
1415
/output/
1516
/production
1617
/.sass-cache

Example/HelloWorld/HelloWorldTests/SKDateDistanceCalculatorTests.swift

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

Example/HelloWorld/HelloWorldTests/TodoListManagerTests.swift

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,21 @@ import XCTest
2424

2525
class TodoListManagerTests: XCTestCase {
2626

27+
let fakeDefaults = UserDefaults(suiteName: "test")!
28+
29+
override func tearDown() {
30+
super.tearDown()
31+
fakeDefaults.removeObject(forKey: "todo-items")
32+
}
33+
2734
func testTodoListManagerInitialization() {
28-
let manager = TodoListManager()
35+
let manager = TodoListManager(userDefaults: fakeDefaults)
2936
XCTAssertNotNil(manager)
3037
XCTAssertTrue(manager.todoItems.isEmpty)
3138
}
3239

3340
func testAddTodoItem() {
34-
let manager = TodoListManager()
41+
let manager = TodoListManager(userDefaults: fakeDefaults)
3542
let initialCount = manager.todoItems.count
3643

3744
manager.addTodoItem(title: "New Task")
@@ -42,7 +49,7 @@ class TodoListManagerTests: XCTestCase {
4249
}
4350

4451
func testToggleTodoItem() {
45-
let manager = TodoListManager()
52+
let manager = TodoListManager(userDefaults: fakeDefaults)
4653
manager.addTodoItem(title: "Test Task")
4754

4855
guard let item = manager.todoItems.first else {
@@ -57,7 +64,7 @@ class TodoListManagerTests: XCTestCase {
5764
}
5865

5966
func testDeleteTodoItem() {
60-
let manager = TodoListManager()
67+
let manager = TodoListManager(userDefaults: fakeDefaults)
6168
manager.addTodoItem(title: "Task to Delete")
6269

6370
guard let item = manager.todoItems.first else {
@@ -73,16 +80,16 @@ class TodoListManagerTests: XCTestCase {
7380
}
7481

7582
func testTodoListManagerPersistence() {
76-
let manager1 = TodoListManager()
83+
let manager1 = TodoListManager(userDefaults: fakeDefaults)
7784
manager1.addTodoItem(title: "Persistent Task")
7885

79-
let manager2 = TodoListManager()
86+
let manager2 = TodoListManager(userDefaults: fakeDefaults)
8087
XCTAssertEqual(manager2.todoItems.count, 1)
8188
XCTAssertEqual(manager2.todoItems.first?.title, "Persistent Task")
8289
}
8390

8491
func testMultipleTodoItems() {
85-
let manager = TodoListManager()
92+
let manager = TodoListManager(userDefaults: fakeDefaults)
8693

8794
manager.addTodoItem(title: "Task 1")
8895
manager.addTodoItem(title: "Task 2")
@@ -95,7 +102,7 @@ class TodoListManagerTests: XCTestCase {
95102
}
96103

97104
func testToggleNonExistentItem() {
98-
let manager = TodoListManager()
105+
let manager = TodoListManager(userDefaults: fakeDefaults)
99106
let fakeItem = TodoItem(title: "Fake Item")
100107

101108
// Should not crash
@@ -104,7 +111,7 @@ class TodoListManagerTests: XCTestCase {
104111
}
105112

106113
func testDeleteNonExistentItem() {
107-
let manager = TodoListManager()
114+
let manager = TodoListManager(userDefaults: fakeDefaults)
108115
let fakeItem = TodoItem(title: "Fake Item")
109116

110117
// Should not crash
@@ -113,15 +120,15 @@ class TodoListManagerTests: XCTestCase {
113120
}
114121

115122
func testEmptyTitleHandling() {
116-
let manager = TodoListManager()
123+
let manager = TodoListManager(userDefaults: fakeDefaults)
117124
manager.addTodoItem(title: "")
118125

119126
XCTAssertEqual(manager.todoItems.count, 1)
120127
XCTAssertEqual(manager.todoItems.first?.title, "")
121128
}
122129

123130
func testVeryLongTitle() {
124-
let manager = TodoListManager()
131+
let manager = TodoListManager(userDefaults: fakeDefaults)
125132
let longTitle = String(repeating: "A", count: 1000)
126133
manager.addTodoItem(title: longTitle)
127134

@@ -130,7 +137,7 @@ class TodoListManagerTests: XCTestCase {
130137
}
131138

132139
func testTodoListManagerPerformance() {
133-
let manager = TodoListManager()
140+
let manager = TodoListManager(userDefaults: fakeDefaults)
134141

135142
measure {
136143
for i in 0..<100 {

Example/HelloWorld/TodoModels/Sources/TodoListManager.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ import SwiftUI
2323
public final class TodoListManager: ObservableObject {
2424
@Published public var todoItems: [TodoItem] = []
2525

26-
private let userDefaults = UserDefaults.standard
26+
private let userDefaults: UserDefaults
2727
private let todoItemsKey = "todo-items"
2828

29-
public init() {
29+
public init(userDefaults: UserDefaults = .standard) {
30+
self.userDefaults = userDefaults
3031
loadTodoItems()
3132
}
3233

Example/MODULE.bazel

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,17 @@ bazel_dep(
44
repo_name = "build_bazel_rules_swift",
55
)
66

7+
# We need a commit that has not yet made into a release, so overriding it for now
78
bazel_dep(
89
name = "rules_apple",
9-
version = "4.0.1",
1010
repo_name = "build_bazel_rules_apple",
1111
)
12+
archive_override(
13+
module_name = "rules_apple",
14+
sha256 = "0abe1a851d65d64a1692bdc95a0649cba4218f0007d36eda030eb6bdfd6b6937",
15+
strip_prefix = "rules_apple-a9fcb1c3ae6382534d773d73c035035e9764eadb",
16+
url = "https://github.com/bazelbuild/rules_apple/archive/a9fcb1c3ae6382534d773d73c035035e9764eadb.zip",
17+
)
18+
1219

1320
bazel_dep(name = "apple_support", version = "1.22.1", repo_name = "build_bazel_apple_support")

Example/MODULE.bazel.lock

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/SourceKitBazelBSP/Server/MessageHandler/BSPServerMessageHandlerImpl.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,9 @@ final class BSPServerMessageHandlerImpl: @unchecked Sendable {
218218
var affectedTargets: Set<URI> = []
219219
for change in changes {
220220
let targetsForSrc = workspaceBuildTargetsHandler.srcToTargetsMap[change] ?? []
221-
targetsForSrc.forEach { affectedTargets.insert($0) }
221+
for target in targetsForSrc {
222+
affectedTargets.insert(target)
223+
}
222224
}
223225
let response = OnBuildTargetDidChangeNotification(
224226
changes: affectedTargets.map {

0 commit comments

Comments
 (0)