// Logs (appends) an HTML string to a logger element in a list format. // An element in the document with id "logger" will be used as the log // container. function log(str) { const entry = document.createElement('li'); entry.innerHTML = str; const loggerElement = document.getElementById('logger'); loggerElement.appendChild(entry); return entry; } // Common setup for window management tests. Performs some basic assertions, and // then waits for a click on the `setUpButton` element (for manual tests). // Example usage: // promise_test(async setUpTest => { // await setUpWindowManagement(setUpTest, setUpButton); // ... // }); async function setUpWindowManagement(setUpTest, setUpButton) { assert_true( 'getScreenDetails' in self && 'isExtended' in screen, `API not supported; use Chromium (not content_shell) and enable chrome://flags/#enable-experimental-web-platform-features`); if (!screen.isExtended) log(`WARNING: Use multiple screens for full test coverage`); if (window.location.href.startsWith('file')) log(`WARNING: Run via 'wpt serve'; file URLs lack permission support`); try { // Support manual testing where test_driver is not running. await test_driver.set_permission({ name: 'window-placement' }, 'granted'); } catch { } const setUpWatcher = new EventWatcher(setUpTest, setUpButton, ['click']); const setUpClick = setUpWatcher.wait_for('click'); try { // Support manual testing where test_driver is not running. await test_driver.click(setUpButton); } catch { } await setUpClick; setUpButton.disabled = true; } // Adds a button to the given `buttonContainer` element with the contents of // `name`. Attaches an event watcher to the given test and waits for a signal // from the test driver to click the button. If no test driver is available // (manual testing) then awaits an actual click from the user instead. If // `disableOnClick` is true, the button will also be disabled after it is // clicked. async function addTestTriggerButtonAndAwaitClick(buttonContainer, name, test) { const button = document.createElement('button'); button.innerHTML = name; const entry = document.createElement('li'); entry.appendChild(button); buttonContainer.appendChild(entry); const testWatcher = new EventWatcher(test, button, ['click']); const buttonClick = testWatcher.wait_for('click'); // Disable the button when it is clicked. button.onclick = function() { button.disabled = true; }; try { // Support manual testing where test_driver is not running. await test_driver.click(button); } catch { } await buttonClick; }