blob: d2bb2de60ed5a794a1a63596f6a627c7612b1163 [file] [log] [blame]
if (this.importScripts) {
importScripts('../../../resources/js-test.js');
importScripts('shared.js');
}
description("Test IndexedDB keyPath edge cases");
indexedDBTest(prepareDatabase, testKeyPaths);
function prepareDatabase()
{
db = event.target.result;
event.target.transaction.onabort = unexpectedAbortCallback;
evalAndLog("db.createObjectStore('store-with-path', {keyPath: 'foo'})");
evalAndLog("db.createObjectStore('store-with-path-and-generator', {keyPath: 'foo', autoIncrement: true})");
}
function testKeyPaths()
{
debug("");
debug("testKeyPaths():");
transaction = evalAndLog("transaction = db.transaction(['store-with-path'], 'readwrite')");
store = evalAndLog("store = transaction.objectStore('store-with-path')");
debug("");
debug("Key path doesn't resolve to a value; should yield null, should throw DATA_ERR");
evalAndExpectException("store.put(null)", "0", "'DataError'");
debug("");
debug("Key path doesn't resolve to a value; should yield null, should throw DATA_ERR");
evalAndExpectException("store.put({})", "0", "'DataError'");
debug("");
debug("Key path resolves to a value that is invalid key; should yield 'invalid' key, should throw DATA_ERR");
evalAndExpectException("store.put({foo: null})", "0", "'DataError'");
debug("");
debug("Key path resolves to a value that is valid key; should yield 'string' key, should succeed");
request = evalAndLog("store.put({foo: 'zoo'})");
request.onerror = unexpectedErrorCallback;
request.onsuccess = function () {
testPassed("store.put succeeded");
};
transaction.onabort = unexpectedAbortCallback;
transaction.oncomplete = testKeyPathsAndGenerator;
}
function testKeyPathsAndGenerator()
{
debug("");
debug("testKeyPathsAndGenerator():");
transaction = evalAndLog("transaction = db.transaction(['store-with-path-and-generator'], 'readwrite')");
store = evalAndLog("store = transaction.objectStore('store-with-path-and-generator')");
debug("");
debug("Key path doesn't resolve to a value; should yield null but insertion would fail, so put request should raise exception");
evalAndExpectException("store.put(null)", "0", "'DataError'");
debug("");
debug("Key path doesn't resolve to a value; should yield null but insertion would fail, so put request should raise exception");
evalAndExpectException("store.put('string')", "0", "'DataError'");
debug("");
debug("Key path doesn't resolve to a value; should yield null, key should be generated, put request should succeed");
request = evalAndLog("store.put({})");
request.onerror = unexpectedErrorCallback;
request.onsuccess = function () {
testPassed("store.put succeeded");
debug("");
debug("Key path resolves to a value that is invalid key; should yield 'invalid' key, should throw DATA_ERR");
evalAndExpectException("store.put({foo: null})", "0", "'DataError'");
debug("");
debug("Key path resolves to a value that is valid key; should yield 'string' key, should succeed");
request = evalAndLog("store.put({foo: 'zoo'})");
request.onerror = unexpectedErrorCallback;
request.onsuccess = function () {
testPassed("store.put succeeded");
};
};
transaction.onabort = unexpectedAbortCallback;
transaction.oncomplete = finishJSTest;
}