blob: 2ed265496c70bca5df953ed92eda99dea469bb69 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script type="module">
// Keep FinalizationRegistry global to avoid it being reclaimed by garbage
// collections that may happen until the registry is processed in microtasks.
let fr;
async_test(t => {
let called = false;
const callback = t.step_func_done(function(holdings) {
called = true;
assert_equals(holdings, 'holdings',
'holdings should be initialized correctly');
});
fr = new FinalizationRegistry(callback);
// The following is an IIFE to ensure that garbage becomes unreachable after
// the function returns.
(function() {
let garbage = {};
fr.register(garbage, 'holdings');
garbage = null;
})();
assert_false(called, 'finalizer should not be called in the same turn');
gc();
assert_false(called, 'finalizer should not be called in the same turn');
}, 'FinalizationRegistry registers an object and calls finalizer');
</script>