<p> This test verifies that property caching behaves correctly in the face of deleted properties. If the test passes, you'll see a series of PASS messages below. </p> <pre id="console"></pre> <script> (function() { if (window.testRunner) testRunner.dumpAsText(); function log(s) { if (this.document) document.getElementById("console").appendChild(document.createTextNode(s + "\n")); else print(s + "\n"); } function shouldBe(a, aDescription, b) { if (a === b) { log("PASS: " + aDescription + " should be " + b + " and is."); } else { log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + "."); } } Array.equal = function equal(a, b) { if (a.length != b.length) return false; for (var i = 0; i < a.length; ++i) if (a[i] != b[i]) return false; return true; } var expectedProperties = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; function getProperties(o) { return [ o.p1, o.p2, o.p3, o.p4, o.p5, o.p6, o.p7, o.p8, o.p9, o.p10 ]; } function addProperties(o) { o.p1 = 1; o.p2 = 2; o.p3 = 3; o.p4 = 4; o.p5 = 5; o.p6 = 6; o.p7 = 7; o.p8 = 8; o.p9 = 9; o.p10 = 10; } function removeProperties(o) { delete o.p10; delete o.p9; delete o.p8; delete o.p7; delete o.p6; delete o.p5; delete o.p4; delete o.p3; delete o.p2; } function makeO() { var o = { }; addProperties(o); removeProperties(o); addProperties(o); return o; } var o; var properties; for (var i = 0; i < 3; ++i) { o = makeO(); properties = getProperties(o); shouldBe(Array.equal(properties, expectedProperties), "Array.equal(properties, expectedProperties)", true); } o = { x: 0, y: 0, z: 0 }; delete o.z; for (var i = 0; i < 3; ++i) { o.x = 1; shouldBe(o.x, "o.x", 1); } })(); </script>