if (this.importScripts) {
    importScripts('../../../resources/js-test.js');
    importScripts('shared.js');
}

description("Test IndexedDB invalid keys");

indexedDBTest(prepareDatabase);
function prepareDatabase()
{
    db = event.target.result;
    event.target.transaction.onabort = unexpectedAbortCallback;
    objectStore = evalAndLog("db.createObjectStore('foo');");
    testInvalidKeys();
}

function testInvalidKeys()
{
    var invalidKeys = [
        "void 0", // Undefined
        "null", // Null
        "(function() { return arguments; }())", // Arguments
        "true", // Boolean
        "false", // Boolean
        "new Error", // Error
        "function () {}", // Function
        "JSON", // JSON
        "Math", // Math
        "NaN", // Number (special case)
        "new Date(NaN)", // Date (special case)
        "{}", // Object
        "/regex/", // RegExp
        "self", // global
        "self.document", // HTMLDocument
        "self.document.body" // HTMLBodyElement
    ];

    invalidKeys.forEach(function(key) {
        evalAndExpectException("request = objectStore.put('value', " + key + ")", "0", "'DataError'");
    });

    finishJSTest();
}
