|  | // META: title=IndexedDB string list ordering | 
|  | // META: global=window,worker | 
|  | // META: script=resources/support.js | 
|  |  | 
|  | // Spec: https://w3c.github.io/IndexedDB/#dom-idbdatabase-objectstorenames | 
|  |  | 
|  | 'use strict'; | 
|  |  | 
|  | async_test(t => { | 
|  | let expectedOrder = [ | 
|  | '', '\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) | 
|  | ]; | 
|  |  | 
|  | let i; | 
|  | let tmp; | 
|  | const permutedOrder = expectedOrder.slice(); | 
|  | permutedOrder.reverse(); | 
|  | for (i = 0; i < permutedOrder.length - 2; i += 2) { | 
|  | tmp = permutedOrder[i]; | 
|  | permutedOrder[i] = permutedOrder[i + 1]; | 
|  | permutedOrder[i + 1] = tmp; | 
|  | } | 
|  |  | 
|  | let objStore; | 
|  | let db; | 
|  |  | 
|  | // Check that the expected order is the canonical JS sort order. | 
|  | const sortedOrder = expectedOrder.slice(); | 
|  | sortedOrder.sort(); | 
|  | assert_array_equals(sortedOrder, expectedOrder); | 
|  |  | 
|  | const request = createdb(t); | 
|  |  | 
|  | request.onupgradeneeded = t.step_func((e) => { | 
|  | db = e.target.result; | 
|  |  | 
|  | // Object stores. | 
|  | for (let i = 0; i < permutedOrder.length; i++) { | 
|  | objStore = db.createObjectStore(permutedOrder[i]); | 
|  | } | 
|  | assert_array_equals(db.objectStoreNames, expectedOrder); | 
|  |  | 
|  | // Indexes. | 
|  | for (let i = 0; i < permutedOrder.length; i++) { | 
|  | objStore.createIndex(permutedOrder[i], 'keyPath'); | 
|  | } | 
|  | assert_array_equals(objStore.indexNames, expectedOrder); | 
|  | }); | 
|  |  | 
|  | request.onsuccess = t.step_func((e) => { | 
|  | // Object stores. | 
|  | assert_array_equals(db.objectStoreNames, expectedOrder); | 
|  | // Indexes. | 
|  | assert_array_equals(objStore.indexNames, expectedOrder); | 
|  | t.done(); | 
|  | }); | 
|  | }, 'Test string list ordering in IndexedDB'); |