Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/external/wpt/IndexedDB/keygenerator-inject.html |
| diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/keygenerator-inject.html b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/keygenerator-inject.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cb8c7f686aa6cd3fec80707162c7d71ffc5351f6 |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/keygenerator-inject.html |
| @@ -0,0 +1,94 @@ |
| +<!DOCTYPE html> |
|
pwnall
2017/03/07 19:42:41
Nit: This test doesn't look related to the commit
jsbell
2017/03/07 20:27:57
Agreed, it's unrelated. Added a note to the CL des
|
| +<meta charset="utf-8"> |
| +<title>Key Generator behavior with explicit keys and value injection</title> |
| +<link rel=help href="https://w3c.github.io/IndexedDB/#inject-key-into-value"> |
| +<script src="/resources/testharness.js"></script> |
| +<script src="/resources/testharnessreport.js"></script> |
| +<script src="support.js"></script> |
| +<script> |
| + |
| +indexeddb_test( |
| + (t, db) => { |
| + db.createObjectStore('store', {autoIncrement: true, keyPath: 'id'}); |
| + }, |
| + (t, db) => { |
| + const tx = db.transaction('store', 'readwrite'); |
| + t.onabort = t.unreached_func('transaction should not abort'); |
| + |
| + const store = tx.objectStore('store'); |
| + |
| + store.put({name: 'a'}).onsuccess = t.step_func(e => { |
| + const key = e.target.result; |
| + assert_equals(key, 1, 'Key generator initial value should be 1'); |
| + store.get(key).onsuccess = t.step_func(e => { |
| + const value = e.target.result; |
| + assert_equals(typeof value, 'object', 'Result should be object'); |
| + assert_equals(value.name, 'a', 'Result should have name property'); |
| + assert_equals(value.id, key, 'Key should be injected'); |
| + t.done(); |
| + }); |
| + }); |
| + }, |
| + 'Key is injected into value - simple path'); |
|
pwnall
2017/03/07 19:42:41
How about single-segment key path and multi-segmen
jsbell
2017/03/07 20:27:57
Done.
|
| + |
| +indexeddb_test( |
| + (t, db) => { |
| + db.createObjectStore('store', {autoIncrement: true, keyPath: 'a.b.id'}); |
| + }, |
| + (t, db) => { |
| + const tx = db.transaction('store', 'readwrite'); |
| + t.onabort = t.unreached_func('transaction should not abort'); |
| + |
| + const store = tx.objectStore('store'); |
| + |
| + store.put({name: 'a'}).onsuccess = t.step_func(e => { |
| + const key = e.target.result; |
| + assert_equals(key, 1, 'Key generator initial value should be 1'); |
| + store.get(key).onsuccess = t.step_func(e => { |
| + const value = e.target.result; |
| + assert_equals(typeof value, 'object', 'Result should be object'); |
| + assert_equals(value.name, 'a', 'Result should have name property'); |
| + assert_equals(value.a.b.id, key, 'Key should be injected'); |
| + t.done(); |
| + }); |
| + }); |
| + }, |
| + 'Key is injected into value - complex path'); |
| + |
|
pwnall
2017/03/07 19:42:41
Would it make sense to have a test with store.put(
jsbell
2017/03/07 20:27:57
Good idea. Done.
|
| +indexeddb_test( |
| + (t, db) => { |
| + db.createObjectStore('store', {autoIncrement: true, keyPath: 'id'}); |
| + }, |
| + (t, db) => { |
| + const tx = db.transaction('store', 'readwrite'); |
| + const store = tx.objectStore('store'); |
| + |
| + assert_throws('DataError', () => { |
| + store.put(123); |
| + }, 'Key path should be checked against value'); |
| + |
| + t.done(); |
| + }, |
| + 'put() throws if key cannot be injected - simple path'); |
| + |
| +indexeddb_test( |
| + (t, db) => { |
| + db.createObjectStore('store', {autoIncrement: true, keyPath: 'a.b.id'}); |
| + }, |
| + (t, db) => { |
| + const tx = db.transaction('store', 'readwrite'); |
| + const store = tx.objectStore('store'); |
| + |
| + assert_throws('DataError', () => { |
| + store.put({a: 123}); |
| + }, 'Key path should be checked against value'); |
| + |
| + assert_throws('DataError', () => { |
| + store.put({a: {b: 123} }); |
| + }, 'Key path should be checked against value'); |
| + |
| + t.done(); |
| + }, |
| + 'put() throws if key cannot be injected - complex path'); |
| + |
| +</script> |