<!DOCTYPE html>
<meta charset=utf-8>
<title>Transactions have a request queue</title>
<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
<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: 10000}),
    keys = { txn: [], txn2: [] },
    open_rq = createdb(t)

open_rq.onupgradeneeded = function(e) {
    var i, os;
    db = e.target.result;

    for (i = 1; i < 6; i++)
    {
        os = db.createObjectStore("os" + i, { autoIncrement: true, keyPath: "k" });
        os.add({ os: "os" + i });
        os.put({ os: "os" + i, k: i});
        os.add({ os: "os" + i });
    }
}

open_rq.onsuccess = function(e) {
    var txn = db.transaction(["os2", "os1", "os3", "os5"])
    txn.objectStore("os1").openCursor().onsuccess = reg("txn")
    txn.objectStore("os3").openCursor().onsuccess = reg("txn")
    txn.objectStore("os1").get(2).onsuccess = reg("txn")
    txn.objectStore("os2").get(3).onsuccess = reg("txn")

    var txn2 = db.transaction(["os4", "os3", "os1", "os5"])
    var os4 = txn2.objectStore("os4")

    for (var i=0; i < 3; i++) {
        os4.openCursor().onsuccess = reg("txn2")
        os4.get(5).onsuccess = reg("txn2")
        os4.get(4).onsuccess = reg("txn2")
        txn.objectStore("os2").get(1).onsuccess = reg("txn")
        txn2.objectStore("os3").get(1).onsuccess = reg("txn2")
    }

    txn2.objectStore("os1").get(2).onsuccess = reg("txn2")
    txn.objectStore("os1").openCursor(null, "prev").onsuccess = reg("txn")
    os4.openCursor(null, "prev").onsuccess = reg("txn2")

    txn.oncomplete = t.step_func(finish);
    txn2.oncomplete = t.step_func(finish);
}


function reg(n) {
    return t.step_func(function (e) {
        var v = e.target.result;
        if (v.value) v = v.value;
        keys[n].push(v.os + ": " + v.k);
    });
}

var finish_to_go = 2;
function finish() {
    if (--finish_to_go)
        return;

    assert_array_equals(keys['txn'], [
        "os1: 1",
        "os3: 1",
        "os1: 2",
        "os2: 3",
        "os2: 1", "os2: 1", "os2: 1",
        "os1: 2",
    ], 'transaction keys');

    assert_array_equals(keys['txn2'], [
        "os4: 1", "os4: 5", "os4: 4", "os3: 1",
        "os4: 1", "os4: 5", "os4: 4", "os3: 1",
        "os4: 1", "os4: 5", "os4: 4", "os3: 1",
        "os1: 2",
        "os4: 5",
    ], 'transaction 2 keys');

    t.done();
}
</script>

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