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..fcdd7d6f4a6563be0c66361be515d1e670f76ca0 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/keygenerator-inject.html |
@@ -0,0 +1,119 @@ |
+<!DOCTYPE html> |
+<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: 'n'}).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, 'n', 'Result should have name property'); |
+ assert_equals(value.id, key, 'Key should be injected'); |
+ t.done(); |
+ }); |
+ }); |
+ }, |
+ 'Key is injected into value - single segment path'); |
+ |
+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: 'n'}).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, 'n', 'Result should have name property'); |
+ assert_equals(value.a.b.id, key, 'Key should be injected'); |
+ t.done(); |
+ }); |
+ }); |
+ }, |
+ 'Key is injected into value - multi-segment path'); |
+ |
+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: 'n1', b: {name: 'n2'}}).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, 'n1', 'Result should have name property'); |
+ assert_equals(value.b.name, 'n2', 'Result should have name property'); |
+ assert_equals(value.a.b.id, key, 'Key should be injected'); |
+ t.done(); |
+ }); |
+ }); |
+ }, |
+ 'Key is injected into value - multi-segment path, partially populated'); |
+ |
+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 - single segment 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 - multi-segment path'); |
+ |
+</script> |