<!DOCTYPE html>
<!--
  original test: http://mxr.mozilla.org/mozilla2.0/source/dom/indexedDB/test/test_key_requirements.html
  license of original test:
    " Any copyright is dedicated to the Public Domain.
      http://creativecommons.org/publicdomain/zero/1.0/ "
-->
<html>
<head>
<script src="../../../fast/js/resources/js-test-pre.js"></script>
<script src="../resources/shared.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>

description("Test IndexedDB's behavior put()ing with null key");
if (window.layoutTestController)
    layoutTestController.waitUntilDone();

function test()
{
    indexedDB = evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
    shouldBeFalse("indexedDB == null");
    IDBDatabaseException = evalAndLog("IDBDatabaseException = window.IDBDatabaseException || window.webkitIDBDatabaseException;");
    shouldBeFalse("IDBDatabaseException == null");

    name = window.location.pathname;
    description = "My Test Database";
    request = evalAndLog("indexedDB.open(name, description)");
    request.onsuccess = openSuccess;
    request.onerror = unexpectedErrorCallback;
}

function openSuccess()
{
    db = evalAndLog("db = event.target.result");

    request = evalAndLog("request = db.setVersion('1')");
    request.onsuccess = cleanDatabase;
    request.onerror = unexpectedErrorCallback;
}

function cleanDatabase()
{
    deleteAllObjectStores(db);
    objectStore = evalAndLog("objectStore = db.createObjectStore('bar');");
    evalAndExpectException("objectStore.put({}, null);", "IDBDatabaseException.DATA_ERR");
    done();
}

var successfullyParsed = true;

test();

</script>
</body>
</html>

