Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,19 @@ jobs:
run: "sudo xcode-select -s /Applications/Xcode_$XCODE_VERSION.app"
- name: Checkout
uses: actions/checkout@v4
- name: Build project
- name: Lint Swift files
run: swift format lint Sources/ Tests/ Example/ --recursive
- name: Build sourcekit-bazel-bsp (debug)
run: swift build
- name: Run tests
- name: Test sourcekit-bazel-bsp
run: swift test
- name: Build example iOS app
- name: Build sourcekit-bazel-bsp (release)
run: swift build -c release
- name: Build example //HelloWorld iOS app
run: |
cd Example
bazel build //HelloWorld
# TODO: add test target to the example iOS app
# - name: Test example iOS app
# run: |
# cd Example
# bazel test //HelloWorld/HelloWorldTests/...
bazelisk build //HelloWorld
- name: Test example //HelloWorld iOS app
run: |
cd Example
bazelisk test //HelloWorld:HelloWorldTests
1 change: 1 addition & 0 deletions Example/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
/.settings
/bazel.iml
/bazel-*
/custom-*
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missed change from previous PRs

/output/
/production
/.sass-cache
Expand Down

This file was deleted.

31 changes: 19 additions & 12 deletions Example/HelloWorld/HelloWorldTests/TodoListManagerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,21 @@ import XCTest

class TodoListManagerTests: XCTestCase {

let fakeDefaults = UserDefaults(suiteName: "test")!

override func tearDown() {
super.tearDown()
fakeDefaults.removeObject(forKey: "todo-items")
}

func testTodoListManagerInitialization() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)
XCTAssertNotNil(manager)
XCTAssertTrue(manager.todoItems.isEmpty)
}

func testAddTodoItem() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)
let initialCount = manager.todoItems.count

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

func testToggleTodoItem() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)
manager.addTodoItem(title: "Test Task")

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

func testDeleteTodoItem() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)
manager.addTodoItem(title: "Task to Delete")

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

func testTodoListManagerPersistence() {
let manager1 = TodoListManager()
let manager1 = TodoListManager(userDefaults: fakeDefaults)
manager1.addTodoItem(title: "Persistent Task")

let manager2 = TodoListManager()
let manager2 = TodoListManager(userDefaults: fakeDefaults)
XCTAssertEqual(manager2.todoItems.count, 1)
XCTAssertEqual(manager2.todoItems.first?.title, "Persistent Task")
}

func testMultipleTodoItems() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)

manager.addTodoItem(title: "Task 1")
manager.addTodoItem(title: "Task 2")
Expand All @@ -95,7 +102,7 @@ class TodoListManagerTests: XCTestCase {
}

func testToggleNonExistentItem() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)
let fakeItem = TodoItem(title: "Fake Item")

// Should not crash
Expand All @@ -104,7 +111,7 @@ class TodoListManagerTests: XCTestCase {
}

func testDeleteNonExistentItem() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)
let fakeItem = TodoItem(title: "Fake Item")

// Should not crash
Expand All @@ -113,15 +120,15 @@ class TodoListManagerTests: XCTestCase {
}

func testEmptyTitleHandling() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)
manager.addTodoItem(title: "")

XCTAssertEqual(manager.todoItems.count, 1)
XCTAssertEqual(manager.todoItems.first?.title, "")
}

func testVeryLongTitle() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)
let longTitle = String(repeating: "A", count: 1000)
manager.addTodoItem(title: longTitle)

Expand All @@ -130,7 +137,7 @@ class TodoListManagerTests: XCTestCase {
}

func testTodoListManagerPerformance() {
let manager = TodoListManager()
let manager = TodoListManager(userDefaults: fakeDefaults)

measure {
for i in 0..<100 {
Expand Down
5 changes: 3 additions & 2 deletions Example/HelloWorld/TodoModels/Sources/TodoListManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@ import SwiftUI
public final class TodoListManager: ObservableObject {
@Published public var todoItems: [TodoItem] = []

private let userDefaults = UserDefaults.standard
private let userDefaults: UserDefaults
private let todoItemsKey = "todo-items"

public init() {
public init(userDefaults: UserDefaults = .standard) {
self.userDefaults = userDefaults
loadTodoItems()
}

Expand Down
9 changes: 8 additions & 1 deletion Example/MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,17 @@ bazel_dep(
repo_name = "build_bazel_rules_swift",
)

# We need a commit that has not yet made into a release, so overriding it for now
bazel_dep(
name = "rules_apple",
version = "4.0.1",
repo_name = "build_bazel_rules_apple",
)
archive_override(
module_name = "rules_apple",
sha256 = "0abe1a851d65d64a1692bdc95a0649cba4218f0007d36eda030eb6bdfd6b6937",
strip_prefix = "rules_apple-a9fcb1c3ae6382534d773d73c035035e9764eadb",
url = "https://github.com/bazelbuild/rules_apple/archive/a9fcb1c3ae6382534d773d73c035035e9764eadb.zip",
)


bazel_dep(name = "apple_support", version = "1.22.1", repo_name = "build_bazel_apple_support")
4 changes: 1 addition & 3 deletions Example/MODULE.bazel.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,9 @@ final class BSPServerMessageHandlerImpl: @unchecked Sendable {
var affectedTargets: Set<URI> = []
for change in changes {
let targetsForSrc = workspaceBuildTargetsHandler.srcToTargetsMap[change] ?? []
targetsForSrc.forEach { affectedTargets.insert($0) }
for target in targetsForSrc {
affectedTargets.insert(target)
}
}
let response = OnBuildTargetDidChangeNotification(
changes: affectedTargets.map {
Expand Down