diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/jit-test/tests/proxy/testDirectProxyRevoke.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | js/src/jit-test/tests/proxy/testDirectProxyRevoke.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/proxy/testDirectProxyRevoke.js b/js/src/jit-test/tests/proxy/testDirectProxyRevoke.js new file mode 100644 index 0000000000..420fe3eaf9 --- /dev/null +++ b/js/src/jit-test/tests/proxy/testDirectProxyRevoke.js @@ -0,0 +1,45 @@ +load(libdir + "asserts.js"); + +// Test for various properties demanded of Proxy.revocable +var holder = Proxy.revocable({}, {}); + +// The returned object must inherit from Object.prototype +assertEq(Object.getPrototypeOf(holder), Object.prototype); + +assertDeepEq(Object.getOwnPropertyNames(holder), [ 'proxy', 'revoke' ]); + +// The revocation function must inherit from Function.prototype +assertEq(Object.getPrototypeOf(holder.revoke), Function.prototype); + +// Proxy.revoke should return unique objects from the same opcode call. +var proxyLog = [] +var revokerLog = [] +var holderLog = [] + +function addUnique(l, v) +{ + assertEq(l.indexOf(v), -1); + l.push(v); +} + +for (let i = 0; i < 5; i++) { + holder = Proxy.revocable({}, {}); + addUnique(holderLog, holder); + addUnique(revokerLog, holder.revoke); + addUnique(proxyLog, holder.proxy); +} + +// The provided revoke function should revoke only the 1 proxy +var p = proxyLog.pop(); +var r = revokerLog.pop(); + +// Works before, but not after. This is mostly a token. There are +// testDirectProxy* tests to check each trap revokes properly. +p.foo; +assertEq(r(), undefined, "Revoke trap must return undefined"); +assertThrowsInstanceOf(() => p.foo, TypeError); +assertEq(r(), undefined, "Revoke trap must return undefined"); + +// None of this should throw, since these proxies are unrevoked. +for (let i = 0; i < proxyLog.length; i++) + proxyLog[i].foo; |