Skip to content
Snippets Groups Projects
Commit e8cc40a0 authored by Mike Pennisi's avatar Mike Pennisi
Browse files

Import tests from Google V8 (native iterators)

These tests are derived from the following files within the Google V8
project:

    test/mjsunit/es6/typed-array-iterator.js
    test/mjsunit/es6/arguments-iterator.js
    test/mjsunit/es6/string-iterator.js
    test/mjsunit/es6/collection-iterator.js
parent 8af82000
No related branches found
No related tags found
No related merge requests found
Showing
with 384 additions and 3 deletions
......@@ -6,8 +6,8 @@
When an item is added to the array after the iterator is created but
before the iterator is "done" (as defined by 22.1.5.2.1), the new item
should be accessible via iteration. When an item is added to the array
after the iterator is is "done", the new item should not be accessible
via iteration.
after the iterator is "done", the new item should not be accessible via
iteration.
es6id: 22.1.3.30
---*/
......
......@@ -6,7 +6,7 @@
When an item is added to the array after the iterator is created but
before the iterator is "done" (as defined by 22.1.5.2.1), the new item's
key should be accessible via iteration. When an item is added to the
array after the iterator is is "done", the new item's key should not be
array after the iterator is "done", the new item's key should not be
accessible via iteration.
es6id: 22.1.3.13
---*/
......
// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 22.1.5.2.1
description: >
Visits each element of the array in order and ceases iteration once all
values have been visited.
---*/
var array = new Float32Array([3, 1, 2]);
var iterator = array[Symbol.iterator]();
var result;
result = iterator.next();
assert.sameValue(result.value, 3, 'first result `value`');
assert.sameValue(result.done, false, 'first result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 1, 'second result `value`');
assert.sameValue(result.done, false, 'second result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 2, 'second result `value`');
assert.sameValue(result.done, false, 'second result `done` flag');
result = iterator.next();
assert.sameValue(result.value, undefined, 'exhausted result `value`');
assert.sameValue(result.done, true, 'exhausted result `done` flag');
result = iterator.next();
assert.sameValue(
result.value, undefined, 'exhausted result `value` (repeated request)'
);
assert.sameValue(
result.done, true, 'exhausted result `done` flag (repeated request)'
);
// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 22.1.5.2.1
description: >
Visits each element of the array in order and ceases iteration once all
values have been visited.
---*/
var array = new Float64Array([3, 1, 2]);
var iterator = array[Symbol.iterator]();
var result;
result = iterator.next();
assert.sameValue(result.value, 3, 'first result `value`');
assert.sameValue(result.done, false, 'first result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 1, 'second result `value`');
assert.sameValue(result.done, false, 'second result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 2, 'third result `value`');
assert.sameValue(result.done, false, 'third result `done` flag');
result = iterator.next();
assert.sameValue(result.value, undefined, 'exhausted result `value`');
assert.sameValue(result.done, true, 'exhausted result `done` flag');
result = iterator.next();
assert.sameValue(
result.value, undefined, 'exhausted result `value` (repeated request)'
);
assert.sameValue(
result.done, true, 'exhausted result `done` flag (repeated request)'
);
// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 22.1.5.2.1
description: >
Visits each element of the array in order and ceases iteration once all
values have been visited.
---*/
var array = new Int16Array([3, 1, 2]);
var iterator = array[Symbol.iterator]();
var result;
result = iterator.next();
assert.sameValue(result.value, 3, 'first result `value`');
assert.sameValue(result.done, false, 'first result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 1, 'second result `value`');
assert.sameValue(result.done, false, 'second result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 2, 'third result `value`');
assert.sameValue(result.done, false, 'third result `done` flag');
result = iterator.next();
assert.sameValue(result.value, undefined, 'exhausted result `value`');
assert.sameValue(result.done, true, 'exhausted result `done` flag');
result = iterator.next();
assert.sameValue(
result.value, undefined, 'exhausted result `value` (repeated request)'
);
assert.sameValue(
result.done, true, 'exhausted result `done` flag (repeated request)'
);
// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 22.1.5.2.1
description: >
Visits each element of the array in order and ceases iteration once all
values have been visited.
---*/
var array = new Int32Array([3, 1, 2]);
var iterator = array[Symbol.iterator]();
var result;
result = iterator.next();
assert.sameValue(result.value, 3, 'first result `value`');
assert.sameValue(result.done, false, 'first result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 1, 'second result `value`');
assert.sameValue(result.done, false, 'second result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 2, 'third result `value`');
assert.sameValue(result.done, false, 'third result `done` flag');
result = iterator.next();
assert.sameValue(result.value, undefined, 'exhausted result `value`');
assert.sameValue(result.done, true, 'exhausted result `done` flag');
result = iterator.next();
assert.sameValue(
result.value, undefined, 'exhausted result `value` (repeated request)'
);
assert.sameValue(
result.done, true, 'exhausted result `done` flag (repeated request)'
);
// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 22.1.5.2.1
description: >
Visits each element of the array in order and ceases iteration once all
values have been visited.
---*/
var array = new Int8Array([3, 1, 2]);
var iterator = array[Symbol.iterator]();
var result;
result = iterator.next();
assert.sameValue(result.value, 3, 'first result `value`');
assert.sameValue(result.done, false, 'first result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 1, 'second result `value`');
assert.sameValue(result.done, false, 'second result `done` flag');
result = iterator.next();
assert.sameValue(result.value, 2, 'third result `value`');
assert.sameValue(result.done, false, 'third result `done` flag');
result = iterator.next();
assert.sameValue(result.value, undefined, 'exhausted result `value`');
assert.sameValue(result.done, true, 'exhausted result `done` flag');
result = iterator.next();
assert.sameValue(
result.value, undefined, 'exhausted result `value` (repeated request)'
);
assert.sameValue(
result.done, true, 'exhausted result `done` flag (repeated request)'
);
// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
`Object.prototype.getOwnPropertyDescriptor` should reflect the value and
writability of the @@toStringTag attribute.
includes: [propertyHelper.js]
es6id: 23.1.3.13
---*/
var MapIteratorProto = Object.getPrototypeOf(new Map()[Symbol.iterator]());
assert.sameValue('Map Iterator', MapIteratorProto[Symbol.toStringTag]);
verifyNotEnumerable(MapIteratorProto, Symbol.toStringTag);
verifyNotWritable(MapIteratorProto, Symbol.toStringTag);
verifyConfigurable(MapIteratorProto, Symbol.toStringTag);
// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
When an item is added to the map after the iterator is created but before
the iterator is "done" (as defined by 23.1.5.2.1), the new item should be
accessible via iteration. When an item is added to the map after the
iterator is "done", the new item should not be accessible via iteration.
es6id: 23.1.3.12
---*/
var map = new Map();
map.set(1, 11);
map.set(2, 22);
var iterator = map[Symbol.iterator]();
var result;
result = iterator.next();
assert.sameValue(result.value[0], 1, 'First result `value` (map key)');
assert.sameValue(result.value[1], 11, 'First result `value` (map value)');
assert.sameValue(result.value.length, 2, 'First result `value` (length)');
assert.sameValue(result.done, false, 'First result `done` flag');
map.set(3, 33);
result = iterator.next();
assert.sameValue(result.value[0], 2, 'Second result `value` (map key)');
assert.sameValue(result.value[1], 22, 'Second result `value` (map value)');
assert.sameValue(result.value.length, 2, 'Second result `value` (length)');
assert.sameValue(result.done, false, 'Second result `done` flag');
result = iterator.next();
assert.sameValue(result.value[0], 3, 'Third result `value` (map key)');
assert.sameValue(result.value[1], 33, 'Third result `value` (map value)');
assert.sameValue(result.value.length, 2, 'Third result `value` (length)');
assert.sameValue(result.done, false, 'Third result `done` flag');
result = iterator.next();
assert.sameValue(result.value, undefined, 'Exhausted result `value`');
assert.sameValue(result.done, true, 'Exhausted result `done` flag');
map.set(4, 44);
result = iterator.next();
assert.sameValue(
result.value, undefined, 'Exhausted result `value` (repeated request)'
);
assert.sameValue(
result.done, true, 'Exhausted result `done` flag (repeated request)'
);
// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
The method should return a valid iterator with the context as the
IteratedObject.
es6id: 23.2.3.11
---*/
var map = new Map();
map.set(1, 11);
map.set(2, 22);
map.set(3, 33);
var iterator = map[Symbol.iterator]();
var result;
result = iterator.next();
assert.sameValue(result.value[0], 1, 'First result `value` (map key)');
assert.sameValue(result.value[1], 11, 'First result `value` (map value)');
assert.sameValue(result.value.length, 2, 'First result `value` (length)');
assert.sameValue(result.done, false, 'First result `done` flag');
result = iterator.next();
assert.sameValue(result.value[0], 2, 'Second result `value` (map key)');
assert.sameValue(result.value[1], 22, 'Second result `value` (map value)');
assert.sameValue(result.value.length, 2, 'Second result `value` (length)');
assert.sameValue(result.done, false, 'Second result `done` flag');
result = iterator.next();
assert.sameValue(result.value[0], 3, 'Third result `value` (map key)');
assert.sameValue(result.value[1], 33, 'Third result `value` (map value)');
assert.sameValue(result.value.length, 2, 'Third result `value` (length)');
assert.sameValue(result.done, false, 'Third result `done` flag');
result = iterator.next();
assert.sameValue(result.value, undefined, 'Exhausted result `value`');
assert.sameValue(result.done, true, 'Exhausted result `done` flag');
result = iterator.next();
assert.sameValue(
result.value, undefined, 'Exhausted result `value` (repeated request)'
);
assert.sameValue(
result.done, true, 'Exhausted result `done` flag (repeated request)'
);
// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
If the context does not have a [[MapData]] internal slot, throw a
TypeError exception as per 23.1.5.1.
es6id: 23.1.3.12
---*/
var iterator = new Map()[Symbol.iterator]();
assert.throws(TypeError, function() {
iterator.next.call({});
});
// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
The method should exist on the Map prototype, and it should be writable
and configurable, but not enumerable.
includes: [propertyHelper.js]
es6id: 23.1.3.12
---*/
verifyNotEnumerable(Map.prototype, Symbol.iterator);
verifyWritable(Map.prototype, Symbol.iterator);
verifyConfigurable(Map.prototype, Symbol.iterator);
// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
The method should return a valid iterator with the context as the
IteratedObject.
es6id: 23.1.3.4
---*/
var map = new Map();
map.set(1, 11);
map.set(2, 22);
map.set(3, 33);
var iterator = map.entries();
var result;
result = iterator.next();
assert.sameValue(result.value[0], 1, 'First result `value` (map key)');
assert.sameValue(result.value[1], 11, 'First result `value` (map value)');
assert.sameValue(result.value.length, 2, 'First result `value` (length)');
assert.sameValue(result.done, false, 'First result `done` flag');
result = iterator.next();
assert.sameValue(result.value[0], 2, 'Second result `value` (map key)');
assert.sameValue(result.value[1], 22, 'Second result `value` (map value)');
assert.sameValue(result.value.length, 2, 'Second result `value` (length)');
assert.sameValue(result.done, false, 'Second result `done` flag');
result = iterator.next();
assert.sameValue(result.value[0], 3, 'Third result `value` (map key)');
assert.sameValue(result.value[1], 33, 'Third result `value` (map value)');
assert.sameValue(result.value.length, 2, 'Third result `value` (length)');
assert.sameValue(result.done, false, 'Third result `done` flag');
result = iterator.next();
assert.sameValue(result.value, undefined, 'Exhausted result `value`');
assert.sameValue(result.done, true, 'Exhausted result `done` flag');
result = iterator.next();
assert.sameValue(
result.value, undefined, 'Exhausted result `value` (repeated request)'
);
assert.sameValue(
result.done, true, 'Exhausted result `done` flag (repeated request)'
);
// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
If the context does not have a [[MapData]] internal slot, throw a
TypeError exception as per 23.1.5.1.
es6id: 23.1.3.4
---*/
assert.throws(TypeError, function() {
Map.prototype.entries.call({});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment