@@ -430,24 +430,14 @@ final class BackgroundIndexingTests: XCTestCase {
430430 )
431431 XCTAssertEqual ( callsBeforeEdit, [ ] )
432432
433- let ( otherFilePositions, otherFileMarkedContents) = DocumentPositions . extract (
434- from: """
433+ let ( otherFileUri, otherFilePositions) = try await project. changeFileOnDisk (
434+ " MyOtherFile.swift " ,
435+ newMarkedContents: """
435436 func 2️⃣bar() {
436437 3️⃣foo()
437438 }
438439 """
439440 )
440-
441- let otherFileUri = try project. uri ( for: " MyOtherFile.swift " )
442- let otherFileUrl = try XCTUnwrap ( otherFileUri. fileURL)
443-
444- try otherFileMarkedContents. write (
445- to: otherFileUrl,
446- atomically: true ,
447- encoding: . utf8
448- )
449-
450- project. testClient. send ( DidChangeWatchedFilesNotification ( changes: [ FileEvent ( uri: otherFileUri, type: . changed) ] ) )
451441 try await project. testClient. send ( PollIndexRequest ( ) )
452442
453443 let callsAfterEdit = try await project. testClient. send (
@@ -498,21 +488,16 @@ final class BackgroundIndexingTests: XCTestCase {
498488 )
499489 XCTAssertEqual ( callsBeforeEdit, [ ] )
500490
501- let ( newPositions, headerNewMarkedContents) = DocumentPositions . extract (
502- from: """
491+ let ( _, newPositions) = try await project. changeFileOnDisk (
492+ " Header.h " ,
493+ newMarkedContents: """
503494 void someFunc();
504495
505496 void 2️⃣test() {
506497 3️⃣someFunc();
507498 };
508499 """
509500 )
510-
511- // clangd might have Header.h open, which prevents us from updating it. Keep retrying until we get a successful
512- // write. This matches what a user would do.
513- try await headerNewMarkedContents. writeWithRetry ( to: try XCTUnwrap ( uri. fileURL) )
514-
515- project. testClient. send ( DidChangeWatchedFilesNotification ( changes: [ FileEvent ( uri: uri, type: . changed) ] ) )
516501 try await project. testClient. send ( PollIndexRequest ( ) )
517502
518503 let callsAfterEdit = try await project. testClient. send (
@@ -587,15 +572,7 @@ final class BackgroundIndexingTests: XCTestCase {
587572 )
588573 XCTAssertNotEqual ( initialDiagnostics. fullReport? . items, [ ] )
589574
590- try " public func foo() {} " . write (
591- to: try XCTUnwrap ( project. uri ( for: " MyFile.swift " ) . fileURL) ,
592- atomically: true ,
593- encoding: . utf8
594- )
595-
596- project. testClient. send (
597- DidChangeWatchedFilesNotification ( changes: [ FileEvent ( uri: try project. uri ( for: " MyFile.swift " ) , type: . changed) ] )
598- )
575+ try await project. changeFileOnDisk ( " MyFile.swift " , newMarkedContents: " public func foo() {} " )
599576
600577 let receivedEmptyDiagnostics = self . expectation ( description: " Received diagnostic refresh request " )
601578 receivedEmptyDiagnostics. assertForOverFulfill = false
@@ -703,6 +680,8 @@ final class BackgroundIndexingTests: XCTestCase {
703680 project. testClient. send (
704681 DidChangeWatchedFilesNotification ( changes: [ FileEvent ( uri: try project. uri ( for: " LibA.swift " ) , type: . changed) ] )
705682 )
683+ // Ensure that we handle the `DidChangeWatchedFilesNotification`.
684+ try await project. testClient. send ( BarrierRequest ( ) )
706685
707686 // Quickly flip through all files. The way the test is designed to work is as follows:
708687 // - LibB.swift gets opened and prepared. Preparation is simulated to take a long time until both LibC.swift and
@@ -1657,19 +1636,14 @@ final class BackgroundIndexingTests: XCTestCase {
16571636 )
16581637 XCTAssertNil ( definitionBeforeEdit)
16591638
1660- let libAUri = try project. uri ( for : " LibA.swift " )
1661- let ( newAMarkers , newAContents ) = DocumentPositions . extract (
1662- from : """
1639+ let ( libAUri, newAMarkers ) = try await project. changeFileOnDisk (
1640+ " LibA.swift " ,
1641+ newMarkedContents : """
16631642 public struct LibA {
16641643 public func 2️⃣test() {}
16651644 }
16661645 """
16671646 )
1668- try await newAContents. writeWithRetry ( to: XCTUnwrap ( libAUri. fileURL) )
1669-
1670- project. testClient. send (
1671- DidChangeWatchedFilesNotification ( changes: [ FileEvent ( uri: libAUri, type: . changed) ] )
1672- )
16731647
16741648 // Triggering a definition request causes `LibC` to be re-prepared. Repeat the request until LibC has been prepared
16751649 // and we get the expected result.
@@ -1718,16 +1692,15 @@ final class BackgroundIndexingTests: XCTestCase {
17181692 )
17191693 XCTAssertEqual ( completionBeforeEdit. items. map ( \. label) , [ " self " ] )
17201694
1721- let libAUri = try project. uri ( for: " LibA.swift " )
1722- try await """
1723- public struct LibA {
1724- public func test() {}
1725- }
1726- """ . writeWithRetry ( to: XCTUnwrap ( libAUri. fileURL) )
1727-
1728- project. testClient. send (
1729- DidChangeWatchedFilesNotification ( changes: [ FileEvent ( uri: libAUri, type: . changed) ] )
1695+ try await project. changeFileOnDisk (
1696+ " LibA.swift " ,
1697+ newMarkedContents: """
1698+ public struct LibA {
1699+ public func test() {}
1700+ }
1701+ """
17301702 )
1703+
17311704 try await repeatUntilExpectedResult {
17321705 let completionAfterEdit = try await project. testClient. send (
17331706 CompletionRequest ( textDocument: TextDocumentIdentifier ( uri) , position: positions [ " 1️⃣ " ] )
@@ -1781,9 +1754,7 @@ final class BackgroundIndexingTests: XCTestCase {
17811754 " Pre edit hover content ' \( preEditHoverContent) ' does not contain 'String' "
17821755 )
17831756
1784- let libAUri = try project. uri ( for: " LibA.swift " )
1785- try await " public let myVar: Int " . writeWithRetry ( to: try XCTUnwrap ( libAUri. fileURL) )
1786- project. testClient. send ( DidChangeWatchedFilesNotification ( changes: [ FileEvent ( uri: libAUri, type: . changed) ] ) )
1757+ try await project. changeFileOnDisk ( " LibA.swift " , newMarkedContents: " public let myVar: Int " )
17871758
17881759 try await repeatUntilExpectedResult {
17891760 let postEditHover = try await project. testClient. send (
@@ -2080,22 +2051,22 @@ final class BackgroundIndexingTests: XCTestCase {
20802051 )
20812052 XCTAssertNil ( hoverWithMissingDependencyDeclaration)
20822053
2083- let manifestUri = try project. uri ( for: " Package.swift " )
2084- try """
2085- // swift-tools-version: 5.7
2054+ try await project. changeFileOnDisk (
2055+ " Package.swift " ,
2056+ newMarkedContents: """
2057+ // swift-tools-version: 5.7
20862058
2087- import PackageDescription
2059+ import PackageDescription
20882060
2089- let package = Package(
2090- name: " MyLibrary " ,
2091- targets: [
2092- .target(name: " LibA " , swiftSettings: [.define( " ENABLE_FOO " )]),
2093- .target(name: " LibB " , dependencies: [ " LibA " ]),
2094- ]
2061+ let package = Package(
2062+ name: " MyLibrary " ,
2063+ targets: [
2064+ .target(name: " LibA " , swiftSettings: [.define( " ENABLE_FOO " )]),
2065+ .target(name: " LibB " , dependencies: [ " LibA " ]),
2066+ ]
2067+ )
2068+ """
20952069 )
2096- """ . write ( to: XCTUnwrap ( project. uri ( for: " Package.swift " ) . fileURL) , atomically: true , encoding: . utf8)
2097-
2098- project. testClient. send ( DidChangeWatchedFilesNotification ( changes: [ FileEvent ( uri: manifestUri, type: . changed) ] ) )
20992070
21002071 try await repeatUntilExpectedResult {
21012072 let hoverAfterAddingDependencyDeclaration = try await project. testClient. send (
0 commit comments