blob: 49b75d96da4a6abfea64a2c64d1601b8d3dfc8d0 [file] [log] [blame]
// Copyright 2018 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 can pin expressions.\n`);
await TestRunner.loadModule('console_test_runner');
await TestRunner.showPanel('console');
await TestRunner.loadHTML(`
<div tabIndex="-1" id="div1">foo 1</div>
<div tabIndex="-1" id="div2">foo 2</div>
<script>
window.flag = false;
</script>
`);
await TestRunner.evaluateInPagePromise(`div1.focus()`);
const consoleView = Console.ConsoleView.instance();
const pinPane = consoleView._pinPane;
TestRunner.runTestSuite([
async function testBeforeAdding(next) {
await dumpPinPaneContents();
next();
},
async function testAddingExpression(next) {
pinPane.addPin(`document.activeElement`);
await waitForEditors();
await waitForPinUpdate();
await dumpPinPaneContents();
next();
},
async function testPinUpdatesDynamically(next) {
TestRunner.addResult(`Focusing the div2 on target page.`);
await TestRunner.evaluateInPagePromise(`div2.focus()`);
await waitForPinUpdate();
await dumpPinPaneContents();
next();
},
async function testNoSideEffectsWhileEditing(next) {
TestRunner.addResult(`Focusing the first pin's editor.`);
await pinAt(0).focus();
const sideEffectExpression = `window.flag = true`;
TestRunner.addResult(`Setting text to: "${sideEffectExpression}".`);
pinAt(0)._editor.setText(sideEffectExpression);
await waitForPinUpdate();
await dumpPinPaneContents();
const flagResult = await TestRunner.evaluateInPagePromise(`window.flag`);
TestRunner.addResult(`window.flag is now: ${flagResult}`);
pinAt(0)._editor.setText(`document.activeElement`);
next();
},
async function testRemoveSinglePin(next) {
pinPane.addPin(`"Second pin"`);
await waitForEditors();
await waitForPinUpdate();
await dumpPinPaneContents();
TestRunner.addResult(`\nRemoving second pin\n`);
pinPane._removePin(pinAt(1));
await dumpPinPaneContents();
next();
},
async function testRemoveAllPins(next) {
pinPane._removeAllPins();
await dumpPinPaneContents();
next();
}
]);
async function dumpPinPaneContents() {
if (!pinPane._pins.size) {
TestRunner.addResult(`No pins`);
return;
}
for (const pin of pinPane._pins)
TestRunner.addResult(`Name: ${pin._editor.text()}\nValue: ${pin._pinPreview.deepTextContent()}`);
}
async function waitForEditors() {
for (const pin of pinPane._pins)
await pin._editorPromise;
}
async function waitForPinUpdate(index) {
await TestRunner.addSnifferPromise(pinPane, '_updatedForTest');
}
function pinAt(index) {
return Array.from(pinPane._pins)[index];
}
})();