| <p>This page tests function declarations inside various block structures and control statements.</pre> | |
| <pre id="console"></pre> | |
| <script> | |
| if (window.testRunner) | |
| testRunner.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> |