Modified: trunk/LayoutTests/ChangeLog (88664 => 88665)
--- trunk/LayoutTests/ChangeLog 2011-06-13 18:50:55 UTC (rev 88664)
+++ trunk/LayoutTests/ChangeLog 2011-06-13 18:53:30 UTC (rev 88665)
@@ -1,3 +1,13 @@
+2011-06-13 Mark Pilgrim <pilg...@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ IndexedDB test: complex keyPaths
+ https://bugs.webkit.org/show_bug.cgi?id=62468
+
+ * storage/indexeddb/keyPath-expected.txt: Added.
+ * storage/indexeddb/keyPath.html: Added.
+
2011-06-13 Dirk Schulze <k...@webkit.org>
Reviewed by Nikolas Zimmermann.
Added: trunk/LayoutTests/storage/indexeddb/keyPath-expected.txt (0 => 88665)
--- trunk/LayoutTests/storage/indexeddb/keyPath-expected.txt (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/keyPath-expected.txt 2011-06-13 18:53:30 UTC (rev 88665)
@@ -0,0 +1,76 @@
+Test IndexedDB keyPaths
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;
+PASS indexedDB == null is false
+IDBDatabaseException = window.IDBDatabaseException || window.webkitIDBDatabaseException;
+PASS IDBDatabaseException == null is false
+IDBCursor = window.IDBCursor || window.webkitIDBCursor;
+PASS IDBCursor == null is false
+IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
+PASS IDBKeyRange == null is false
+indexedDB.open(name, description)
+db = event.target.result
+request = db.setVersion('1')
+
+testing simple identifier
+Deleted all object stores.
+objectStore = db.createObjectStore(testData[nextToOpen].name, {keyPath: testData[nextToOpen].keyPath});
+result = objectStore.add(testData[nextToOpen].value);
+result = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is testData[nextToOpen].key
+
+testing nested identifiers
+Deleted all object stores.
+objectStore = db.createObjectStore(testData[nextToOpen].name, {keyPath: testData[nextToOpen].keyPath});
+result = objectStore.add(testData[nextToOpen].value);
+result = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is testData[nextToOpen].key
+
+testing nested identifiers with distractions
+Deleted all object stores.
+objectStore = db.createObjectStore(testData[nextToOpen].name, {keyPath: testData[nextToOpen].keyPath});
+result = objectStore.add(testData[nextToOpen].value);
+result = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is testData[nextToOpen].key
+
+testing simple array
+Deleted all object stores.
+objectStore = db.createObjectStore(testData[nextToOpen].name, {keyPath: testData[nextToOpen].keyPath});
+result = objectStore.add(testData[nextToOpen].value);
+result = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is testData[nextToOpen].key
+
+testing nested array
+Deleted all object stores.
+objectStore = db.createObjectStore(testData[nextToOpen].name, {keyPath: testData[nextToOpen].keyPath});
+result = objectStore.add(testData[nextToOpen].value);
+result = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is testData[nextToOpen].key
+
+testing array with distractions
+Deleted all object stores.
+objectStore = db.createObjectStore(testData[nextToOpen].name, {keyPath: testData[nextToOpen].keyPath});
+result = objectStore.add(testData[nextToOpen].value);
+result = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is testData[nextToOpen].key
+
+testing mixed identifiers and arrays
+Deleted all object stores.
+objectStore = db.createObjectStore(testData[nextToOpen].name, {keyPath: testData[nextToOpen].keyPath});
+result = objectStore.add(testData[nextToOpen].value);
+result = objectStore.openCursor();
+cursor = event.target.result;
+PASS cursor.key is testData[nextToOpen].key
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/storage/indexeddb/keyPath.html (0 => 88665)
--- trunk/LayoutTests/storage/indexeddb/keyPath.html (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/keyPath.html 2011-06-13 18:53:30 UTC (rev 88665)
@@ -0,0 +1,117 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="stylesheet" href=""
+<script src=""
+<script src=""
+<script src=""
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test IndexedDB keyPaths");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ indexedDB = evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
+ shouldBeFalse("indexedDB == null");
+ IDBDatabaseException = evalAndLog("IDBDatabaseException = window.IDBDatabaseException || window.webkitIDBDatabaseException;");
+ shouldBeFalse("IDBDatabaseException == null");
+ IDBCursor = evalAndLog("IDBCursor = window.IDBCursor || window.webkitIDBCursor;");
+ shouldBeFalse("IDBCursor == null");
+ IDBKeyRange = evalAndLog("IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;");
+ shouldBeFalse("IDBKeyRange == null");
+
+ name = window.location.pathname;
+ description = "My Test Database";
+ request = evalAndLog("indexedDB.open(name, description)");
+ request._onsuccess_ = openSuccess;
+ request._onerror_ = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ db = evalAndLog("db = event.target.result");
+
+ request = evalAndLog("request = db.setVersion('1')");
+
+ testData = [{ name: "simple identifier",
+ value: {id:42},
+ keyPath: "id",
+ key: 42 },
+ { name: "nested identifiers",
+ value: {outer:{inner:42}},
+ keyPath: "outer.inner",
+ key: 42 },
+ { name: "nested identifiers with distractions",
+ value: {outer:{inner:42}, inner:{outer:41}},
+ keyPath: "outer.inner",
+ key: 42 },
+ { name: "simple array",
+ value: {outer:[42]},
+ keyPath: "outer[0]",
+ key: 42 },
+ { name: "nested array",
+ value: {outer:[[41,42],[40,39]]},
+ keyPath: "outer[0][1]",
+ key: 42 },
+ { name: "array with distractions",
+ value: {outer:[42, {outer:41}]},
+ keyPath: "outer[0]",
+ key: 42 },
+ { name: "mixed identifiers and arrays",
+ value: {outer:[41, {inner:42}]},
+ keyPath: "outer[1].inner",
+ key: 42 },
+ ];
+ nextToOpen = 0;
+ request._onsuccess_ = createAndPopulateObjectStore;
+ request._onerror_ = unexpectedErrorCallback;
+}
+
+function createAndPopulateObjectStore()
+{
+ debug("");
+ debug("testing " + testData[nextToOpen].name);
+
+ deleteAllObjectStores(db);
+
+ objectStore = evalAndLog("objectStore = db.createObjectStore(testData[nextToOpen].name, {keyPath: testData[nextToOpen].keyPath});");
+ result = evalAndLog("result = objectStore.add(testData[nextToOpen].value);");
+ result._onerror_ = unexpectedErrorCallback;
+ result._onsuccess_ = openCursor;
+}
+
+function openCursor()
+{
+ result = evalAndLog("result = objectStore.openCursor();");
+ result._onerror_ = unexpectedErrorCallback;
+ result._onsuccess_ = checkCursor;
+}
+
+function checkCursor()
+{
+ cursor = evalAndLog("cursor = event.target.result;");
+ if (cursor) {
+ shouldBe("cursor.key", "testData[nextToOpen].key");
+ } else {
+ testFailed("cursor is null");
+ }
+ if (++nextToOpen < testData.length) {
+ createAndPopulateObjectStore();
+ } else {
+ done();
+ }
+}
+
+var successfullyParsed = true;
+
+test();
+
+</script>
+</body>
+</html>