1
// Copyright 2011 the V8 project authors. All rights reserved.
2
// Redistribution and use in source and binary forms, with or without
3
// modification, are permitted provided that the following conditions are
6
// * Redistributions of source code must retain the above copyright
7
// notice, this list of conditions and the following disclaimer.
8
// * Redistributions in binary form must reproduce the above
9
// copyright notice, this list of conditions and the following
10
// disclaimer in the documentation and/or other materials provided
11
// with the distribution.
12
// * Neither the name of Google Inc. nor the names of its
13
// contributors may be used to endorse or promote products derived
14
// from this software without specific prior written permission.
16
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
// Flags: --harmony-proxies --harmony-collections
33
function TestWithProxies(test, construct, handler) {
34
test(construct, handler, Proxy.create)
35
test(construct, handler, function(h) {
36
return Proxy.createFunction(h, function() {})
43
function TestSet(construct, fix) {
44
TestWithProxies(TestSet2, construct, fix)
47
function TestSet2(construct, fix, create) {
48
var handler = {fix: function() { return {} }}
49
var p1 = create(handler)
50
var p2 = create(handler)
51
var p3 = create(handler)
57
assertTrue(s.has(p1));
58
assertTrue(s.has(p2));
59
assertFalse(s.has(p3));
63
assertTrue(s.has(p1));
64
assertTrue(s.has(p2));
65
assertFalse(s.has(p3));
68
assertTrue(s.has(p1));
69
assertFalse(s.has(p2));
70
assertFalse(s.has(p3));
73
TestSet(Set, Object.seal)
74
TestSet(Set, Object.freeze)
75
TestSet(Set, Object.preventExtensions)
78
// Maps and weak maps.
80
function TestMap(construct, fix) {
81
TestWithProxies(TestMap2, construct, fix)
84
function TestMap2(construct, fix, create) {
85
var handler = {fix: function() { return {} }}
86
var p1 = create(handler)
87
var p2 = create(handler)
88
var p3 = create(handler)
94
assertTrue(m.has(p1));
95
assertTrue(m.has(p2));
96
assertFalse(m.has(p3));
97
assertSame(123, m.get(p1));
98
assertSame(321, m.get(p2));
102
assertTrue(m.has(p1));
103
assertTrue(m.has(p2));
104
assertFalse(m.has(p3));
105
assertSame(123, m.get(p1));
106
assertSame(321, m.get(p2));
109
assertTrue(m.has(p1));
110
assertFalse(m.has(p2));
111
assertFalse(m.has(p3));
112
assertSame(123, m.get(p1));
113
assertSame(undefined, m.get(p2));
116
TestMap(Map, Object.seal)
117
TestMap(Map, Object.freeze)
118
TestMap(Map, Object.preventExtensions)
120
TestMap(WeakMap, Object.seal)
121
TestMap(WeakMap, Object.freeze)
122
TestMap(WeakMap, Object.preventExtensions)