summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/for-in-special-cases.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/for-in-special-cases.js')
-rw-r--r--deps/v8/test/mjsunit/for-in-special-cases.js72
1 files changed, 47 insertions, 25 deletions
diff --git a/deps/v8/test/mjsunit/for-in-special-cases.js b/deps/v8/test/mjsunit/for-in-special-cases.js
index b592ad259e..27129e1aac 100644
--- a/deps/v8/test/mjsunit/for-in-special-cases.js
+++ b/deps/v8/test/mjsunit/for-in-special-cases.js
@@ -64,21 +64,15 @@ assertEquals(10, j);
function Accumulate(x) {
- var accumulator = "";
+ var accumulator = [];
for (var i in x) {
- accumulator += i;
+ accumulator.push(i);
}
return accumulator;
}
for (var i = 0; i < 3; ++i) {
- var elements = Accumulate("abcd");
- // We do not assume that for-in enumerates elements in order.
- assertTrue(-1 != elements.indexOf("0"));
- assertTrue(-1 != elements.indexOf("1"));
- assertTrue(-1 != elements.indexOf("2"));
- assertTrue(-1 != elements.indexOf("3"));
- assertEquals(4, elements.length);
+ assertEquals(Accumulate("abcd"), ['0', '1', '2', '3']);
}
function for_in_string_prototype() {
@@ -99,23 +93,51 @@ function for_in_string_prototype() {
// If for-in returns elements in a different order on multiple calls, this
// assert will fail. If that happens, consider if that behavior is OK.
assertEquals(elements, elements1, "For-in elements not the same both times.");
- // We do not assume that for-in enumerates elements in order.
- assertTrue(-1 != elements.indexOf("0"));
- assertTrue(-1 != elements.indexOf("1"));
- assertTrue(-1 != elements.indexOf("2"));
- assertTrue(-1 != elements.indexOf("7"));
- assertTrue(-1 != elements.indexOf("foo"));
- assertTrue(-1 != elements.indexOf("bar"));
- assertTrue(-1 != elements.indexOf("gub"));
- assertEquals(13, elements.length);
-
- elements = Accumulate(x);
- assertTrue(-1 != elements.indexOf("0"));
- assertTrue(-1 != elements.indexOf("1"));
- assertTrue(-1 != elements.indexOf("2"));
- assertTrue(-1 != elements.indexOf("foo"));
- assertEquals(6, elements.length);
+ assertEquals(["7","bar","gub","0","1","2","foo"], elements)
+
+ assertEquals(['0', '1', '2', 'foo'], Accumulate(x))
}
for_in_string_prototype();
for_in_string_prototype();
+
+
+(function for_in_dictionary_prototype_1() {
+ let prototype1 = {prop: 0, prop1: 1};
+ let derived1 = Object.create(null, {
+ prop: {enumerable: false, configurable: true, value: 0},
+ });
+ Object.setPrototypeOf(derived1, prototype1);
+
+ let prototype2 = {prop: 0, prop1: 1};
+ let derived2 = Object.create(prototype2, {
+ prop: {enumerable: false, configurable: true, value: 0},
+ });
+
+ for (let i = 0; i < 3; i++) {
+ assertEquals(['prop1'], Accumulate(derived1));
+ assertEquals(['prop1'], Accumulate(derived2));
+ }
+})();
+
+(function for_in_dictionary_prototype_2() {
+ let prototype1 = {prop: 0, prop1: 1};
+ let derived1 = Object.create(null, {
+ prop: {enumerable: false, configurable: true, value: 1},
+ prop2: {enumerable: true, configurable: true, value: 2},
+ prop3: {enumerable: false, configurable: true, value: 3},
+ });
+ Object.setPrototypeOf(derived1, prototype1);
+
+ let prototype2 = {prop: 0, prop1: 1};
+ let derived2 = Object.create(prototype2, {
+ prop: {enumerable: false, configurable: true, value: 0},
+ prop2: {enumerable: true, configurable: true, value: 2},
+ prop3: {enumerable: false, configurable: true, value: 3},
+ });
+
+ for (let i = 0; i < 3; i++) {
+ assertEquals(['prop2', 'prop1'], Accumulate(derived1));
+ assertEquals(['prop2', 'prop1'], Accumulate(derived2));
+ }
+})();