var testCase = function (actual, expected, message) {
    if (actual !== expected) {
        throw message + ". Expected '" + expected + "', but was '" + actual + "'";
    }
};

var functionConstructor = function () {
    this.func = () => this;
};

var instance = new functionConstructor();

testCase(instance.func() === instance, true, "Error: this is not lexically binded inside of the arrow function #2");

var obj = {
    method: function () {
        return () => this;
    }
};

noInline(obj.method);

for (var i=0; i < 10000; i++) {
    testCase(obj.method()() === obj, true, "Error: this is not lexically binded inside of the arrow function #3");
}

var fake = {steal: obj.method()};
noInline(fake.steal);

for (var i=0; i < 10000; i++) {
    testCase(fake.steal() === obj, true, "Error: this is not lexically binded inside of the arrow function #4");
}

var real = {borrow: obj.method};
noInline(real.borrow);

for (var i=0; i < 10000; i++) {
    testCase(real.borrow()() === real, true, "Error: this is not lexically binded inside of the arrow function #5");
}

// Force create the lexical env inside of arrow function

var functionConstructorWithEval = function () {
    this._id = 'old-value';
    this.func = () => {
        var f;
        eval('10==10');
        this._id = 'new-value';
        return this._id;
    };
};

var arrowWithEval = new functionConstructorWithEval();

for (var i=0; i < 10000; i++) {
    testCase(arrowWithEval.func() === 'new-value', true, "Error: this is not lexically binded inside of the arrow function #6");
}

function foo() {
    let arr = () => {
        var x = 123;
        function bas() {
            return x;
        };
        this._id = '12345';
        return bas();
    };
    this.arr = arr;
};

var fooObject = new foo();

function fooDefault() {
    let arr = (that = this) => {
        var x = 123;
        function bas() {
            return x;
        };
        that._id = '12345';
        return bas();
    };
    this.arr = arr;
};

var fooDefaultObject = new fooDefault();

for (var i=0; i < 10000; i++) {
    testCase(fooObject.arr() === 123, true, "Error: this is not lexically binded inside of the arrow function #7");
    testCase(fooObject._id === '12345', true, "Error: this is not lexically binded inside of the arrow function #8");
    testCase(fooDefaultObject.arr() === 123, true, "Error: this is not lexically binded inside of the arrow function #7");
    testCase(fooDefaultObject._id === '12345', true, "Error: this is not lexically binded inside of the arrow function #8");
}
