blob: b95456f777a945ae8be01266d0edce9cbade9c63 [file] [log] [blame]
description('Tests for ES6 class syntax default constructor');
function shouldThrow(s, message) {
var threw = false;
try {
eval(s);
} catch(e) {
threw = true;
if (!message || e.toString() === eval(message))
testPassed(s + ":::" + e.toString());
else
testFailed(s);
}
if (!threw)
testFailed(s);
}
function shouldBe(a, b) {
var r1 = eval(a);
var r2 = eval(b)
if (r1 === r2)
testPassed(a + ":::" + b);
else
testFailed(r1 + ":::" + r2);
}
function shouldBeTrue(s) {
if (eval(s) === true)
testPassed(s);
else
testFailed(s);
}
function assert(b) {
if (!b)
testFailed("Failed assert");
else
testPassed("Passed assert");
}
class A { };
class B extends A { };
shouldBeTrue('new A instanceof A');
shouldThrow('A()', '"TypeError: Cannot call a class constructor without |new|"');
shouldBeTrue('A.prototype.constructor instanceof Function');
shouldBe('A.prototype.constructor.name', '"A"');
shouldBeTrue('new B instanceof A; new B instanceof A');
shouldThrow('B()', '"TypeError: Cannot call a class constructor without |new|"');
shouldBe('B.prototype.constructor.name', '"B"');
shouldBeTrue('A !== B');
shouldBeTrue('A.prototype.constructor !== B.prototype.constructor');
var result = new (class extends (class { constructor(a, b) { return [a, b]; } }) {})(1, 2);
assert(result[0] === 1);
assert(result[1] === 2);
var successfullyParsed = true;