<!doctype html>
<meta charset=utf-8>
<title>IndexedDB: The source of requests made against indexes</title>
<meta name="help" href="https://w3c.github.io/IndexedDB/#dom-idbrequest-source">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/support.js"></script>
<script>

[
  index => index.get(0),
  index => index.getKey(0),
  index => index.getAll(),
  index => index.getAllKeys(),
  index => index.count(),

  index => index.openCursor(),
  index => index.openKeyCursor()
].forEach(func => indexeddb_test(
  (t, db) => {
    const store = db.createObjectStore('store', {autoIncrement: true});
    store.createIndex('index', 'kp');
  },
  (t, db) => {
    const tx = db.transaction('store', 'readwrite', {durability: 'relaxed'});
    const index = tx.objectStore('store').index('index');
    assert_equals(func(index).source, index,
                  `${func}.source should be the index itself`);
    t.done();
  },
  `The source of the request from ${func} is the index itself`
));

</script>
