6
6
7
7
See http://swift.org/LICENSE.txt for license information
8
8
See http://swift.org/CONTRIBUTORS.txt for Swift project authors
9
- */
9
+ */
10
10
11
11
import XCTest
12
12
13
- import TSCBasic
14
- import TSCUtility
13
+ import PackageGraph
15
14
import PackageLoading
16
15
import PackageModel
17
- import PackageGraph
18
16
import SourceControl
17
+ import TSCBasic
18
+ import TSCUtility
19
19
20
20
import SPMTestSupport
21
21
@@ -35,19 +35,19 @@ private class MockRepository: Repository {
35
35
}
36
36
37
37
var specifier : RepositorySpecifier {
38
- return RepositorySpecifier ( url: url)
38
+ return RepositorySpecifier ( url: self . url)
39
39
}
40
40
41
41
var packageRef : PackageReference {
42
- return PackageReference ( identity: url. lowercased ( ) , path: url)
42
+ return PackageReference ( identity: self . url. lowercased ( ) , path: self . url)
43
43
}
44
44
45
45
var tags : [ String ] {
46
- return versions. keys. map { String ( describing: $0) }
46
+ return self . versions. keys. map { String ( describing: $0) }
47
47
}
48
48
49
49
func resolveRevision( tag: String ) throws -> Revision {
50
- assert ( versions. index ( forKey: Version ( string: tag) !) != nil )
50
+ assert ( self . versions. index ( forKey: Version ( string: tag) !) != nil )
51
51
return Revision ( identifier: tag)
52
52
}
53
53
@@ -68,9 +68,9 @@ private class MockRepository: Repository {
68
68
}
69
69
70
70
func openFileView( revision: Revision ) throws -> FileSystem {
71
- assert ( versions. index ( forKey: Version ( string: revision. identifier) !) != nil )
71
+ assert ( self . versions. index ( forKey: Version ( string: revision. identifier) !) != nil )
72
72
// This is used for reading the tools version.
73
- return fs
73
+ return self . fs
74
74
}
75
75
}
76
76
@@ -98,15 +98,15 @@ private class MockRepositories: RepositoryProvider {
98
98
99
99
func fetch( repository: RepositorySpecifier , to path: AbsolutePath ) throws {
100
100
// No-op.
101
- assert ( repositories. index ( forKey: repository. url) != nil )
101
+ assert ( self . repositories. index ( forKey: repository. url) != nil )
102
102
}
103
103
104
104
func checkoutExists( at path: AbsolutePath ) throws -> Bool {
105
105
return false
106
106
}
107
107
108
108
func open( repository: RepositorySpecifier , at path: AbsolutePath ) throws -> Repository {
109
- return repositories [ repository. url] !
109
+ return self . repositories [ repository. url] !
110
110
}
111
111
112
112
func cloneCheckout( repository: RepositorySpecifier , at sourcePath: AbsolutePath , to destinationPath: AbsolutePath , editable: Bool ) throws {
@@ -124,11 +124,10 @@ private class MockResolverDelegate: RepositoryManagerDelegate {
124
124
var fetched = [ RepositorySpecifier] ( )
125
125
126
126
func fetchingWillBegin( handle: RepositoryManager . RepositoryHandle ) {
127
- fetched += [ handle. repository]
127
+ self . fetched += [ handle. repository]
128
128
}
129
129
130
- func fetchingDidFinish( handle: RepositoryManager . RepositoryHandle , error: Swift . Error ? ) {
131
- }
130
+ func fetchingDidFinish( handle: RepositoryManager . RepositoryHandle , error: Swift . Error ? ) { }
132
131
}
133
132
134
133
// Some handy versions & ranges.
@@ -141,7 +140,6 @@ private let v2: Version = "2.0.0"
141
140
private let v1Range : VersionSetSpecifier = . range( " 1.0.0 " ..< " 2.0.0 " )
142
141
143
142
class RepositoryPackageContainerProviderTests : XCTestCase {
144
-
145
143
func testPackageReference( ) {
146
144
func assertIdentity( _ url: String , _ identity: String , file: StaticString = #file, line: UInt = #line) {
147
145
let computedIdentity = PackageReference . computeIdentity ( packageURL: url)
@@ -185,14 +183,16 @@ class RepositoryPackageContainerProviderTests: XCTestCase {
185
183
path: p,
186
184
provider: inMemRepoProvider,
187
185
delegate: MockResolverDelegate ( ) ,
188
- fileSystem: fs)
186
+ fileSystem: fs
187
+ )
189
188
190
189
let provider = RepositoryPackageContainerProvider (
191
- repositoryManager: repositoryManager,
192
- manifestLoader: MockManifestLoader ( manifests: [ : ] ) )
190
+ repositoryManager: repositoryManager,
191
+ manifestLoader: MockManifestLoader ( manifests: [ : ] )
192
+ )
193
193
let ref = PackageReference ( identity: " foo " , path: repoPath. pathString)
194
- let container = try await { provider. getContainer ( for: ref, completion: $0) }
195
- let v = container. versions ( filter: { _ in true } ) . map { $0 }
194
+ let container = try await { provider. getContainer ( for: ref, skipUpdate : false , completion: $0) }
195
+ let v = container. versions ( filter: { _ in true } ) . map { $0 }
196
196
XCTAssertEqual ( v, [ " 2.0.3 " , " 1.0.3 " , " 1.0.2 " , " 1.0.1 " , " 1.0.0 " ] )
197
197
}
198
198
@@ -232,46 +232,48 @@ class RepositoryPackageContainerProviderTests: XCTestCase {
232
232
path: p,
233
233
provider: inMemRepoProvider,
234
234
delegate: MockResolverDelegate ( ) ,
235
- fileSystem: fs)
235
+ fileSystem: fs
236
+ )
236
237
237
238
func createProvider( _ currentToolsVersion: ToolsVersion ) -> RepositoryPackageContainerProvider {
238
239
return RepositoryPackageContainerProvider (
239
240
repositoryManager: repositoryManager,
240
241
manifestLoader: MockManifestLoader ( manifests: [ : ] ) ,
241
- currentToolsVersion: currentToolsVersion)
242
+ currentToolsVersion: currentToolsVersion
243
+ )
242
244
}
243
245
244
246
do {
245
247
let provider = createProvider ( ToolsVersion ( version: " 4.0.0 " ) )
246
248
let ref = PackageReference ( identity: " foo " , path: specifier. url)
247
- let container = try await { provider. getContainer ( for: ref, completion: $0) }
248
- let v = container. versions ( filter: { _ in true } ) . map { $0 }
249
+ let container = try await { provider. getContainer ( for: ref, skipUpdate : false , completion: $0) }
250
+ let v = container. versions ( filter: { _ in true } ) . map { $0 }
249
251
XCTAssertEqual ( v, [ " 1.0.1 " ] )
250
252
}
251
253
252
254
do {
253
255
let provider = createProvider ( ToolsVersion ( version: " 4.2.0 " ) )
254
256
let ref = PackageReference ( identity: " foo " , path: specifier. url)
255
- let container = try await { provider. getContainer ( for: ref, completion: $0) }
257
+ let container = try await { provider. getContainer ( for: ref, skipUpdate : false , completion: $0) }
256
258
XCTAssertEqual ( ( container as! RepositoryPackageContainer ) . validToolsVersionsCache, [ : ] )
257
- let v = container. versions ( filter: { _ in true } ) . map { $0 }
259
+ let v = container. versions ( filter: { _ in true } ) . map { $0 }
258
260
XCTAssertEqual ( ( container as! RepositoryPackageContainer ) . validToolsVersionsCache, [ " 1.0.1 " : true , " 1.0.0 " : false , " 1.0.3 " : true , " 1.0.2 " : true ] )
259
261
XCTAssertEqual ( v, [ " 1.0.3 " , " 1.0.2 " , " 1.0.1 " ] )
260
262
}
261
263
262
264
do {
263
265
let provider = createProvider ( ToolsVersion ( version: " 3.0.0 " ) )
264
266
let ref = PackageReference ( identity: " foo " , path: specifier. url)
265
- let container = try await { provider. getContainer ( for: ref, completion: $0) }
266
- let v = container. versions ( filter: { _ in true } ) . map { $0 }
267
+ let container = try await { provider. getContainer ( for: ref, skipUpdate : false , completion: $0) }
268
+ let v = container. versions ( filter: { _ in true } ) . map { $0 }
267
269
XCTAssertEqual ( v, [ ] )
268
270
}
269
271
270
272
// Test that getting dependencies on a revision that has unsupported tools version is diganosed properly.
271
273
do {
272
274
let provider = createProvider ( ToolsVersion ( version: " 4.0.0 " ) )
273
275
let ref = PackageReference ( identity: " foo " , path: specifier. url)
274
- let container = try await { provider. getContainer ( for: ref, completion: $0) } as! RepositoryPackageContainer
276
+ let container = try await { provider. getContainer ( for: ref, skipUpdate : false , completion: $0) } as! RepositoryPackageContainer
275
277
let revision = try container. getRevision ( forTag: " 1.0.0 " )
276
278
do {
277
279
_ = try container. getDependencies ( at: revision. identifier, productFilter: . nothing)
@@ -310,14 +312,16 @@ class RepositoryPackageContainerProviderTests: XCTestCase {
310
312
path: p,
311
313
provider: inMemRepoProvider,
312
314
delegate: MockResolverDelegate ( ) ,
313
- fileSystem: fs)
315
+ fileSystem: fs
316
+ )
314
317
315
318
let provider = RepositoryPackageContainerProvider (
316
319
repositoryManager: repositoryManager,
317
- manifestLoader: MockManifestLoader ( manifests: [ : ] ) )
320
+ manifestLoader: MockManifestLoader ( manifests: [ : ] )
321
+ )
318
322
let ref = PackageReference ( identity: " foo " , path: repoPath. pathString)
319
- let container = try await { provider. getContainer ( for: ref, completion: $0) }
320
- let v = container. versions ( filter: { _ in true } ) . map { $0 }
323
+ let container = try await { provider. getContainer ( for: ref, skipUpdate : false , completion: $0) }
324
+ let v = container. versions ( filter: { _ in true } ) . map { $0 }
321
325
XCTAssertEqual ( v, [ " 1.0.4-alpha " , " 1.0.2-dev.2 " , " 1.0.2-dev " , " 1.0.1 " , " 1.0.0 " , " 1.0.0-beta.1 " , " 1.0.0-alpha.1 " ] )
322
326
}
323
327
@@ -348,14 +352,16 @@ class RepositoryPackageContainerProviderTests: XCTestCase {
348
352
path: p,
349
353
provider: inMemRepoProvider,
350
354
delegate: MockResolverDelegate ( ) ,
351
- fileSystem: fs)
355
+ fileSystem: fs
356
+ )
352
357
353
358
let provider = RepositoryPackageContainerProvider (
354
359
repositoryManager: repositoryManager,
355
- manifestLoader: MockManifestLoader ( manifests: [ : ] ) )
360
+ manifestLoader: MockManifestLoader ( manifests: [ : ] )
361
+ )
356
362
let ref = PackageReference ( identity: " foo " , path: repoPath. pathString)
357
- let container = try await { provider. getContainer ( for: ref, completion: $0) }
358
- let v = container. versions ( filter: { _ in true } ) . map { $0 }
363
+ let container = try await { provider. getContainer ( for: ref, skipUpdate : false , completion: $0) }
364
+ let v = container. versions ( filter: { _ in true } ) . map { $0 }
359
365
XCTAssertEqual ( v, [ " 2.0.1 " , " 1.0.4 " , " 1.0.2 " , " 1.0.1 " , " 1.0.0 " ] )
360
366
}
361
367
@@ -372,7 +378,7 @@ class RepositoryPackageContainerProviderTests: XCTestCase {
372
378
]
373
379
374
380
let products = [
375
- ProductDescription ( name: " Foo " , type: . library( . automatic) , targets: [ " Foo1 " ] )
381
+ ProductDescription ( name: " Foo " , type: . library( . automatic) , targets: [ " Foo1 " ] ) ,
376
382
]
377
383
378
384
let targets = [
@@ -386,25 +392,27 @@ class RepositoryPackageContainerProviderTests: XCTestCase {
386
392
let v5ProductMapping : [ String : ProductFilter ] = [
387
393
" Bar1 " : . specific( [ " Bar1 " , " Bar3 " ] ) ,
388
394
" Bar2 " : . specific( [ " B2 " , " Bar1 " , " Bar3 " ] ) ,
389
- " Bar3 " : . specific( [ " Bar1 " , " Bar3 " ] )
395
+ " Bar3 " : . specific( [ " Bar1 " , " Bar3 " ] ) ,
390
396
]
391
- let v5Constraints = dependencies. map ( {
397
+ let v5Constraints = dependencies. map {
392
398
RepositoryPackageConstraint (
393
399
container: $0. createPackageRef ( mirrors: mirrors) ,
394
400
requirement: $0. requirement. toConstraintRequirement ( ) ,
395
- products: v5ProductMapping [ $0. name] !)
396
- } )
401
+ products: v5ProductMapping [ $0. name] !
402
+ )
403
+ }
397
404
let v5_2ProductMapping : [ String : ProductFilter ] = [
398
405
" Bar1 " : . specific( [ " Bar1 " ] ) ,
399
406
" Bar2 " : . specific( [ " B2 " ] ) ,
400
- " Bar3 " : . specific( [ " Bar3 " ] )
407
+ " Bar3 " : . specific( [ " Bar3 " ] ) ,
401
408
]
402
- let v5_2Constraints = dependencies. map ( {
409
+ let v5_2Constraints = dependencies. map {
403
410
RepositoryPackageConstraint (
404
411
container: $0. createPackageRef ( mirrors: mirrors) ,
405
412
requirement: $0. requirement. toConstraintRequirement ( ) ,
406
- products: v5_2ProductMapping [ $0. name] !)
407
- } )
413
+ products: v5_2ProductMapping [ $0. name] !
414
+ )
415
+ }
408
416
409
417
do {
410
418
let manifest = Manifest . createManifest (
@@ -492,7 +500,7 @@ class RepositoryPackageContainerProviderTests: XCTestCase {
492
500
493
501
XCTAssertEqual (
494
502
manifest
495
- . dependencyConstraints ( productFilter: . specific( Set ( products. map ( { $0. name } ) ) ) , mirrors: mirrors)
503
+ . dependencyConstraints ( productFilter: . specific( Set ( products. map { $0. name } ) ) , mirrors: mirrors)
496
504
. sorted ( by: { $0. identifier. identity < $1. identifier. identity } ) ,
497
505
[
498
506
v5_2Constraints [ 0 ] ,
@@ -501,56 +509,55 @@ class RepositoryPackageContainerProviderTests: XCTestCase {
501
509
)
502
510
}
503
511
}
504
-
505
-
512
+
506
513
func testMissingBranchDiagnostics( ) throws {
507
514
try testWithTemporaryDirectory { tmpDir in
508
515
// Create a repository.
509
516
let packageDir = tmpDir. appending ( component: " SomePackage " )
510
517
try localFileSystem. createDirectory ( packageDir)
511
518
initGitRepo ( packageDir)
512
519
let packageRepo = GitRepository ( path: packageDir)
513
-
520
+
514
521
// Create a package manifest in it (it only needs the `swift-tools-version` part, because we'll supply the manifest later).
515
522
let manifestFile = packageDir. appending ( component: " Package.swift " )
516
523
try localFileSystem. writeFileContents ( manifestFile, bytes: ByteString ( " // swift-tools-version:4.2 " ) )
517
-
524
+
518
525
// Commit it and tag it.
519
526
try packageRepo. stage ( file: " Package.swift " )
520
527
try packageRepo. commit ( message: " Initial " )
521
528
try packageRepo. tag ( name: " 1.0.0 " )
522
-
529
+
523
530
// Rename the `master` branch to `main`.
524
531
try systemQuietly ( [ Git . tool, " -C " , packageDir. pathString, " branch " , " -m " , " main " ] )
525
532
526
533
// Create a repository manager for it.
527
534
let repoProvider = GitRepositoryProvider ( )
528
535
let repositoryManager = RepositoryManager ( path: packageDir, provider: repoProvider, delegate: nil , fileSystem: localFileSystem)
529
-
536
+
530
537
// Create a container provider, configured with a mock manifest loader that will return the package manifest.
531
538
let manifest = Manifest . createV4Manifest (
532
539
name: packageDir. basename,
533
540
path: packageDir. pathString,
534
541
url: packageDir. pathString,
535
542
packageKind: . root,
536
543
targets: [
537
- TargetDescription ( name: packageDir. basename, path: packageDir. pathString)
544
+ TargetDescription ( name: packageDir. basename, path: packageDir. pathString) ,
538
545
]
539
546
)
540
- let containerProvider = RepositoryPackageContainerProvider ( repositoryManager: repositoryManager, manifestLoader: MockManifestLoader ( manifests: [ . init( url: packageDir. pathString, version: nil ) : manifest] ) )
541
-
547
+ let containerProvider = RepositoryPackageContainerProvider ( repositoryManager: repositoryManager, manifestLoader: MockManifestLoader ( manifests: [ . init( url: packageDir. pathString, version: nil ) : manifest] ) )
548
+
542
549
// Get a hold of the container for the test package.
543
550
let packageRef = PackageReference ( identity: " somepackage " , path: packageDir. pathString)
544
- let container = try await { containerProvider. getContainer ( for: packageRef, completion: $0) } as! RepositoryPackageContainer
545
-
551
+ let container = try await { containerProvider. getContainer ( for: packageRef, skipUpdate : false , completion: $0) } as! RepositoryPackageContainer
552
+
546
553
// Simulate accessing a fictitious dependency on the `master` branch, and check that we get back the expected error.
547
554
do { _ = try container. getDependencies ( at: " master " , productFilter: . everything) }
548
555
catch let error as RepositoryPackageContainer . GetDependenciesError {
549
556
// We expect to get an error message that mentions main.
550
557
XCTAssertMatch ( error. description, . and( . prefix( " could not find a branch named ‘master’ " ) , . suffix( " (did you mean ‘main’?) " ) ) )
551
558
XCTAssertMatch ( error. diagnosticLocation? . description, . suffix( " /SomePackage @ master " ) )
552
559
}
553
-
560
+
554
561
// Simulate accessing a fictitious dependency on some random commit that doesn't exist, and check that we get back the expected error.
555
562
do { _ = try container. getDependencies ( at: " 535f4cb5b4a0872fa691473e82d7b27b9894df00 " , productFilter: . everything) }
556
563
catch let error as RepositoryPackageContainer . GetDependenciesError {
@@ -560,5 +567,4 @@ class RepositoryPackageContainerProviderTests: XCTestCase {
560
567
}
561
568
}
562
569
}
563
-
564
570
}
0 commit comments