<html>
<head>
    <style type="text/css">
        .pass { color: green; }
        .fail { color: red; }
    </style>
    <script>
        function printOut(msg)
        {
            var console = document.getElementById("console");
            var span = document.createElement('span');
            span.innerHTML = msg + '<br>';
            console.appendChild(span);
        }

        function resultStringifier(result)
        {
            if (result === "")
                return "<b>the empty string</b>";
            else if (result === undefined)
                return "<b>undefined</b>";
            else if (result === null)
                return "<b>null</b>";
            return "the string '" + result + "'";
        }

        function nullTestElementAttribute(elementType, element, attr, expected)
        {
            element[attr] = null;

            var result;
            if (element[attr] === expected)
                result = "<span class='pass'>TEST SUCCEEDED:</span> The value was " + resultStringifier(expected) + ".";
            else
                result = "<span class='fail'>TEST FAILED:</span> The value should have been " + resultStringifier(expected) + " but was " + resultStringifier(element[attr]) + ".";

            result += " [tested " + elementType + "." + attr + "]";
            printOut(result);
        }

        function runTests()
        {
            if (window.layoutTestController)
                layoutTestController.dumpAsText();

            var canvas = document.createElement('canvas');
            var context = canvas.getContext("2d");

            var listing = [
                {
                    type: 'CanvasRenderingContext2D',
                    elementToUse: context,
                    attributes: [
                        {name: 'globalCompositeOperation', expectedNull: 'source-over'},
                        {name: 'lineCap', expectedNull: 'butt'},
                        {name: 'lineJoin', expectedNull: 'miter'},
                        {name: 'shadowColor', expectedNull: 'rgba(0, 0, 0, 0)'}
                    ]
                }
            ];
            
            for (element in listing) {
                var type = listing[element].type;
                var elementToUse = listing[element].elementToUse;
                var attrs = listing[element].attributes;
                for (attr in attrs) {
                    nullTestElementAttribute(type, elementToUse, attrs[attr].name, attrs[attr].expectedNull);
                }
                printOut('');
            }
        }
    </script>
</head>
<body onload="runTests()">
    <p>This test setting various attributes of a CanvasRenderingContext2D to JavaScript null.</p>
    <div id="console"></div>
</body>
</html>
