<!DOCTYPE html>
<title>IDBFactory.open() - upgradeneeded gets VersionChangeEvent</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;
    var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9);
    var open2_t = async_test(document.title + " - second upgrade");

    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;

        assert_true(e instanceof IDBVersionChangeEvent, "e instanceof IDBVersionChangeEvent");
        assert_equals(e.oldVersion, 0, "oldVersion");
        assert_equals(e.newVersion, 9, "newVersion");
        assert_equals(e.type, "upgradeneeded", "event type");

        assert_equals(db.version, 9, "db.version");
    };
    open_rq.onsuccess = function(e) {
        assert_true(e instanceof Event, "e instanceof Event");
        assert_false(e instanceof IDBVersionChangeEvent, "e not instanceof IDBVersionChangeEvent");
        assert_equals(e.type, "success", "event type");
        this.done();


        /**
         * Second test
         */
        db.onversionchange = function() { db.close(); };

        var open_rq2 = createdb(open2_t, db.name, 10);
        open_rq2.onupgradeneeded = function(e) {
            var db2 = e.target.result;
            assert_true(e instanceof IDBVersionChangeEvent, "e instanceof IDBVersionChangeEvent");
            assert_equals(e.oldVersion, 9, "oldVersion");
            assert_equals(e.newVersion, 10, "newVersion");
            assert_equals(e.type, "upgradeneeded", "event type");

            assert_equals(db2.version, 10, "new db.version");

            this.done();
        };
    };
</script>

<div id=log></div>
