tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

string-list-ordering.any.js (2256B)


      1 // META: title=IndexedDB string list ordering
      2 // META: global=window,worker
      3 // META: script=resources/support.js
      4 
      5 // Spec: https://w3c.github.io/IndexedDB/#dom-idbdatabase-objectstorenames
      6 
      7 'use strict';
      8 
      9 async_test(t => {
     10  let expectedOrder = [
     11    '', '\x00',                            // 'NULL' (U+0000)
     12    '0', '1', 'A', 'B', 'a', 'b', '\x7F',  // 'DELETE' (U+007F)
     13    '\xC0',          // 'LATIN CAPITAL LETTER A WITH GRAVE' (U+00C0)
     14    '\xC1',          // 'LATIN CAPITAL LETTER A WITH ACUTE' (U+00C1)
     15    '\xE0',          // 'LATIN SMALL LETTER A WITH GRAVE' (U+00E0)
     16    '\xE1',          // 'LATIN SMALL LETTER A WITH ACUTE' (U+00E1)
     17    '\xFF',          // 'LATIN SMALL LETTER Y WITH DIAERESIS' (U+00FF)
     18    '\u0100',        // 'LATIN CAPITAL LETTER A WITH MACRON' (U+0100)
     19    '\u1000',        // 'MYANMAR LETTER KA' (U+1000)
     20    '\uD834\uDD1E',  // 'MUSICAL SYMBOL G-CLEF' (U+1D11E), UTF-16 surrogate
     21                     // pairs
     22    '\uFFFD'         // 'REPLACEMENT CHARACTER' (U+FFFD)
     23  ];
     24 
     25  let i;
     26  let tmp;
     27  const permutedOrder = expectedOrder.slice();
     28  permutedOrder.reverse();
     29  for (i = 0; i < permutedOrder.length - 2; i += 2) {
     30    tmp = permutedOrder[i];
     31    permutedOrder[i] = permutedOrder[i + 1];
     32    permutedOrder[i + 1] = tmp;
     33  }
     34 
     35  let objStore;
     36  let db;
     37 
     38  // Check that the expected order is the canonical JS sort order.
     39  const sortedOrder = expectedOrder.slice();
     40  sortedOrder.sort();
     41  assert_array_equals(sortedOrder, expectedOrder);
     42 
     43  const request = createdb(t);
     44 
     45  request.onupgradeneeded = t.step_func((e) => {
     46    db = e.target.result;
     47 
     48    // Object stores.
     49    for (let i = 0; i < permutedOrder.length; i++) {
     50      objStore = db.createObjectStore(permutedOrder[i]);
     51    }
     52    assert_array_equals(db.objectStoreNames, expectedOrder);
     53 
     54    // Indexes.
     55    for (let i = 0; i < permutedOrder.length; i++) {
     56      objStore.createIndex(permutedOrder[i], 'keyPath');
     57    }
     58    assert_array_equals(objStore.indexNames, expectedOrder);
     59  });
     60 
     61  request.onsuccess = t.step_func((e) => {
     62    // Object stores.
     63    assert_array_equals(db.objectStoreNames, expectedOrder);
     64    // Indexes.
     65    assert_array_equals(objStore.indexNames, expectedOrder);
     66    t.done();
     67  });
     68 }, 'Test string list ordering in IndexedDB');