mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 14:30:27 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
161 lines
4.2 KiB
JavaScript
161 lines
4.2 KiB
JavaScript
var assert = function (result, expected) {
|
|
if (result !== expected) {
|
|
throw new Error('Error in assert. Expected-' + expected + ' but was ' + result);
|
|
}
|
|
};
|
|
|
|
var assertThrow = function (cb, expected) {
|
|
let error = null;
|
|
try {
|
|
cb();
|
|
} catch(e) {
|
|
error = e;
|
|
}
|
|
if (error === null) {
|
|
throw new Error('Error is expected. Expected "' + expected + '" but error was not thrown."');
|
|
}
|
|
if (error.toString() !== expected) {
|
|
throw new Error('Error is expected. Expected "' + expected + '" but error was "' + error + '"');
|
|
}
|
|
};
|
|
|
|
var assertNotThrow = function (cb) {
|
|
try {
|
|
cb();
|
|
} catch (e) {
|
|
throw new Error('Error is not expected. But was throw error: "' + e + '"');
|
|
}
|
|
}
|
|
|
|
var result = 0;
|
|
|
|
eval("'use strict'; let y = 5; function f() { result = y;} f()");
|
|
assert(result, 5);
|
|
|
|
eval("'use strict'; const x = 10; function f() { result = x;} f()");
|
|
assert(result, 10);
|
|
|
|
eval("'use strict'; class A { constructor() { this.id = 'foo'; } }; function foo() { return (new A).id; }; result = foo();");
|
|
assert(result, 'foo');
|
|
|
|
|
|
eval("let y = 15; function f() { result = y;} f()");
|
|
assert(result, 15);
|
|
|
|
eval("const x = 20; function f() { result = x;} f()");
|
|
assert(result, 20);
|
|
|
|
eval("class B { constructor() { this.id = 'boo'; } }; function foo() { return (new B).id; }; result = foo();");
|
|
assert(result, 'boo');
|
|
|
|
function foo () {
|
|
var res = 0;
|
|
|
|
eval("'use strict'; let y = 5; function f() { res = y;} f()");
|
|
assert(res, 5);
|
|
|
|
eval("'use strict'; const x = 10; function f() { result = x;} f()");
|
|
assert(res, 10);
|
|
|
|
eval("'use strict'; class C { constructor() { this.id = 'foo'; } }; function foo() { return (new C).id; }; result = foo();");
|
|
assert(res, 'foo');
|
|
|
|
|
|
eval("let y = 15; function f() { result = y;} f()");
|
|
assert(res, 15);
|
|
|
|
eval("const x = 20; function f() { result = x;} f()");
|
|
assert(res, 20);
|
|
|
|
eval("class D { constructor() { this.id = 'boo'; } }; function foo() { return (new D).id; }; result = foo();");
|
|
assert(res, 'boo');
|
|
}
|
|
|
|
foo();
|
|
|
|
function boo () {
|
|
{
|
|
let f;
|
|
eval("'use strict'; let y = 5; function f() { result = y;} f()");
|
|
assert(typeof f, 'undefined');
|
|
|
|
eval("'use strict'; const x = 10; function f() { result = x;} f()");
|
|
assert(typeof f, 'undefined');
|
|
|
|
eval("'use strict'; class E { constructor() { this.id = 'foo'; } }; function f() { return (new E).id; }; result = f();");
|
|
assert(typeof f, 'undefined');
|
|
}
|
|
}
|
|
|
|
function bar () {
|
|
{
|
|
let f;
|
|
eval("let y = 15; function f() { result = y;} f()");
|
|
}
|
|
}
|
|
|
|
function foobar () {
|
|
{
|
|
let f;
|
|
eval("const x = 20; function f() { result = x; } f()");
|
|
}
|
|
}
|
|
|
|
function baz() {
|
|
{
|
|
let f;
|
|
eval("var x = 20; function f() { result = x; } f()");
|
|
}
|
|
}
|
|
|
|
function barWithTry () {
|
|
var error;
|
|
{
|
|
let f;
|
|
try {
|
|
eval("let y = 15; function f() { result = y;} f()");
|
|
} catch (err) {
|
|
error = err;
|
|
}
|
|
assert(typeof f, 'undefined');
|
|
}
|
|
assert(error.toString(), 'SyntaxError: Can\'t create duplicate variable in eval: \'f\'');
|
|
}
|
|
|
|
function foobarWithTry () {
|
|
var error;
|
|
{
|
|
let f;
|
|
try {
|
|
eval("const x = 20; function f() { result = x; } f()");
|
|
} catch (err) {
|
|
error = err;
|
|
}
|
|
assert(typeof f, 'undefined');
|
|
}
|
|
assert(error.toString(), 'SyntaxError: Can\'t create duplicate variable in eval: \'f\'');
|
|
}
|
|
|
|
function bazWithTry () {
|
|
var error;
|
|
{
|
|
let f;
|
|
try {
|
|
eval("var x = 20; function f() { result = x; } f()");
|
|
} catch (err) {
|
|
error = err;
|
|
}
|
|
assert(typeof f, 'undefined');
|
|
}
|
|
assert(error.toString(), 'SyntaxError: Can\'t create duplicate variable in eval: \'f\'');
|
|
}
|
|
|
|
assertNotThrow(() => boo());
|
|
assertThrow(() => bar(), 'SyntaxError: Can\'t create duplicate variable in eval: \'f\'');
|
|
assertThrow(() => foobar(), 'SyntaxError: Can\'t create duplicate variable in eval: \'f\'');
|
|
assertThrow(() => baz(), 'SyntaxError: Can\'t create duplicate variable in eval: \'f\'');
|
|
|
|
barWithTry();
|
|
foobarWithTry();
|
|
bazWithTry();
|