idbcursor-direction-index.any.js (1727B)
1 // META: global=window,worker 2 // META: title=IDBCursor direction - index 3 // META: script=resources/support.js 4 5 // Spec: https://w3c.github.io/IndexedDB/#cursor-iteration-operation 6 7 'use strict'; 8 9 let records = ['Alice', 'Bob', 'Bob', 'Greg']; 10 let cases = [ 11 {dir: 'next', expect: ['Alice:0', 'Bob:1', 'Bob:2', 'Greg:3']}, 12 {dir: 'prev', expect: ['Greg:3', 'Bob:2', 'Bob:1', 'Alice:0']}, 13 {dir: 'nextunique', expect: ['Alice:0', 'Bob:1', 'Greg:3']}, 14 {dir: 'prevunique', expect: ['Greg:3', 'Bob:1', 'Alice:0']}, 15 ]; 16 17 cases.forEach(function(testcase) { 18 let dir = testcase.dir; 19 let expect = testcase.expect; 20 indexeddb_test( 21 function(t, db, tx) { 22 let objStore = db.createObjectStore('test'); 23 objStore.createIndex('idx', 'name'); 24 25 for (let i = 0; i < records.length; i++) 26 objStore.add({name: records[i]}, i); 27 }, 28 function(t, db) { 29 let count = 0; 30 let rq = db.transaction('test', 'readonly') 31 .objectStore('test') 32 .index('idx') 33 .openCursor(undefined, dir); 34 rq.onsuccess = t.step_func(function(e) { 35 let cursor = e.target.result; 36 if (!cursor) { 37 assert_equals(count, expect.length, 'cursor runs'); 38 t.done(); 39 } 40 assert_equals( 41 cursor.value.name + ':' + cursor.primaryKey, expect[count], 42 'cursor.value'); 43 count++; 44 cursor.continue(); 45 }); 46 rq.onerror = t.step_func(function(e) { 47 e.preventDefault(); 48 e.stopPropagation(); 49 assert_unreached('rq.onerror - ' + e.message); 50 }); 51 }, 52 'IDBCursor direction - index - ' + dir); 53 });