<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script>

var testScenarios = [
    {testDescription: "Test default context creation attributes",
        canvasContextAttributes: {},
        expectedContextAttributes: {alpha: true, desynchronized: false, willReadFrequently: false}},
    {testDescription: "Test context creation attributes alpha: true",
        canvasContextAttributes: {alpha: true},
        expectedContextAttributes: {alpha: true}},
    {testDescription: "Test context creation attributes alpha: false",
        canvasContextAttributes: {alpha: false},
        expectedContextAttributes: {alpha: false}},
    {testDescription: "Test context creation attributes desynchronized: false",
        canvasContextAttributes: {desynchronized: false},
        expectedContextAttributes: {desynchronized: false}},
    {testDescription: "Test context creation attributes willReadFrequently: true",
        canvasContextAttributes: {willReadFrequently: true},
        expectedContextAttributes: {willReadFrequently: true}},
];

function runTestScenario(testScenario) {
    var t = test(function() {
        var canvas = document. createElement('canvas');
        var ctx = canvas.getContext('2d', testScenario.canvasContextAttributes);
        var contextAttributes = ctx.getContextAttributes();
        if (testScenario.expectedContextAttributes.alpha !== undefined) {
            assert_equals(contextAttributes.alpha,
                testScenario.expectedContextAttributes.alpha);
        }
        if (testScenario.expectedContextAttributes.desynchronized !== undefined) {
            assert_equals(contextAttributes.desynchronized,
                testScenario.expectedContextAttributes.desynchronized);
        }
    }, testScenario.testDescription);
}

function runAllTests() {
    for (var i = 0; i < testScenarios.length; i++)
        runTestScenario(testScenarios[i]);
}

runAllTests();
</script>
