| <!doctype html> | |
| <meta charset=utf-8> | |
| <title>IndexedDB: Special-cased identifiers in extracting keys from values (ES bindings)</title> | |
| <meta name="help" href="https://w3c.github.io/IndexedDB/#extract-key-from-value"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="support.js"></script> | |
| <script> | |
| [ | |
| { | |
| type: 'String', | |
| property: 'length', | |
| instance: 'abc', | |
| }, | |
| { | |
| type: 'Array', | |
| property: 'length', | |
| instance: ['a', 'b', 'c'], | |
| }, | |
| { | |
| type: 'Blob', | |
| property: 'size', | |
| instance: new Blob(['abc']), | |
| }, | |
| { | |
| type: 'Blob', | |
| property: 'type', | |
| instance: new Blob([''], {type:'foo/bar'}), | |
| }, | |
| { | |
| type: 'File', | |
| property: 'name', | |
| instance: new File([''], 'foo'), | |
| }, | |
| { | |
| type: 'File', | |
| property: 'lastModified', | |
| instance: new File([''], '', {lastModified: 123}), | |
| }, | |
| ].forEach(function(testcase) { | |
| indexeddb_test( | |
| (t, db) => { | |
| db.createObjectStore( | |
| 'store', {autoIncrement: true, keyPath: testcase.property}); | |
| }, | |
| (t, db) => { | |
| const key = testcase.instance[testcase.property]; | |
| const tx = db.transaction('store', 'readwrite'); | |
| tx.objectStore('store').put(testcase.instance); | |
| const request = tx.objectStore('store').get(key); | |
| request.onerror = t.unreached_func('request should not fail'); | |
| request.onsuccess = t.step_func(function() { | |
| const result = request.result; | |
| assert_key_equals(result[testcase.property], key, | |
| 'Property should be used as key'); | |
| }); | |
| tx.oncomplete = t.step_func(function() { | |
| t.done(); | |
| }); | |
| }, | |
| 'Type: ' + testcase.type + ', identifier: ' + testcase.property | |
| ); | |
| }); | |
| </script> |