mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 20:01:19 +00:00
01b28894e7
Closes https://github.com/dart-lang/sdk/pull/50861 GitOrigin-RevId: 71005e6f5bf5a151cb5c1aefb6a2a300fc40f592 Change-Id: Iadfafb5787a62e9a379437f6a3763d31f99ba7c6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/277743 Reviewed-by: Alexander Thomas <athom@google.com> Commit-Queue: Alexander Thomas <athom@google.com>
56 lines
1.7 KiB
Dart
56 lines
1.7 KiB
Dart
// 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.
|
|
|
|
// Basic tests for the WeakReference and Finalizer API for the web backends.
|
|
// Does not trigger garbage collection to heavily test the functionality.
|
|
|
|
import 'package:expect/minitest.dart';
|
|
|
|
class Foo {
|
|
int close() {
|
|
return 42; // no-op, dropped return value.
|
|
}
|
|
}
|
|
|
|
void callback(Foo f) {
|
|
f.close();
|
|
}
|
|
|
|
main() {
|
|
test('weak reference', () {
|
|
var list = ["foo"];
|
|
var weakRef = WeakReference<List<String>>(list);
|
|
expect(weakRef.target, equals(list));
|
|
|
|
// JavaScript API throws when the representation of target is not 'object'
|
|
// in the compiled JavaScript.
|
|
expect(() => WeakReference<String>("foo"), throws);
|
|
expect(() => WeakReference<int>(1), throws);
|
|
});
|
|
|
|
test('finalizer', () {
|
|
var finalizer = Finalizer<Foo>(callback);
|
|
var list = ["foo"];
|
|
var foo = Foo();
|
|
// Should not cause errors to attach or detach
|
|
finalizer.attach(list, foo);
|
|
finalizer.attach(list, foo, detach: list);
|
|
finalizer.detach(list);
|
|
|
|
// Should not cause errors to use a different detach token
|
|
var detachList = [1, 2, 3];
|
|
finalizer.attach(list, foo, detach: detachList);
|
|
finalizer.detach(detachList);
|
|
|
|
// JavaScript API returns false when unknown target detached.
|
|
// Should not cause an error to detach unknown token.
|
|
var unknownList = [2, 4, 6];
|
|
finalizer.detach(unknownList);
|
|
|
|
// JavaScript API throws when target and detach token are not objects.
|
|
expect(() => finalizer.attach("token string value", foo), throws);
|
|
expect(() => finalizer.detach("detach string value"), throws);
|
|
});
|
|
}
|