| <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> |