<!DOCTYPE html>
<meta charset="utf-8">
<title>IDBIndex.multiEntry - adding keys</title>
<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
<link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#key-construct">
<link rel=assert title="XXX">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="support.js"></script>

<script>
    var db,
        expected_keys = [1, 2, 2, 3, 3];

    var open_rq = createdb(async_test(document.title, {timeout: 10000}))

    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;

        var store = db.createObjectStore("store")

        store.createIndex('actors', 'name', { multiEntry: true })

        store.add({name: 'Odin'}, 1);
        store.add({name: ['Rita', 'Scheeta', {Bobby:'Bobby'}]}, 2);
        store.add({name: [ {s: 'Robert'}, 'Neil', 'Bobby']}, 3);
    };
    open_rq.onsuccess = function(e) {
        var gotten_keys = [];
        var idx = db.transaction('store').objectStore('store').index('actors');

        idx.getKey('Odin').onsuccess = this.step_func(function(e) {
            gotten_keys.push(e.target.result)
        });
        idx.getKey('Rita').onsuccess = this.step_func(function(e) {
            gotten_keys.push(e.target.result)
        });
        idx.getKey('Scheeta').onsuccess = this.step_func(function(e) {
            gotten_keys.push(e.target.result)
        });
        idx.getKey('Neil').onsuccess = this.step_func(function(e) {
            gotten_keys.push(e.target.result)
        });
        idx.getKey('Bobby').onsuccess = this.step_func(function(e) {
            gotten_keys.push(e.target.result)

            assert_array_equals(gotten_keys, expected_keys);
            this.done();
        });
    }
</script>

<div id="log"></div>
