<!DOCTYPE html>
<meta charset="utf-8">
<title>IDBObjectStore.add() - add where an index has unique:true specified </title>
<link rel="author" title="Microsoft" href="http://www.microsoft.com">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="support.js"></script>

<script>
    var db,
      t = async_test(),
      record = { key: 1, property: "data" };

    var open_rq = createdb(t);
    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;
        var objStore = db.createObjectStore("store", { autoIncrement: true });
        objStore.createIndex("i1", "property", { unique: true });
        objStore.add(record);

        var rq = objStore.add(record);
        rq.onsuccess = fail(t, "success on adding duplicate indexed record")

        rq.onerror = t.step_func(function(e) {
            assert_equals(rq.error.name, "ConstraintError");
            assert_equals(e.target.error.name, "ConstraintError");
            assert_equals(e.type, "error");

            e.preventDefault();
            e.stopPropagation();
        });
    };

    // Defer done, giving a spurious rq.onsuccess a chance to run
    open_rq.onsuccess = function(e) {
        t.done();
    }
</script>

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