@@ -25,13 +25,14 @@ final class BuildSystemManagerTests: XCTestCase {
25
25
let c = DocumentURI ( string: " bsm:c " )
26
26
let d = DocumentURI ( string: " bsm:d " )
27
27
28
- let mainFiles = ManualMainFilesProvider ( )
29
- mainFiles. mainFiles = [
30
- a: Set ( [ c] ) ,
31
- b: Set ( [ c, d] ) ,
32
- c: Set ( [ c] ) ,
33
- d: Set ( [ d] ) ,
34
- ]
28
+ let mainFiles = ManualMainFilesProvider (
29
+ mainFiles: [
30
+ a: Set ( [ c] ) ,
31
+ b: Set ( [ c, d] ) ,
32
+ c: Set ( [ c] ) ,
33
+ d: Set ( [ d] ) ,
34
+ ]
35
+ )
35
36
36
37
let bsm = await BuildSystemManager (
37
38
buildSystem: nil ,
@@ -55,13 +56,15 @@ final class BuildSystemManagerTests: XCTestCase {
55
56
await assertEqual ( bsm. _cachedMainFile ( for: c) , c)
56
57
await assertEqual ( bsm. _cachedMainFile ( for: d) , d)
57
58
58
- mainFiles. mainFiles = [
59
- a: Set ( [ a] ) ,
60
- b: Set ( [ c, d, a] ) ,
61
- c: Set ( [ c] ) ,
62
- d: Set ( [ d] ) ,
63
- ]
64
-
59
+ await mainFiles. setMainFiles (
60
+ mainFiles: [
61
+ a: Set ( [ a] ) ,
62
+ b: Set ( [ c, d, a] ) ,
63
+ c: Set ( [ c] ) ,
64
+ d: Set ( [ d] ) ,
65
+ ]
66
+ )
67
+
65
68
await assertEqual ( bsm. _cachedMainFile ( for: a) , c)
66
69
await assertEqual ( bsm. _cachedMainFile ( for: b) , bMain)
67
70
await assertEqual ( bsm. _cachedMainFile ( for: c) , c)
@@ -92,8 +95,7 @@ final class BuildSystemManagerTests: XCTestCase {
92
95
93
96
func testSettingsMainFile( ) async throws {
94
97
let a = DocumentURI ( string: " bsm:a.swift " )
95
- let mainFiles = ManualMainFilesProvider ( )
96
- mainFiles. mainFiles = [ a: Set ( [ a] ) ]
98
+ let mainFiles = ManualMainFilesProvider ( mainFiles: [ a: Set ( [ a] ) ] )
97
99
let bs = ManualBuildSystem ( )
98
100
let bsm = await BuildSystemManager (
99
101
buildSystem: bs,
@@ -116,8 +118,7 @@ final class BuildSystemManagerTests: XCTestCase {
116
118
117
119
func testSettingsMainFileInitialNil( ) async throws {
118
120
let a = DocumentURI ( string: " bsm:a.swift " )
119
- let mainFiles = ManualMainFilesProvider ( )
120
- mainFiles. mainFiles = [ a: Set ( [ a] ) ]
121
+ let mainFiles = ManualMainFilesProvider ( mainFiles: [ a: Set ( [ a] ) ] )
121
122
let bs = ManualBuildSystem ( )
122
123
let bsm = await BuildSystemManager (
123
124
buildSystem: bs,
@@ -138,8 +139,7 @@ final class BuildSystemManagerTests: XCTestCase {
138
139
139
140
func testSettingsMainFileWithFallback( ) async throws {
140
141
let a = DocumentURI ( string: " bsm:a.swift " )
141
- let mainFiles = ManualMainFilesProvider ( )
142
- mainFiles. mainFiles = [ a: Set ( [ a] ) ]
142
+ let mainFiles = ManualMainFilesProvider ( mainFiles: [ a: Set ( [ a] ) ] )
143
143
let bs = ManualBuildSystem ( )
144
144
let fallback = FallbackBuildSystem ( buildSetup: . default)
145
145
let bsm = await BuildSystemManager (
@@ -169,8 +169,7 @@ final class BuildSystemManagerTests: XCTestCase {
169
169
func testSettingsMainFileInitialIntersect( ) async throws {
170
170
let a = DocumentURI ( string: " bsm:a.swift " )
171
171
let b = DocumentURI ( string: " bsm:b.swift " )
172
- let mainFiles = ManualMainFilesProvider ( )
173
- mainFiles. mainFiles = [ a: Set ( [ a] ) , b: Set ( [ b] ) ]
172
+ let mainFiles = ManualMainFilesProvider ( mainFiles: [ a: Set ( [ a] ) , b: Set ( [ b] ) ] )
174
173
let bs = ManualBuildSystem ( )
175
174
let bsm = await BuildSystemManager (
176
175
buildSystem: bs,
@@ -210,8 +209,7 @@ final class BuildSystemManagerTests: XCTestCase {
210
209
func testSettingsMainFileUnchanged( ) async throws {
211
210
let a = DocumentURI ( string: " bsm:a.swift " )
212
211
let b = DocumentURI ( string: " bsm:b.swift " )
213
- let mainFiles = ManualMainFilesProvider ( )
214
- mainFiles. mainFiles = [ a: Set ( [ a] ) , b: Set ( [ b] ) ]
212
+ let mainFiles = ManualMainFilesProvider ( mainFiles: [ a: Set ( [ a] ) , b: Set ( [ b] ) ] )
215
213
let bs = ManualBuildSystem ( )
216
214
let bsm = await BuildSystemManager (
217
215
buildSystem: bs,
@@ -242,12 +240,13 @@ final class BuildSystemManagerTests: XCTestCase {
242
240
let h = DocumentURI ( string: " bsm:header.h " )
243
241
let cpp1 = DocumentURI ( string: " bsm:main.cpp " )
244
242
let cpp2 = DocumentURI ( string: " bsm:other.cpp " )
245
- let mainFiles = ManualMainFilesProvider ( )
246
- mainFiles . mainFiles = [
243
+ let mainFiles = ManualMainFilesProvider (
244
+ mainFiles : [
247
245
h: Set ( [ cpp1] ) ,
248
- cpp1: Set ( [ cpp1] ) ,
249
- cpp2: Set ( [ cpp2] ) ,
250
- ]
246
+ cpp1: Set ( [ cpp1] ) ,
247
+ cpp2: Set ( [ cpp2] ) ,
248
+ ]
249
+ )
251
250
252
251
let bs = ManualBuildSystem ( )
253
252
let bsm = await BuildSystemManager (
@@ -264,7 +263,13 @@ final class BuildSystemManagerTests: XCTestCase {
264
263
await bsm. registerForChangeNotifications ( for: h, language: . c)
265
264
assertEqual ( await bsm. buildSettingsInferredFromMainFile ( for: h, language: . c) , bs. map [ cpp1] !)
266
265
267
- mainFiles. mainFiles [ h] = Set ( [ cpp2] )
266
+ await mainFiles. setMainFiles (
267
+ mainFiles: [
268
+ h: Set ( [ cpp2] ) ,
269
+ cpp1: Set ( [ cpp1] ) ,
270
+ cpp2: Set ( [ cpp2] ) ,
271
+ ]
272
+ )
268
273
269
274
let changed = expectation ( description: " changed settings to cpp2 " )
270
275
await del. setExpected ( [ ( h, . c, bs. map [ cpp2] !, changed, #file, #line) ] )
@@ -277,14 +282,26 @@ final class BuildSystemManagerTests: XCTestCase {
277
282
await bsm. mainFilesChanged ( )
278
283
try await fulfillmentOfOrThrow ( [ changed2] , timeout: 1 )
279
284
280
- mainFiles. mainFiles [ h] = Set ( [ cpp1, cpp2] )
285
+ await mainFiles. setMainFiles (
286
+ mainFiles: [
287
+ h: Set ( [ cpp1, cpp2] ) ,
288
+ cpp1: Set ( [ cpp1] ) ,
289
+ cpp2: Set ( [ cpp2] ) ,
290
+ ]
291
+ )
281
292
282
293
let changed3 = expectation ( description: " added lexicographically earlier main file " )
283
294
await del. setExpected ( [ ( h, . c, bs. map [ cpp1] !, changed3, #file, #line) ] )
284
295
await bsm. mainFilesChanged ( )
285
296
try await fulfillmentOfOrThrow ( [ changed3] , timeout: 1 )
286
297
287
- mainFiles. mainFiles [ h] = Set ( [ ] )
298
+ await mainFiles. setMainFiles (
299
+ mainFiles: [
300
+ h: Set ( [ ] ) ,
301
+ cpp1: Set ( [ cpp1] ) ,
302
+ cpp2: Set ( [ cpp2] ) ,
303
+ ]
304
+ )
288
305
289
306
let changed4 = expectation ( description: " changed settings to [] " )
290
307
await del. setExpected ( [ ( h, . c, nil , changed4, #file, #line) ] )
@@ -296,11 +313,12 @@ final class BuildSystemManagerTests: XCTestCase {
296
313
let h1 = DocumentURI ( string: " bsm:header1.h " )
297
314
let h2 = DocumentURI ( string: " bsm:header2.h " )
298
315
let cpp = DocumentURI ( string: " bsm:main.cpp " )
299
- let mainFiles = ManualMainFilesProvider ( )
300
- mainFiles. mainFiles = [
301
- h1: Set ( [ cpp] ) ,
302
- h2: Set ( [ cpp] ) ,
303
- ]
316
+ let mainFiles = ManualMainFilesProvider (
317
+ mainFiles: [
318
+ h1: Set ( [ cpp] ) ,
319
+ h2: Set ( [ cpp] ) ,
320
+ ]
321
+ )
304
322
305
323
let bs = ManualBuildSystem ( )
306
324
let bsm = await BuildSystemManager (
@@ -342,8 +360,7 @@ final class BuildSystemManagerTests: XCTestCase {
342
360
let a = DocumentURI ( string: " bsm:a.swift " )
343
361
let b = DocumentURI ( string: " bsm:b.swift " )
344
362
let c = DocumentURI ( string: " bsm:c.swift " )
345
- let mainFiles = ManualMainFilesProvider ( )
346
- mainFiles. mainFiles = [ a: Set ( [ a] ) , b: Set ( [ b] ) , c: Set ( [ c] ) ]
363
+ let mainFiles = ManualMainFilesProvider ( mainFiles: [ a: Set ( [ a] ) , b: Set ( [ b] ) , c: Set ( [ c] ) ] )
347
364
let bs = ManualBuildSystem ( )
348
365
let bsm = await BuildSystemManager (
349
366
buildSystem: bs,
@@ -384,8 +401,7 @@ final class BuildSystemManagerTests: XCTestCase {
384
401
385
402
func testDependenciesUpdated( ) async throws {
386
403
let a = DocumentURI ( string: " bsm:a.swift " )
387
- let mainFiles = ManualMainFilesProvider ( )
388
- mainFiles. mainFiles = [ a: Set ( [ a] ) ]
404
+ let mainFiles = ManualMainFilesProvider ( mainFiles: [ a: Set ( [ a] ) ] )
389
405
390
406
let bs = ManualBuildSystem ( )
391
407
let bsm = await BuildSystemManager (
@@ -412,15 +428,18 @@ final class BuildSystemManagerTests: XCTestCase {
412
428
// MARK: Helper Classes for Testing
413
429
414
430
/// A simple `MainFilesProvider` that wraps a dictionary, for testing.
415
- private final class ManualMainFilesProvider : MainFilesProvider {
416
- let lock : DispatchQueue = DispatchQueue ( label: " \( ManualMainFilesProvider . self) -lock " )
417
- private var _mainFiles : [ DocumentURI : Set < DocumentURI > ] = [ : ]
418
- var mainFiles : [ DocumentURI : Set < DocumentURI > ] {
419
- get { lock. sync { _mainFiles } }
420
- set { lock. sync { _mainFiles = newValue } }
431
+ private final actor ManualMainFilesProvider : MainFilesProvider {
432
+ private var mainFiles : [ DocumentURI : Set < DocumentURI > ]
433
+
434
+ init ( mainFiles: [ DocumentURI : Set < DocumentURI > ] ) {
435
+ self . mainFiles = mainFiles
436
+ }
437
+
438
+ func setMainFiles( mainFiles: [ DocumentURI : Set < DocumentURI > ] ) async {
439
+ self . mainFiles = mainFiles
421
440
}
422
441
423
- func mainFilesContainingFile( _ file: DocumentURI ) -> Set < DocumentURI > {
442
+ func mainFilesContainingFile( _ file: DocumentURI ) async -> Set < DocumentURI > {
424
443
if let result = mainFiles [ file] {
425
444
return result
426
445
}
0 commit comments