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');