blob: 7353e90c2d4f7dec78ccec69ef5aabe814ddb36a [file] [log] [blame]
function shouldBe(actual, expected) {
if (actual !== expected)
throw new Error('bad value: ' + actual);
}
function iterator(array) {
var nextCount = 0;
var returnCount = 0;
var original = array.values();
return {
[Symbol.iterator]() {
return this;
},
next() {
++nextCount;
return original.next();
},
return() {
++returnCount;
return { done: true };
},
reportNext() {
return nextCount;
},
reportReturn() {
return returnCount;
}
};
};
(function () {
var iter = iterator([1, 2, 3]);
var [] = iter;
shouldBe(iter.reportNext(), 0);
shouldBe(iter.reportReturn(), 1);
}());
(function () {
var iter = iterator([1, 2, 3]);
var [,] = iter;
shouldBe(iter.reportNext(), 1);
shouldBe(iter.reportReturn(), 1);
}());
(function () {
var iter = iterator([1, 2, 3]);
var [,,] = iter;
shouldBe(iter.reportNext(), 2);
shouldBe(iter.reportReturn(), 1);
}());
(function () {
var iter = iterator([1, 2, 3]);
var [,,,] = iter;
shouldBe(iter.reportNext(), 3);
shouldBe(iter.reportReturn(), 1);
}());
(function () {
var iter = iterator([1, 2, 3]);
var [,,,,] = iter;
shouldBe(iter.reportNext(), 4);
shouldBe(iter.reportReturn(), 0);
}());
(function () {
var iter = iterator([1, 2, 3]);
var [,,,,,] = iter;
shouldBe(iter.reportNext(), 4);
shouldBe(iter.reportReturn(), 0);
}());
(function () {
var iter = iterator([1, 2, 3]);
var [,a,] = iter;
shouldBe(iter.reportNext(), 2);
shouldBe(iter.reportReturn(), 1);
shouldBe(a, 2);
}());
(function () {
var iter = iterator([1, 2, 3]);
var [a,] = iter;
shouldBe(iter.reportNext(), 1);
shouldBe(iter.reportReturn(), 1);
shouldBe(a, 1);
}());
(function () {
var iter = iterator([1, 2, 3]);
var [a,,] = iter;
shouldBe(iter.reportNext(), 2);
shouldBe(iter.reportReturn(), 1);
shouldBe(a, 1);
}());
(function () {
var iter = iterator([1, 2, 3]);
var [a,b = 42,] = iter;
shouldBe(iter.reportNext(), 2);
shouldBe(iter.reportReturn(), 1);
shouldBe(a, 1);
shouldBe(b, 2);
}());
(function () {
var {} = { Cocoa: 15, Cappuccino: 13 };
}());
(function () {
var {Cocoa,} = { Cocoa: 15, Cappuccino: 13 };
shouldBe(Cocoa, 15);
}());
(function () {
var {Cocoa = 'Cocoa',} = { Cocoa: 15, Cappuccino: 13 };
shouldBe(Cocoa, 15);
}());
(function () {
var {Cocoa, Kilimanjaro = 'Coffee'} = { Cocoa: 15, Cappuccino: 13 };
shouldBe(Cocoa, 15);
shouldBe(Kilimanjaro, 'Coffee');
}());
(function () {
var {Cocoa, Kilimanjaro = 'Coffee'} = {};
shouldBe(Cocoa, undefined);
shouldBe(Kilimanjaro, 'Coffee');
}());
(function () {
var {Cocoa, Kilimanjaro = 'Coffee',} = { Cocoa: 15, Cappuccino: 13 };
shouldBe(Cocoa, 15);
shouldBe(Kilimanjaro, 'Coffee');
}());
function testSyntaxError(script, message) {
var error = null;
try {
eval(script);
} catch (e) {
error = e;
}
if (!error)
throw new Error("Expected syntax error not thrown");
if (String(error) !== message)
throw new Error("Bad error: " + String(error));
}
testSyntaxError(String.raw`var {,} = {Cocoa: 15}`, String.raw`SyntaxError: Unexpected token ','. Expected a property name.`);
testSyntaxError(String.raw`var {,} = {}`, String.raw`SyntaxError: Unexpected token ','. Expected a property name.`);