<!DOCTYPE html>
<meta charset="utf-8">
<title>IDBObjectStore.createIndex() - index can be valid keys</title>
<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
<meta name=timeout content=long>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="support.js"></script>

<script>
    var db,
      t = async_test(document.title, {timeout:19000}),
      now = new Date(),
      mar18 = new Date(1111111111111),
      ar = ["Yay", 2, -Infinity],
      num = 1337

    var open_rq = createdb(t);
    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;
        var txn = e.target.transaction,
          objStore = db.createObjectStore("store", { keyPath: 'key' });

        objStore.add({ key: "now",    i: now   });
        objStore.add({ key: "mar18",  i: mar18 });
        objStore.add({ key: "array",  i: ar    });
        objStore.add({ key: "number", i: num   });

        var idx = objStore.createIndex("index", "i")

        idx.get(now).onsuccess = t.step_func(function(e) {
            assert_equals(e.target.result.key, 'now', 'key');
            assert_equals(e.target.result.i.getTime(), now.getTime(), 'getTime');
        });
        idx.get(mar18).onsuccess = t.step_func(function(e) {
            assert_equals(e.target.result.key, 'mar18', 'key');
            assert_equals(e.target.result.i.getTime(), mar18.getTime(), 'getTime');
        });
        idx.get(ar).onsuccess = t.step_func(function(e) {
            assert_equals(e.target.result.key, 'array', 'key');
            assert_array_equals(e.target.result.i, ar, 'array is the same');
        });
        idx.get(num).onsuccess = t.step_func(function(e) {
            assert_equals(e.target.result.key, 'number', 'key');
            assert_equals(e.target.result.i, num, 'number is the same');
        });
    }

    open_rq.onsuccess = function() {
        t.done();
    }
</script>

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