<!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(),
      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>
