blob: 6ec287b6d16043f88ad1f8edcb9a97d26f7c709d [file] [log] [blame]
let globalLet = "let";
function globalFunction() { }
class globalClass { }
const globalConst = 20;
var globalVar = 21;
this.globalProperty = 22;
let sentinel = "__s__";
function assert(b) {
if (!b)
throw new Error("bad assertion");
}
function assertExpectations() {
assert(sentinel === "__s__");
}
let errorCount = 0;
function assertProperError(e) {
if (e instanceof SyntaxError && e.message.indexOf("Can't create duplicate variable") !== -1) {
errorCount++;
} else {
assert(false);
}
}
assertExpectations();
try {
load("./multiple-files-tests/global-lexical-redeclare-variable/first.js");
} catch(e) {
assertProperError(e);
}
assertExpectations();
try {
load("./multiple-files-tests/global-lexical-redeclare-variable/second.js");
} catch(e) {
assertProperError(e);
}
assertExpectations();
try {
load("./multiple-files-tests/global-lexical-redeclare-variable/third.js");
} catch(e) {
assertProperError(e);
}
assertExpectations();
try {
load("./multiple-files-tests/global-lexical-redeclare-variable/fourth.js");
} catch(e) {
assertProperError(e);
}
assertExpectations();
try {
load("./multiple-files-tests/global-lexical-redeclare-variable/fifth.js");
} catch(e) {
assertProperError(e);
}
assertExpectations();
// Checking if the implementation is following
// ES6 spec 8.1.1.4.14 http://www.ecma-international.org/ecma-262/6.0/index.html#sec-hasrestrictedglobalproperty
try {
sentinel = "bad";
assert(Object.getOwnPropertyDescriptor(this, "globalProperty").configurable);
load("./multiple-files-tests/global-lexical-redeclare-variable/sixth.js");
} catch(e) {
assert(false);
}
assertExpectations();
try {
sentinel = "bad";
assert(Object.getOwnPropertyDescriptor(this, "Array").configurable);
load("./multiple-files-tests/global-lexical-redeclare-variable/seventh.js");
} catch(e) {
assert(false);
}
assertExpectations();
try {
sentinel = "bad";
Object.defineProperty(this, 'foo', {value: 5, configurable: true, writable: true});
load("./multiple-files-tests/global-lexical-redeclare-variable/eighth.js");
} catch(e) {
assert(false);
}
assertExpectations();
try {
Object.defineProperty(this, 'bar', {value: 5, configurable: false, writable: true});
load("./multiple-files-tests/global-lexical-redeclare-variable/ninth.js");
} catch(e) {
assertProperError(e);
}
assertExpectations();
assert(errorCount === 6);
try {
Object.defineProperty(this, 'zoo', {value: undefined, configurable: false, writable: true});
load("./multiple-files-tests/global-lexical-redeclare-variable/tenth.js");
} catch(e) {
assertProperError(e);
}
assertExpectations();
assert(errorCount === 7);