Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: test/mjsunit/harmony/proxies.js

Issue 7795055: Make integer indexed properties ("elements") work for proxies. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Corrected diff base. Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« src/runtime.cc ('K') | « src/runtime.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 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
(...skipping 10 matching lines...) Expand all
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 28 // Flags: --harmony-proxies
29 29
30 30
31 // TODO(rossberg): integer-index properties not implemented properly.
32 // TODO(rossberg): for-in not implemented on proxies. 31 // TODO(rossberg): for-in not implemented on proxies.
33 32
34 33
35 // Helper. 34 // Helper.
36 35
37 function TestWithProxies(test, handler) { 36 function TestWithProxies(test, handler) {
38 test(handler, Proxy.create) 37 test(handler, Proxy.create)
39 test(handler, function(h) {return Proxy.createFunction(h, function() {})}) 38 test(handler, function(h) {return Proxy.createFunction(h, function() {})})
40 } 39 }
41 40
42 41
43 42
44 // Getting property descriptors (Object.getOwnPropertyDescriptor). 43 // Getting property descriptors (Object.getOwnPropertyDescriptor).
45 44
46 var key 45 var key
47 46
48 function TestGetOwnProperty(handler) { 47 function TestGetOwnProperty(handler) {
49 TestWithProxies(TestGetOwnProperty2, handler) 48 TestWithProxies(TestGetOwnProperty2, handler)
50 } 49 }
51 50
52 function TestGetOwnProperty2(handler, create) { 51 function TestGetOwnProperty2(handler, create) {
53 var p = create(handler) 52 var p = create(handler)
54 assertEquals(42, Object.getOwnPropertyDescriptor(p, "a").value) 53 assertEquals(42, Object.getOwnPropertyDescriptor(p, "a").value)
55 assertEquals("a", key) 54 assertEquals("a", key)
55 assertEquals(42, Object.getOwnPropertyDescriptor(p, 99).value)
56 assertEquals("99", key)
56 } 57 }
57 58
58 TestGetOwnProperty({ 59 TestGetOwnProperty({
59 getOwnPropertyDescriptor: function(k) { 60 getOwnPropertyDescriptor: function(k) {
60 key = k 61 key = k
61 return {value: 42, configurable: true} 62 return {value: 42, configurable: true}
62 } 63 }
63 }) 64 })
64 65
65 TestGetOwnProperty({ 66 TestGetOwnProperty({
(...skipping 20 matching lines...) Expand all
86 })) 87 }))
87 88
88 89
89 function TestGetOwnPropertyThrow(handler) { 90 function TestGetOwnPropertyThrow(handler) {
90 TestWithProxies(TestGetOwnPropertyThrow2, handler) 91 TestWithProxies(TestGetOwnPropertyThrow2, handler)
91 } 92 }
92 93
93 function TestGetOwnPropertyThrow2(handler, create) { 94 function TestGetOwnPropertyThrow2(handler, create) {
94 var p = create(handler) 95 var p = create(handler)
95 assertThrows(function(){ Object.getOwnPropertyDescriptor(p, "a") }, "myexn") 96 assertThrows(function(){ Object.getOwnPropertyDescriptor(p, "a") }, "myexn")
97 assertThrows(function(){ Object.getOwnPropertyDescriptor(p, 77) }, "myexn")
96 } 98 }
97 99
98 TestGetOwnPropertyThrow({ 100 TestGetOwnPropertyThrow({
99 getOwnPropertyDescriptor: function(k) { throw "myexn" } 101 getOwnPropertyDescriptor: function(k) { throw "myexn" }
100 }) 102 })
101 103
102 TestGetOwnPropertyThrow({ 104 TestGetOwnPropertyThrow({
103 getOwnPropertyDescriptor: function(k) { 105 getOwnPropertyDescriptor: function(k) {
104 return this.getPropertyDescriptor2(k) 106 return this.getPropertyDescriptor2(k)
105 }, 107 },
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 TestWithProxies(TestGetCall2, handler) 191 TestWithProxies(TestGetCall2, handler)
190 } 192 }
191 193
192 function TestGetCall2(handler, create) { 194 function TestGetCall2(handler, create) {
193 var p = create(handler) 195 var p = create(handler)
194 assertEquals(55, p.f()) 196 assertEquals(55, p.f())
195 assertEquals(55, p["f"]()) 197 assertEquals(55, p["f"]())
196 assertEquals(55, p.f("unused", "arguments")) 198 assertEquals(55, p.f("unused", "arguments"))
197 assertEquals(55, p.f.call(p)) 199 assertEquals(55, p.f.call(p))
198 assertEquals(55, p["f"].call(p)) 200 assertEquals(55, p["f"].call(p))
201 assertEquals(55, p[101].call(p))
199 assertEquals(55, p.withargs(45, 5)) 202 assertEquals(55, p.withargs(45, 5))
200 assertEquals(55, p.withargs.call(p, 11, 22)) 203 assertEquals(55, p.withargs.call(p, 11, 22))
201 assertEquals("6655", "66" + p) // calls p.toString 204 assertEquals("6655", "66" + p) // calls p.toString
202 205
203 var o = Object.create(p, {g: {value: function(x) { return x + 88 }}}) 206 var o = Object.create(p, {g: {value: function(x) { return x + 88 }}})
204 assertEquals(55, o.f()) 207 assertEquals(55, o.f())
205 assertEquals(55, o["f"]()) 208 assertEquals(55, o["f"]())
206 assertEquals(55, o.f("unused", "arguments")) 209 assertEquals(55, o.f("unused", "arguments"))
207 assertEquals(55, o.f.call(o)) 210 assertEquals(55, o.f.call(o))
208 assertEquals(55, o.f.call(p)) 211 assertEquals(55, o.f.call(p))
209 assertEquals(55, o["f"].call(p)) 212 assertEquals(55, o["f"].call(p))
213 assertEquals(55, o[101].call(p))
210 assertEquals(55, o.withargs(45, 5)) 214 assertEquals(55, o.withargs(45, 5))
211 assertEquals(55, o.withargs.call(p, 11, 22)) 215 assertEquals(55, o.withargs.call(p, 11, 22))
212 assertEquals(90, o.g(2)) 216 assertEquals(90, o.g(2))
213 assertEquals(91, o.g.call(o, 3)) 217 assertEquals(91, o.g.call(o, 3))
214 assertEquals(92, o.g.call(p, 4)) 218 assertEquals(92, o.g.call(p, 4))
215 assertEquals("6655", "66" + o) // calls o.toString 219 assertEquals("6655", "66" + o) // calls o.toString
216 } 220 }
217 221
218 TestGetCall({ 222 TestGetCall({
219 get: function(r, k) { return function() { return 55 } } 223 get: function(r, k) { return function() { return 55 } }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 274
271 275
272 function TestGetThrow(handler) { 276 function TestGetThrow(handler) {
273 TestWithProxies(TestGetThrow2, handler) 277 TestWithProxies(TestGetThrow2, handler)
274 } 278 }
275 279
276 function TestGetThrow2(handler, create) { 280 function TestGetThrow2(handler, create) {
277 var p = create(handler) 281 var p = create(handler)
278 assertThrows(function(){ p.a }, "myexn") 282 assertThrows(function(){ p.a }, "myexn")
279 assertThrows(function(){ p["b"] }, "myexn") 283 assertThrows(function(){ p["b"] }, "myexn")
284 assertThrows(function(){ p[3] }, "myexn")
280 285
281 var o = Object.create(p, {x: {value: 88}}) 286 var o = Object.create(p, {x: {value: 88}, '4': {value: 89}})
282 assertThrows(function(){ o.a }, "myexn") 287 assertThrows(function(){ o.a }, "myexn")
283 assertThrows(function(){ o["b"] }, "myexn") 288 assertThrows(function(){ o["b"] }, "myexn")
289 assertThrows(function(){ o[3] }, "myexn")
284 assertEquals(88, o.x) 290 assertEquals(88, o.x)
285 assertEquals(88, o["x"]) 291 assertEquals(88, o["x"])
292 assertEquals(89, o[4])
286 } 293 }
287 294
288 TestGetThrow({ 295 TestGetThrow({
289 get: function(r, k) { throw "myexn" } 296 get: function(r, k) { throw "myexn" }
290 }) 297 })
291 298
292 TestGetThrow({ 299 TestGetThrow({
293 get: function(r, k) { return this.get2(r, k) }, 300 get: function(r, k) { return this.get2(r, k) },
294 get2: function(r, k) { throw "myexn" } 301 get2: function(r, k) { throw "myexn" }
295 }) 302 })
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 } 343 }
337 344
338 function TestSet2(handler, create) { 345 function TestSet2(handler, create) {
339 var p = create(handler) 346 var p = create(handler)
340 assertEquals(42, p.a = 42) 347 assertEquals(42, p.a = 42)
341 assertEquals("a", key) 348 assertEquals("a", key)
342 assertEquals(42, val) 349 assertEquals(42, val)
343 assertEquals(43, p["b"] = 43) 350 assertEquals(43, p["b"] = 43)
344 assertEquals("b", key) 351 assertEquals("b", key)
345 assertEquals(43, val) 352 assertEquals(43, val)
353 assertEquals(44, p[77] = 44)
354 assertEquals("77", key)
355 assertEquals(44, val)
346 } 356 }
347 357
348 TestSet({ 358 TestSet({
349 set: function(r, k, v) { key = k; val = v; return true }, 359 set: function(r, k, v) { key = k; val = v; return true },
350 }) 360 })
351 361
352 TestSet({ 362 TestSet({
353 set: function(r, k, v) { return this.set2(r, k, v) }, 363 set: function(r, k, v) { return this.set2(r, k, v) },
354 set2: function(r, k, v) { key = k; val = v; return true } 364 set2: function(r, k, v) { key = k; val = v; return true }
355 }) 365 })
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 426
417 427
418 function TestSetThrow(handler, create) { 428 function TestSetThrow(handler, create) {
419 TestWithProxies(TestSetThrow2, handler) 429 TestWithProxies(TestSetThrow2, handler)
420 } 430 }
421 431
422 function TestSetThrow2(handler, create) { 432 function TestSetThrow2(handler, create) {
423 var p = create(handler) 433 var p = create(handler)
424 assertThrows(function(){ p.a = 42 }, "myexn") 434 assertThrows(function(){ p.a = 42 }, "myexn")
425 assertThrows(function(){ p["b"] = 42 }, "myexn") 435 assertThrows(function(){ p["b"] = 42 }, "myexn")
436 assertThrows(function(){ p[22] = 42 }, "myexn")
426 } 437 }
427 438
428 TestSetThrow({ 439 TestSetThrow({
429 set: function(r, k, v) { throw "myexn" } 440 set: function(r, k, v) { throw "myexn" }
430 }) 441 })
431 442
432 TestSetThrow({ 443 TestSetThrow({
433 set: function(r, k, v) { return this.set2(r, k, v) }, 444 set: function(r, k, v) { return this.set2(r, k, v) },
434 set2: function(r, k, v) { throw "myexn" } 445 set2: function(r, k, v) { throw "myexn" }
435 }) 446 })
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 547
537 var key 548 var key
538 var val 549 var val
539 550
540 function TestSetForDerived(handler, create) { 551 function TestSetForDerived(handler, create) {
541 TestWithProxies(TestSetForDerived2, handler) 552 TestWithProxies(TestSetForDerived2, handler)
542 } 553 }
543 554
544 function TestSetForDerived2(handler, create) { 555 function TestSetForDerived2(handler, create) {
545 var p = create(handler) 556 var p = create(handler)
546 var o = Object.create(p, {x: {value: 88, writable: true}}) 557 var o = Object.create(p, {x: {value: 88, writable: true},
558 '1': {value: 89, writable: true}})
547 559
548 key = "" 560 key = ""
549 assertEquals(48, o.x = 48) 561 assertEquals(48, o.x = 48)
550 assertEquals("", key) // trap not invoked 562 assertEquals("", key) // trap not invoked
551 assertEquals(48, o.x) 563 assertEquals(48, o.x)
552 564
565 assertEquals(47, o[1] = 47)
566 assertEquals("", key) // trap not invoked
567 assertEquals(47, o[1])
568
553 assertEquals(49, o.y = 49) 569 assertEquals(49, o.y = 49)
554 assertEquals("y", key) 570 assertEquals("y", key)
555 assertEquals(49, o.y) 571 assertEquals(49, o.y)
556 572
573 assertEquals(50, o[2] = 50)
574 assertEquals("2", key)
575 assertEquals(50, o[2])
576
557 assertEquals(44, o.p_writable = 44) 577 assertEquals(44, o.p_writable = 44)
558 assertEquals("p_writable", key) 578 assertEquals("p_writable", key)
559 assertEquals(44, o.p_writable) 579 assertEquals(44, o.p_writable)
560 580
561 assertEquals(45, o.p_nonwritable = 45) 581 assertEquals(45, o.p_nonwritable = 45)
562 assertEquals("p_nonwritable", key) 582 assertEquals("p_nonwritable", key)
563 assertEquals(45, o.p_nonwritable) 583 assertEquals(45, o.p_nonwritable)
564 584
565 assertEquals(46, o.p_setter = 46) 585 assertEquals(46, o.p_setter = 46)
566 assertEquals("p_setter", key) 586 assertEquals("p_setter", key)
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 assertEquals(2, Object.getOwnPropertyNames(desc).length) 647 assertEquals(2, Object.getOwnPropertyNames(desc).length)
628 assertEquals(45, desc.value) 648 assertEquals(45, desc.value)
629 assertEquals(false, desc.writable) 649 assertEquals(false, desc.writable)
630 650
631 assertEquals(p, Object.defineProperty(p, "c", {value: 46, enumerable: false})) 651 assertEquals(p, Object.defineProperty(p, "c", {value: 46, enumerable: false}))
632 assertEquals("c", key) 652 assertEquals("c", key)
633 assertEquals(2, Object.getOwnPropertyNames(desc).length) 653 assertEquals(2, Object.getOwnPropertyNames(desc).length)
634 assertEquals(46, desc.value) 654 assertEquals(46, desc.value)
635 assertEquals(false, desc.enumerable) 655 assertEquals(false, desc.enumerable)
636 656
657 assertEquals(p, Object.defineProperty(p, 101, {value: 47, enumerable: false}))
658 assertEquals("101", key)
659 assertEquals(2, Object.getOwnPropertyNames(desc).length)
660 assertEquals(47, desc.value)
661 assertEquals(false, desc.enumerable)
662
637 var attributes = {configurable: true, mine: 66, minetoo: 23} 663 var attributes = {configurable: true, mine: 66, minetoo: 23}
638 assertEquals(p, Object.defineProperty(p, "d", attributes)) 664 assertEquals(p, Object.defineProperty(p, "d", attributes))
639 assertEquals("d", key) 665 assertEquals("d", key)
640 // Modifying the attributes object after the fact should have no effect. 666 // Modifying the attributes object after the fact should have no effect.
641 attributes.configurable = false 667 attributes.configurable = false
642 attributes.mine = 77 668 attributes.mine = 77
643 delete attributes.minetoo 669 delete attributes.minetoo
644 assertEquals(3, Object.getOwnPropertyNames(desc).length) 670 assertEquals(3, Object.getOwnPropertyNames(desc).length)
645 assertEquals(true, desc.configurable) 671 assertEquals(true, desc.configurable)
646 assertEquals(66, desc.mine) 672 assertEquals(66, desc.mine)
(...skipping 14 matching lines...) Expand all
661 // getOwnPropertyNames: function() { return ["value"] } 687 // getOwnPropertyNames: function() { return ["value"] }
662 // }) 688 // })
663 // assertEquals(1, Object.getOwnPropertyNames(d).length) 689 // assertEquals(1, Object.getOwnPropertyNames(d).length)
664 // assertEquals(77, d.value) 690 // assertEquals(77, d.value)
665 // assertEquals(p, Object.defineProperty(p, "p", d)) 691 // assertEquals(p, Object.defineProperty(p, "p", d))
666 // assertEquals("p", key) 692 // assertEquals("p", key)
667 // assertEquals(1, Object.getOwnPropertyNames(desc).length) 693 // assertEquals(1, Object.getOwnPropertyNames(desc).length)
668 // assertEquals(77, desc.value) 694 // assertEquals(77, desc.value)
669 695
670 var props = { 696 var props = {
671 'bla': {}, 697 '11': {},
672 blub: {get: function() { return true }}, 698 blub: {get: function() { return true }},
673 '': {get value() { return 20 }}, 699 '': {get value() { return 20 }},
674 last: {value: 21, configurable: true, mine: "eyes"} 700 last: {value: 21, configurable: true, mine: "eyes"}
675 } 701 }
676 Object.defineProperty(props, "hidden", {value: "hidden", enumerable: false}) 702 Object.defineProperty(props, "hidden", {value: "hidden", enumerable: false})
677 assertEquals(p, Object.defineProperties(p, props)) 703 assertEquals(p, Object.defineProperties(p, props))
678 assertEquals("last", key) 704 assertEquals("last", key)
679 assertEquals(2, Object.getOwnPropertyNames(desc).length) 705 assertEquals(2, Object.getOwnPropertyNames(desc).length)
680 assertEquals(21, desc.value) 706 assertEquals(21, desc.value)
681 assertEquals(true, desc.configurable) 707 assertEquals(true, desc.configurable)
(...skipping 19 matching lines...) Expand all
701 })) 727 }))
702 728
703 729
704 function TestDefineThrow(handler) { 730 function TestDefineThrow(handler) {
705 TestWithProxies(TestDefineThrow2, handler) 731 TestWithProxies(TestDefineThrow2, handler)
706 } 732 }
707 733
708 function TestDefineThrow2(handler, create) { 734 function TestDefineThrow2(handler, create) {
709 var p = create(handler) 735 var p = create(handler)
710 assertThrows(function(){ Object.defineProperty(p, "a", {value: 44})}, "myexn") 736 assertThrows(function(){ Object.defineProperty(p, "a", {value: 44})}, "myexn")
737 assertThrows(function(){ Object.defineProperty(p, 0, {value: 44})}, "myexn")
711 738
712 // TODO(rossberg): These tests require for-in on proxies. 739 // TODO(rossberg): These tests require for-in on proxies.
713 // var d1 = create({ 740 // var d1 = create({
714 // get: function(r, k) { throw "myexn" }, 741 // get: function(r, k) { throw "myexn" },
715 // getOwnPropertyNames: function() { return ["value"] } 742 // getOwnPropertyNames: function() { return ["value"] }
716 // }) 743 // })
717 // assertThrows(function(){ Object.defineProperty(p, "p", d1) }, "myexn") 744 // assertThrows(function(){ Object.defineProperty(p, "p", d1) }, "myexn")
718 // var d2 = create({ 745 // var d2 = create({
719 // get: function(r, k) { return 77 }, 746 // get: function(r, k) { return 77 },
720 // getOwnPropertyNames: function() { throw "myexn" } 747 // getOwnPropertyNames: function() { throw "myexn" }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 function TestDelete(handler) { 780 function TestDelete(handler) {
754 TestWithProxies(TestDelete2, handler) 781 TestWithProxies(TestDelete2, handler)
755 } 782 }
756 783
757 function TestDelete2(handler, create) { 784 function TestDelete2(handler, create) {
758 var p = create(handler) 785 var p = create(handler)
759 assertEquals(true, delete p.a) 786 assertEquals(true, delete p.a)
760 assertEquals("a", key) 787 assertEquals("a", key)
761 assertEquals(true, delete p["b"]) 788 assertEquals(true, delete p["b"])
762 assertEquals("b", key) 789 assertEquals("b", key)
790 assertEquals(true, delete p[1])
791 assertEquals("1", key)
763 792
764 assertEquals(false, delete p.z1) 793 assertEquals(false, delete p.z1)
765 assertEquals("z1", key) 794 assertEquals("z1", key)
766 assertEquals(false, delete p["z2"]) 795 assertEquals(false, delete p["z2"])
767 assertEquals("z2", key); 796 assertEquals("z2", key);
768 797
769 (function() { 798 (function() {
770 "use strict" 799 "use strict"
771 assertEquals(true, delete p.c) 800 assertEquals(true, delete p.c)
772 assertEquals("c", key) 801 assertEquals("c", key)
773 assertEquals(true, delete p["d"]) 802 assertEquals(true, delete p["d"])
774 assertEquals("d", key) 803 assertEquals("d", key)
804 assertEquals(true, delete p[2])
805 assertEquals("2", key)
775 806
776 assertThrows(function(){ delete p.z3 }, TypeError) 807 assertThrows(function(){ delete p.z3 }, TypeError)
777 assertEquals("z3", key) 808 assertEquals("z3", key)
778 assertThrows(function(){ delete p["z4"] }, TypeError) 809 assertThrows(function(){ delete p["z4"] }, TypeError)
779 assertEquals("z4", key) 810 assertEquals("z4", key)
780 })() 811 })()
781 } 812 }
782 813
783 TestDelete({ 814 TestDelete({
784 delete: function(k) { key = k; return k < "z" } 815 delete: function(k) { key = k; return k < "z" }
(...skipping 12 matching lines...) Expand all
797 828
798 829
799 function TestDeleteThrow(handler) { 830 function TestDeleteThrow(handler) {
800 TestWithProxies(TestDeleteThrow2, handler) 831 TestWithProxies(TestDeleteThrow2, handler)
801 } 832 }
802 833
803 function TestDeleteThrow2(handler, create) { 834 function TestDeleteThrow2(handler, create) {
804 var p = create(handler) 835 var p = create(handler)
805 assertThrows(function(){ delete p.a }, "myexn") 836 assertThrows(function(){ delete p.a }, "myexn")
806 assertThrows(function(){ delete p["b"] }, "myexn"); 837 assertThrows(function(){ delete p["b"] }, "myexn");
838 assertThrows(function(){ delete p[3] }, "myexn");
807 839
808 (function() { 840 (function() {
809 "use strict" 841 "use strict"
810 assertThrows(function(){ delete p.c }, "myexn") 842 assertThrows(function(){ delete p.c }, "myexn")
811 assertThrows(function(){ delete p["d"] }, "myexn") 843 assertThrows(function(){ delete p["d"] }, "myexn")
844 assertThrows(function(){ delete p[4] }, "myexn");
812 })() 845 })()
813 } 846 }
814 847
815 TestDeleteThrow({ 848 TestDeleteThrow({
816 delete: function(k) { throw "myexn" } 849 delete: function(k) { throw "myexn" }
817 }) 850 })
818 851
819 TestDeleteThrow({ 852 TestDeleteThrow({
820 delete: function(k) { return this.delete2(k) }, 853 delete: function(k) { return this.delete2(k) },
821 delete2: function(k) { throw "myexn" } 854 delete2: function(k) { throw "myexn" }
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 })) 1057 }))
1025 1058
1026 1059
1027 function TestInThrow(handler) { 1060 function TestInThrow(handler) {
1028 TestWithProxies(TestInThrow2, handler) 1061 TestWithProxies(TestInThrow2, handler)
1029 } 1062 }
1030 1063
1031 function TestInThrow2(handler, create) { 1064 function TestInThrow2(handler, create) {
1032 var p = create(handler) 1065 var p = create(handler)
1033 assertThrows(function(){ return "a" in o }, "myexn") 1066 assertThrows(function(){ return "a" in o }, "myexn")
1067 assertThrows(function(){ return 99 in o }, "myexn")
1034 assertThrows(function(){ return !("a" in o) }, "myexn") 1068 assertThrows(function(){ return !("a" in o) }, "myexn")
1035 assertThrows(function(){ return ("a" in o) ? 2 : 3 }, "myexn") 1069 assertThrows(function(){ return ("a" in o) ? 2 : 3 }, "myexn")
1036 assertThrows(function(){ if ("b" in o) {} }, "myexn") 1070 assertThrows(function(){ if ("b" in o) {} }, "myexn")
1037 assertThrows(function(){ if (!("b" in o)) {} }, "myexn") 1071 assertThrows(function(){ if (!("b" in o)) {} }, "myexn")
1038 assertThrows(function(){ if ("zzz" in o) {} }, "myexn") 1072 assertThrows(function(){ if ("zzz" in o) {} }, "myexn")
1039 } 1073 }
1040 1074
1041 TestInThrow({ 1075 TestInThrow({
1042 has: function(k) { throw "myexn" } 1076 has: function(k) { throw "myexn" }
1043 }) 1077 })
(...skipping 30 matching lines...) Expand all
1074 1108
1075 function TestInForDerived(handler) { 1109 function TestInForDerived(handler) {
1076 TestWithProxies(TestInForDerived2, handler) 1110 TestWithProxies(TestInForDerived2, handler)
1077 } 1111 }
1078 1112
1079 function TestInForDerived2(handler, create) { 1113 function TestInForDerived2(handler, create) {
1080 var p = create(handler) 1114 var p = create(handler)
1081 var o = Object.create(p) 1115 var o = Object.create(p)
1082 assertTrue("a" in o) 1116 assertTrue("a" in o)
1083 assertEquals("a", key) 1117 assertEquals("a", key)
1084 // TODO(rossberg): integer indexes not correctly implemeted yet 1118 assertTrue(99 in o)
1085 // assertTrue(99 in o) 1119 assertEquals("99", key)
1086 // assertEquals("99", key)
1087 assertFalse("z" in o) 1120 assertFalse("z" in o)
1088 assertEquals("z", key) 1121 assertEquals("z", key)
1089 1122
1090 assertEquals(2, ("a" in o) ? 2 : 0) 1123 assertEquals(2, ("a" in o) ? 2 : 0)
1091 assertEquals(0, !("a" in o) ? 2 : 0) 1124 assertEquals(0, !("a" in o) ? 2 : 0)
1092 assertEquals(0, ("zzz" in o) ? 2 : 0) 1125 assertEquals(0, ("zzz" in o) ? 2 : 0)
1093 assertEquals(2, !("zzz" in o) ? 2 : 0) 1126 assertEquals(2, !("zzz" in o) ? 2 : 0)
1094 1127
1095 if ("b" in o) { 1128 if ("b" in o) {
1096 } else { 1129 } else {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1166 1199
1167 1200
1168 1201
1169 // Property descriptor conversion. 1202 // Property descriptor conversion.
1170 1203
1171 var descget 1204 var descget
1172 1205
1173 function TestDescriptorGetOrder(handler) { 1206 function TestDescriptorGetOrder(handler) {
1174 var p = Proxy.create(handler) 1207 var p = Proxy.create(handler)
1175 var o = Object.create(p, {b: {value: 0}}) 1208 var o = Object.create(p, {b: {value: 0}})
1176 TestDescriptorGetOrder2(function(n) { p[n] }, "vV") 1209 TestDescriptorGetOrder2(function(n) { return p[n] }, "vV")
1177 TestDescriptorGetOrder2(function(n) { n in p }, "") 1210 TestDescriptorGetOrder2(function(n) { return n in p }, "")
1178 TestDescriptorGetOrder2(function(n) { o[n] }, "vV") 1211 TestDescriptorGetOrder2(function(n) { return o[n] }, "vV")
1179 TestDescriptorGetOrder2(function(n) { n in o }, "eEcCvVwWgs") 1212 TestDescriptorGetOrder2(function(n) { return n in o }, "eEcCvVwWgs")
1180 } 1213 }
1181 1214
1182 function TestDescriptorGetOrder2(f, access) { 1215 function TestDescriptorGetOrder2(f, access) {
1183 descget = "" 1216 descget = ""
1184 f("a") 1217 assertTrue(f("a"))
1185 assertEquals(access, descget) 1218 assertEquals(access, descget)
1186 // TODO(rossberg): integer indexes not correctly implemented yet.
1187 // descget = ""
1188 // f(99)
1189 // assertEquals(access, descget)
1190 descget = "" 1219 descget = ""
1191 f("z") 1220 assertTrue(f(99))
1221 assertEquals(access, descget)
1222 descget = ""
1223 assertFalse(!!f("z"))
1192 assertEquals("", descget) 1224 assertEquals("", descget)
1193 } 1225 }
1194 1226
1195 TestDescriptorGetOrder({ 1227 TestDescriptorGetOrder({
1196 getPropertyDescriptor: function(k) { 1228 getPropertyDescriptor: function(k) {
1197 if (k >= "z") return void 0 1229 if (k >= "z") return void 0
1198 // Return a proxy as property descriptor, so that we can log accesses. 1230 // Return a proxy as property descriptor, so that we can log accesses.
1199 return Proxy.create({ 1231 return Proxy.create({
1200 get: function(r, attr) { 1232 get: function(r, attr) {
1201 descget += attr[0].toUpperCase() 1233 descget += attr[0].toUpperCase()
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
1677 assertFixing(o, false, false, true) 1709 assertFixing(o, false, false, true)
1678 Object.freeze(o) 1710 Object.freeze(o)
1679 assertFixing(p, false, false, true) 1711 assertFixing(p, false, false, true)
1680 assertFixing(o, true, true, false) 1712 assertFixing(o, true, true, false)
1681 } 1713 }
1682 1714
1683 TestFix([], { 1715 TestFix([], {
1684 fix: function() { return {} } 1716 fix: function() { return {} }
1685 }) 1717 })
1686 1718
1687 TestFix(["a", "b", "c", "d", "zz"], { 1719 TestFix(["a", "b", "c", "3", "zz"], {
1688 fix: function() { 1720 fix: function() {
1689 return { 1721 return {
1690 a: {value: "a", writable: true, configurable: false, enumerable: true}, 1722 a: {value: "a", writable: true, configurable: false, enumerable: true},
1691 b: {value: 33, writable: false, configurable: false, enumerable: true}, 1723 b: {value: 33, writable: false, configurable: false, enumerable: true},
1692 c: {value: 0, writable: true, configurable: true, enumerable: true}, 1724 c: {value: 0, writable: true, configurable: true, enumerable: true},
1693 d: {value: true, writable: false, configurable: true, enumerable: true}, 1725 '3': {value: true, writable: false, configurable: true, enumerable: true},
1694 zz: {value: 0, enumerable: false} 1726 zz: {value: 0, enumerable: false}
1695 } 1727 }
1696 } 1728 }
1697 }) 1729 })
1698 1730
1699 TestFix(["a"], { 1731 TestFix(["a"], {
1700 fix: function() { return this.fix2() }, 1732 fix: function() { return this.fix2() },
1701 fix2: function() { 1733 fix2: function() {
1702 return {a: {value: 4, writable: true, configurable: true, enumerable: true}} 1734 return {a: {value: 4, writable: true, configurable: true, enumerable: true}}
1703 } 1735 }
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
2185 2217
2186 function TestConstructThrow2(f) { 2218 function TestConstructThrow2(f) {
2187 assertThrows(function(){ new f(11) }, "myexn") 2219 assertThrows(function(){ new f(11) }, "myexn")
2188 Object.freeze(f) 2220 Object.freeze(f)
2189 assertThrows(function(){ new f(11) }, "myexn") 2221 assertThrows(function(){ new f(11) }, "myexn")
2190 } 2222 }
2191 2223
2192 TestConstructThrow(function() { throw "myexn" }) 2224 TestConstructThrow(function() { throw "myexn" })
2193 TestConstructThrow(Proxy.createFunction({}, function() { throw "myexn" })) 2225 TestConstructThrow(Proxy.createFunction({}, function() { throw "myexn" }))
2194 TestConstructThrow(CreateFrozen({}, function() { throw "myexn" })) 2226 TestConstructThrow(CreateFrozen({}, function() { throw "myexn" }))
OLDNEW
« src/runtime.cc ('K') | « src/runtime.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698