1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5function onCursor() 6{ 7 var cursor = event.target.result; 8 if (cursor === null) { 9 debug('Reached end of object cursor.'); 10 if (!gotObjectThroughCursor) { 11 fail('Did not get object through cursor.'); 12 return; 13 } 14 done(); 15 return; 16 } 17 18 debug('Got object through cursor.'); 19 shouldBe('event.target.result.key', '55'); 20 shouldBe('event.target.result.value.aValue', '"foo"'); 21 gotObjectThroughCursor = true; 22 23 cursor.continue(); 24} 25 26function onKeyCursor() 27{ 28 var cursor = event.target.result; 29 if (cursor === null) { 30 debug('Reached end of key cursor.'); 31 if (!gotKeyThroughCursor) { 32 fail('Did not get key through cursor.'); 33 return; 34 } 35 36 var request = index.openCursor(IDBKeyRange.only(55)); 37 request.onsuccess = onCursor; 38 request.onerror = unexpectedErrorCallback; 39 gotObjectThroughCursor = false; 40 return; 41 } 42 43 debug('Got key through cursor.'); 44 shouldBe('event.target.result.key', '55'); 45 shouldBe('event.target.result.primaryKey', '1'); 46 gotKeyThroughCursor = true; 47 48 cursor.continue(); 49} 50 51function getSuccess() 52{ 53 debug('Successfully got object through key in index.'); 54 55 shouldBe('event.target.result.aKey', '55'); 56 shouldBe('event.target.result.aValue', '"foo"'); 57 58 var request = index.openKeyCursor(IDBKeyRange.only(55)); 59 request.onsuccess = onKeyCursor; 60 request.onerror = unexpectedErrorCallback; 61 gotKeyThroughCursor = false; 62} 63 64function getKeySuccess() 65{ 66 debug('Successfully got key.'); 67 shouldBe('event.target.result', '1'); 68 69 var request = index.get(55); 70 request.onsuccess = getSuccess; 71 request.onerror = unexpectedErrorCallback; 72} 73 74function moreDataAdded() 75{ 76 debug('Successfully added more data.'); 77 78 var request = index.getKey(55); 79 request.onsuccess = getKeySuccess; 80 request.onerror = unexpectedErrorCallback; 81} 82 83function indexErrorExpected() 84{ 85 debug('Existing index triggered on error as expected.'); 86 87 var request = objectStore.put({'aKey': 55, 'aValue': 'foo'}, 1); 88 request.onsuccess = moreDataAdded; 89 request.onerror = unexpectedErrorCallback; 90} 91 92function indexSuccess() 93{ 94 debug('Index created successfully.'); 95 96 shouldBe("index.name", "'myIndex'"); 97 shouldBe("index.objectStore.name", "'test'"); 98 shouldBe("index.keyPath", "'aKey'"); 99 shouldBe("index.unique", "true"); 100 101 try { 102 request = objectStore.createIndex('myIndex', 'aKey', {unique: true}); 103 fail('Re-creating an index must throw an exception'); 104 } catch (e) { 105 indexErrorExpected(); 106 } 107} 108 109function createIndex(expect_error) 110{ 111 debug('Creating an index.'); 112 try { 113 window.index = objectStore.createIndex('myIndex', 'aKey', {unique: true}); 114 indexSuccess(); 115 } catch (e) { 116 unexpectedErrorCallback(); 117 } 118} 119 120function dataAddedSuccess() 121{ 122 debug('Data added'); 123 createIndex(false); 124} 125 126function populateObjectStore() 127{ 128 debug('Populating object store'); 129 db = event.target.result; 130 window.objectStore = db.createObjectStore('test'); 131 var myValue = {'aKey': 21, 'aValue': '!42'}; 132 var request = objectStore.add(myValue, 0); 133 request.onsuccess = dataAddedSuccess; 134 request.onerror = unexpectedErrorCallback; 135} 136 137function test() { 138 indexedDBTest(populateObjectStore); 139} 140 141