@@ -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
+ [
30
+ a: [ c] ,
31
+ b: [ c, d] ,
32
+ c: [ c] ,
33
+ d: [ d] ,
34
+ ]
35
+ )
35
36
36
37
let bsm = await BuildSystemManager (
37
38
buildSystem: nil ,
@@ -55,13 +56,9 @@ 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. updateMainFiles ( for: a, to: [ a] )
60
+ await mainFiles. updateMainFiles ( for: b, to: [ c, d, a] )
61
+
65
62
await assertEqual ( bsm. _cachedMainFile ( for: a) , c)
66
63
await assertEqual ( bsm. _cachedMainFile ( for: b) , bMain)
67
64
await assertEqual ( bsm. _cachedMainFile ( for: c) , c)
@@ -92,8 +89,7 @@ final class BuildSystemManagerTests: XCTestCase {
92
89
93
90
func testSettingsMainFile( ) async throws {
94
91
let a = DocumentURI ( string: " bsm:a.swift " )
95
- let mainFiles = ManualMainFilesProvider ( )
96
- mainFiles. mainFiles = [ a: Set ( [ a] ) ]
92
+ let mainFiles = ManualMainFilesProvider ( [ a: [ a] ] )
97
93
let bs = ManualBuildSystem ( )
98
94
let bsm = await BuildSystemManager (
99
95
buildSystem: bs,
@@ -116,8 +112,7 @@ final class BuildSystemManagerTests: XCTestCase {
116
112
117
113
func testSettingsMainFileInitialNil( ) async throws {
118
114
let a = DocumentURI ( string: " bsm:a.swift " )
119
- let mainFiles = ManualMainFilesProvider ( )
120
- mainFiles. mainFiles = [ a: Set ( [ a] ) ]
115
+ let mainFiles = ManualMainFilesProvider ( [ a: [ a] ] )
121
116
let bs = ManualBuildSystem ( )
122
117
let bsm = await BuildSystemManager (
123
118
buildSystem: bs,
@@ -138,8 +133,7 @@ final class BuildSystemManagerTests: XCTestCase {
138
133
139
134
func testSettingsMainFileWithFallback( ) async throws {
140
135
let a = DocumentURI ( string: " bsm:a.swift " )
141
- let mainFiles = ManualMainFilesProvider ( )
142
- mainFiles. mainFiles = [ a: Set ( [ a] ) ]
136
+ let mainFiles = ManualMainFilesProvider ( [ a: [ a] ] )
143
137
let bs = ManualBuildSystem ( )
144
138
let fallback = FallbackBuildSystem ( buildSetup: . default)
145
139
let bsm = await BuildSystemManager (
@@ -169,8 +163,7 @@ final class BuildSystemManagerTests: XCTestCase {
169
163
func testSettingsMainFileInitialIntersect( ) async throws {
170
164
let a = DocumentURI ( string: " bsm:a.swift " )
171
165
let b = DocumentURI ( string: " bsm:b.swift " )
172
- let mainFiles = ManualMainFilesProvider ( )
173
- mainFiles. mainFiles = [ a: Set ( [ a] ) , b: Set ( [ b] ) ]
166
+ let mainFiles = ManualMainFilesProvider ( [ a: [ a] , b: [ b] ] )
174
167
let bs = ManualBuildSystem ( )
175
168
let bsm = await BuildSystemManager (
176
169
buildSystem: bs,
@@ -210,8 +203,7 @@ final class BuildSystemManagerTests: XCTestCase {
210
203
func testSettingsMainFileUnchanged( ) async throws {
211
204
let a = DocumentURI ( string: " bsm:a.swift " )
212
205
let b = DocumentURI ( string: " bsm:b.swift " )
213
- let mainFiles = ManualMainFilesProvider ( )
214
- mainFiles. mainFiles = [ a: Set ( [ a] ) , b: Set ( [ b] ) ]
206
+ let mainFiles = ManualMainFilesProvider ( [ a: [ a] , b: [ b] ] )
215
207
let bs = ManualBuildSystem ( )
216
208
let bsm = await BuildSystemManager (
217
209
buildSystem: bs,
@@ -242,12 +234,13 @@ final class BuildSystemManagerTests: XCTestCase {
242
234
let h = DocumentURI ( string: " bsm:header.h " )
243
235
let cpp1 = DocumentURI ( string: " bsm:main.cpp " )
244
236
let cpp2 = DocumentURI ( string: " bsm:other.cpp " )
245
- let mainFiles = ManualMainFilesProvider ( )
246
- mainFiles. mainFiles = [
247
- h: Set ( [ cpp1] ) ,
248
- cpp1: Set ( [ cpp1] ) ,
249
- cpp2: Set ( [ cpp2] ) ,
250
- ]
237
+ let mainFiles = ManualMainFilesProvider (
238
+ [
239
+ h: [ cpp1] ,
240
+ cpp1: [ cpp1] ,
241
+ cpp2: [ cpp2] ,
242
+ ]
243
+ )
251
244
252
245
let bs = ManualBuildSystem ( )
253
246
let bsm = await BuildSystemManager (
@@ -264,7 +257,7 @@ final class BuildSystemManagerTests: XCTestCase {
264
257
await bsm. registerForChangeNotifications ( for: h, language: . c)
265
258
assertEqual ( await bsm. buildSettingsInferredFromMainFile ( for: h, language: . c) , bs. map [ cpp1] !)
266
259
267
- mainFiles. mainFiles [ h ] = Set ( [ cpp2] )
260
+ await mainFiles. updateMainFiles ( for : h , to : [ cpp2] )
268
261
269
262
let changed = expectation ( description: " changed settings to cpp2 " )
270
263
await del. setExpected ( [ ( h, . c, bs. map [ cpp2] !, changed, #file, #line) ] )
@@ -277,14 +270,14 @@ final class BuildSystemManagerTests: XCTestCase {
277
270
await bsm. mainFilesChanged ( )
278
271
try await fulfillmentOfOrThrow ( [ changed2] , timeout: 1 )
279
272
280
- mainFiles. mainFiles [ h ] = Set ( [ cpp1, cpp2] )
273
+ await mainFiles. updateMainFiles ( for : h , to : [ cpp1, cpp2] )
281
274
282
275
let changed3 = expectation ( description: " added lexicographically earlier main file " )
283
276
await del. setExpected ( [ ( h, . c, bs. map [ cpp1] !, changed3, #file, #line) ] )
284
277
await bsm. mainFilesChanged ( )
285
278
try await fulfillmentOfOrThrow ( [ changed3] , timeout: 1 )
286
279
287
- mainFiles. mainFiles [ h ] = Set ( [ ] )
280
+ await mainFiles. updateMainFiles ( for : h , to : [ ] )
288
281
289
282
let changed4 = expectation ( description: " changed settings to [] " )
290
283
await del. setExpected ( [ ( h, . c, nil , changed4, #file, #line) ] )
@@ -296,11 +289,12 @@ final class BuildSystemManagerTests: XCTestCase {
296
289
let h1 = DocumentURI ( string: " bsm:header1.h " )
297
290
let h2 = DocumentURI ( string: " bsm:header2.h " )
298
291
let cpp = DocumentURI ( string: " bsm:main.cpp " )
299
- let mainFiles = ManualMainFilesProvider ( )
300
- mainFiles. mainFiles = [
301
- h1: Set ( [ cpp] ) ,
302
- h2: Set ( [ cpp] ) ,
303
- ]
292
+ let mainFiles = ManualMainFilesProvider (
293
+ [
294
+ h1: [ cpp] ,
295
+ h2: [ cpp] ,
296
+ ]
297
+ )
304
298
305
299
let bs = ManualBuildSystem ( )
306
300
let bsm = await BuildSystemManager (
@@ -342,8 +336,7 @@ final class BuildSystemManagerTests: XCTestCase {
342
336
let a = DocumentURI ( string: " bsm:a.swift " )
343
337
let b = DocumentURI ( string: " bsm:b.swift " )
344
338
let c = DocumentURI ( string: " bsm:c.swift " )
345
- let mainFiles = ManualMainFilesProvider ( )
346
- mainFiles. mainFiles = [ a: Set ( [ a] ) , b: Set ( [ b] ) , c: Set ( [ c] ) ]
339
+ let mainFiles = ManualMainFilesProvider ( [ a: [ a] , b: [ b] , c: [ c] ] )
347
340
let bs = ManualBuildSystem ( )
348
341
let bsm = await BuildSystemManager (
349
342
buildSystem: bs,
@@ -384,8 +377,7 @@ final class BuildSystemManagerTests: XCTestCase {
384
377
385
378
func testDependenciesUpdated( ) async throws {
386
379
let a = DocumentURI ( string: " bsm:a.swift " )
387
- let mainFiles = ManualMainFilesProvider ( )
388
- mainFiles. mainFiles = [ a: Set ( [ a] ) ]
380
+ let mainFiles = ManualMainFilesProvider ( [ a: [ a] ] )
389
381
390
382
let bs = ManualBuildSystem ( )
391
383
let bsm = await BuildSystemManager (
@@ -412,12 +404,15 @@ final class BuildSystemManagerTests: XCTestCase {
412
404
// MARK: Helper Classes for Testing
413
405
414
406
/// 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 } }
407
+ private final actor ManualMainFilesProvider : MainFilesProvider {
408
+ private var mainFiles : [ DocumentURI : Set < DocumentURI > ]
409
+
410
+ init ( _ mainFiles: [ DocumentURI : Set < DocumentURI > ] ) {
411
+ self . mainFiles = mainFiles
412
+ }
413
+
414
+ func updateMainFiles( for file: DocumentURI , to mainFiles: Set < DocumentURI > ) async {
415
+ self . mainFiles [ file] = mainFiles
421
416
}
422
417
423
418
func mainFilesContainingFile( _ file: DocumentURI ) -> Set < DocumentURI > {
0 commit comments