<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<script>

description("This tests the constructors for all the event DOM classes that have them.");

function test(toEval, bubblesExpected, cancelableExpected)
{
    if (bubblesExpected) {
        shouldBe("(" + toEval + ").bubbles", "true");
    } else {
        shouldBe("(" + toEval + ").bubbles", "false");
    }

    if (cancelableExpected) {
        shouldBe("(" + toEval + ").cancelable", "true");
    } else {
        shouldBe("(" + toEval + ").cancelable", "false");
    }
}

// No initializer passed.
test("new Event('eventType')", false, false);

// Both true.
test("new Event('eventType', { bubbles: true, cancelable: true })", true, true);

// One true, one false.
test("new Event('eventType', { bubbles: true, cancelable: false })", true, false);

// One explicitly undefined.
test("new Event('eventType', { bubbles: true, cancelable: undefined })", true, false);

// One a numeric value.
test("new Event('eventType', { bubbles: true, cancelable: 0 })", true, false);

// One missing.
test("new Event('eventType', { bubbles: true })", true, false);

// Empty initalizer.
test("new Event('eventType', { })", false, false);

// null initializer.
test("new Event('eventType', null)", false, false);

// Explicitly undefined initializer.
test("new Event('eventType', undefined)", false, false);

// A number as the initializer.
// FIXME: Should this throw?
test("new Event('eventType', 0)", false, false);

// The window as the initializer.
test("new Event('eventType', window)", false, false);

// The window as the initializer, but with bubbles defined to true.
var bubbles = true;
test("new Event('eventType', window)", true, false);

// One value defined on the prototype chain of a host object.
Document.prototype.bubbles = true;
test("new Event('eventType', document)", true, false);

// One value defined on the prototype chain of a vanilla object.
var Constructible = function() { }
Constructible.prototype.bubbles = true;
var constructible = new Constructible;
test("new Event('eventType', constructible)", true, false);

// Additional properties on the initializer
test("new Event('eventType', { bubbles: true, cancelable: true, other: true })", true, true);

// One getter returning true.
test("new Event('eventType', { bubbles: true, get cancelable() { return true; } })", true, true);

// One getter returning false.
test("new Event('eventType', { bubbles: true, get cancelable() { return false; } })", true, false);

// One getter throws an exeception.
shouldThrow("new Event('eventType', { bubbles: true, get cancelable() { throw 'Custom Error'; } })")
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>