summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/FinalizationRegistry/shell.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/built-ins/FinalizationRegistry/shell.js')
-rw-r--r--js/src/tests/test262/built-ins/FinalizationRegistry/shell.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/FinalizationRegistry/shell.js b/js/src/tests/test262/built-ins/FinalizationRegistry/shell.js
new file mode 100644
index 0000000000..b4d29ea4e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/FinalizationRegistry/shell.js
@@ -0,0 +1,83 @@
+// GENERATED, DO NOT EDIT
+// file: async-gc.js
+// Copyright (C) 2019 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: >
+ Collection of functions used to capture references cleanup from garbage collectors
+features: [FinalizationRegistry.prototype.cleanupSome, FinalizationRegistry, Symbol, async-functions]
+flags: [non-deterministic]
+defines: [asyncGC, asyncGCDeref, resolveAsyncGC]
+---*/
+
+function asyncGC(...targets) {
+ var finalizationRegistry = new FinalizationRegistry(() => {});
+ var length = targets.length;
+
+ for (let target of targets) {
+ finalizationRegistry.register(target, 'target');
+ target = null;
+ }
+
+ targets = null;
+
+ return Promise.resolve('tick').then(() => asyncGCDeref()).then(() => {
+ var names = [];
+
+ // consume iterator to capture names
+ finalizationRegistry.cleanupSome(name => { names.push(name); });
+
+ if (!names || names.length != length) {
+ throw asyncGC.notCollected;
+ }
+ });
+}
+
+asyncGC.notCollected = Symbol('Object was not collected');
+
+async function asyncGCDeref() {
+ var trigger;
+
+ // TODO: Remove this when $262.clearKeptObject becomes documented and required
+ if ($262.clearKeptObjects) {
+ trigger = $262.clearKeptObjects();
+ }
+
+ await $262.gc();
+
+ return Promise.resolve(trigger);
+}
+
+function resolveAsyncGC(err) {
+ if (err === asyncGC.notCollected) {
+ // Do not fail as GC can't provide necessary resources.
+ $DONE();
+ return;
+ }
+
+ $DONE(err);
+}
+
+// file: isConstructor.js
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: |
+ Test if a given function is a constructor function.
+defines: [isConstructor]
+features: [Reflect.construct]
+---*/
+
+function isConstructor(f) {
+ if (typeof f !== "function") {
+ throw new Test262Error("isConstructor invoked with a non-function value");
+ }
+
+ try {
+ Reflect.construct(function(){}, [], f);
+ } catch (e) {
+ return false;
+ }
+ return true;
+}