diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2019-04-16 13:07:19 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-16 13:07:19 +0000 |
commit | 938fe9f752e393f0ea21def020e849a51ea79300 (patch) | |
tree | a1291d993c3e12ef4994a8fa4820fef69f23c7e2 /e2e/lib | |
parent | 19ca873a38500b125133b6e2db47c8ca074f9c50 (diff) | |
parent | 9f7150e96b7b228429f9f893657f4647e5a8cb51 (diff) |
Merge pull request #565 from ueokande/add-e2e-tests
Add e2e tests
Diffstat (limited to 'e2e/lib')
-rw-r--r-- | e2e/lib/Console.js | 41 | ||||
-rw-r--r-- | e2e/lib/clipboard.js | 63 |
2 files changed, 104 insertions, 0 deletions
diff --git a/e2e/lib/Console.js b/e2e/lib/Console.js new file mode 100644 index 0000000..3a39b64 --- /dev/null +++ b/e2e/lib/Console.js @@ -0,0 +1,41 @@ +class Console { + constructor(session) { + this.session = session; + } + + async sendKeys(...keys) { + let input = await this.session.findElementByCSS('input'); + input.sendKeys(...keys); + } + + async currentValue() { + return await this.session.executeScript(() => { + let input = document.querySelector('input'); + return input.value; + }); + } + + async getCompletions() { + return await this.session.executeScript(() => { + let items = document.querySelectorAll('.vimvixen-console-completion > li'); + if (items.length === 0) { + throw new Error('completion items not found'); + } + + let objs = []; + for (let li of items) { + if (li.classList.contains('vimvixen-console-completion-title')) { + objs.push({ type: 'title', text: li.textContent.trim() }); + } else if ('vimvixen-console-completion-item') { + let highlight = li.classList.contains('vimvixen-completion-selected'); + objs.push({ type: 'item', text: li.textContent.trim(), highlight }); + } else { + throw new Error(`unexpected class: ${li.className}`); + } + } + return objs; + }); + } +} + +module.exports = Console; diff --git a/e2e/lib/clipboard.js b/e2e/lib/clipboard.js new file mode 100644 index 0000000..4061dbd --- /dev/null +++ b/e2e/lib/clipboard.js @@ -0,0 +1,63 @@ +'use strict'; + +const { spawn } = require('child_process'); + +const readLinux = () => { + let stdout = '', stderr = ''; + return new Promise((resolve, reject) => { + let xsel = spawn('xsel', ['--clipboard', '--output']); + xsel.stdout.on('data', (data) => { + stdout += data; + }); + xsel.stderr.on('data', (data) => { + stderr += data; + }); + xsel.on('close', (code) => { + if (code !== 0) { + throw new Error(`xsel returns ${code}: ${stderr}`) + } + resolve(stdout); + }); + }); +}; + +const writeLinux = (data) => { + let stdout = '', stderr = ''; + return new Promise((resolve, reject) => { + let xsel = spawn('xsel', ['--clipboard', '--input']); + xsel.stderr.on('data', (data) => { + stderr += data; + }); + xsel.on('close', (code) => { + if (code !== 0) { + throw new Error(`xsel returns ${code}: ${stderr}`) + } + resolve(); + }); + xsel.stdin.write(data); + xsel.stdin.end(); + }); +}; + +const unsupported = (os) => { + return () => { + throw new Error(`Unsupported os: ${os}`); + }; +}; + +const detect = () => { + switch (process.platform) { + case 'linux': + return { + read: readLinux, + write: writeLinux, + }; + default: + return { + read: unsupported(process.platform), + write: unsupported(process.platform), + }; + } +} + +module.exports = detect(); |