• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
4<script src="../../fast/js/resources/js-test-pre.js"></script>
5<script src="../../fast/js/resources/js-test-post-function.js"></script>
6<script src="resources/shared.js"></script>
7</head>
8<body>
9<p id="description"></p>
10<div id="console"></div>
11<script>
12
13description("Test IndexedDB's IDBObjectStore auto-increment feature.");
14if (window.layoutTestController)
15    layoutTestController.waitUntilDone();
16
17function test()
18{
19    request = evalAndLog("webkitIndexedDB.open('objectstore-autoincrement')");
20    request.onsuccess = openSuccess;
21    request.onerror = unexpectedErrorCallback;
22}
23
24function openSuccess()
25{
26    debug("openSuccess():");
27    window.db = evalAndLog("db = event.target.result");
28
29    request = evalAndLog("db.setVersion('new version')");
30    request.onsuccess = setVersionSuccess;
31    request.onerror = unexpectedErrorCallback;
32}
33
34function setVersionSuccess()
35{
36    debug("setVersionSuccess():");
37    window.trans = evalAndLog("trans = event.target.result");
38    shouldBeTrue("trans !== null");
39    trans.onabort = unexpectedAbortCallback;
40    trans.oncomplete = setVersionCompleted;
41
42    deleteAllObjectStores(db);
43
44    debug("createObjectStore():");
45    window.store = evalAndLog("store = db.createObjectStore('StoreWithKeyPath', {keyPath: 'id', autoIncrement: true})");
46    evalAndLog("db.createObjectStore('StoreWithAutoIncrement', {autoIncrement: true})");
47    evalAndLog("db.createObjectStore('PlainOldStore', {autoIncrement: false})");
48    var storeNames = evalAndLog("storeNames = db.objectStoreNames");
49
50    shouldBeEqualToString("store.name", "StoreWithKeyPath");
51    shouldBe("store.keyPath", "'id'");
52    shouldBe("storeNames.contains('StoreWithKeyPath')", "true");
53    shouldBe("storeNames.contains('StoreWithAutoIncrement')", "true");
54    shouldBe("storeNames.contains('PlainOldStore')", "true");
55    shouldBe("storeNames.length", "3");
56
57    // Let the setVersion transaction complete.
58}
59
60function setVersionCompleted()
61{
62    debug("setVersionCompleted():");
63
64    window.trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
65    trans.onabort = unexpectedAbortCallback;
66    trans.oncomplete = done;
67
68    window.store = evalAndLog("store = trans.objectStore('StoreWithKeyPath')");
69
70    debug("Insert into object store with auto increment and key path, with key in the object.");
71    request = evalAndLog("store.add({name: 'Jeffersson', number: '7010', id: 3})");
72    request.onsuccess = addJefferssonSuccess;
73    request.onerror = unexpectedErrorCallback;
74}
75
76function addJefferssonSuccess()
77{
78    debug("addJefferssonSuccess():");
79    shouldBe("event.target.result", "3");
80
81    debug("Insert into object store with auto increment and key path, without key in the object.");
82    request = evalAndLog("store.add({name: 'Lincoln', number: '7012'})");
83    request.onsuccess = addLincolnWithInjectKeySuccess;
84    request.onerror = unexpectedErrorCallback;
85}
86
87function addLincolnWithInjectKeySuccess()
88{
89    debug("addLincolnWithInjectKeySuccess():");
90    shouldBe("event.target.result", "4");
91
92    result = evalAndLog("store.get(4)");
93    result.onsuccess = getLincolnAfterInjectedKeySuccess;
94    result.onerror = unexpectedErrorCallback;
95}
96
97function getLincolnAfterInjectedKeySuccess()
98{
99    debug("getLincolnAfterInjectedKeySuccess():");
100    shouldBeEqualToString("event.target.result.name", "Lincoln");
101    shouldBeEqualToString("event.target.result.number", "7012");
102    shouldBe("event.target.result.id", "4");
103
104    window.store = evalAndLog("store = trans.objectStore('StoreWithAutoIncrement')");
105    debug("Insert into object store with key gen using explicit key");
106    request = evalAndLog("store.add({name: 'Lincoln', number: '7012'}, 5)");
107    request.onsuccess = addLincolnWithExplicitKeySuccess;
108    request.onerror = unexpectedErrorCallback;
109}
110
111function addLincolnWithExplicitKeySuccess()
112{
113    debug("addLincolnWithExplicitKeySuccess():");
114    shouldBe("event.target.result", "5");
115
116    request = evalAndLog("store.get(5)");
117    request.onsuccess = getLincolnSuccess;
118    request.onerror = unexpectedErrorCallback;
119}
120
121function getLincolnSuccess()
122{
123    debug("getLincolnSuccess():");
124    shouldBeEqualToString("event.target.result.name", "Lincoln");
125    shouldBeEqualToString("event.target.result.number", "7012");
126
127    request = evalAndLog("store.put({name: 'Abraham', number: '2107'})");
128    request.onsuccess = putAbrahamSuccess;
129    request.onerror = unexpectedErrorCallback;
130}
131
132function putAbrahamSuccess()
133{
134    debug("putAbrahamSuccess():");
135    shouldBe("event.target.result", "6");
136
137    request = evalAndLog("store.get(6)");
138    request.onsuccess = getAbrahamSuccess;
139    request.onerror = unexpectedErrorCallback;
140}
141
142function getAbrahamSuccess()
143{
144    debug("getAbrahamSuccess():");
145    shouldBeEqualToString("event.target.result.name", "Abraham");
146    shouldBeEqualToString("event.target.result.number", "2107");
147
148    window.store = evalAndLog("store = trans.objectStore('PlainOldStore')");
149    debug("Try adding with no key to object store without auto increment.");
150    request = evalAndLog("store.add({name: 'Adam'})");
151    request.onsuccess = unexpectedSuccessCallback;
152    request.onerror = addAdamError;
153}
154
155function addAdamError()
156{
157    debug("addAdamError():");
158    shouldBe("event.target.errorCode", "webkitIDBDatabaseException.DATA_ERR");
159
160    evalAndLog("event.preventDefault()");
161
162    request = evalAndLog("store.add({name: 'Adam'}, 1)");
163    request.onsuccess = addAdamSuccess;
164    request.onerror = unexpectedErrorCallback;
165}
166
167function addAdamSuccess()
168{
169    debug("addAdamSuccess():");
170    shouldBe("event.target.result", "1");
171}
172
173test();
174
175var successfullyParsed = true;
176
177</script>
178</body>
179</html>
180