mirror of https://github.com/tc39/test262.git
116 lines
2.7 KiB
JavaScript
116 lines
2.7 KiB
JavaScript
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);
|