<script>
    function clickHandler(errors, warnings)
    {
        return function()
        {
            for (var i = 0; i < errors; ++i)
                console.error("Error " + (i + 1));
            for (var i = 0; i < warnings; ++i)
                console.warn("Warning " + (i + 1));
        }
    }

    function loaded()
    {
        var tests = [
            { errors: 0, warnings: 0 },
            { errors: 1, warnings: 0 },
            { errors: 2, warnings: 0 },
            { errors: 0, warnings: 1 },
            { errors: 0, warnings: 2 },
            { errors: 1, warnings: 1 },
            { errors: 1, warnings: 2 },
            { errors: 2, warnings: 1 },
            { errors: 2, warnings: 2 },
            { errors: 100, warnings: 100 },
        ];

        for (var i in tests) {
            var test = tests[i];

            var button = document.createElement("button");
            var content = "";
            if (!test.errors && !test.warnings)
                content = "(nothing)";
            else {
                if (test.errors > 0)
                    content += test.errors + " error" + (test.errors != 1 ? "s" : "");
                if (test.warnings > 0) {
                    if (content.length)
                        content += ", ";
                    content += test.warnings + " warning" + (test.warnings != 1 ? "s" : "")
                }
            }
            button.innerText = content;
            button.onclick = clickHandler(test.errors, test.warnings);
            var p = document.createElement("p");
            p.appendChild(button);
            document.body.appendChild(p);
        }
    }
</script>
<body onload="loaded()">
<p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=18650">Bug 18650:
Errors/warnings in Inspector should be visible outside of Resources</a>.</p>
<p>To test, open the Inspector and click one of the buttons below. You should
see an error and/or warning count in the Inspector's status bar. Clicking on
the error/warning count should open the Console. Hovering over the
error/warning count should show you a tooltip that matches the text in the
button you clicked.</p>
<p>Note: You must reload the page between each button press.</p>
