haikuwebkit/LayoutTests/storage/indexeddb/resources/storage-limit.js

47 lines
1.5 KiB
JavaScript

if (this.importScripts) {
importScripts('../../../resources/js-test.js');
importScripts('shared.js');
}
if (window.testRunner)
testRunner.setAllowStorageQuotaIncrease(false);
var quota = 400 * 1024; // default quota for testing.
description("This test makes sure that storage of indexedDB does not grow unboundedly.");
indexedDBTest(prepareDatabase, onOpenSuccess);
function prepareDatabase(event)
{
preamble(event);
evalAndLog("db = event.target.result");
evalAndLog("store = db.createObjectStore('store')");
}
function onOpenSuccess(event)
{
preamble(event);
evalAndLog("db = event.target.result");
evalAndLog("store = db.transaction('store', 'readwrite').objectStore('store')");
// Small add should succeed.
evalAndLog("addCount = 0");
for (var i = 1; i <= 10; i ++)
evalAndLog("store.add(new Uint8Array(1), " + i + ").onsuccess = ()=> { ++addCount; }");
// Big add should fail.
evalAndLog("request = store.add(new Uint8Array(" + (quota + 1) + "), 0)");
request.onerror = function(event) {
shouldBe("addCount", "10");
shouldBeTrue("'error' in request");
shouldBe("request.error.code", "DOMException.QUOTA_EXCEEDED_ERR");
shouldBeEqualToString("request.error.name", "QuotaExceededError");
finishJSTest();
}
request.onsuccess = function(event) {
testFailed("Add operation should fail because storage limit is reached, but succeeded.");
finishJSTest();
}
}