Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
            - /IndexedDB/keypath-special-identifiers.any.html - WPT Dashboard Interop Dashboard
- /IndexedDB/keypath-special-identifiers.any.serviceworker.html - WPT Dashboard Interop Dashboard
- /IndexedDB/keypath-special-identifiers.any.sharedworker.html - WPT Dashboard Interop Dashboard
- /IndexedDB/keypath-special-identifiers.any.worker.html - WPT Dashboard Interop Dashboard
 
// META: global=window,worker
// META: title=IndexedDB: Special-cased identifiers in extracting keys from values (ES bindings)
// META: script=resources/support.js
'use strict';
[{
  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', {durability: 'relaxed'});
        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);
});