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

Unified Diff: test/mjsunit/for-in.js

Issue 2081733002: [keys] support shadowing keys in the KeyAccumulator (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebasing Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/cctest/test-dictionary.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/for-in.js
diff --git a/test/mjsunit/for-in.js b/test/mjsunit/for-in.js
index 547c748dffddd36693a5057b35038e496f6f96ea..29d7445351ffa1788af1172a574e37e788cde9dd 100644
--- a/test/mjsunit/for-in.js
+++ b/test/mjsunit/for-in.js
@@ -30,61 +30,136 @@
function props(x) {
var array = [];
for (var p in x) array.push(p);
- return array.sort();
+ return array;
}
-assertEquals(0, props({}).length, "olen0");
-assertEquals(1, props({x:1}).length, "olen1");
-assertEquals(2, props({x:1, y:2}).length, "olen2");
+(function forInBasic() {
+ assertEquals(0, props({}).length, "olen0");
+ assertEquals(1, props({x:1}).length, "olen1");
+ assertEquals(2, props({x:1, y:2}).length, "olen2");
-assertArrayEquals(["x"], props({x:1}), "x");
-assertArrayEquals(["x", "y"], props({x:1, y:2}), "xy");
-assertArrayEquals(["x", "y", "zoom"], props({x:1, y:2, zoom:3}), "xyzoom");
+ assertArrayEquals(["x"], props({x:1}), "x");
+ assertArrayEquals(["x", "y"], props({x:1, y:2}), "xy");
+ assertArrayEquals(["x", "y", "zoom"], props({x:1, y:2, zoom:3}), "xyzoom");
-assertEquals(0, props([]).length, "alen0");
-assertEquals(1, props([1]).length, "alen1");
-assertEquals(2, props([1,2]).length, "alen2");
+ assertEquals(0, props([]).length, "alen0");
+ assertEquals(1, props([1]).length, "alen1");
+ assertEquals(2, props([1,2]).length, "alen2");
-assertArrayEquals(["0"], props([1]), "0");
-assertArrayEquals(["0", "1"], props([1,2]), "01");
-assertArrayEquals(["0", "1", "2"], props([1,2,3]), "012");
+ assertArrayEquals(["0"], props([1]), "0");
+ assertArrayEquals(["0", "1"], props([1,2]), "01");
+ assertArrayEquals(["0", "1", "2"], props([1,2,3]), "012");
+})();
-var o = {};
-var a = [];
-for (var i = 0x0020; i < 0x01ff; i+=2) {
- var s = 'char:' + String.fromCharCode(i);
- a.push(s);
- o[s] = i;
-}
-assertArrayEquals(a, props(o), "charcodes");
-
-var a = [];
-assertEquals(0, props(a).length, "proplen0");
-a[Math.pow(2,30)-1] = 0;
-assertEquals(1, props(a).length, "proplen1");
-a[Math.pow(2,31)-1] = 0;
-assertEquals(2, props(a).length, "proplen2");
-a[1] = 0;
-assertEquals(3, props(a).length, "proplen3");
-
-for (var hest = 'hest' in {}) { }
-assertEquals('hest', hest, "empty-no-override");
-
-var result = '';
-for (var p in {a : [0], b : 1}) { result += p; }
-assertEquals('ab', result, "ab");
-
-var result = '';
-for (var p in {a : {v:1}, b : 1}) { result += p; }
-assertEquals('ab', result, "ab-nodeep");
-
-var result = '';
-for (var p in { get a() {}, b : 1}) { result += p; }
-assertEquals('ab', result, "abget");
-
-var result = '';
-for (var p in { get a() {}, set a(x) {}, b : 1}) { result += p; }
-assertEquals('ab', result, "abgetset");
+(function forInPrototype() {
+ // Fast properties + fast elements
+ var obj = {a:true, 3:true, 4:true};
+ obj.__proto__ = {c:true, b:true, 2:true, 1:true, 5:true};
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("34a125cb".split(""), props(obj));
+ }
+ // Fast properties + dictionary elements
+ delete obj.__proto__[2];
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("34a15cb".split(""), props(obj));
+ }
+ // Slow properties + dictionary elements
+ delete obj.__proto__.c;
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("34a15b".split(""), props(obj));
+ }
+ // Slow properties on the receiver as well
+ delete obj.a;
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("3415b".split(""), props(obj));
+ }
+ delete obj[3];
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("415b".split(""), props(obj));
+ }
+})();
+
+(function forInShadowing() {
+ var obj = {a:true, 3:true, 4:true};
+ obj.__proto__ = {
+ c:true, b:true, x:true,
+ 2:true, 1:true, 5:true, 9:true};
+ Object.defineProperty(obj, 'x', {value:true, enumerable:false, configurable:true});
+ Object.defineProperty(obj, '9', {value:true, enumerable:false, configurable:true});
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("34a125cb".split(""), props(obj));
+ }
+ // Fast properties + dictionary elements
+ delete obj.__proto__[2];
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("34a15cb".split(""), props(obj));
+ }
+ // Slow properties + dictionary elements
+ delete obj.__proto__.c;
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("34a15b".split(""), props(obj));
+ }
+ // Remove the shadowing properties
+ delete obj.x;
+ delete obj[9];
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("34a159bx".split(""), props(obj));
+ }
+ // Slow properties on the receiver as well
+ delete obj.a;
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("34159bx".split(""), props(obj));
+ }
+ delete obj[3];
+ for (var i = 0; i < 3; i++) {
+ assertArrayEquals("4159bx".split(""), props(obj));
+ }
+})();
+
+(function forInCharCodes() {
+ var o = {};
+ var a = [];
+ for (var i = 0x0020; i < 0x01ff; i+=2) {
+ var s = 'char:' + String.fromCharCode(i);
+ a.push(s);
+ o[s] = i;
+ }
+ assertArrayEquals(a, props(o), "charcodes");
+})();
+
+(function forInArray() {
+ var a = [];
+ assertEquals(0, props(a).length, "proplen0");
+ a[Math.pow(2,30)-1] = 0;
+ assertEquals(1, props(a).length, "proplen1");
+ a[Math.pow(2,31)-1] = 0;
+ assertEquals(2, props(a).length, "proplen2");
+ a[1] = 0;
+ assertEquals(3, props(a).length, "proplen3");
+})();
+
+(function forInInitialize() {
+ for (var hest = 'hest' in {}) { }
+ assertEquals('hest', hest, "empty-no-override");
+})();
+
+(function forInObjects() {
+ var result = '';
+ for (var p in {a : [0], b : 1}) { result += p; }
+ assertEquals('ab', result, "ab");
+
+ var result = '';
+ for (var p in {a : {v:1}, b : 1}) { result += p; }
+ assertEquals('ab', result, "ab-nodeep");
+
+ var result = '';
+ for (var p in { get a() {}, b : 1}) { result += p; }
+ assertEquals('ab', result, "abget");
+
+ var result = '';
+ for (var p in { get a() {}, set a(x) {}, b : 1}) { result += p; }
+ assertEquals('ab', result, "abgetset");
+})();
// Test that for-in in the global scope works with a keyed property as "each".
« no previous file with comments | « test/cctest/test-dictionary.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698