// META: global=window,worker // META: title=IDBCursor.direction // META: script=resources/support.js 'use strict'; function cursor_direction(constant, dir) { let db; let t = async_test('IDBCursor.direction - ' + dir); let expected = dir ? dir : 'next'; let open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { db = e.target.result; t.add_cleanup(function() { db.close(); indexedDB.deleteDatabase(db.name); }); let objStore = db.createObjectStore('test'); objStore.add('data', 'key'); }; open_rq.onsuccess = t.step_func(function(e) { let cursor_rq; let count = 0; let os = db.transaction('test', 'readonly').objectStore('test'); if (dir) cursor_rq = os.openCursor(undefined, dir); else cursor_rq = os.openCursor(); cursor_rq.onsuccess = t.step_func(function(e) { let cursor = e.target.result; assert_equals(cursor.direction, constant, 'direction constant'); assert_equals(cursor.direction, expected, 'direction'); assert_readonly(cursor, 'direction'); count++; if (count >= 2) t.done(); }); let cursor_rq2 = db.transaction('test', 'readonly') .objectStore('test') .openCursor(undefined, constant); cursor_rq2.onsuccess = t.step_func(function(e) { let cursor = e.target.result; assert_equals( cursor.direction, constant, 'direction constant (second try)'); assert_equals(cursor.direction, expected, 'direction (second try)'); assert_readonly(cursor, 'direction'); count++; if (count >= 2) t.done(); }); }); } cursor_direction('next'); cursor_direction('next', 'next'); cursor_direction('prev', 'prev'); cursor_direction('nextunique', 'nextunique'); cursor_direction('prevunique', 'prevunique');