<!DOCTYPE html>
<meta charset="utf-8">
<title>IDBIndex.multiEntry - a 1000 entry multiEntry array</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,
        t_add = async_test("Adding one item with 1000 multiEntry keys", { timeout: 10000 }),
        t_get = async_test("Getting the one item by 1000 indeced keys ", { timeout: 10000 });

    var open_rq = createdb(t_add);
    var obj = { test: 'yo', idxkeys: [] };

    for (var i = 0; i < 1000; i++)
        obj.idxkeys.push('index_no_' + i);


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

        db.createObjectStore('store')
          .createIndex('index', 'idxkeys', { multiEntry: true });
    };
    open_rq.onsuccess = function(e) {
        var tx = db.transaction('store', 'readwrite');
        tx.objectStore('store')
          .put(obj, 1)
          .onsuccess = t_add.step_func(function(e)
        {
            assert_equals(e.target.result, 1, "put'd key");
            this.done();
        });

        tx.oncomplete = t_get.step_func(function() {
            var idx = db.transaction('store').objectStore('store').index('index')

            for (var i = 0; i < 1000; i++)
            {
                idx.get('index_no_' + i).onsuccess = t_get.step_func(function(e) {
                    assert_equals(e.target.result.test, "yo");
                });
            }

            idx.get('index_no_999').onsuccess = t_get.step_func(function(e) {
                assert_equals(e.target.result.test, "yo");
                assert_equals(e.target.result.idxkeys.length, 1000);
                this.done();
            });
        });
    };
</script>

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