dart-sdk/tests/web/weak_reference_test.dart
Josh Soref 01b28894e7 Spelling pkg dev compiler
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>
2023-01-26 09:12:41 +00:00

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