| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| var testDate = new Date("February 24, 1955 12:00:00"); |
| |
| function getByDateSuccess() |
| { |
| debug('Data retrieved by date key'); |
| |
| shouldBe("event.target.result", "'foo'"); |
| done(); |
| } |
| |
| function recordNotFound() |
| { |
| debug('Removed data can no longer be found'); |
| shouldBe("event.target.result", "undefined"); |
| |
| debug('Retrieving an index'); |
| shouldBe("objectStore.index('fname_index').name", "'fname_index'"); |
| |
| debug('Removing an index'); |
| try { |
| objectStore.deleteIndex('fname_index'); |
| } catch(e) { |
| fail(e); |
| } |
| |
| var request = transaction.objectStore('stuff').get(testDate); |
| request.onsuccess = getByDateSuccess; |
| request.onerror = unexpectedErrorCallback; |
| } |
| |
| function removeSuccess() |
| { |
| debug('Data removed'); |
| |
| var request = objectStore.get(1); |
| request.onsuccess = recordNotFound; |
| request.onerror = unexpectedSuccessCallback; |
| } |
| |
| function getSuccess() |
| { |
| debug('Data retrieved'); |
| |
| shouldBe("event.target.result.fname", "'John'"); |
| shouldBe("event.target.result.lname", "'Doe'"); |
| shouldBe("event.target.result.id", "1"); |
| |
| var request = objectStore.delete(1); |
| request.onsuccess = removeSuccess; |
| request.onerror = unexpectedErrorCallback; |
| } |
| |
| function moreDataAddedSuccess() |
| { |
| debug('More data added'); |
| |
| var request = objectStore.get(1); |
| request.onsuccess = getSuccess; |
| request.onerror = unexpectedErrorCallback; |
| } |
| |
| function addWithSameKeyFailed() |
| { |
| debug('Adding a record with same key failed'); |
| shouldBe("event.target.error.name", "'ConstraintError'"); |
| event.preventDefault(); |
| |
| var request = transaction.objectStore('stuff').add('foo', testDate); |
| request.onsuccess = moreDataAddedSuccess; |
| request.onerror = unexpectedErrorCallback; |
| } |
| |
| function dataAddedSuccess() |
| { |
| debug('Data added'); |
| |
| debug('Try to add employee with same id'); |
| var request = objectStore.add({fname: "Tom", lname: "Jones", id: 1}); |
| request.onsuccess = unexpectedSuccessCallback; |
| request.onerror = addWithSameKeyFailed; |
| } |
| |
| function populateObjectStore() |
| { |
| window.transaction = event.target.transaction; |
| db = event.target.result; |
| transaction.onabort = unexpectedAbortCallback; |
| debug('Populating object store'); |
| deleteAllObjectStores(db); |
| db.createObjectStore('stuff'); |
| window.objectStore = db.createObjectStore('employees', {keyPath: 'id'}); |
| shouldBe("objectStore.name", "'employees'"); |
| shouldBe("objectStore.keyPath", "'id'"); |
| |
| objectStore.createIndex('fname_index', 'fname'); |
| objectStore.createIndex('lname_index', 'fname'); |
| debug('Created indexes'); |
| shouldBe("objectStore.indexNames[0]", "'fname_index'"); |
| shouldBe("objectStore.indexNames[1]", "'lname_index'"); |
| |
| var request = objectStore.add({fname: "John", lname: "Doe", id: 1}); |
| request.onsuccess = dataAddedSuccess; |
| request.onerror = unexpectedErrorCallback; |
| } |
| |
| function test() { |
| indexedDBTest(populateObjectStore); |
| } |