diff options
Diffstat (limited to 'testing/web-platform/tests/web-share/resources/manual-helper.js')
-rw-r--r-- | testing/web-platform/tests/web-share/resources/manual-helper.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/testing/web-platform/tests/web-share/resources/manual-helper.js b/testing/web-platform/tests/web-share/resources/manual-helper.js new file mode 100644 index 0000000000..15bb17936e --- /dev/null +++ b/testing/web-platform/tests/web-share/resources/manual-helper.js @@ -0,0 +1,100 @@ +// Internal function. Returns [instruction, list] DOM elements. +function setupManualShareTestCommon() { + const div = document.createElement('div'); + document.body.appendChild(div); + + const instruction = document.createElement('div'); + instruction.id = 'instruction'; + div.appendChild(instruction); + + const shareButton = document.createElement('input'); + shareButton.id = 'share_button'; + shareButton.value = 'Share button'; + shareButton.type = 'button'; + div.appendChild(shareButton); + + let heading = document.createElement('h2'); + heading.innerText = 'Instructions:'; + instruction.appendChild(heading); + let list = document.createElement('ol'); + instruction.appendChild(list); + let item = document.createElement('li'); + list.appendChild(item); + item.innerText = 'Click the Share button.'; + + return [instruction, list]; +} + +// Sets up the page for running manual tests. Automatically creates the +// instructions (based on the parameters) and the share button. +function setupManualShareTest(expected_share_data) { + const {title, text, url, files} = expected_share_data; + let [instruction, list] = setupManualShareTestCommon(); + let item = document.createElement('li'); + list.appendChild(item); + item.innerText = 'Choose a valid share target.'; + + heading = document.createElement('h2'); + heading.innerText = 'Pass the test iff the target app received:'; + instruction.appendChild(heading); + + list = document.createElement('ul'); + instruction.appendChild(list); + + item = document.createElement('li'); + list.appendChild(item); + item.innerText = `title = "${title}"`; + item = document.createElement('li'); + list.appendChild(item); + item.innerText = `text = "${text}"`; + item = document.createElement('li'); + list.appendChild(item); + item.innerText = `url = "${url}"`; + if (files) { + item = document.createElement('li'); + list.appendChild(item); + item.innerText = `files = ${files.length} file(s)`; + for (let file of files) { + const div = document.createElement('div'); + if (file.type.startsWith('text/')) { + const reader = new FileReader(); + reader.onload = () => { + div.textContent = reader.result; + }; + reader.readAsText(file); + } else if (file.type.startsWith('image/')) { + const image = document.createElement('img'); + image.src = URL.createObjectURL(file); + image.alt = file.name; + div.appendChild(image); + } + item.appendChild(div); + } + } +} + +function setupManualShareTestRequiringCancellation() { + const [instruction, list] = setupManualShareTestCommon(); + const item = document.createElement('li'); + list.appendChild(item); + item.innerText = 'Cancel the share dialog.'; +} + +// Returns a promise. When the user clicks the button, calls +// |click_handler| and resolves the promise with the result. +function callWhenButtonClicked(click_handler) { + return new Promise((resolve, reject) => { + document.querySelector('#share_button').onclick = () => { + try { + const result = click_handler(); + resolve(result); + } catch (e) { + reject(e); + } + }; + }); +} + +function getAbsoluteUrl(url) { + return new URL(url, document.baseURI).toString(); +} |