blob: 0ab0f1acd4e0a6e62983f1003a36409a29643267 [file] [log] [blame]
Test IndexedDB's IDBObjectStore auto-increment feature.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
createObjectStore():
store = db.createObjectStore('StoreWithKeyPath', {keyPath: 'id', autoIncrement: true})
db.createObjectStore('StoreWithAutoIncrement', {autoIncrement: true})
db.createObjectStore('PlainOldStore', {autoIncrement: false})
db.createObjectStore('StoreWithLongKeyPathAndUTF8', {keyPath: 'a.b.c.køi', autoIncrement: true})
storeNames = db.objectStoreNames
PASS store.name is "StoreWithKeyPath"
PASS store.keyPath is "id"
PASS storeNames.contains('StoreWithKeyPath') is true
PASS storeNames.contains('StoreWithAutoIncrement') is true
PASS storeNames.contains('PlainOldStore') is true
PASS storeNames.length is 4
setVersionCompleted():
trans = db.transaction(['StoreWithKeyPath', 'StoreWithAutoIncrement', 'PlainOldStore'], 'readwrite')
store = trans.objectStore('StoreWithKeyPath')
Insert into object store with auto increment and key path, with key in the object.
store.add({name: 'Jeffersson', number: '7010', id: 3})
addJefferssonSuccess():
PASS event.target.result is 3
Insert into object store with auto increment and key path, without key in the object.
store.add({name: 'Lincoln', number: '7012'})
addLincolnWithInjectKeySuccess():
PASS event.target.result is 4
store.get(4)
getLincolnAfterInjectedKeySuccess():
PASS event.target.result.name is "Lincoln"
PASS event.target.result.number is "7012"
PASS event.target.result.id is 4
store.add({name: 'Bob', number: Uint8Array.from([100, 101])})
putBobSuccess():
PASS event.target.result is 5
store.get(5)
getBobSuccess():
PASS event.target.result.name is "Bob"
PASS event.target.result.number is [100, 101]
store = trans.objectStore('StoreWithAutoIncrement')
Insert into object store with key gen using explicit key
store.add({name: 'Lincoln', number: '7012'}, 6)
addLincolnWithExplicitKeySuccess():
PASS event.target.result is 6
store.get(6)
getLincolnSuccess():
PASS event.target.result.name is "Lincoln"
PASS event.target.result.number is "7012"
store.put({name: 'Abraham', number: '2107'})
putAbrahamSuccess():
PASS event.target.result is 7
store.get(7)
getAbrahamSuccess():
PASS event.target.result.name is "Abraham"
PASS event.target.result.number is "2107"
store = trans.objectStore('PlainOldStore')
Try adding with no key to object store without auto increment.
Expecting exception from store.add({name: 'Adam'})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
store.add({name: 'Adam'}, 1)
addAdamSuccess():
PASS event.target.result is 1
testLongKeyPath():
trans = db.transaction('StoreWithLongKeyPathAndUTF8', 'readwrite')
store = trans.objectStore('StoreWithLongKeyPathAndUTF8')
store.add({foo: 'bar'})
store.add({foo: 'bar', a: {}})
store.add({foo: 'bar', a: {b: {}}})
store.add({foo: 'bar', a: {b: {c: {}}}})
store.openCursor()
expected = null
count = 0
expected = cursor.value.a.b.c.køi + 1
PASS cursor.value.foo is "bar"
PASS cursor.value.a.b.c.køi is expected
expected = cursor.value.a.b.c.køi + 1
PASS cursor.value.foo is "bar"
PASS cursor.value.a.b.c.køi is expected
expected = cursor.value.a.b.c.køi + 1
PASS cursor.value.foo is "bar"
PASS cursor.value.a.b.c.køi is expected
expected = cursor.value.a.b.c.køi + 1
PASS count is 4
PASS successfullyParsed is true
TEST COMPLETE