Test string list ordering in IndexedDB.

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)
check that the expected order is the canonical JS sort order:
sorted_order = expected_order.slice(); sorted_order.sort()
PASS areArraysEqual(sorted_order, expected_order) is true

Object stores:
db.createObjectStore("𝄞")
db.createObjectStore("�")
db.createObjectStore("Ā")
db.createObjectStore("က")
db.createObjectStore("á")
db.createObjectStore("ÿ")
db.createObjectStore("Á")
db.createObjectStore("à")
db.createObjectStore("")
db.createObjectStore("À")
db.createObjectStore("a")
db.createObjectStore("b")
db.createObjectStore("A")
db.createObjectStore("B")
db.createObjectStore("0")
db.createObjectStore("1")
db.createObjectStore("\u0000")
db.createObjectStore("")
PASS areArraysEqual(db.objectStoreNames, expected_order) is true

Indexes:
store = db.createObjectStore('store')
store.createIndex("𝄞", 'keyPath')
store.createIndex("�", 'keyPath')
store.createIndex("Ā", 'keyPath')
store.createIndex("က", 'keyPath')
store.createIndex("á", 'keyPath')
store.createIndex("ÿ", 'keyPath')
store.createIndex("Á", 'keyPath')
store.createIndex("à", 'keyPath')
store.createIndex("", 'keyPath')
store.createIndex("À", 'keyPath')
store.createIndex("a", 'keyPath')
store.createIndex("b", 'keyPath')
store.createIndex("A", 'keyPath')
store.createIndex("B", 'keyPath')
store.createIndex("0", 'keyPath')
store.createIndex("1", 'keyPath')
store.createIndex("\u0000", 'keyPath')
store.createIndex("", 'keyPath')
PASS areArraysEqual(store.indexNames, expected_order) is true
PASS successfullyParsed is true

TEST COMPLETE

