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

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

Issue 8256015: Implement for-in loop for proxies. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed Rico's comments. Created 9 years, 1 month 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
« no previous file with comments | « src/x64/full-codegen-x64.cc ('k') | test/mjsunit/harmony/proxies-for.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
(...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): for-in not implemented on proxies.
32
33
34 // Helper. 31 // Helper.
35 32
36 function TestWithProxies(test, x, y, z) { 33 function TestWithProxies(test, x, y, z) {
37 test(Proxy.create, x, y, z) 34 test(Proxy.create, x, y, z)
38 test(function(h) {return Proxy.createFunction(h, function() {})}, x, y, z) 35 test(function(h) {return Proxy.createFunction(h, function() {})}, x, y, z)
39 } 36 }
40 37
41 38
42 39
43 // Getting property descriptors (Object.getOwnPropertyDescriptor). 40 // Getting property descriptors (Object.getOwnPropertyDescriptor).
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 709
713 assertEquals(p, Object.defineProperty(p, "e", {get: function(){ return 5 }})) 710 assertEquals(p, Object.defineProperty(p, "e", {get: function(){ return 5 }}))
714 assertEquals("e", key) 711 assertEquals("e", key)
715 assertEquals(1, Object.getOwnPropertyNames(desc).length) 712 assertEquals(1, Object.getOwnPropertyNames(desc).length)
716 assertEquals(5, desc.get()) 713 assertEquals(5, desc.get())
717 714
718 assertEquals(p, Object.defineProperty(p, "zzz", {})) 715 assertEquals(p, Object.defineProperty(p, "zzz", {}))
719 assertEquals("zzz", key) 716 assertEquals("zzz", key)
720 assertEquals(0, Object.getOwnPropertyNames(desc).length) 717 assertEquals(0, Object.getOwnPropertyNames(desc).length)
721 718
722 // TODO(rossberg): This test requires for-in on proxies. 719 var d = create({
723 // var d = create({ 720 get: function(r, k) { return (k === "value") ? 77 : void 0 },
724 // get: function(r, k) { return (k === "value") ? 77 : void 0 }, 721 getOwnPropertyNames: function() { return ["value"] },
725 // getOwnPropertyNames: function() { return ["value"] } 722 enumerate: function() { return ["value"] }
726 // }) 723 })
727 // assertEquals(1, Object.getOwnPropertyNames(d).length) 724 assertEquals(1, Object.getOwnPropertyNames(d).length)
728 // assertEquals(77, d.value) 725 assertEquals(77, d.value)
729 // assertEquals(p, Object.defineProperty(p, "p", d)) 726 assertEquals(p, Object.defineProperty(p, "p", d))
730 // assertEquals("p", key) 727 assertEquals("p", key)
731 // assertEquals(1, Object.getOwnPropertyNames(desc).length) 728 assertEquals(1, Object.getOwnPropertyNames(desc).length)
732 // assertEquals(77, desc.value) 729 assertEquals(77, desc.value)
733 730
734 var props = { 731 var props = {
735 '11': {}, 732 '11': {},
736 blub: {get: function() { return true }}, 733 blub: {get: function() { return true }},
737 '': {get value() { return 20 }}, 734 '': {get value() { return 20 }},
738 last: {value: 21, configurable: true, mine: "eyes"} 735 last: {value: 21, configurable: true, mine: "eyes"}
739 } 736 }
740 Object.defineProperty(props, "hidden", {value: "hidden", enumerable: false}) 737 Object.defineProperty(props, "hidden", {value: "hidden", enumerable: false})
741 assertEquals(p, Object.defineProperties(p, props)) 738 assertEquals(p, Object.defineProperties(p, props))
742 assertEquals("last", key) 739 assertEquals("last", key)
(...skipping 24 matching lines...) Expand all
767 764
768 function TestDefineThrow(handler) { 765 function TestDefineThrow(handler) {
769 TestWithProxies(TestDefineThrow2, handler) 766 TestWithProxies(TestDefineThrow2, handler)
770 } 767 }
771 768
772 function TestDefineThrow2(create, handler) { 769 function TestDefineThrow2(create, handler) {
773 var p = create(handler) 770 var p = create(handler)
774 assertThrows(function(){ Object.defineProperty(p, "a", {value: 44})}, "myexn") 771 assertThrows(function(){ Object.defineProperty(p, "a", {value: 44})}, "myexn")
775 assertThrows(function(){ Object.defineProperty(p, 0, {value: 44})}, "myexn") 772 assertThrows(function(){ Object.defineProperty(p, 0, {value: 44})}, "myexn")
776 773
777 // TODO(rossberg): These tests require for-in on proxies. 774 var d1 = create({
778 // var d1 = create({ 775 get: function(r, k) { throw "myexn" },
779 // get: function(r, k) { throw "myexn" }, 776 getOwnPropertyNames: function() { return ["value"] }
780 // getOwnPropertyNames: function() { return ["value"] } 777 })
781 // }) 778 assertThrows(function(){ Object.defineProperty(p, "p", d1) }, "myexn")
782 // assertThrows(function(){ Object.defineProperty(p, "p", d1) }, "myexn") 779 var d2 = create({
783 // var d2 = create({ 780 get: function(r, k) { return 77 },
784 // get: function(r, k) { return 77 }, 781 getOwnPropertyNames: function() { throw "myexn" }
785 // getOwnPropertyNames: function() { throw "myexn" } 782 })
786 // }) 783 assertThrows(function(){ Object.defineProperty(p, "p", d2) }, "myexn")
787 // assertThrows(function(){ Object.defineProperty(p, "p", d2) }, "myexn")
788 784
789 var props = {bla: {get value() { throw "otherexn" }}} 785 var props = {bla: {get value() { throw "otherexn" }}}
790 assertThrows(function(){ Object.defineProperties(p, props) }, "otherexn") 786 assertThrows(function(){ Object.defineProperties(p, props) }, "otherexn")
791 } 787 }
792 788
793 TestDefineThrow({ 789 TestDefineThrow({
794 defineProperty: function(k, d) { throw "myexn" } 790 defineProperty: function(k, d) { throw "myexn" }
795 }) 791 })
796 792
797 TestDefineThrow({ 793 TestDefineThrow({
(...skipping 801 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 }) 1595 })
1600 1596
1601 TestKeys(["[object Object]"], { 1597 TestKeys(["[object Object]"], {
1602 get keys() { 1598 get keys() {
1603 return function() { return [{}] } 1599 return function() { return [{}] }
1604 } 1600 }
1605 }) 1601 })
1606 1602
1607 TestKeys(["a", "0"], { 1603 TestKeys(["a", "0"], {
1608 getOwnPropertyNames: function() { return ["a", 23, "zz", "", 0] }, 1604 getOwnPropertyNames: function() { return ["a", 23, "zz", "", 0] },
1609 getOwnPropertyDescriptor: function(k) { return {enumerable: k.length == 1} } 1605 getOwnPropertyDescriptor: function(k) {
1606 return k == "" ? undefined : {enumerable: k.length == 1}
1607 }
1610 }) 1608 })
1611 1609
1612 TestKeys(["23", "zz", ""], { 1610 TestKeys(["23", "zz", ""], {
1613 getOwnPropertyNames: function() { return this.getOwnPropertyNames2() }, 1611 getOwnPropertyNames: function() { return this.getOwnPropertyNames2() },
1614 getOwnPropertyNames2: function() { return ["a", 23, "zz", "", 0] }, 1612 getOwnPropertyNames2: function() { return ["a", 23, "zz", "", 0] },
1615 getOwnPropertyDescriptor: function(k) { 1613 getOwnPropertyDescriptor: function(k) {
1616 return this.getOwnPropertyDescriptor2(k) 1614 return this.getOwnPropertyDescriptor2(k)
1617 }, 1615 },
1618 getOwnPropertyDescriptor2: function(k) { return {enumerable: k.length != 1} } 1616 getOwnPropertyDescriptor2: function(k) { return {enumerable: k.length != 1} }
1619 }) 1617 })
1620 1618
1621 TestKeys(["a", "b", "c", "5"], { 1619 TestKeys(["a", "b", "c", "5"], {
1622 get getOwnPropertyNames() { 1620 get getOwnPropertyNames() {
1623 return function() { return ["0", 4, "a", "b", "c", 5] } 1621 return function() { return ["0", 4, "a", "b", "c", 5, "ety"] }
1624 }, 1622 },
1625 get getOwnPropertyDescriptor() { 1623 get getOwnPropertyDescriptor() {
1626 return function(k) { return {enumerable: k >= "44"} } 1624 return function(k) {
1625 return k == "ety" ? undefined : {enumerable: k >= "44"}
1626 }
1627 } 1627 }
1628 }) 1628 })
1629 1629
1630 TestKeys([], { 1630 TestKeys([], {
1631 get getOwnPropertyNames() { 1631 get getOwnPropertyNames() {
1632 return function() { return ["a", "b", "c"] } 1632 return function() { return ["a", "b", "c"] }
1633 }, 1633 },
1634 getOwnPropertyDescriptor: function(k) { return {} } 1634 getOwnPropertyDescriptor: function(k) { return {} }
1635 }) 1635 })
1636 1636
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after
2157 2157
2158 TestIsEnumerableThrow(Proxy.create({ 2158 TestIsEnumerableThrow(Proxy.create({
2159 get: function(pr, pk) { throw "myexn" } 2159 get: function(pr, pk) { throw "myexn" }
2160 })) 2160 }))
2161 2161
2162 TestIsEnumerableThrow(Proxy.create({ 2162 TestIsEnumerableThrow(Proxy.create({
2163 get: function(pr, pk) { 2163 get: function(pr, pk) {
2164 return function(k) { throw "myexn" } 2164 return function(k) { throw "myexn" }
2165 } 2165 }
2166 })) 2166 }))
OLDNEW
« no previous file with comments | « src/x64/full-codegen-x64.cc ('k') | test/mjsunit/harmony/proxies-for.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698