Check that scope restrictions on read-write transactions are enforced.

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)

prepareDatabase():
db = event.target.result
db.createObjectStore('a')
db.createObjectStore('b')
db.createObjectStore('c')

runTransactions():
db = event.target.result

transaction1 = db.transaction(['a'], 'readwrite')
transaction1Started = false
transaction1Complete = false
transaction1.objectStore('a').get(0)

transaction2 overlaps with transaction1, so must wait until transaction1 completes
transaction2 = db.transaction(['a', 'b'], 'readwrite')
transaction2Started = false
transaction2Complete = false
transaction2.objectStore('a').get(0)

transaction3 overlaps with transaction2, so must wait until transaction2 completes
even though it does not overlap with transaction1
transaction3 = db.transaction(['b', 'c'], 'readwrite')
transaction3Started = false
transaction3Complete = false
transaction3.objectStore('b').get(0)

transaction1Started = true

transaction1Complete = true
PASS transaction2Started is false
PASS transaction3Started is false

PASS transaction1Complete is true
transaction2Started = true

transaction2Complete = true
PASS transaction3Started is false

PASS transaction1Complete is true
PASS transaction2Complete is true
transaction3Started = true

transaction3Complete = true
PASS successfullyParsed is true

TEST COMPLETE

