<!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.
shouldThrowErrorName("new Event('eventType', 0)", "TypeError");

// 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>
