<script>
    function createClickHandler(result, str) {
        return function() {
            console.assert(result, "%s", str);
        }
    }

    function load() {
        var tests = [
            "",
            "false",
            "null",
            "document.body",
            "!document.body",
            "true"
        ];

        for (var i = 0; i < tests.length; ++i) {
            var test = tests[i];
            var result;
            try {
                result = eval(test);
            } catch(e) {
                result = false;
            }
            var button = document.createElement("button");
            button.innerText = "console.assert(" + test + "): should" + (result ? " not" : "") + " assert";
            button.onclick = createClickHandler(result, test);
            var p = document.createElement("p");
            p.appendChild(button);
            document.body.appendChild(p);
        }
    }
</script>
<body onload="load()">
<p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=19134">Bug 19134: Inspector should support console.assert</a>.</p>
<p>To test, click the buttons below and look at the Inspector's Console.</p>
