<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
var string = "string";
var object = {a:1};
var otherObject = {b:2};
var number = 42;

function test()
{
    var currentStepIndex = 0;
    var steps = [
        "console.log('console.log')",
        "console.warn('console.warn')",
        "console.error('console.error')",
        "console.debug('console.debug')",
        "console.info('console.info')",
        "console.assert(false, 'assertion message')",
        "console.trace()",
        "console.log('string message', string)",
        "console.log('message', object, object)",
        "console.error('message', object)",
        "console.warn('message', object)",
        "console.debug('message', object)",
        "console.info('message', object)",
        "console.dir(object)",
        "console.dirxml(object)",
        "console.group('groupName')",
        "console.groupEnd('groupName')",
        "console.groupCollapsed('collapsedGroupName')",
        "console.groupEnd('collapsedGroupName')",
        "console.count()",
        "console.count()",
        "console.count(\"default\")",
        "console.count('')",
        "console.count('    ')",
        "console.count('')",
        "console.count('    ')",
        "console.count(string)",
        "console.count(string)",
        "console.count(object)",
        "console.count(object)",
        "console.count(otherObject)",
        "console.count(otherObject)",
        "console.count(number)",
        "console.count(number)",
    ];

    function remoteObjectJSONFilter(key, value)
    {
        if (key === "_target" || key === "_listeners")
            return undefined;
        if (key === "_objectId" || key === "_stackTrace")
            return "<filtered>";
        return value;
    }

    WI.consoleManager.addEventListener(WI.ConsoleManager.Event.MessageAdded, function(event) {
        var message = event.data.message;
        InspectorTest.assert(message instanceof WI.ConsoleMessage);
        InspectorTest.log("\nSTEP: " + steps[currentStepIndex]);
        InspectorTest.log(JSON.stringify(message, remoteObjectJSONFilter, "  "));

        if (++currentStepIndex >= steps.length)
            InspectorTest.completeTest();
    });

    for (var step of steps)
        WI.runtimeManager.evaluateInInspectedWindow(step, {objectGroup: "test", doNotPauseOnExceptionsAndMuteConsole: true, generatePreview: true}, function(){});
}
</script>
</head>
<body onload="runTest();">
</body>
</html>
