Original test: http://mxr.mozilla.org/mozilla2.0/source/dom/indexedDB/test/test_indexes.html?force=1 This is an adaptation of part of a test in Mozilla's IndexedDB test suite. It creates an object store with one record, then creates a unique index on one of the keys, then attempts to add another record with a duplicate key (which should violate that unique index). Mozilla correctly throws a CONSTAINT_ERR, but WebKit does not throw.
Created attachment 93328 [details] test case
The attached test is flawed - it's assuming that the index constraints are enforced synchronously during the add() operation and result in an exception being thrown. Per the spec, with the async API (which is what the test is using) the constraint is enforced asynchronously and the uniqueness constraint error is reported via the request object (i.e. the onerror handler will fire). The test could be corrected with: 73d72 < evalAndExpectException("objectStore.add({ name: 'Bob', height: 62, weight: 170 }, '237-23-7738');", "IDBDatabaseException.CONSTRAINT_ERR"); 75c74,76 < done(); --- > req = evalAndLog("req = objectStore.add({ name: 'Bob', height: 62, weight: 170 }, '237-23-7738');", "IDBDatabaseException.CONSTRAINT_ERR"); > req.onsuccess = unexpectedSuccessCallback; > req.onerror = done; ... but WebKit already has a test for this: LayoutTests/storage/indexeddb/index-unique.html