Skip to content
Open
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
2 changes: 2 additions & 0 deletions Sources/XcodeProj/Objects/Project/PBXObjects.swift
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,8 @@ class PBXObjects: Equatable {
return _buildRules.remove(at: index).value
} else if let index = remoteSwiftPackageReferences.index(forKey: reference) {
return _remoteSwiftPackageReferences.remove(at: index).value
} else if let index = localSwiftPackageReferences.index(forKey: reference) {
return _localSwiftPackageReferences.remove(at: index).value
} else if let index = swiftPackageProductDependencies.index(forKey: reference) {
return _swiftPackageProductDependencies.remove(at: index).value
} else if let index = fileSystemSynchronizedRootGroups.index(forKey: reference) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,74 @@ final class XCLocalSwiftPackageReferenceTests: XCTestCase {
// Then
XCTAssertEqual(subject.name, "tuist/xcodeproj")
}

// MARK: - Add/Delete Tests

func test_add_addsObjectToPBXProj() {
// Given
let proj = PBXProj.fixture(rootObject: nil, objects: [])
let localPackage = XCLocalSwiftPackageReference(relativePath: "../MyPackage")

// When
proj.add(object: localPackage)

// Then
XCTAssertEqual(proj.objects.localSwiftPackageReferences.count, 1)
XCTAssertEqual(proj.objects.localSwiftPackageReferences.values.first?.relativePath, "../MyPackage")
}

func test_delete_removesObjectFromPBXProj() {
// Given
let proj = PBXProj.fixture(rootObject: nil, objects: [])
let localPackage = XCLocalSwiftPackageReference(relativePath: "../MyPackage")
proj.add(object: localPackage)

// Verify it was added
XCTAssertEqual(proj.objects.localSwiftPackageReferences.count, 1)

// When
proj.delete(object: localPackage)

// Then
XCTAssertEqual(proj.objects.localSwiftPackageReferences.count, 0)
}

func test_delete_removesCorrectObject_whenMultipleExist() {
// Given
let proj = PBXProj.fixture(rootObject: nil, objects: [])
let localPackage1 = XCLocalSwiftPackageReference(relativePath: "../Package1")
let localPackage2 = XCLocalSwiftPackageReference(relativePath: "../Package2")
let localPackage3 = XCLocalSwiftPackageReference(relativePath: "../Package3")
proj.add(object: localPackage1)
proj.add(object: localPackage2)
proj.add(object: localPackage3)

// Verify all were added
XCTAssertEqual(proj.objects.localSwiftPackageReferences.count, 3)

// When - delete the middle one
proj.delete(object: localPackage2)

// Then
XCTAssertEqual(proj.objects.localSwiftPackageReferences.count, 2)
let remainingPaths = proj.objects.localSwiftPackageReferences.values.map(\.relativePath)
XCTAssertTrue(remainingPaths.contains("../Package1"))
XCTAssertTrue(remainingPaths.contains("../Package3"))
XCTAssertFalse(remainingPaths.contains("../Package2"))
}

func test_delete_doesNothing_whenObjectNotInProj() {
// Given
let proj = PBXProj.fixture(rootObject: nil, objects: [])
let addedPackage = XCLocalSwiftPackageReference(relativePath: "../AddedPackage")
let notAddedPackage = XCLocalSwiftPackageReference(relativePath: "../NotAddedPackage")
proj.add(object: addedPackage)

// When - try to delete an object that was never added
proj.delete(object: notAddedPackage)

// Then - the added package should still be there
XCTAssertEqual(proj.objects.localSwiftPackageReferences.count, 1)
XCTAssertEqual(proj.objects.localSwiftPackageReferences.values.first?.relativePath, "../AddedPackage")
}
}