<!DOCTYPE html>
<title>IDBFactory.open() - errors in version argument</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=support.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(undefined)
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) {
    var name = format_value(val);
    var t = async_test("Calling open() with version argument " + name + " should not throw.")
    var rq = createdb(t, val)
    rq.onupgradeneeded = function() {
        t.done()
    }
}

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

</script>

<div id=log></div>
