Merge pull request #496 from bocoup/495-enumerate

Update tests for Reflect.enumerate and Proxy enumerate trap
This commit is contained in:
Gorkem Yakin 2016-02-18 13:44:50 -08:00
commit 8dd63de7b6
22 changed files with 57 additions and 519 deletions

View File

@ -1,30 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
Trap called as trap.call(handler, target)
info: >
[[Enumerate]] ()
8. Let trapResult be Call(trap, handler, «target»).
---*/
var x, _target, _handler;
var target = {
attr: 1
};
var handler = {
enumerate: function(t) {
_target = t;
_handler = this;
}
};
var p = new Proxy(target, handler);
try {
for (x in p) {}
} catch(e) {}
assert.sameValue(_handler, handler);
assert.sameValue(_target, target);

View File

@ -1,20 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
[[Enumerate]] ()
2. If handler is null, throw a TypeError exception.
---*/
var x;
var p = Proxy.revocable({}, {});
p.revoke();
assert.throws(TypeError, function() {
for (x in p.proxy) {
x;
}
});

View File

@ -0,0 +1,47 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
id: sec-proxy-object-internal-methods-and-internal-slots
description: >
Enumerate trap was removed and it should not be triggered anymore.
includes: [compareArray.js]
features: [Symbol.iterator]
---*/
var x;
var target = [1, 2, 3];
var p = new Proxy(target, {
enumerate: function() {
throw new Test262Error(
"An enumerate property on handler object shouldn't trigger a Proxy trap"
);
}
});
var forInResults = [];
for (x in p) {
forInResults.push(x);
}
assert(compareArray(forInResults, ["0", "1", "2"]));
var forOfResults = [];
for (x of p) {
forOfResults.push(x);
}
assert(compareArray(forOfResults, [1, 2, 3]));
var itor = p[Symbol.iterator]();
var next = itor.next();
assert.sameValue(next.value, 1);
assert.sameValue(next.done, false);
next = itor.next();
assert.sameValue(next.value, 2);
assert.sameValue(next.done, false);
next = itor.next();
assert.sameValue(next.value, 3);
assert.sameValue(next.done, false);
next = itor.next();
assert.sameValue(next.value, undefined);
assert.sameValue(next.done, true);

View File

@ -1,23 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
[[Enumerate]] ()
The result must be an Object
---*/
var x;
var target = {
attr: 1
};
var p = new Proxy(target, {
enumerate: function() {
return true;
}
});
assert.throws(TypeError, function() {
for (x in p) {}
});

View File

@ -1,23 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
[[Enumerate]] ()
The result must be an Object
---*/
var x;
var target = {
attr: 1
};
var p = new Proxy(target, {
enumerate: function() {
return 1;
}
});
assert.throws(TypeError, function() {
for (x in p) {}
});

View File

@ -1,23 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
[[Enumerate]] ()
The result must be an Object
---*/
var x;
var target = {
attr: 1
};
var p = new Proxy(target, {
enumerate: function() {
return "";
}
});
assert.throws(TypeError, function() {
for (x in p) {}
});

View File

@ -1,24 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
[[Enumerate]] ()
The result must be an Object
features: [Symbol]
---*/
var x;
var target = {
attr: 1
};
var p = new Proxy(target, {
enumerate: function() {
return Symbol();
}
});
assert.throws(TypeError, function() {
for (x in p) {}
});

View File

@ -1,23 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
[[Enumerate]] ()
The result must be an Object
---*/
var x;
var target = {
attr: 1
};
var p = new Proxy(target, {
enumerate: function() {
return undefined;
}
});
assert.throws(TypeError, function() {
for (x in p) {}
});

View File

@ -1,23 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
Trap returns abrupt.
info: >
[[Enumerate]] ()
8. Let trapResult be Call(trap, handler, «target»).
9. ReturnIfAbrupt(trapResult).
---*/
var x;
var p = new Proxy({}, {
enumerate: function(t) {
throw new Test262Error();
}
});
assert.throws(Test262Error, function() {
for (x in p) {}
});

View File

@ -1,23 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
Trap returns an iterator whose IteratorResult does not contain a value
property.
info: >
[[Enumerate]] ()
11. Return trapResult
---*/
var x;
var p = new Proxy([1,2,3], {
enumerate: function(t) {
return {next: function() { return { done:true }; } };
}
});
for (x in p) {
$ERROR("returned iterable interface from trap is flagged as done.");
}

View File

@ -1,36 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
Trap returns a iterable result.
info: >
[[Enumerate]] ()
11. Return trapResult
includes: [compareArray.js]
---*/
var x;
var iter = [
{done: false, value: 1},
{done: false, value: 2},
{done: false, value: 3},
{done: true, value: 42}
];
var target = {
attr: 1
};
var foo = { bar: 1 };
var p = new Proxy(target, {
enumerate: function() {
return { next: function() { return iter.shift(); } };
}
});
var results = [];
for (x in p) {
results.push(x);
}
assert(compareArray(results, [1,2,3]));

View File

@ -1,25 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
Trap is not callable.
info: >
[[Enumerate]] ()
5. Let trap be GetMethod(handler, "enumerate").
...
7.3.9 GetMethod (O, P)
5. If IsCallable(func) is false, throw a TypeError exception.
---*/
var x;
var p = new Proxy({attr:1}, {
enumerate: {}
});
assert.throws(TypeError, function() {
for (x in p) {}
});

View File

@ -1,22 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 9.5.11
description: >
[[Enumerate]] ()
7. If trap is undefined, then Return target.[[Enumerate]]().
---*/
var x;
var target = {
attr: 1
};
var p = new Proxy(target, {});
var count = 0;
for (x in p) {
count++;
}
assert.sameValue(count, 1);

View File

@ -1,37 +0,0 @@
// Copyright (C) 2015 Leonardo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 26.1.5
description: >
Returned iterator does not iterate over symbol properties.
info: >
26.1.5 Reflect.enumerate ( target )
...
2. Return target.[[Enumerate]]().
features: [Symbol]
---*/
var iter, step;
var s = Symbol('1');
var o = {
'a': 1,
'b': 1
};
o[s] = 1;
iter = Reflect.enumerate(o);
step = iter.next();
assert.sameValue(step.value, 'a');
assert.sameValue(step.done, false);
step = iter.next();
assert.sameValue(step.value, 'b');
assert.sameValue(step.done, false);
step = iter.next();
assert.sameValue(step.value, undefined);
assert.sameValue(step.done, true);

View File

@ -1,17 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 26.1.5
description: >
Reflect.enumerate is configurable, writable and not enumerable.
info: >
26.1.5 Reflect.enumerate ( target )
17 ECMAScript Standard Built-in Objects
includes: [propertyHelper.js]
---*/
verifyNotEnumerable(Reflect, 'enumerate');
verifyWritable(Reflect, 'enumerate');
verifyConfigurable(Reflect, 'enumerate');

View File

@ -1,17 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 26.1.5
description: >
Reflect.enumerate.length value and property descriptor
includes: [propertyHelper.js]
---*/
assert.sameValue(
Reflect.enumerate.length, 1,
'The value of `Reflect.enumerate.length` is `1`'
);
verifyNotEnumerable(Reflect.enumerate, 'length');
verifyNotWritable(Reflect.enumerate, 'length');
verifyConfigurable(Reflect.enumerate, 'length');

View File

@ -1,22 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 26.1.5
description: >
Reflect.enumerate.name value and property descriptor
info: >
26.1.5 Reflect.enumerate ( target )
17 ECMAScript Standard Built-in Objects
includes: [propertyHelper.js]
---*/
assert.sameValue(
Reflect.enumerate.name, 'enumerate',
'The value of `Reflect.enumerate.name` is `"enumerate"`'
);
verifyNotEnumerable(Reflect.enumerate, 'name');
verifyNotWritable(Reflect.enumerate, 'name');
verifyConfigurable(Reflect.enumerate, 'name');

View File

@ -1,24 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 26.1.5
description: >
Return abrupt result.
info: >
26.1.5 Reflect.enumerate ( target )
...
2. Return target.[[Enumerate]]().
features: [Proxy]
---*/
var o = {};
var p = new Proxy(o, {
enumerate: function() {
throw new Test262Error();
}
});
assert.throws(Test262Error, function() {
Reflect.enumerate(p);
});

View File

@ -1,62 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 26.1.5
description: >
Return an iterator.
info: >
26.1.5 Reflect.enumerate ( target )
...
2. Return target.[[Enumerate]]().
---*/
var iter, step;
var arr = ['a', 'b', 'c'];
iter = Reflect.enumerate(arr);
step = iter.next();
assert.sameValue(step.value, '0');
assert.sameValue(step.done, false);
step = iter.next();
assert.sameValue(step.value, '1');
assert.sameValue(step.done, false);
step = iter.next();
assert.sameValue(step.value, '2');
assert.sameValue(step.done, false);
step = iter.next();
assert.sameValue(step.value, undefined);
assert.sameValue(step.done, true);
var o = {
'a': 42,
'b': 43,
'c': 44
};
Object.defineProperty(o, 'd', {
enumerable: false,
value: 45
});
iter = Reflect.enumerate(o);
step = iter.next();
assert.sameValue(step.value, 'a');
assert.sameValue(step.done, false);
step = iter.next();
assert.sameValue(step.value, 'b');
assert.sameValue(step.done, false);
step = iter.next();
assert.sameValue(step.value, 'c');
assert.sameValue(step.done, false);
step = iter.next();
assert.sameValue(step.value, undefined);
assert.sameValue(step.done, true);

View File

@ -1,28 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 26.1.5
description: >
Throws a TypeError if target is not an Object.
info: >
26.1.5 Reflect.enumerate ( target )
1. If Type(target) is not Object, throw a TypeError exception.
...
---*/
assert.throws(TypeError, function() {
Reflect.enumerate(1);
});
assert.throws(TypeError, function() {
Reflect.enumerate(null);
});
assert.throws(TypeError, function() {
Reflect.enumerate(undefined);
});
assert.throws(TypeError, function() {
Reflect.enumerate('');
});

View File

@ -1,17 +0,0 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 26.1.5
description: >
Throws a TypeError if target is a Symbol
info: >
26.1.5 Reflect.enumerate ( target )
1. If Type(target) is not Object, throw a TypeError exception.
...
features: [Symbol]
---*/
assert.throws(TypeError, function() {
Reflect.enumerate(Symbol(1), 'p');
});

View File

@ -0,0 +1,10 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
id: sec-reflect-object
description: >
Reflect.enumerate was removed and it's not a function anymore
---*/
assert.sameValue(Reflect.hasOwnProperty("enumerate"), false);
assert.sameValue(Reflect.enumerate, undefined);