<p>This tests verifies that the Function constructor creates functions
    with the correct 'this' and 'window' in scope.
</p>
<pre id="console"></pre>

<script>
function log(s)
{
    document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
}

function shouldBe(a, aDescription, b)
{
    if (a == b) {
        log("PASS: " + aDescription + " should be " + b + " and is.");
        return;
    }
    log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + ".");
}

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
    testRunner.setCanOpenWindows();
    testRunner.setCloseRemainingWindowsWhenComplete(true);
}

var target = open("about:blank");
var result = (target.Function("", "return { 'this': this, 'window': window };"))();
target.close();

shouldBe(result['this'].location.href, "result['this'].location.href", "about:blank");
shouldBe(result['window'].location.href, "result['window'].location.href", "about:blank");

if (window.testRunner)
    testRunner.notifyDone();
</script>
