blob: a1452d808c3ca42ec1d13f2afdeecbecacf211f1 [file] [log] [blame]
description('Tests for ES6 arrow function lexical bind of arguments');
function afFactory0() {
return a => arguments;
}
var af0 = afFactory0('ABC', 'DEF');
var arr = af0(0);
shouldBe('arr.length', '2');
shouldBe('arr[0]','"ABC"');
shouldBe('arr[1]','"DEF"');
shouldBe('typeof arr[2]','"undefined"');
function afFactory1(x, y, z) {
return (a, b) => arguments[0] + '-' + arguments[1] + '-' + arguments[2] + '-' + a + '-' + b;
}
shouldBe("afFactory1('AB', 'CD', 'EF')('G', 'H')", '"AB-CD-EF-G-H"');
var afFactory2 = function () {
this.func = (a, b) => arguments[0] + '_' + arguments[1] + '_' + arguments[2] + '_' + a + '_' + b;
};
shouldBe("(new afFactory2('P1', 'Q2', 'R3')).func('A4', 'B5')", '"P1_Q2_R3_A4_B5"');
var afFactory3 = function () {
this.func = (a, b) => (c, d) => arguments[0] + '_' + arguments[1] + '_' + arguments[2] + '_' + a + '_' + b + '_' + c + '_' + d;
};
shouldBe("(new afFactory3('PQ', 'RS', 'TU')).func('VW', 'XY')('Z', 'A')", '"PQ_RS_TU_VW_XY_Z_A"');
var afNested = function () {
return function () {
this.func = (a, b) => (c, d) => arguments[0] + '_' + arguments[1] + '_' + arguments[2] + '_' + a + '_' + b + '_' + c + '_' + d;
};
};
var afInternal = new afNested('AB', 'CD', 'EF');
var af5 = new afInternal('GH', 'IJ', 'KL');
shouldBe("af5.func('VW', 'XY')('Z', '')", '"GH_IJ_KL_VW_XY_Z_"');
var objFactory = function () {
return {
name : 'nested',
method : (index) => arguments[0] + '-' + index
};
};
var objInternal = objFactory('ABC', 'DEF');
shouldBe("objInternal.method('H')", '"ABC-H"');
shouldBe("(() => arguments)()", "arguments")
var func_with_eval = function (a, b) { return () => eval('arguments') }
shouldBe('func_with_eval("abc", "def")("xyz")[0]', '"abc"');
shouldBe('func_with_eval("abc", "def")("xyz")[1]', '"def"');
var af_function_scope = function (first, x, y) {
let arr;
var arguments = 'af_function_scope';
if (first) {
arr = () => arguments;
} else {
arr = () => arguments;
}
return arr;
};
var af_mixed_scope = function (first, x, y) {
let arr;
var arguments = 'af_mixed_scope';
if (first) {
let arguments = 'local-scope';
arr = () => arguments;
} else {
let arguments = 'local-scope-2';
arr = () => arguments;
}
return arr;
};
var af_block_scope = function (x, y) {
let arr;
if (true) {
let arguments = 'branch-1';
arr = () => arguments;
} else {
let arguments = 'branch-2';
arr = () => arguments;
}
return arr;
};
shouldBe("af_block_scope('A', 'B')('C')", "'branch-1'");
shouldBe("af_function_scope(true, 'D', 'E')('F')", "'af_function_scope'");
shouldBe("af_mixed_scope(true, 'G', 'H')('I')", "'local-scope'");
class A {
constructor() {
this.list = [];
}
};
class B extends A {
addObj(obj) {
this.list.push(obj);
this.result = 0;
}
runAll() {
for (let i = 0; i < this.list.length; i++) {
this.result += this.list[i].operand(1);
}
}
};
function test() {
let b = new B();
function runTest () {
b.addObj({ operand : (value) => value + value });
b.addObj({ operand : (value) => value + value });
}
for (var i = 0; i < 10000; i++) {
runTest();
}
b.runAll();
return b.result;
}
test();
shouldBe("test()", "40000");
function* foo(a, b, c) {
yield () => arguments;
}
foo(10, 11, 12).next().value()[0];
shouldBe("foo(10, 11, 12).next().value()[0]", "10");
shouldBe("foo(10, 11, 12).next().value()[1]", "11");
shouldBe("foo(10, 11, 12).next().value()[2]", "12");
shouldBe("(function (a, b, c) { return (a = arguments) => {return a;}; })('1-1', '2-2', '3-3')()[1]", "'2-2'");
var successfullyParsed = true;