chromium/third_party/blink/web_tests/storage/indexeddb/resources/list-ordering.js

if (this.importScripts) {
    importScripts('../../../resources/js-test.js');
    importScripts('shared.js');
}

description("Test string list ordering in IndexedDB.");

var expected_order = [
  "",
  "\x00", // 'NULL' (U+0000)
  "0",
  "1",
  "A",
  "B",
  "a",
  "b",
  "\x7F", // 'DELETE' (U+007F)
  "\xC0", // 'LATIN CAPITAL LETTER A WITH GRAVE' (U+00C0)
  "\xC1", // 'LATIN CAPITAL LETTER A WITH ACUTE' (U+00C1)
  "\xE0", // 'LATIN SMALL LETTER A WITH GRAVE' (U+00E0)
  "\xE1", // 'LATIN SMALL LETTER A WITH ACUTE' (U+00E1)
  "\xFF", // 'LATIN SMALL LETTER Y WITH DIAERESIS' (U+00FF)
  "\u0100", // 'LATIN CAPITAL LETTER A WITH MACRON' (U+0100)
  "\u1000", // 'MYANMAR LETTER KA' (U+1000)
  "\uD834\uDD1E", // 'MUSICAL SYMBOL G-CLEF' (U+1D11E), UTF-16 surrogate pairs
  "\uFFFD" // 'REPLACEMENT CHARACTER' (U+FFFD)
];
var i, tmp, permuted_order = expected_order.slice(); permuted_order.reverse();
for (i = 0; i < permuted_order.length - 2; i += 2) {
    tmp = permuted_order[i];
    permuted_order[i] = permuted_order[i + 1];
    permuted_order[i + 1] = tmp;
}

indexedDBTest(prepareDatabase, finishJSTest);
function prepareDatabase()
{
    db = event.target.result;
    event.target.transaction.onabort = unexpectedAbortCallback;
    debug("check that the expected order is the canonical JS sort order:");
    evalAndLog("sorted_order = expected_order.slice(); sorted_order.sort()");
    shouldBeTrue("areArraysEqual(sorted_order, expected_order)");

    debug("");
    debug("Object stores:");
    permuted_order.forEach(function (name) {
        evalAndLog("db.createObjectStore(" + JSON.stringify(name) +")");
    });

    shouldBeTrue("areArraysEqual(db.objectStoreNames, expected_order)");

    debug("");
    debug("Indexes:");
    store = evalAndLog("store = db.createObjectStore('store')");
    permuted_order.forEach(function (name) {
        evalAndLog("store.createIndex(" + JSON.stringify(name) +", 'keyPath')");
    });

    shouldBeTrue("areArraysEqual(store.indexNames, expected_order)");
}