<!DOCTYPE html>
<title>IDBFactory.open() - errors in version argument</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>

<script>
function should_throw(val, name) {
    if (!name) {
        name = ((typeof val == "object" && val) ? "object" : format_value(val))
    }
    test(function() {
      assert_throws(new TypeError(), function() {
        window.indexedDB.open('test', val);
      });
    }, "Calling open() with version argument " + name + " should throw TypeError.")
}

should_throw(-1)
should_throw(-0.5)
should_throw(0)
should_throw(0.5)
should_throw(0.8)
should_throw(0x20000000000000)  // Number.MAX_SAFE_INTEGER + 1
should_throw(NaN)
should_throw(Infinity)
should_throw(-Infinity)
should_throw("foo")
should_throw(null)
should_throw(false)

should_throw({
    toString: function() { assert_unreached("toString should not be called for ToPrimitive [Number]"); },
    valueOf: function() { return 0; }
})
should_throw({
    toString: function() { return 0; },
    valueOf: function() { return {}; }
}, 'object (second)')
should_throw({
    toString: function() { return {}; },
    valueOf: function() { return {}; },
}, 'object (third)')


/* Valid */

function should_work(val, expected_version) {
    var name = format_value(val);
    var dbname = 'test-db-does-not-exist';
    async_test(function(t) {
        window.indexedDB.deleteDatabase(dbname);
        var rq = window.indexedDB.open(dbname, val);
        rq.onupgradeneeded = t.step_func(function() {
            var db = rq.result;
            assert_equals(db.version, expected_version, 'version');
            rq.transaction.abort();
        });
        rq.onsuccess = t.unreached_func("open should fail");
        rq.onerror = t.step_func(function() {
            t.done()
        });
    }, "Calling open() with version argument " + name + " should not throw.")
}

should_work(1.5, 1)
should_work(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER)  // 0x20000000000000 - 1
should_work(undefined, 1)

</script>

<div id=log></div>
