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)
291 lines
8.5 KiB
JavaScript
291 lines
8.5 KiB
JavaScript
//@ defaultNoNoLLIntRun if $architecture == "arm"
|
|
|
|
var testCase = function (actual, expected, message) {
|
|
if (actual !== expected) {
|
|
throw message + ". Expected '" + expected + "', but was '" + actual + "'";
|
|
}
|
|
};
|
|
|
|
var testValue = 'test-value';
|
|
|
|
var A = class A {
|
|
constructor() {
|
|
this.value = testValue;
|
|
}
|
|
getConstValue () {
|
|
return testValue;
|
|
}
|
|
getValue () {
|
|
return this.value;
|
|
}
|
|
setValue (value) {
|
|
this.value = value;
|
|
}
|
|
};
|
|
|
|
var B = class B extends A {
|
|
getParentValue() {
|
|
var arrow = () => super.getValue();
|
|
return arrow();
|
|
}
|
|
};
|
|
|
|
var C = class C {
|
|
constructor() {
|
|
this.value = testValue;
|
|
}
|
|
static getStaticValue() {
|
|
return testValue;
|
|
}
|
|
};
|
|
|
|
var D = class D extends C {
|
|
static getParentStaticValue() {
|
|
var arrow = () => super.getStaticValue();
|
|
return arrow();
|
|
}
|
|
};
|
|
|
|
var E = class E extends A {
|
|
constructor() {
|
|
super();
|
|
}
|
|
get prop() {
|
|
var arrow = () => super.getConstValue() + '-' + this.value;
|
|
return arrow();
|
|
}
|
|
set prop(value) {
|
|
var arrow = (newVal) => super.setValue(newVal);
|
|
arrow(value);
|
|
}
|
|
setInitValue() {
|
|
this.value = testValue;
|
|
}
|
|
};
|
|
|
|
var b = new B();
|
|
for (var i = 0; i < 10000; i++) {
|
|
testCase(b.getParentValue(), testValue, i);
|
|
}
|
|
|
|
for (var i = 0; i < 10000; i++) {
|
|
testCase(D.getParentStaticValue(), testValue, i);
|
|
}
|
|
|
|
var e = new E();
|
|
for (var i = 0; i < 10000; i++) {
|
|
e.setInitValue();
|
|
testCase(e.prop, testValue+'-'+testValue, i);
|
|
e.prop = 'new-test-value';
|
|
testCase(e.prop, testValue+'-new-test-value', i);
|
|
}
|
|
|
|
var F = class F extends A {
|
|
newMethod() {
|
|
var arrow = () => eval('super.getValue()');
|
|
var r = arrow();
|
|
return r;
|
|
}
|
|
};
|
|
|
|
var f = new F();
|
|
for (var i=0; i < 10000; i++) {
|
|
try {
|
|
var result = f.newMethod();
|
|
testCase(result, testValue, i);
|
|
} catch(e) {
|
|
if (!(e instanceof SyntaxError))
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
var G = class G extends A {
|
|
constructor() {
|
|
super();
|
|
}
|
|
get prop() {
|
|
var arrow = () => () => super.getConstValue() + '-' + this.value;
|
|
return arrow()();
|
|
}
|
|
set prop(value) {
|
|
var arrow = () => (newVal) => this.value = newVal;
|
|
arrow()(value);
|
|
}
|
|
setInitValue() {
|
|
this.value = testValue;
|
|
}
|
|
getValueCB() {
|
|
var arrow = () => super.getValue();
|
|
return arrow;
|
|
}
|
|
setValueCB() {
|
|
var arrow = (newVal) => this.value = newVal;
|
|
return arrow;
|
|
}
|
|
getParentValue() {
|
|
return super.getValue();
|
|
}
|
|
|
|
getValueBlockScope() {
|
|
if (true) {
|
|
var someValue ='';
|
|
if (true) {
|
|
return () => {
|
|
if (true) {
|
|
let internalValue = '';
|
|
return super.getValue();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*genGetParentValue() {
|
|
let arr = () => super.getValue();
|
|
yield arr();
|
|
}
|
|
*genGetParentValueDeepArrow() {
|
|
let arr = () => () => () => super.getValue();
|
|
yield arr()()();
|
|
}
|
|
};
|
|
|
|
var g = new G();
|
|
for (var i = 0; i < 10000; i++) {
|
|
g.setInitValue();
|
|
testCase(g.prop, testValue + '-' + testValue, 'Error: Some problem with using arrow and "super" inside of the method');
|
|
g.prop = 'new-test-value';
|
|
testCase(g.prop, testValue + '-new-test-value', 'Error: Some problem with using arrow and "super" inside of the getter and setter');
|
|
}
|
|
|
|
var g1 = new G();
|
|
for (var i = 0; i < 10000; i++) {
|
|
g1.setInitValue();
|
|
let getValue = g1.getValueCB();
|
|
testCase(getValue(), testValue, 'Error: Some problem with using arrow and "super" inside of the method that retun arrow function');
|
|
let setValue = g1.setValueCB();
|
|
setValue('new-value');
|
|
testCase(getValue(), 'new-value', 'Error: Some problem with using arrow and "super" inside of the method that retun arrow function');
|
|
getValue = g1.getValueBlockScope();
|
|
testCase(getValue(), 'new-value', 'Error: Some problem with using arrow and "super" with deep nesting inside of the method that retun arrow function');
|
|
testCase(g1.genGetParentValue().next().value, 'new-value', 'Error: Some problem with using arrow and "super" with deep nesting inside of the generator method that retun arrow function');
|
|
testCase(g1.genGetParentValueDeepArrow().next().value, 'new-value', 'Error: Some problem with using arrow and "super" with deep nesting inside of the generator method that retun arrow function');
|
|
}
|
|
|
|
var H = class H extends A {
|
|
constructor() {
|
|
var arrow = () => () => super.getValue();
|
|
super();
|
|
this.newValue = arrow()();
|
|
}
|
|
};
|
|
|
|
for (var i = 0; i < 10000; i++) {
|
|
let h = new H();
|
|
testCase(h.newValue, testValue, 'Error: Some problem with using "super" inside of the constructor');
|
|
}
|
|
|
|
var I = class I extends A {
|
|
constructor (beforeSuper) {
|
|
var arrow = () => super.getValue();
|
|
if (beforeSuper) {
|
|
this._value = arrow();
|
|
super();
|
|
} else {
|
|
super();
|
|
this._value = arrow();
|
|
}
|
|
}
|
|
}
|
|
|
|
var J = class J extends A {
|
|
constructor (beforeSuper) {
|
|
var _value;
|
|
var arrow = () => super.getConstValue();
|
|
if (beforeSuper) {
|
|
_value = arrow();
|
|
super();
|
|
} else {
|
|
super();
|
|
_value = arrow();
|
|
}
|
|
this._value = _value;
|
|
}
|
|
}
|
|
|
|
for (var i = 0; i < 10000; i++) {
|
|
let i = new I(false);
|
|
testCase(i._value, testValue, 'Error: Some problem with using "super" inside of the constructor');
|
|
let j = new J(false);
|
|
testCase(j._value, testValue, 'Error: Some problem with using "super" inside of the constructor');
|
|
|
|
// FIXME: Problem with access to the super before super() in constructor
|
|
// https://bugs.webkit.org/show_bug.cgi?id=152108
|
|
//let j2 = new J(true);
|
|
//testCase(j2._value, testValue, 'Error: Some problem with using "super" inside of the constructor');
|
|
error = false;
|
|
try {
|
|
new I(true);
|
|
} catch (e) {
|
|
error = e instanceof ReferenceError;
|
|
}
|
|
testCase(error, true, 'Error: using "super" property before super() should lead to error');
|
|
}
|
|
|
|
class K extends A {
|
|
newMethodArrowEval() {
|
|
var arrow = () => eval('super.getValue()');
|
|
var r = arrow();
|
|
return r;
|
|
}
|
|
newMethodArrowDoubleEval() {
|
|
var arrow = () => eval("eval('super.getValue()')");
|
|
var r = arrow();
|
|
return r;
|
|
}
|
|
newMethodArrowEvalEvalArrow() {
|
|
var arrow = () => eval("eval('(() => super.getValue())()')");
|
|
var r = arrow();
|
|
return r;
|
|
}
|
|
newMethodArrowEvalEvalArrowEval() {
|
|
var arrow = () => eval("eval('(() => eval(\"super.getValue()\"))()')");
|
|
var r = arrow();
|
|
return r;
|
|
}
|
|
newMethodEval() {
|
|
var r = eval("super.getValue()");
|
|
return r;
|
|
}
|
|
newMethodEvalEval() {
|
|
var r = eval("eval('super.getValue()')");
|
|
return r;
|
|
}
|
|
newMethodEvalArrow() {
|
|
var r = eval("(() => super.getValue())()");
|
|
return r;
|
|
}
|
|
newMethodEvalEvalArrow() {
|
|
var r = eval("eval('(() => super.getValue())()')");
|
|
return r;
|
|
}
|
|
newMethodEvalEvalArrowEval() {
|
|
var r = eval("eval('(() => eval(\"(super.getValue())\"))()')");
|
|
return r;
|
|
}
|
|
}
|
|
|
|
var k = new K();
|
|
|
|
for (var i = 0; i < 1000; i++) {
|
|
testCase(k.newMethodArrowEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #1');
|
|
testCase(k.newMethodArrowDoubleEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #2');
|
|
testCase(k.newMethodArrowEvalEvalArrow() , testValue, 'Error: Error in lexical bind with eval and arrow function #3');
|
|
testCase(k.newMethodArrowEvalEvalArrowEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #4');
|
|
|
|
testCase(k.newMethodEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #5');
|
|
testCase(k.newMethodEvalEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #6');
|
|
testCase(k.newMethodEvalArrow() , testValue, 'Error: Error in lexical bind with eval and arrow function #7');
|
|
testCase(k.newMethodEvalEvalArrow() , testValue, 'Error: Error in lexical bind with eval and arrow function 8');
|
|
testCase(k.newMethodEvalEvalArrowEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #9');
|
|
}
|