This test opens a new database, then aborts the version change transaction. It then reopens the database, making sure it's a default, empty database, and changes the version successfully. It then reopens the database, upgrading it's version. It aborts this versionchange, as well. Finally it reopens the database again, upgrading its version, making sure things had reverted back to before the second aborted versionchange.

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)
Initial upgrade needed: Old version - 0 New version - 1
Initial upgrade versionchange transaction aborted
Second upgrade needed: Old version - 0 New version - 1
Second upgrade versionchange transaction complete
Third upgrade needed: Old version - 1 New version - 2
Third upgrade versionchange transaction aborted
Fourth upgrade needed: Old version - 1 New version - 2
PASS successfullyParsed is true

TEST COMPLETE

