blob: 3b7da391a3c239871e97174ebb7763a12261b861 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult('Tests that console logging dumps properly when there are multiple custom formatters on the page\n');
await TestRunner.loadModule('console_test_runner');
await TestRunner.showPanel('console');
await TestRunner.evaluateInPagePromise(`
var a = {name: "a"};
var b = {name: "b"};
var c = {name: "c"};
a.formattableBy1 = true;
b.formattableBy2 = true;
c.formattableBy1 = true;
c.formattableBy2 = true;
var formatter1 = {
header: function(x)
{
if (!x.formattableBy1)
return null;
return ["span", {}, "Header formatted by 1 ", x.name];
},
hasBody: function(x)
{
return true;
},
body: function(x)
{
return ["span", {}, "Body formatted by 1 ", x.name]
}
};
var formatter2 = {
header: function(x)
{
if (!x.formattableBy2)
return null;
return ["span", {}, "Header formatted by 2 ", x.name];
},
hasBody: function(x)
{
return true;
},
body: function(x)
{
return ["span", {}, "Body formatted by 2 ", x.name]
}
};
var configTest = {};
var formatterWithConfig1 = {
header: function(x, config)
{
if (x !== configTest || config)
return null;
return ["span", {}, "Formatter with config ", ["object", {"object": x, "config": {"info": "additional info"}}]];
},
hasBody: function(x)
{
return false;
},
body: function(x)
{
throw "Unreachable"
}
}
var formatterWithConfig2 = {
header: function(x, config)
{
if (x !== configTest || !config)
return null;
return ["span", {}, "Header ", "info: ", config.info];
},
hasBody: function(x, config)
{
return config && config.info;
},
body: function(x, config)
{
return ["span", {}, "body", "info: ", config.info]
}
}
var selfReferenceTest = {};
var selfReferencingFormatter = {
header: function(x)
{
if (x !== selfReferenceTest)
return null;
return ["span", {}, "Formatter with config ", ["object", {"object": x}]];
},
hasBody: function(x)
{
return false;
},
body: function(x)
{
throw "Unreachable"
}
}
window.devtoolsFormatters = [formatter1, formatter2, formatterWithConfig1, formatterWithConfig2, selfReferencingFormatter];
function logVars()
{
console.log(a);
console.log(b);
console.log(c);
console.log(configTest);
console.log(selfReferenceTest);
//swap first formatters: test that header+body should be generated by the same formatter
window.devtoolsFormatters = [formatter2, formatter1, formatterWithConfig1, formatterWithConfig2, selfReferencingFormatter];
}
`);
TestRunner.mainTarget.runtimeAgent().setCustomObjectFormatterEnabled(true);
TestRunner.evaluateInPage('logVars()', expandVariablesInConsole);
function expandVariablesInConsole() {
var consoleView = Console.ConsoleView.instance();
if (consoleView._needsFullUpdate)
consoleView._updateMessageList();
var viewMessages = consoleView._visibleViewMessages;
for (var i = 0; i < viewMessages.length; ++i) {
var uiMessage = viewMessages[i];
var element =
uiMessage.contentElement().querySelector('.console-message-text *');
if (!element)
continue;
var shadowRoot = element.shadowRoot;
var customElement = (shadowRoot ? shadowRoot.querySelector('.custom-expandable-section-header') : null);
if (customElement)
customElement.click();
}
TestRunner.deprecatedRunAfterPendingDispatches(dumpExpanded);
}
async function dumpExpanded() {
await ConsoleTestRunner.dumpConsoleMessages();
TestRunner.completeTest();
}
})();