Test IndexedDB odd value datatypes

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;

Deleting all the databases...
opening a database named null
indexedDB.open(testData[nextToOpen].name, 1)
objectStore = db.createObjectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.add(key, key);
db.close()

opening a database named faihu
indexedDB.open(testData[nextToOpen].name, 1)
objectStore = db.createObjectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.add(key, key);
db.close()

opening a database named unpaired surrogate
indexedDB.open(testData[nextToOpen].name, 1)
objectStore = db.createObjectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.add(key, key);
db.close()

opening a database named fffe
indexedDB.open(testData[nextToOpen].name, 1)
objectStore = db.createObjectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.add(key, key);
db.close()

opening a database named ffff
indexedDB.open(testData[nextToOpen].name, 1)
objectStore = db.createObjectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.add(key, key);
db.close()

opening a database named line separator
indexedDB.open(testData[nextToOpen].name, 1)
objectStore = db.createObjectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.add(key, key);
db.close()

reopening a database named null
indexedDB.open(testData[nextToOpen].name, 2)
trans = event.target.transaction
objectStore = trans.objectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.openCursor();
cursor = event.target.result;
PASS cursor.key is testData[nextToOpen].name
PASS cursor.value is testData[nextToOpen].name

reopening a database named faihu
indexedDB.open(testData[nextToOpen].name, 2)
trans = event.target.transaction
objectStore = trans.objectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.openCursor();
cursor = event.target.result;
PASS cursor.key is testData[nextToOpen].name
PASS cursor.value is testData[nextToOpen].name

reopening a database named unpaired surrogate
indexedDB.open(testData[nextToOpen].name, 2)
trans = event.target.transaction
objectStore = trans.objectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.openCursor();
cursor = event.target.result;
PASS cursor.key is testData[nextToOpen].name
PASS cursor.value is testData[nextToOpen].name

reopening a database named fffe
indexedDB.open(testData[nextToOpen].name, 2)
trans = event.target.transaction
objectStore = trans.objectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.openCursor();
cursor = event.target.result;
PASS cursor.key is testData[nextToOpen].name
PASS cursor.value is testData[nextToOpen].name

reopening a database named ffff
indexedDB.open(testData[nextToOpen].name, 2)
trans = event.target.transaction
objectStore = trans.objectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.openCursor();
cursor = event.target.result;
PASS cursor.key is testData[nextToOpen].name
PASS cursor.value is testData[nextToOpen].name

reopening a database named line separator
indexedDB.open(testData[nextToOpen].name, 2)
trans = event.target.transaction
objectStore = trans.objectStore(testData[nextToOpen].name);
key = testData[nextToOpen].name
request = objectStore.openCursor();
cursor = event.target.result;
PASS cursor.key is testData[nextToOpen].name
PASS cursor.value is testData[nextToOpen].name
PASS successfullyParsed is true

TEST COMPLETE

