| <body> | |
| <p>Test the behavior of DOMApplicationCache methods related to dynamic entries when the context | |
| is not associated with any cache.</p> | |
| <div id="result"></div> | |
| <script> | |
| if (window.testRunner) | |
| testRunner.dumpAsText(); | |
| function log(message) | |
| { | |
| document.getElementById("result").innerHTML += message + "<br>"; | |
| } | |
| function isResultCorrect(_actual, _expected) | |
| { | |
| if (_expected === 0) | |
| return _actual === _expected && (1/_actual) === (1/_expected); | |
| if (_actual === _expected) | |
| return true; | |
| if (typeof(_expected) == "number" && isNaN(_expected)) | |
| return typeof(_actual) == "number" && isNaN(_actual); | |
| if (Object.prototype.toString.call(_expected) == Object.prototype.toString.call([])) { | |
| log("Array comparison is not supported"); | |
| return false; | |
| } | |
| return false; | |
| } | |
| function shouldBe(_a, _b) | |
| { | |
| if (typeof _a != "string" || typeof _b != "string") | |
| log("WARN: shouldBe() expects string arguments"); | |
| var exception; | |
| var _av; | |
| try { | |
| _av = eval(_a); | |
| } catch (e) { | |
| exception = e; | |
| } | |
| var _bv = eval(_b); | |
| if (exception) | |
| log("FAIL: " + _a + " should be " + _bv + ". Threw exception " + exception); | |
| else if (isResultCorrect(_av, _bv)) | |
| log("PASS: " + _a + " is " + _b); | |
| else if (typeof(_av) == typeof(_bv)) | |
| log("FAIL: " + _a + " should be " + _bv + ". Was " + stringify(_av) + "."); | |
| else | |
| log("FAIL: " + _a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ")."); | |
| } | |
| shouldBe("applicationCache.items.length", "0"); | |
| shouldBe("applicationCache.items.item(0)", "null"); | |
| shouldBe("applicationCache.items.item(1)", "null"); | |
| shouldBe("applicationCache.items.item(0xffffffff)", "null"); | |
| shouldBe("applicationCache.items.item(0xfffffffe)", "null"); | |
| shouldBe("applicationCache.items.item(-1)", "null"); | |
| shouldBe("applicationCache.items.item(-2)", "null"); | |
| shouldBe("applicationCache.items[0xfffffffe]", "undefined"); | |
| shouldBe("applicationCache.items[0xffffffff]", "undefined"); | |
| // The below index access tests give different results in WebKit and Firefox 3.1b2 (undefined vs. empty string). | |
| shouldBe("applicationCache.items['0']", "undefined"); | |
| shouldBe("applicationCache.items['']", "undefined"); | |
| shouldBe("applicationCache.items[0]", "undefined"); | |
| shouldBe("applicationCache.items[1]", "undefined"); | |
| shouldBe("applicationCache.items[-1]", "undefined"); | |
| shouldBe("applicationCache.items[-2]", "undefined"); | |
| applicationCache.items[100] = "foobar"; | |
| applicationCache.items['100'] = "foobar"; | |
| applicationCache.items['foo'] = "bar"; | |
| shouldBe("applicationCache.items[100]", "undefined"); | |
| shouldBe("applicationCache.items['100']", "undefined"); | |
| shouldBe("applicationCache.items['foo']", "undefined"); | |
| shouldBe("applicationCache.items[0.1]", "undefined"); | |
| try { | |
| applicationCache.hasItem('foo'); | |
| log("FAIL: hasItem didn't raise an exception"); | |
| } catch (ex) { | |
| if (ex.code == 11) | |
| log("PASS: hasItem raised INVALID_STATE_ERR"); | |
| else | |
| log("FAIL: hasItem raised unexpected exception " + ex); | |
| } | |
| try { | |
| applicationCache.add('foo'); | |
| log("FAIL: add didn't raise an exception"); | |
| } catch (ex) { | |
| if (ex.code == 11) | |
| log("PASS: add raised INVALID_STATE_ERR"); | |
| else | |
| log("FAIL: add raised unexpected exception " + ex); | |
| } | |
| try { | |
| applicationCache.remove('bar'); | |
| log("FAIL: remove didn't raise an exception"); | |
| } catch (ex) { | |
| if (ex.code == 11) | |
| log("PASS: remove raised INVALID_STATE_ERR"); | |
| else | |
| log("FAIL: remove raised unexpected exception " + ex); | |
| } | |
| shouldBe("applicationCache.items.length", "0"); | |
| log("DONE"); | |
| </script> | |
| </head> | |
| </body> |