13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2011 the V8 project authors. All rights reserved. 23ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Redistribution and use in source and binary forms, with or without 33ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// modification, are permitted provided that the following conditions are 43ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// met: 53ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 63ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Redistributions of source code must retain the above copyright 73ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// notice, this list of conditions and the following disclaimer. 83ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Redistributions in binary form must reproduce the above 93ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// copyright notice, this list of conditions and the following 103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// disclaimer in the documentation and/or other materials provided 113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// with the distribution. 123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Neither the name of Google Inc. nor the names of its 133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// contributors may be used to endorse or promote products derived 143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// from this software without specific prior written permission. 153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Flags: --harmony-proxies --harmony-collections 293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Helper. 323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TestWithProxies(test, construct, handler) { 343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test(construct, handler, Proxy.create) 353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test(construct, handler, function(h) { 363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return Proxy.createFunction(h, function() {}) 373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }) 383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Sets. 423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TestSet(construct, fix) { 443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch TestWithProxies(TestSet2, construct, fix) 453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TestSet2(construct, fix, create) { 483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var handler = {fix: function() { return {} }} 493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var p1 = create(handler) 503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var p2 = create(handler) 513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var p3 = create(handler) 523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch fix(p3) 533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var s = construct(); 553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch s.add(p1); 563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch s.add(p2); 573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(s.has(p1)); 583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(s.has(p2)); 593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertFalse(s.has(p3)); 603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch fix(p1) 623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch fix(p2) 633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(s.has(p1)); 643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(s.has(p2)); 653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertFalse(s.has(p3)); 663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch s.delete(p2); 683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(s.has(p1)); 693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertFalse(s.has(p2)); 703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertFalse(s.has(p3)); 713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 733ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestSet(Set, Object.seal) 743ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestSet(Set, Object.freeze) 753ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestSet(Set, Object.preventExtensions) 763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Maps and weak maps. 793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TestMap(construct, fix) { 813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch TestWithProxies(TestMap2, construct, fix) 823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TestMap2(construct, fix, create) { 853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var handler = {fix: function() { return {} }} 863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var p1 = create(handler) 873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var p2 = create(handler) 883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var p3 = create(handler) 893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch fix(p3) 903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var m = construct(); 923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch m.set(p1, 123); 933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch m.set(p2, 321); 943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(m.has(p1)); 953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(m.has(p2)); 963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertFalse(m.has(p3)); 973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertSame(123, m.get(p1)); 983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertSame(321, m.get(p2)); 993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch fix(p1) 1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch fix(p2) 1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(m.has(p1)); 1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(m.has(p2)); 1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertFalse(m.has(p3)); 1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertSame(123, m.get(p1)); 1063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertSame(321, m.get(p2)); 1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch m.delete(p2); 1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(m.has(p1)); 1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertFalse(m.has(p2)); 1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertFalse(m.has(p3)); 1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertSame(123, m.get(p1)); 1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertSame(undefined, m.get(p2)); 1143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1163ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestMap(Map, Object.seal) 1173ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestMap(Map, Object.freeze) 1183ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestMap(Map, Object.preventExtensions) 1193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1203ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestMap(WeakMap, Object.seal) 1213ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestMap(WeakMap, Object.freeze) 1223ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestMap(WeakMap, Object.preventExtensions) 123