OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
11 // with the distribution. | 11 // with the distribution. |
12 // * Neither the name of Google Inc. nor the names of its | 12 // * Neither the name of Google Inc. nor the names of its |
13 // contributors may be used to endorse or promote products derived | 13 // contributors may be used to endorse or promote products derived |
14 // from this software without specific prior written permission. | 14 // from this software without specific prior written permission. |
15 // | 15 // |
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 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. | 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | 27 |
28 // Flags: --harmony-proxies --harmony-weakmaps | 28 // Flags: --harmony-proxies --harmony-collections |
29 | 29 |
30 | 30 |
31 // Helper. | 31 // Helper. |
32 | 32 |
33 function TestWithProxies(test, handler) { | 33 function TestWithProxies(test, construct, handler) { |
34 test(handler, Proxy.create) | 34 test(construct, handler, Proxy.create) |
35 test(handler, function(h) {return Proxy.createFunction(h, function() {})}) | 35 test(construct, handler, function(h) { |
| 36 return Proxy.createFunction(h, function() {}) |
| 37 }) |
36 } | 38 } |
37 | 39 |
38 | 40 |
39 // Weak maps. | 41 // Sets. |
40 | 42 |
41 function TestWeakMap(fix) { | 43 function TestSet(construct, fix) { |
42 TestWithProxies(TestWeakMap2, fix) | 44 TestWithProxies(TestSet2, construct, fix) |
43 } | 45 } |
44 | 46 |
45 function TestWeakMap2(fix, create) { | 47 function TestSet2(construct, fix, create) { |
46 var handler = {fix: function() { return {} }} | 48 var handler = {fix: function() { return {} }} |
47 var p1 = create(handler) | 49 var p1 = create(handler) |
48 var p2 = create(handler) | 50 var p2 = create(handler) |
49 var p3 = create(handler) | 51 var p3 = create(handler) |
50 fix(p3) | 52 fix(p3) |
51 | 53 |
52 var m = new WeakMap | 54 var s = construct(); |
| 55 s.add(p1); |
| 56 s.add(p2); |
| 57 assertTrue(s.has(p1)); |
| 58 assertTrue(s.has(p2)); |
| 59 assertFalse(s.has(p3)); |
| 60 |
| 61 fix(p1) |
| 62 fix(p2) |
| 63 assertTrue(s.has(p1)); |
| 64 assertTrue(s.has(p2)); |
| 65 assertFalse(s.has(p3)); |
| 66 |
| 67 s.delete(p2); |
| 68 assertTrue(s.has(p1)); |
| 69 assertFalse(s.has(p2)); |
| 70 assertFalse(s.has(p3)); |
| 71 } |
| 72 |
| 73 TestSet(Set, Object.seal) |
| 74 TestSet(Set, Object.freeze) |
| 75 TestSet(Set, Object.preventExtensions) |
| 76 |
| 77 |
| 78 // Maps and weak maps. |
| 79 |
| 80 function TestMap(construct, fix) { |
| 81 TestWithProxies(TestMap2, construct, fix) |
| 82 } |
| 83 |
| 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) |
| 89 fix(p3) |
| 90 |
| 91 var m = construct(); |
53 m.set(p1, 123); | 92 m.set(p1, 123); |
54 m.set(p2, 321); | 93 m.set(p2, 321); |
| 94 assertTrue(m.has(p1)); |
| 95 assertTrue(m.has(p2)); |
| 96 assertFalse(m.has(p3)); |
55 assertSame(123, m.get(p1)); | 97 assertSame(123, m.get(p1)); |
56 assertSame(321, m.get(p2)); | 98 assertSame(321, m.get(p2)); |
57 | 99 |
58 fix(p1) | 100 fix(p1) |
59 fix(p2) | 101 fix(p2) |
| 102 assertTrue(m.has(p1)); |
| 103 assertTrue(m.has(p2)); |
| 104 assertFalse(m.has(p3)); |
60 assertSame(123, m.get(p1)); | 105 assertSame(123, m.get(p1)); |
61 assertSame(321, m.get(p2)); | 106 assertSame(321, m.get(p2)); |
| 107 |
| 108 m.delete(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)); |
62 } | 114 } |
63 | 115 |
64 TestWeakMap(Object.seal) | 116 TestMap(Map, Object.seal) |
65 TestWeakMap(Object.freeze) | 117 TestMap(Map, Object.freeze) |
66 TestWeakMap(Object.preventExtensions) | 118 TestMap(Map, Object.preventExtensions) |
| 119 |
| 120 TestMap(WeakMap, Object.seal) |
| 121 TestMap(WeakMap, Object.freeze) |
| 122 TestMap(WeakMap, Object.preventExtensions) |
OLD | NEW |