| Index: test/mjsunit/harmony/arrow-functions-this.js
|
| diff --git a/test/mjsunit/harmony/arrow-functions-this.js b/test/mjsunit/harmony/arrow-functions-this.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2c2ad075d2f307b0ae44c20fe28d595407d3b2f6
|
| --- /dev/null
|
| +++ b/test/mjsunit/harmony/arrow-functions-this.js
|
| @@ -0,0 +1,81 @@
|
| +// Copyright 2015 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Flags: --harmony-arrow-functions
|
| +
|
| +var object = {};
|
| +var global = this;
|
| +var call = Function.call.bind(Function.call);
|
| +
|
| +var globalSloppyArrow = () => this;
|
| +var globalStrictArrow = () => { "use strict"; return this; };
|
| +var globalSloppyArrowEval = (s) => eval(s);
|
| +var globalStrictArrowEval = (s) => { "use strict"; return eval(s); };
|
| +
|
| +var sloppyFunctionArrow = function() {
|
| + return (() => this)();
|
| +};
|
| +var strictFunctionArrow = function() {
|
| + "use strict";
|
| + return (() => this)();
|
| +};
|
| +var sloppyFunctionEvalArrow = function() {
|
| + return eval("(() => this)()");
|
| +};
|
| +var strictFunctionEvalArrow = function() {
|
| + "use strict";
|
| + return eval("(() => this)()");
|
| +};
|
| +var sloppyFunctionArrowEval = function(s) {
|
| + return (() => eval(s))();
|
| +};
|
| +var strictFunctionArrowEval = function(s) {
|
| + "use strict";
|
| + return (() => eval(s))();
|
| +};
|
| +
|
| +var withObject = { 'this': object }
|
| +var arrowInsideWith, arrowInsideWithEval;
|
| +with (withObject) {
|
| + arrowInsideWith = () => this;
|
| + arrowInsideWithEval = (s) => eval(s);
|
| +}
|
| +
|
| +assertEquals(global, call(globalSloppyArrow, object));
|
| +assertEquals(global, call(globalStrictArrow, object));
|
| +assertEquals(global, call(globalSloppyArrowEval, object, "this"));
|
| +assertEquals(global, call(globalStrictArrowEval, object, "this"));
|
| +assertEquals(global, call(globalSloppyArrowEval, object, "(() => this)()"));
|
| +assertEquals(global, call(globalStrictArrowEval, object, "(() => this)()"));
|
| +
|
| +assertEquals(object, call(sloppyFunctionArrow, object));
|
| +assertEquals(global, call(sloppyFunctionArrow, undefined));
|
| +assertEquals(object, call(strictFunctionArrow, object));
|
| +assertEquals(undefined, call(strictFunctionArrow, undefined));
|
| +
|
| +assertEquals(object, call(sloppyFunctionEvalArrow, object));
|
| +assertEquals(global, call(sloppyFunctionEvalArrow, undefined));
|
| +assertEquals(object, call(strictFunctionEvalArrow, object));
|
| +assertEquals(undefined, call(strictFunctionEvalArrow, undefined));
|
| +
|
| +assertEquals(object, call(sloppyFunctionArrowEval, object, "this"));
|
| +assertEquals(global, call(sloppyFunctionArrowEval, undefined, "this"));
|
| +assertEquals(object, call(strictFunctionArrowEval, object, "this"));
|
| +assertEquals(undefined, call(strictFunctionArrowEval, undefined, "this"));
|
| +
|
| +assertEquals(object,
|
| + call(sloppyFunctionArrowEval, object, "(() => this)()"));
|
| +assertEquals(global,
|
| + call(sloppyFunctionArrowEval, undefined, "(() => this)()"));
|
| +assertEquals(object,
|
| + call(strictFunctionArrowEval, object, "(() => this)()"));
|
| +assertEquals(undefined,
|
| + call(strictFunctionArrowEval, undefined, "(() => this)()"));
|
| +
|
| +assertEquals(global, call(arrowInsideWith, undefined));
|
| +assertEquals(global, call(arrowInsideWith, object));
|
| +assertEquals(global, call(arrowInsideWithEval, undefined, "this"));
|
| +assertEquals(global, call(arrowInsideWithEval, object, "this"));
|
| +assertEquals(global, call(arrowInsideWithEval, undefined, "(() => this)()"));
|
| +assertEquals(global, call(arrowInsideWithEval, object, "(() => this)()"));
|
|
|