<!DOCTYPE html>
<meta charset="utf-8">
<title>IDBObjectStore.put() - object store has autoIncrement:true and the key path is an object attribute </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 = { property: "data" },
      expected_keys = [ 1, 2, 3, 4 ];

    var open_rq = createdb(t);
    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;
        var objStore = db.createObjectStore("store", { keyPath: "test.obj.key", autoIncrement: true });

        objStore.put(record);
        objStore.put(record);
        objStore.put(record);
        objStore.put(record);
    };

    open_rq.onsuccess = function(e) {
        var actual_keys = [],
          rq = db.transaction("store")
                 .objectStore("store")
                 .openCursor();

        rq.onsuccess = t.step_func(function(e) {
            var cursor = e.target.result;

            if (cursor) {
                actual_keys.push(cursor.value.test.obj.key);
                cursor.continue();
            }
            else {
                assert_array_equals(actual_keys, expected_keys);
                t.done();
            }
        });
    };
</script>

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