Skip to content

Commit 10812ba

Browse files
committed
[WorkspaceTests] Migrate testCanResolveWithIncompatiblePins
Migration to new testing infra
1 parent 99ad1b8 commit 10812ba

File tree

2 files changed

+164
-64
lines changed

2 files changed

+164
-64
lines changed

Tests/WorkspaceTests/WorkspaceTests.swift

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2010,60 +2010,6 @@ final class WorkspaceTests: XCTestCase {
20102010
XCTAssertEqual(delegate.repoUpdates, [])
20112011
}
20122012

2013-
func testCanResolveWithIncompatiblePins() throws {
2014-
let v2: Version = "2.0.0"
2015-
let path = AbsolutePath("/RootPkg")
2016-
let fs = InMemoryFileSystem()
2017-
2018-
let manifestGraph = try MockManifestGraph(at: path,
2019-
rootDeps: [],
2020-
packages: [
2021-
MockPackage("A", version: v1, dependencies: [
2022-
MockDependency("AA", version: v1)
2023-
]),
2024-
MockPackage("A", version: "1.0.1", dependencies: [
2025-
MockDependency("AA", version: v2)
2026-
]),
2027-
MockPackage("AA", version: v1),
2028-
MockPackage("AA", version: v2),
2029-
],
2030-
fs: fs)
2031-
let provider = manifestGraph.repoProvider!
2032-
try provider.specifierMap[manifestGraph.repo("A")]!.tag(name: "1.0.1")
2033-
try provider.specifierMap[manifestGraph.repo("AA")]!.tag(name: "2.0.0")
2034-
2035-
let delegate = TestWorkspaceDelegate()
2036-
2037-
let workspace = Workspace.createWith(
2038-
rootPackage: path,
2039-
manifestLoader: manifestGraph.manifestLoader,
2040-
delegate: delegate,
2041-
fileSystem: fs,
2042-
repositoryProvider: provider)
2043-
2044-
var root = PackageGraphRootInput(packages: [], dependencies: [
2045-
.init(url: "/RootPkg/A", requirement: .exact(v1.asPD4Version), location: "A"),
2046-
])
2047-
2048-
let diagnostics = DiagnosticsEngine()
2049-
workspace.resolve(root: root, diagnostics: diagnostics)
2050-
XCTAssertFalse(diagnostics.hasErrors)
2051-
XCTAssertEqual(delegate.repoUpdates, [])
2052-
2053-
// This pin will become unresolvable when A is at 1.0.1.
2054-
// We should still be able to resolve in that case.
2055-
XCTAssertEqual(try workspace.pinsStore.load().pinsMap["aa"]?.state.version, v1)
2056-
2057-
root = PackageGraphRootInput(packages: [], dependencies: [
2058-
.init(url: "/RootPkg/A", requirement: .exact("1.0.1"), location: "A"),
2059-
])
2060-
workspace.resolve(root: root, diagnostics: diagnostics)
2061-
XCTAssertFalse(diagnostics.hasErrors)
2062-
XCTAssertEqual(try workspace.pinsStore.load().pinsMap["aa"]?.state.version, v2)
2063-
// There should be only one update per dependency.
2064-
XCTAssertEqual(delegate.repoUpdates.sorted(), ["/RootPkg/A", "/RootPkg/AA"])
2065-
}
2066-
20672013
static var allTests = [
20682014
("testBasics", testBasics),
20692015
("testBranchAndRevision", testBranchAndRevision),
@@ -2080,7 +2026,6 @@ final class WorkspaceTests: XCTestCase {
20802026
("testUpdate", testUpdate),
20812027
("testUneditDependency", testUneditDependency),
20822028
("testCleanAndReset", testCleanAndReset),
2083-
("testCanResolveWithIncompatiblePins", testCanResolveWithIncompatiblePins),
20842029
("testMultipleRootPackages", testMultipleRootPackages),
20852030
("testWarnings", testWarnings),
20862031
("testDependencyResolutionWithEdit", testDependencyResolutionWithEdit),

Tests/WorkspaceTests/WorkspaceTests2.swift

Lines changed: 164 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -333,8 +333,101 @@ final class WorkspaceTests2: XCTestCase {
333333
}
334334
}
335335

336+
func testCanResolveWithIncompatiblePins() throws {
337+
let sandbox = AbsolutePath("/tmp/ws/")
338+
let fs = InMemoryFileSystem()
339+
340+
let workspace = try TestWorkspace(
341+
sandbox: sandbox,
342+
fs: fs,
343+
roots: [],
344+
packages: [
345+
TestPackage(
346+
name: "A",
347+
targets: [
348+
TestTarget(name: "A", dependencies: ["AA"]),
349+
],
350+
products: [],
351+
dependencies: [
352+
TestDependency(name: "AA", requirement: .exact("1.0.0")),
353+
],
354+
versions: ["1.0.0"]
355+
),
356+
TestPackage(
357+
name: "A",
358+
targets: [
359+
TestTarget(name: "A", dependencies: ["AA"]),
360+
],
361+
products: [],
362+
dependencies: [
363+
TestDependency(name: "AA", requirement: .exact("2.0.0")),
364+
],
365+
versions: ["1.0.1"]
366+
),
367+
TestPackage(
368+
name: "AA",
369+
targets: [
370+
TestTarget(name: "AA"),
371+
],
372+
products: [
373+
TestProduct(name: "AA", targets: ["AA"]),
374+
],
375+
versions: ["1.0.0", "2.0.0"]
376+
),
377+
]
378+
)
379+
380+
// Resolve when A = 1.0.0.
381+
do {
382+
let deps: [TestWorkspace.PackageDependency] = [
383+
.init(name: "A", requirement: .exact("1.0.0"))
384+
]
385+
workspace.checkPackageGraph(deps: deps) { (graph, diagnostics) in
386+
PackageGraphTester(graph) { result in
387+
result.check(packages: "A", "AA")
388+
result.check(targets: "A", "AA")
389+
result.check(dependencies: "AA", target: "A")
390+
}
391+
XCTAssertNoDiagnostics(diagnostics)
392+
}
393+
workspace.checkManagedDependencies() { result in
394+
result.check(dependency: "a", at: .checkout(.version("1.0.0")))
395+
result.check(dependency: "aa", at: .checkout(.version("1.0.0")))
396+
}
397+
workspace.checkResolved() { result in
398+
result.check(dependency: "a", at: .checkout(.version("1.0.0")))
399+
result.check(dependency: "aa", at: .checkout(.version("1.0.0")))
400+
}
401+
}
402+
403+
// Resolve when A = 1.0.1.
404+
do {
405+
let deps: [TestWorkspace.PackageDependency] = [
406+
.init(name: "A", requirement: .exact("1.0.1"))
407+
]
408+
workspace.checkPackageGraph(deps: deps) { (graph, diagnostics) in
409+
PackageGraphTester(graph) { result in
410+
result.check(dependencies: "AA", target: "A")
411+
}
412+
XCTAssertNoDiagnostics(diagnostics)
413+
}
414+
workspace.checkManagedDependencies() { result in
415+
result.check(dependency: "a", at: .checkout(.version("1.0.1")))
416+
result.check(dependency: "aa", at: .checkout(.version("2.0.0")))
417+
}
418+
workspace.checkResolved() { result in
419+
result.check(dependency: "a", at: .checkout(.version("1.0.1")))
420+
result.check(dependency: "aa", at: .checkout(.version("2.0.0")))
421+
}
422+
XCTAssertMatch(workspace.delegate.events, [.equal("updating repo: /tmp/ws/pkgs/A")])
423+
XCTAssertMatch(workspace.delegate.events, [.equal("updating repo: /tmp/ws/pkgs/AA")])
424+
XCTAssertEqual(workspace.delegate.events.filter({ $0.hasPrefix("updating repo") }).count, 2)
425+
}
426+
}
427+
336428
static var allTests = [
337429
("testBasics", testBasics),
430+
("testCanResolveWithIncompatiblePins", testCanResolveWithIncompatiblePins),
338431
("testMultipleRootPackages", testMultipleRootPackages),
339432
("testRootAsDependency1", testRootAsDependency1),
340433
("testRootAsDependency2", testRootAsDependency1),
@@ -501,6 +594,33 @@ private final class TestWorkspace {
501594
return packages.map({ rootsDir.appending(component: $0) })
502595
}
503596

597+
struct PackageDependency {
598+
typealias Requirement = PackageGraphRoot.PackageDependency.Requirement
599+
600+
let name: String
601+
let requirement: Requirement
602+
603+
init(name: String, requirement: Requirement) {
604+
self.name = name
605+
self.requirement = requirement
606+
}
607+
}
608+
609+
func checkPackageGraph(
610+
roots: [String] = [],
611+
deps: [TestWorkspace.PackageDependency],
612+
_ result: (PackageGraph, DiagnosticsEngine) -> ()
613+
) {
614+
let dependencies = deps.map({
615+
PackageGraphRootInput.PackageDependency(
616+
url: packagesDir.appending(component: $0.name).asString,
617+
requirement: $0.requirement,
618+
location: $0.name
619+
)
620+
})
621+
checkPackageGraph(roots: roots, dependencies: dependencies, result)
622+
}
623+
504624
func checkPackageGraph(
505625
roots: [String] = [],
506626
dependencies: [PackageGraphRootInput.PackageDependency] = [],
@@ -514,6 +634,15 @@ private final class TestWorkspace {
514634
result(graph, diagnostics)
515635
}
516636

637+
enum State {
638+
enum CheckoutState {
639+
case version(Utility.Version)
640+
case revision(String)
641+
}
642+
case checkout(CheckoutState)
643+
case edited
644+
}
645+
517646
struct ManagedDependencyResult {
518647

519648
let managedDependencies: ManagedDependencies
@@ -522,15 +651,6 @@ private final class TestWorkspace {
522651
self.managedDependencies = managedDependencies
523652
}
524653

525-
enum State {
526-
enum CheckoutState {
527-
case version(Utility.Version)
528-
case revision(String)
529-
}
530-
case checkout(CheckoutState)
531-
case edited
532-
}
533-
534654
func check(notPresent name: String) {
535655
XCTAssert(managedDependencies[forIdentity: name] == nil, "Unexpectedly found \(name) in managed dependencies")
536656
}
@@ -562,6 +682,41 @@ private final class TestWorkspace {
562682
XCTFail("Failed with error \(error)")
563683
}
564684
}
685+
686+
struct ResolvedResult {
687+
let store: PinsStore
688+
689+
init(_ store: PinsStore) {
690+
self.store = store
691+
}
692+
693+
func check(dependency package: String, at state: State) {
694+
guard let pin = store.pinsMap[package] else {
695+
XCTFail("Pin for \(package) not found")
696+
return
697+
}
698+
switch state {
699+
case .checkout(let state):
700+
switch state {
701+
case .version(let version):
702+
XCTAssertEqual(pin.state.version, version)
703+
case .revision:
704+
XCTFail("Unimplemented")
705+
}
706+
case .edited:
707+
XCTFail("Unimplemented")
708+
}
709+
}
710+
}
711+
712+
func checkResolved(_ result: (ResolvedResult) throws -> ()) {
713+
do {
714+
let workspace = createWorkspace()
715+
try result(ResolvedResult(workspace.pinsStore.load()))
716+
} catch {
717+
XCTFail("Failed with error \(error)")
718+
}
719+
}
565720
}
566721

567722
private struct TestTarget {

0 commit comments

Comments
 (0)