<p>This page tests function declarations inside various block structures and control statements.</pre>
<pre id="console"></pre>

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

function shouldBe(a, b)
{
    var evalA;
    try {
        evalA = eval(a);
    } catch (e) {
        evalA = e;
    }
    
    if (evalA === b) {
        log("PASS: " + a + " should be " + b + " and is.");
    } else {
        log("FAIL: " + a + " should be " + b + " but instead is " + evalA + ".");
    }
}

function testDeclarations(title)
{
    var functions = [
        "f1",
        "f2",
        "f3",
        "f4",
        "f5",
        "f6",
        "f7",
        "f8",
        "f9"
    ];

    log(title);
    log("-----");
    for (var i = 0; i < functions.length; ++i)
        shouldBe("'" + functions[i] + "' in window", true);
}

testDeclarations("Before executing blocks containing function declarations: ");

{
    function f1() {}
}

if (false) {
    function f2() {}
}

switch (true) {
    case true: {
        function f3() {}
        break;
    }
    case false: {
        function f4() {}
        break;
    }
}

for (var i = 0; i < 0; ++i) {
    function f5() {}
}

do {
    function f6() {}
} while(0);

while (0) {
    function f7() {}
}

for (var p in {}) {
    function f8() {}
}

with ({}) {
    function f9() {}
}

log("");
testDeclarations("After executing blocks containing function declarations: ");

</script>
