193 lines
5.5 KiB
Plaintext
193 lines
5.5 KiB
Plaintext
Test features of IndexedDB's multiEntry indices.
|
|
|
|
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)
|
|
store = db.createObjectStore('store')
|
|
store.createIndex('index', 'x', {multiEntry: true})
|
|
store2 = db.createObjectStore('store-unique')
|
|
store2.createIndex('index-unique', 'x', {multiEntry: true, unique: true})
|
|
|
|
Populating stores (and indexes)
|
|
transaction = db.transaction(['store'], 'readwrite')
|
|
First try some keys that aren't what we're expecting
|
|
transaction.objectStore('store').put({x: [7, 8, 9], y: 'a'}, 'foo')
|
|
Now overwrite them with what we're expecting
|
|
transaction.objectStore('store').put({x: [1, 2, 3], y: 'a'}, 'foo')
|
|
transaction.objectStore('store').put({x: [4, 5, 6], y: 'b'}, 'bar')
|
|
transaction.objectStore('store').put({x: [7, 7, 8, 7], y: 'c'}, 'baz')
|
|
transaction.objectStore('store').put({x: [null, 9, 9], y: 'd'}, 'bloop')
|
|
transaction.objectStore('store').put({x: [1, [2, null]], y:'e'}, 'oh')
|
|
|
|
Verifying index: index
|
|
transaction = db.transaction(['store'], 'readonly')
|
|
transaction.objectStore('store').index('index').openCursor()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 1
|
|
PASS cursor.primaryKey is "foo"
|
|
PASS cursor.value.y is "a"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 1
|
|
PASS cursor.primaryKey is "oh"
|
|
PASS cursor.value.y is "e"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 2
|
|
PASS cursor.primaryKey is "foo"
|
|
PASS cursor.value.y is "a"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 3
|
|
PASS cursor.primaryKey is "foo"
|
|
PASS cursor.value.y is "a"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 4
|
|
PASS cursor.primaryKey is "bar"
|
|
PASS cursor.value.y is "b"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 5
|
|
PASS cursor.primaryKey is "bar"
|
|
PASS cursor.value.y is "b"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 6
|
|
PASS cursor.primaryKey is "bar"
|
|
PASS cursor.value.y is "b"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 7
|
|
PASS cursor.primaryKey is "baz"
|
|
PASS cursor.value.y is "c"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 8
|
|
PASS cursor.primaryKey is "baz"
|
|
PASS cursor.value.y is "c"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 9
|
|
PASS cursor.primaryKey is "bloop"
|
|
PASS cursor.value.y is "d"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS expected.length is 0
|
|
transaction = db.transaction(['store'])
|
|
transaction.objectStore('store').index('index')
|
|
index.count()
|
|
PASS event.target.result is 10
|
|
index.count(7)
|
|
PASS event.target.result is 1
|
|
|
|
Verifying unique constraint on multiEntry index
|
|
transaction = db.transaction(['store-unique'], 'readwrite')
|
|
transaction.objectStore('store-unique').put({x: [1, 2, 3], y: 'a'}, 'foo')
|
|
success!
|
|
Replace an existing record - this should work
|
|
transaction.objectStore('store-unique').put({x: [1, 2, 7], y: 'a'}, 'foo')
|
|
success!
|
|
This should fail the uniqueness constraint on the index, and fail:
|
|
transaction.objectStore('store-unique').put({x: [5, 2], y: 'c'}, 'should fail')
|
|
Request failed, as expected (ConstraintError)
|
|
Transaction aborted as expected
|
|
|
|
Create an index on a populated store
|
|
db.close()
|
|
indexedDB.open(dbname, 2)
|
|
db = event.target.result
|
|
trans = event.target.transaction
|
|
store = trans.objectStore('store')
|
|
store.createIndex('index-new', 'x', {multiEntry: true})
|
|
|
|
Verifying index: index-new
|
|
transaction = db.transaction(['store'], 'readonly')
|
|
transaction.objectStore('store').index('index-new').openCursor()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 1
|
|
PASS cursor.primaryKey is "foo"
|
|
PASS cursor.value.y is "a"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 1
|
|
PASS cursor.primaryKey is "oh"
|
|
PASS cursor.value.y is "e"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 2
|
|
PASS cursor.primaryKey is "foo"
|
|
PASS cursor.value.y is "a"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 3
|
|
PASS cursor.primaryKey is "foo"
|
|
PASS cursor.value.y is "a"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 4
|
|
PASS cursor.primaryKey is "bar"
|
|
PASS cursor.value.y is "b"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 5
|
|
PASS cursor.primaryKey is "bar"
|
|
PASS cursor.value.y is "b"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 6
|
|
PASS cursor.primaryKey is "bar"
|
|
PASS cursor.value.y is "b"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 7
|
|
PASS cursor.primaryKey is "baz"
|
|
PASS cursor.value.y is "c"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 8
|
|
PASS cursor.primaryKey is "baz"
|
|
PASS cursor.value.y is "c"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS ex is non-null.
|
|
PASS cursor.key is 9
|
|
PASS cursor.primaryKey is "bloop"
|
|
PASS cursor.value.y is "d"
|
|
cursor.continue()
|
|
cursor = event.target.result
|
|
PASS expected.length is 0
|
|
transaction = db.transaction(['store'])
|
|
transaction.objectStore('store').index('index')
|
|
index.count()
|
|
PASS event.target.result is 10
|
|
index.count(7)
|
|
PASS event.target.result is 1
|
|
PASS successfullyParsed is true
|
|
|
|
TEST COMPLETE
|
|
|