// 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.

// @dart = 2.9

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.');
}
