blob: 377fc28d8efb51b17147009d21b9b2a0a02ef3c3 [file] [log] [blame]
(class ConsoleTestHelper{
constructor(testRunner, dp, evaluate) {
this._testRunner = testRunner;
this._dp = dp;
this._evaluate = evaluate;
}
async testConsoleAssert(contextId) {
await this._evaluate(`console.assert(false, 10, Infinity, {a:3, b:'hello'})`, contextId);
await this._evaluate(`console.assert(true, 10, Infinity, {a:3, b:'hello'})`, contextId); // should not fire ConsoleAPICalled event
await this._evaluate(`console.assert(10, Infinity, {a:3, b:'hello'})`, contextId); // should not fire ConsoleAPICalled event
await this._evaluate('console.assert()', contextId);
}
async testConsoleTime(contextId) {
await this._evaluate('console.time()', contextId);
await this._evaluate('console.time(10)', contextId);
await this._evaluate('console.time(NaN)', contextId);
await this._evaluate(`console.time({a:3, b:'hello'})`, contextId);
this._testRunner.log('console.time with duplicate label');
await this._evaluate('console.time(10)', contextId);
await this._evaluate('console.timeEnd()', contextId);
await this._evaluate('console.timeEnd(10)', contextId);
await this._evaluate('console.timeEnd(NaN)', contextId);
this._testRunner.log('console.timeEnd object label');
await this._evaluate(`console.timeEnd({a:3, b:'hello'})`, contextId);
this._testRunner.log('console.timeEnd unused label');
await this._evaluate('console.timeEnd(9)', contextId);
this._testRunner.log('console.time/timeEnd multiple args');
await this._evaluate(`console.time(5, {a:2, b:'hi'}, Infinity)`, contextId); //Should ignore all params except the first
await this._evaluate(`console.timeEnd({a:3, b:'hello'}, 5)`, contextId); // Should produce warning
await this._evaluate(`console.timeEnd(5, Infinity, {a:3, b:'hello'})`, contextId);
}
async testConsoleCount(contextId) {
//Clearing counts
await this._evaluate('console.countReset()', contextId);
await this._evaluate('console.countReset(2)', contextId);
await this._evaluate('console.countReset(3)', contextId);
await this._evaluate('console.countReset(4)', contextId);
await this._evaluate('console.countReset(10)', contextId);
await this._evaluate('console.countReset(NaN)', contextId);
await this._evaluate(`console.countReset({a:3, b:'hello'})`, contextId);
this._testRunner.log('blank label');
await this._evaluate('console.count()', contextId);
this._testRunner.log('primitive label');
await this._evaluate('console.count(10)', contextId);
this._testRunner.log('unserializable label');
await this._evaluate('console.count(NaN)', contextId);
this._testRunner.log('object label');
await this._evaluate(`console.count({a:3, b:'hello'})`, contextId);
this._testRunner.log('incrementing on NaN');
await this._evaluate('console.count(NaN)', contextId);
await this._evaluate('console.count(NaN)', contextId);
await this._evaluate('console.count(NaN)', contextId);
this._testRunner.log('incrementing on "default" label');
await this._evaluate('console.count()', contextId);
await this._evaluate('console.count(undefined)', contextId);
await this._evaluate('console.count("default")', contextId);
this._testRunner.log('console.countReset for default label');
await this._evaluate('console.countReset()', contextId);
await this._evaluate('console.count()', contextId);
this._testRunner.log('console.countReset for primitive label');
await this._evaluate('console.countReset(10)', contextId);
await this._evaluate('console.count(10)', contextId);
this._testRunner.log('console.countReset for unserializable label');
await this._evaluate('console.countReset(NaN)', contextId);
await this._evaluate('console.count(NaN)', contextId);
this._testRunner.log('console.countReset for object label');
await this._evaluate(`console.countReset({a:3, b:'hello'})`, contextId);
await this._evaluate(`console.count({a:3, b:'hello'})`, contextId);
this._testRunner.log('console.count incrementing post reset');
await this._evaluate('console.count(NaN)', contextId);
this._testRunner.log('console.count/countReset for multiple labels');
await this._evaluate('console.count(2, 3, 4)', contextId);
await this._evaluate('console.count(3, 2, 4)', contextId);
await this._evaluate('console.count(2)', contextId);
await this._evaluate('console.countReset(2, 3, 4)', contextId);
await this._evaluate('console.count(2, 3, 4)', contextId);
await this._evaluate('console.count(2)', contextId);
await this._evaluate('console.count(3)', contextId);
}
validateApiNotFound(evalResult) {
const className = evalResult.result.result.className;
if (className !== 'ReferenceError') {
this._testRunner.log(`Unexpected non-error: ${evalResult}`);
} else {
this._testRunner.log(`Expected ReferenceError: ${className}`);
}
}
async testDir() {
this._testRunner.log('dir(document.body), includeCommandLineAPI = true.');
await this._evaluate('dir(document.body)', { includeCommandLineAPI: true });
this._testRunner.log('dir(document.body), includeCommandLineAPI = false.');
let result = await this._evaluate('dir(document.body)', { includeCommandLineAPI: false });
this.validateApiNotFound(result);
}
async test$() {
this._testRunner.log('$("body"), includeCommandLineAPI = true.');
let result = await this._evaluate('$("body")', { includeCommandLineAPI: true });
this._testRunner.log(result);
this._testRunner.log('$("body"), includeCommandLineAPI = false.');
result = await this._evaluate('$("body")', { includeCommandLineAPI: false });
this.validateApiNotFound(result);
}
async test$$() {
this._testRunner.log('$$("head"), includeCommandLineAPI = true.');
let result = await this._evaluate('$$("head")', { includeCommandLineAPI: true });
this._testRunner.log(result);
this._testRunner.log('$$("head"), includeCommandLineAPI = false.');
result = await this._evaluate('$$("head")', { includeCommandLineAPI: false });
this.validateApiNotFound(result);
}
async testKeys() {
this._testRunner.log('JSON.stringify(keys({"1": 123, "2":567})), includeCommandLineAPI = true.');
let result = await this._evaluate(' JSON.stringify(keys({"1": 123, "2":567}))', { includeCommandLineAPI: true });
this._testRunner.log(result);
this._testRunner.log('keys({"1": 123, "2":567}), includeCommandLineAPI = false.');
result = await this._evaluate('keys({"1": 123, "2":567})', { includeCommandLineAPI: false });
this.validateApiNotFound(result);
}
async testValues() {
this._testRunner.log('JSON.stringify(values({"1": 123, "2":567})), includeCommandLineAPI = true.');
let result = await this._evaluate(' JSON.stringify(values({"1": 123, "2":567}))', { includeCommandLineAPI: true });
this._testRunner.log(result);
this._testRunner.log('values({"1": 123, "2":567}) includeCommandLineAPI = false.');
result = await this._evaluate('values({"1": 123, "2":567})', { includeCommandLineAPI: false });
this.validateApiNotFound(result);
}
async test$x() {
this._testRunner.log('$x("//body"), includeCommandLineAPI = true.');
let result = await this._evaluate('$x("//body")', { includeCommandLineAPI: true });
this._testRunner.log(result);
this._testRunner.log('$x("//body") includeCommandLineAPI = false.');
result = await this._evaluate('$x("//body")', { includeCommandLineAPI: false });
this.validateApiNotFound(result);
}
async test$_() {
this._testRunner.log('set $_ to 405, includeCommandLineAPI = true.');
await this._evaluate('400+5', { includeCommandLineAPI: true, 'objectGroup': 'console' });
let result = await this._evaluate('$_', { includeCommandLineAPI: true });
this._testRunner.log(result);
this._testRunner.log('evaluate $_, includeCommandLineAPI = false.');
result = await this._evaluate('$_', { includeCommandLineAPI: false });
this.validateApiNotFound(result);
}
async test$0to$4() {
const docResultNode = await this._dp.DOM.getDocument({depth: 3});
const rootNode = docResultNode.result.root;
let nodeIds = [];
let result;
nodeIds.push(rootNode.nodeId);
this._testRunner.log('initial $0-$4 are undefined, includeCommandLineAPI = true.');
for (let i = 0; i < 5; i++) {
result = await this._evaluate('$0', { includeCommandLineAPI: true });
this._testRunner.log(`$${i} : ${result.result.result.type}`);
}
await this._dp.DOM.setInspectedNode({ 'nodeId': nodeIds[0] });
let n;
let i = 0;
for (n of rootNode.children) {
if (i >= 4) {
break;
}
nodeIds.push(n.nodeId);
i += 1;
}
this._testRunner.log('evaluate $0, includeCommandLineAPI = true.');
result = await this._evaluate('tempTestVar = $0', { includeCommandLineAPI: true });
this._testRunner.log(result);
this._testRunner.log('evaluate $0, includeCommandLineAPI = false.');
result = await this._evaluate('$0', { includeCommandLineAPI: false });
this.validateApiNotFound(result);
await this._dp.DOM.setInspectedNode({ 'nodeId': nodeIds[i] });
this._testRunner.log('assign $1, includeCommandLineAPI = true.');
result = await this._evaluate('tempTestVar === $1', { includeCommandLineAPI: true });
this._testRunner.log(`previous $0 should equal $1: ${result.result.result.value}`);
}
async testGetEventListeners() {
this._testRunner.log('set & get eventListener for document.onclick');
await this._evaluate('handler = function() { return "clicked!" }; document.onclick = handler;', { includeCommandLineAPI: false });
let result = await this._evaluate('JSON.stringify(getEventListeners(document))', { includeCommandLineAPI: true });
const includesClick = (result.result.result.value).includes(`"click":`);
this._testRunner.log(`Includes click handler: ${includesClick}`);
this._testRunner.log('evaluate eventListener, includeCommandLineAPI = false.');
result = await this._evaluate('getEventListeners(document)', { includeCommandLineAPI: false });
this.validateApiNotFound(result);
this._testRunner.log('eventListener with empty args, includeCommandLineAPI = true.');
result = await this._evaluate('getEventListeners()', { includeCommandLineAPI: true });
this._testRunner.log(result);
this._testRunner.log('eventListener with invalid args, includeCommandLineAPI = false.');
result = await this._evaluate('getEventListeners({})', { includeCommandLineAPI: true });
this._testRunner.log(result);
}
});