idbcursor-direction-objectstore.any.js (1615B)
1 // META: global=window,worker 2 // META: title=IDBCursor direction - object store 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', 'Greg']; 10 let directions = ['next', 'prev', 'nextunique', 'prevunique']; 11 let cases = [ 12 {dir: 'next', expect: ['Alice', 'Bob', 'Greg']}, 13 {dir: 'prev', expect: ['Greg', 'Bob', 'Alice']}, 14 {dir: 'nextunique', expect: ['Alice', 'Bob', 'Greg']}, 15 {dir: 'prevunique', expect: ['Greg', 'Bob', 'Alice']}, 16 ]; 17 18 cases.forEach(function(testcase) { 19 let dir = testcase.dir; 20 let expect = testcase.expect; 21 indexeddb_test( 22 function(t, db, tx) { 23 let objStore = db.createObjectStore('test'); 24 for (let i = 0; i < records.length; i++) 25 objStore.add(records[i], records[i]); 26 }, 27 function(t, db) { 28 let count = 0; 29 let rq = db.transaction('test', 'readonly') 30 .objectStore('test') 31 .openCursor(undefined, dir); 32 rq.onsuccess = t.step_func(function(e) { 33 let cursor = e.target.result; 34 if (!cursor) { 35 assert_equals(count, expect.length, 'cursor runs'); 36 t.done(); 37 } 38 assert_equals(cursor.value, expect[count], 'cursor.value'); 39 count++; 40 cursor.continue(); 41 }); 42 rq.onerror = t.step_func(function(e) { 43 e.preventDefault(); 44 e.stopPropagation(); 45 assert_unreached('rq.onerror - ' + e.message); 46 }); 47 }, 48 'IDBCursor direction - object store - ' + dir); 49 });