diff --git a/Sources/SKSwiftPMWorkspace/SwiftPMBuildSystem.swift b/Sources/SKSwiftPMWorkspace/SwiftPMBuildSystem.swift index 1267add64..53cbc7e83 100644 --- a/Sources/SKSwiftPMWorkspace/SwiftPMBuildSystem.swift +++ b/Sources/SKSwiftPMWorkspace/SwiftPMBuildSystem.swift @@ -691,7 +691,7 @@ extension SwiftPMBuildSystem: SKCore.BuildSystem { packageGraph: self.modulesGraph ) case .changed: - return fileURL.lastPathComponent == "Package.swift" + return fileURL.lastPathComponent == "Package.swift" || fileURL.lastPathComponent == "Package.resolved" default: // Unknown file change type return false } diff --git a/Sources/SKTestSupport/RepeatUntilExpectedResult.swift b/Sources/SKTestSupport/RepeatUntilExpectedResult.swift new file mode 100644 index 000000000..1f2c52045 --- /dev/null +++ b/Sources/SKTestSupport/RepeatUntilExpectedResult.swift @@ -0,0 +1,38 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +import LSPTestSupport +import XCTest + +/// Runs the body repeatedly once per second until it returns `true`, giving up after `timeout`. +/// +/// This is useful to test some request that requires global state to be updated but will eventually converge on the +/// correct result. +/// +/// If `bodyHasOneSecondDelay` is true, it is assume that the body already has a one-second delay between iterations. +public func repeatUntilExpectedResult( + _ body: () async throws -> Bool, + bodyHasOneSecondDelay: Bool = false, + timeout: TimeInterval = defaultTimeout, + file: StaticString = #filePath, + line: UInt = #line +) async throws { + for _ in 0..