@@ -279,6 +279,16 @@ typealias DefaultDistributedActorSystem = FakeActorSystem
279
279
280
280
func test( ) {
281
281
let group = DispatchGroup ( )
282
+ var dummy : AnyObject ?
283
+
284
+ func check( factory: ( ) -> AnyObject ) {
285
+ dummy = factory ( )
286
+ // Test requires actor system to be released before the actor,
287
+ // so that release of the actor system from actor deinit is the last one
288
+ group. enter ( )
289
+ dummy = nil
290
+ group. wait ( )
291
+ }
282
292
283
293
// no lifecycle things make sense for a normal actor, double check we didn't emit them
284
294
print ( " before A " )
@@ -287,117 +297,97 @@ func test() {
287
297
// CHECK: before A
288
298
// CHECK: after A
289
299
290
- group. enter ( )
291
- _ = { ( ) -> DA in
300
+ check {
292
301
DA ( system: DefaultDistributedActorSystem ( group: group) )
293
- } ( )
294
- group. wait ( )
302
+ }
295
303
// CHECK: assign type:DA, address:[[ADDRESS:.*]]
296
304
// CHECK: ready actor:main.DA, address:ActorAddress(address: "[[ADDR1:addr-[0-9]]]")
297
305
// CHECK: resign address:ActorAddress(address: "[[ADDR1]]")
298
306
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
299
307
300
- group. enter ( )
301
- _ = { ( ) -> DA_userDefined in
308
+ check {
302
309
DA_userDefined ( system: DefaultDistributedActorSystem ( group: group) )
303
- } ( )
304
- group. wait ( )
310
+ }
305
311
// CHECK: assign type:DA_userDefined, address:[[ADDRESS:.*]]
306
312
// CHECK: ready actor:main.DA_userDefined, address:ActorAddress(address: "[[ADDR2:addr-[0-9]]]")
307
313
// CHECK: resign address:ActorAddress(address: "[[ADDR2]]")
308
314
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
309
315
310
316
// resign must happen as the _last thing_ after user-deinit completed
311
- group. enter ( )
312
- _ = { ( ) -> DA_userDefined_nonisolated in
317
+ check {
313
318
DA_userDefined_nonisolated ( system: DefaultDistributedActorSystem ( group: group) )
314
- } ( )
315
- group. wait ( )
319
+ }
316
320
// CHECK: assign type:DA_userDefined_nonisolated, address:[[ADDRESS:.*]]
317
321
// CHECK: ready actor:main.DA_userDefined_nonisolated, address:ActorAddress(address: "[[ADDR3:addr-[0-9]]]")
318
322
// CHECK: Deinitializing ActorAddress(address: "[[ADDR3]]") remote:false isolated:false mainThread:true
319
323
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR3]]")
320
324
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
321
325
322
326
// resign must happen as the _last thing_ after user-deinit completed
323
- group. enter ( )
324
- _ = { ( ) -> DA_userDefined_isolated in
327
+ check {
325
328
DA_userDefined_isolated ( system: DefaultDistributedActorSystem ( group: group) )
326
- } ( )
327
- group. wait ( )
329
+ }
328
330
// CHECK: assign type:DA_userDefined_isolated, address:[[ADDRESS:.*]]
329
331
// CHECK: ready actor:main.DA_userDefined_isolated, address:ActorAddress(address: "[[ADDR4:addr-[0-9]]]")
330
332
// CHECK: Deinitializing ActorAddress(address: "[[ADDR4]]") remote:false isolated:true mainThread:true
331
333
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR4]]")
332
334
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=false mainThread=true
333
335
334
336
// resign must happen as the _last thing_ after user-deinit completed
335
- group. enter ( )
336
- _ = { ( ) -> DA_state_nonisolated in
337
+ check {
337
338
DA_state_nonisolated ( name: " Foo " , age: 37 , system: DefaultDistributedActorSystem ( group: group) )
338
- } ( )
339
- group. wait ( )
339
+ }
340
340
// CHECK: assign type:DA_state_nonisolated, address:[[ADDRESS:.*]]
341
341
// CHECK: ready actor:main.DA_state_nonisolated, address:ActorAddress(address: "[[ADDR5:addr-[0-9]]]")
342
342
// CHECK: Deinitializing ActorAddress(address: "[[ADDR5]]") name=Foo age=37 remote:false isolated:false mainThread:true
343
343
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR5]]")
344
344
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
345
345
346
346
// resign must happen as the _last thing_ after user-deinit completed
347
- group. enter ( )
348
- _ = { ( ) -> DA_state_isolated in
347
+ check {
349
348
DA_state_isolated ( name: " Bar " , age: 42 , system: DefaultDistributedActorSystem ( group: group) )
350
- } ( )
351
- group. wait ( )
349
+ }
352
350
// CHECK: assign type:DA_state_isolated, address:[[ADDRESS:.*]]
353
351
// CHECK: ready actor:main.DA_state_isolated, address:ActorAddress(address: "[[ADDR6:addr-[0-9]]]")
354
352
// CHECK: Deinitializing ActorAddress(address: "[[ADDR6]]") name=Bar age=42 remote:false isolated:true mainThread:true
355
353
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR6]]")
356
354
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=false mainThread=true
357
355
358
356
// resign must happen as the _last thing_ after user-deinit completed
359
- group. enter ( )
360
- _ = { ( ) -> DA_state_isolated_on_another in
357
+ check {
361
358
DA_state_isolated_on_another ( name: " Baz " , age: 57 , system: DefaultDistributedActorSystem ( group: group) )
362
- } ( )
363
- group. wait ( )
359
+ }
364
360
// CHECK: assign type:DA_state_isolated_on_another, address:[[ADDRESS:.*]]
365
361
// CHECK: ready actor:main.DA_state_isolated_on_another, address:ActorAddress(address: "[[ADDR6:addr-[0-9]]]")
366
362
// CHECK: Deinitializing ActorAddress(address: "[[ADDR6]]") name=Baz age=57 remote:false isolated-self:false isolated-other:true mainThread:false
367
363
// CHECK-NEXT: resign address:ActorAddress(address: "[[ADDR6]]")
368
364
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=false mainThread=false
369
365
370
366
// a remote actor should not resign it's address, it was never "assigned" it
371
- group. enter ( )
372
- _ = { ( ) -> DA_userDefined_nonisolated in
367
+ check {
373
368
let address = ActorAddress ( parse: " remote-1 " )
374
369
return try ! DA_userDefined_nonisolated . resolve ( id: address, using: DefaultDistributedActorSystem ( group: group) )
375
- } ( )
376
- group. wait ( )
370
+ }
377
371
// CHECK-NEXT: resolve type:DA_userDefined_nonisolated, address:ActorAddress(address: "remote-1")
378
372
// MUST NOT run deinit body for a remote distributed actor
379
373
// CHECK-NOT: Deinitializing ActorAddress(address: "remote-1")
380
374
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
381
375
382
376
// a remote actor should not resign it's address, it was never "assigned" it
383
- group. enter ( )
384
- _ = { ( ) -> DA_userDefined_isolated in
377
+ check {
385
378
let address = ActorAddress ( parse: " remote-2 " )
386
379
return try ! DA_userDefined_isolated . resolve ( id: address, using: DefaultDistributedActorSystem ( group: group) )
387
- } ( )
388
- group. wait ( )
380
+ }
389
381
// CHECK-NEXT: resolve type:DA_userDefined_isolated, address:ActorAddress(address: "remote-2")
390
382
// MUST NOT run deinit body for a remote distributed actor
391
383
// CHECK-NOT: Deinitializing ActorAddress(address: "remote-2")
392
384
// CHECK-NEXT: Deinit ActorSystem: mainExecutor=true mainThread=true
393
385
394
386
// a remote actor should not resign it's address, it was never "assigned" it
395
- group. enter ( )
396
- _ = { ( ) -> DA_state_isolated_on_another in
387
+ check {
397
388
let address = ActorAddress ( parse: " remote-3 " )
398
389
return try ! DA_state_isolated_on_another . resolve ( id: address, using: DefaultDistributedActorSystem ( group: group) )
399
- } ( )
400
- group. wait ( )
390
+ }
401
391
// CHECK-NEXT: resolve type:DA_state_isolated_on_another, address:ActorAddress(address: "remote-3")
402
392
// MUST NOT run deinit body for a remote distributed actor
403
393
// CHECK-NOT: Deinitializing ActorAddress(address: "remote-3")
0 commit comments