<!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>
