4 <script src="../../fast/js/resources/js-test-pre.js"></script>
5 <script src="resources/shared.js"></script>
8 <p id="description"></p>
9 <div id="console"></div>
12 description("Test IndexedDB odd value datatypes");
13 if (window.layoutTestController)
14 layoutTestController.waitUntilDone();
18 indexedDB = evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
19 shouldBeFalse("indexedDB == null");
20 IDBDatabaseException = evalAndLog("IDBDatabaseException = window.IDBDatabaseException || window.webkitIDBDatabaseException;");
21 shouldBeFalse("IDBDatabaseException == null");
22 IDBCursor = evalAndLog("IDBCursor = window.IDBCursor || window.webkitIDBCursor;");
23 shouldBeFalse("IDBCursor == null");
24 IDBKeyRange = evalAndLog("IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;");
25 shouldBeFalse("IDBKeyRange == null");
27 testData = [{ description: 'null', name: '\u0000' },
28 { description: 'faihu', name: '\ud800\udf46' },
29 { description: 'unpaired surrogate', name: '\ud800' },
30 { description: 'fffe', name: '\ufffe' },
31 { description: 'ffff', name: '\uffff' },
32 { description: 'line separator', name: '\u2028' }
38 function openNextDatabase()
40 debug("opening a database named " + testData[nextToOpen].description);
41 request = evalAndLog("indexedDB.open(testData[nextToOpen].name, testData[nextToOpen].description)");
42 request.onerror = unexpectedErrorCallback;
43 request.onsuccess = openSuccess;
46 function openSuccess()
48 db = evalAndLog("db = event.target.result");
49 request = evalAndLog("request = db.setVersion('1')");
50 request.onsuccess = addAKey;
51 request.onerror = unexpectedErrorCallback;
56 deleteAllObjectStores(db);
58 objectStore = evalAndLog("objectStore = db.createObjectStore(testData[nextToOpen].name);");
59 key = evalAndLog("key = testData[nextToOpen].name");
60 request = evalAndLog("request = objectStore.add(key, key);");
61 request.onsuccess = closeDatabase;
62 request.onerror = unexpectedErrorCallback;
65 function closeDatabase()
67 evalAndLog("db.close()");
69 if (++nextToOpen < testData.length) {
77 function verifyNextDatabase()
79 debug("reopening a database named " + testData[nextToOpen].description);
80 request = evalAndLog("indexedDB.open(testData[nextToOpen].name, testData[nextToOpen].description)");
81 request.onerror = unexpectedErrorCallback;
82 request.onsuccess = openSuccess2;
85 function openSuccess2()
87 db = evalAndLog("db = event.target.result");
88 request = evalAndLog("request = db.setVersion('1')");
89 request.onerror = unexpectedErrorCallback;
90 request.onsuccess = getAKey;
95 trans = evalAndLog("trans = event.target.result");
96 objectStore = evalAndLog("objectStore = trans.objectStore(testData[nextToOpen].name);");
97 key = evalAndLog("key = testData[nextToOpen].name");
98 request = evalAndLog("request = objectStore.openCursor();");
99 request.onerror = unexpectedErrorCallback;
100 request.onsuccess = openCursorSuccess;
103 function openCursorSuccess()
105 cursor = evalAndLog("cursor = event.target.result;");
106 shouldBe("cursor.key", "testData[nextToOpen].name");
107 shouldBe("cursor.value", "testData[nextToOpen].name");
108 if (++nextToOpen < testData.length) {
110 verifyNextDatabase();