blob: 8000a41a8e7dbdc2ec49bd9c893163c6ee61744c [file] [log] [blame]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:expect/expect.dart';
import 'helpers.dart';
void main() {
testFinalizer();
}
void testFinalizer() async {
final finalizerTokens = <Nonce?>{};
void callback(Nonce? token) {
print('Running finalizer: token: $token');
finalizerTokens.add(token);
}
final finalizer = Finalizer<Nonce?>(callback);
{
final detach = Nonce(2022);
final token = null;
makeObjectWithFinalizer(finalizer, token, detach: detach);
doGC();
// We haven't stopped running synchronous dart code yet.
Expect.isFalse(finalizerTokens.contains(token));
await Future.delayed(Duration(milliseconds: 1));
// Now we have.
Expect.isTrue(finalizerTokens.contains(token));
// Try detaching after finalizer ran.
finalizer.detach(detach);
}
print('End of test, shutting down.');
}