<!DOCTYPE html>
<title>IDBTransaction - complete event</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, store,
      t = async_test(document.title, {timeout: 10000}),
      open_rq = createdb(t),
      stages = [];

    open_rq.onupgradeneeded = function(e) {
        stages.push("upgradeneeded");

        db = e.target.result;
        store = db.createObjectStore('store');

        e.target.transaction.oncomplete = function() {
            stages.push("complete");
        };
    };

    open_rq.onsuccess = function(e) {
        stages.push("success");

        // Making a totally new transaction to check
        db.transaction('store').objectStore('store').count().onsuccess = t.step_func(function(e) {
            assert_array_equals(stages, [ "upgradeneeded",
                                          "complete",
                                          "success" ]);
            t.done();
        });
        // XXX: Make one with real transactions, not only open() versionchange one

        /*db.transaction.objectStore('store').openCursor().onsuccess = function(e) {
            stages.push("opencursor1");
        }

        store.openCursor().onsuccess = function(e) {
            stages.push("opencursor2");
        }

        e.target.transaction.objectStore('store').openCursor().onsuccess = function(e) {
            stages.push("opencursor3");
        }
        */
    }

</script>

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