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