forked from tc39/test262
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add test for throwing WrappedFunctionCreate
- Loading branch information
1 parent
81895b1
commit f71d5e2
Showing
2 changed files
with
110 additions
and
0 deletions.
There are no files selected for viewing
40 changes: 40 additions & 0 deletions
40
test/built-ins/ShadowRealm/WrappedFunction/throws-typeerror-on-revoked-proxy.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// Copyright (C) 2022 Chengzhong Wu. All rights reserved. | ||
// This code is governed by the BSD license found in the LICENSE file. | ||
/*--- | ||
esid: sec-wrapped-function-exotic-objects-call-thisargument-argumentslist | ||
description: > | ||
WrappedFunctionCreate throws a TypeError the target is a revoked proxy. | ||
info: | | ||
WrappedFunctionCreate ( callerRealm: a Realm Record, Target: a function object, ) | ||
1. Let target be F.[[WrappedTargetFunction]]. | ||
2. Assert: IsCallable(target) is true. | ||
3. Let callerRealm be F.[[Realm]]. | ||
4. NOTE: Any exception objects produced after this point are associated with callerRealm. | ||
5. Let targetRealm be ? GetFunctionRealm(target). | ||
... | ||
GetFunctionRealm ( obj ) | ||
... | ||
3. If obj is a Proxy exotic object, then | ||
a. If obj.[[ProxyHandler]] is null, throw a TypeError exception. | ||
... | ||
features: [ShadowRealm] | ||
---*/ | ||
|
||
assert.sameValue( | ||
typeof ShadowRealm.prototype.evaluate, | ||
'function', | ||
'This test must fail if ShadowRealm.prototype.evaluate is not a function' | ||
); | ||
|
||
const r = new ShadowRealm(); | ||
|
||
const fn = r.evaluate(` | ||
globalThis.revocable = Proxy.revocable(() => {}, {}); | ||
globalThis.revocable.proxy; | ||
`); | ||
r.evaluate('revocable.revoke()'); | ||
assert.throws(TypeError, () => fn()); |
70 changes: 70 additions & 0 deletions
70
test/built-ins/ShadowRealm/prototype/evaluate/throws-typeerror-wrap-throwing.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
// Copyright (C) 2022 Chengzhong Wu. All rights reserved. | ||
// This code is governed by the BSD license found in the LICENSE file. | ||
/*--- | ||
esid: sec-wrappedfunctioncreate | ||
description: > | ||
WrappedFunctionCreate throws a TypeError if the accessing target's property may throw. | ||
info: | | ||
WrappedFunctionCreate ( callerRealm: a Realm Record, Target: a function object, ) | ||
... | ||
7. Let result be CopyNameAndLength(wrapped, Target). | ||
... | ||
CopyNameAndLength ( F: a function object, Target: a function object, optional prefix: a String, optional argCount: a Number, ) | ||
... | ||
3. Let targetHasLength be ? HasOwnProperty(Target, "length"). | ||
4. If targetHasLength is true, then | ||
a. Let targetLen be ? Get(Target, "length"). | ||
... | ||
6. Let targetName be ? Get(Target, "name"). | ||
features: [ShadowRealm] | ||
---*/ | ||
|
||
assert.sameValue( | ||
typeof ShadowRealm.prototype.evaluate, | ||
'function', | ||
'This test must fail if ShadowRealm.prototype.evaluate is not a function' | ||
); | ||
|
||
const r = new ShadowRealm(); | ||
|
||
assert.throws(TypeError, () => r.evaluate(` | ||
const revocable = Proxy.revocable(() => {}, {}); | ||
revocable.revoke(); | ||
revocable.proxy; | ||
`), 'TypeError on wrapping a revoked callable proxy'); | ||
|
||
assert.throws(TypeError, () => r.evaluate(` | ||
const fn = () => {}; | ||
Object.defineProperty(fn, 'name', { | ||
get() { | ||
throw new Error(); | ||
}, | ||
}); | ||
fn; | ||
`), 'TypeError on wrapping a fn with throwing name accessor'); | ||
|
||
assert.throws(TypeError, () => r.evaluate(` | ||
const fn = () => {}; | ||
Object.defineProperty(fn, 'length', { | ||
get() { | ||
throw new Error(); | ||
}, | ||
}); | ||
fn; | ||
`), 'TypeError on wrapping a fn with throwing length accessor'); | ||
|
||
assert.throws(TypeError, () => r.evaluate(` | ||
const proxy = new Proxy(() => {}, { | ||
getOwnPropertyDescriptor(target, key) { | ||
throw new Error(); | ||
}, | ||
}); | ||
proxy; | ||
`), 'TypeError on wrapping a callable proxy with throwing getOwnPropertyDescriptor trap'); |