summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/harmony/weakrefs/symbol-as-weakref-target.js
blob: 1dc874ed83b3da72a05155f7c203c5ee40de8fd7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Copyright 2022 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --harmony-symbol-as-weakmap-key

(function TestRegisterWithSymbolTarget() {
  const fg = new FinalizationRegistry(() => { });
  fg.register(Symbol('123'), 'holdings');
  // Registered symbols cannot be the target.
  assertThrows(() => fg.register(Symbol.for('123'), 'holdings'), TypeError);
})();

(function TestRegisterWithSymbolUnregisterToken() {
  const fg = new FinalizationRegistry(() => { });
  fg.register({}, 'holdings', Symbol('123'));
  // Registered symbols cannot be the unregister token.
  assertThrows(() => fg.register({}, 'holdings', Symbol.for('123')), TypeError);
})();

(function TestRegisterSymbolAndHoldingsSameValue() {
  const fg = new FinalizationRegistry(() => {});
  const obj = Symbol('123');
  // SameValue(target, holdings) not ok.
  assertThrows(() => fg.register(obj, obj), TypeError);
  const holdings = {a: 1};
  fg.register(obj, holdings);
})();

(function TestUnregisterWithSymbolUnregisterToken() {
  const fg = new FinalizationRegistry(() => {});
  fg.unregister(Symbol('123'));
  // Registered symbols cannot be the unregister token.
  assertThrows(() => fg.unregister(Symbol.for('123')), TypeError);
})();

(function TestWeakRefConstructorWithSymbol() {
  new WeakRef(Symbol('123'));
  // Registered symbols cannot be the WeakRef target.
  assertThrows(() => new WeakRef(Symbol.for('123')), TypeError);
})();