| <!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> |