mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 02:47:35 +00:00
LibJS: Implement stage 3 proposal FinalizationRegistry changes
Specifically the 'Symbol as WeakMap Keys Proposal'.
This commit is contained in:
parent
53ed8decaf
commit
a79796ea4a
5 changed files with 48 additions and 27 deletions
|
@ -12,9 +12,15 @@ test("basic functionality", () => {
|
|||
|
||||
var target2 = {};
|
||||
var heldValue2 = {};
|
||||
var token = {};
|
||||
var token1 = {};
|
||||
|
||||
registry.register(target2, heldValue2, token);
|
||||
registry.register(target2, heldValue2, token1);
|
||||
|
||||
var target3 = Symbol("target");
|
||||
var heldValue3 = {};
|
||||
var token2 = Symbol("token");
|
||||
|
||||
registry.register(target3, heldValue3, token2);
|
||||
});
|
||||
|
||||
test("errors", () => {
|
||||
|
@ -22,14 +28,19 @@ test("errors", () => {
|
|||
|
||||
expect(() => {
|
||||
registry.register(5, {});
|
||||
}).toThrowWithMessage(TypeError, "is not an object");
|
||||
}).toThrowWithMessage(TypeError, "cannot be held weakly");
|
||||
|
||||
expect(() => {
|
||||
var a = {};
|
||||
registry.register(a, a);
|
||||
}).toThrowWithMessage(TypeError, "Target and held value must not be the same");
|
||||
|
||||
expect(() => {
|
||||
var a = Symbol();
|
||||
registry.register(a, a);
|
||||
}).toThrowWithMessage(TypeError, "Target and held value must not be the same");
|
||||
|
||||
expect(() => {
|
||||
registry.register({}, {}, 5);
|
||||
}).toThrowWithMessage(TypeError, "is not an object");
|
||||
}).toThrowWithMessage(TypeError, "cannot be held weakly");
|
||||
});
|
||||
|
|
|
@ -5,15 +5,25 @@ test("length is 2", () => {
|
|||
test("basic functionality", () => {
|
||||
var registry = new FinalizationRegistry(() => {});
|
||||
|
||||
var target = {};
|
||||
var heldValue = {};
|
||||
var token = {};
|
||||
var target1 = {};
|
||||
var heldValue1 = {};
|
||||
var token1 = {};
|
||||
|
||||
registry.register(target, heldValue, token);
|
||||
registry.register(target1, heldValue1, token1);
|
||||
|
||||
expect(registry.unregister({})).toBe(false);
|
||||
expect(registry.unregister(token)).toBe(true);
|
||||
expect(registry.unregister(token)).toBe(false);
|
||||
expect(registry.unregister(token1)).toBe(true);
|
||||
expect(registry.unregister(token1)).toBe(false);
|
||||
|
||||
var target2 = Symbol("target");
|
||||
var heldValue2 = Symbol("heldValue");
|
||||
var token2 = Symbol("token");
|
||||
|
||||
registry.register(target2, heldValue2, token2);
|
||||
|
||||
expect(registry.unregister(Symbol("token"))).toBe(false);
|
||||
expect(registry.unregister(token2)).toBe(true);
|
||||
expect(registry.unregister(token2)).toBe(false);
|
||||
});
|
||||
|
||||
test("errors", () => {
|
||||
|
@ -21,5 +31,5 @@ test("errors", () => {
|
|||
|
||||
expect(() => {
|
||||
registry.unregister(5);
|
||||
}).toThrowWithMessage(TypeError, "is not an object");
|
||||
}).toThrowWithMessage(TypeError, "cannot be held weakly");
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue