From 7e77e31ad64c3649888eae337e0c984fd9c2ea2a Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 22 Sep 2019 16:13:12 +0900 Subject: Migrate e2e tests to TypeScript --- e2e/lib/Console.js | 43 ---------------------------------- e2e/lib/Console.ts | 49 ++++++++++++++++++++++++++++++++++++++ e2e/lib/clipboard.js | 63 ------------------------------------------------- e2e/lib/clipboard.ts | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 115 insertions(+), 106 deletions(-) delete mode 100644 e2e/lib/Console.js create mode 100644 e2e/lib/Console.ts delete mode 100644 e2e/lib/clipboard.js create mode 100644 e2e/lib/clipboard.ts (limited to 'e2e/lib') diff --git a/e2e/lib/Console.js b/e2e/lib/Console.js deleted file mode 100644 index 6016de1..0000000 --- a/e2e/lib/Console.js +++ /dev/null @@ -1,43 +0,0 @@ -const { By } = require('selenium-webdriver'); - -class Console { - constructor(webdriver) { - this.webdriver = webdriver; - } - - async sendKeys(...keys) { - let input = await this.webdriver.findElement(By.css('input')); - input.sendKeys(...keys); - } - - async currentValue() { - return await this.webdriver.executeScript(() => { - let input = document.querySelector('input'); - return input.value; - }); - } - - async getCompletions() { - return await this.webdriver.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/Console.ts b/e2e/lib/Console.ts new file mode 100644 index 0000000..37b0597 --- /dev/null +++ b/e2e/lib/Console.ts @@ -0,0 +1,49 @@ +import { WebDriver, By } from 'selenium-webdriver'; + +export type CompletionItem = { + type: string; + text: string; + highlight: boolean; +} + +export class Console { + constructor(private webdriver: WebDriver) { + } + + async sendKeys(...keys: string[]) { + let input = await this.webdriver.findElement(By.css('input')); + input.sendKeys(...keys); + } + + async currentValue() { + return await this.webdriver.executeScript(() => { + let input = document.querySelector('input'); + if (input === null) { + throw new Error('could not find input element'); + } + return input.value; + }); + } + + getCompletions(): Promise { + return this.webdriver.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 Array.from(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; + }); + } +} diff --git a/e2e/lib/clipboard.js b/e2e/lib/clipboard.js deleted file mode 100644 index 4061dbd..0000000 --- a/e2e/lib/clipboard.js +++ /dev/null @@ -1,63 +0,0 @@ -'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(); diff --git a/e2e/lib/clipboard.ts b/e2e/lib/clipboard.ts new file mode 100644 index 0000000..13d95df --- /dev/null +++ b/e2e/lib/clipboard.ts @@ -0,0 +1,66 @@ +import { spawn } from 'child_process'; + +const readLinux = (): Promise => { + let stdout = '', stderr = ''; + return new Promise((resolve) => { + 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: string): Promise => { + let stderr = ''; + return new Promise((resolve) => { + 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(); + }); +}; + +class UnsupportedError extends Error { + constructor(platform: string) { + super(); + this.message = `Unsupported platform: ${platform}`; + } +} + +const read = () => { + switch (process.platform) { + case 'linux': + return readLinux(); + } + throw new UnsupportedError(process.platform); +} + +const write = (data: string) => { + switch (process.platform) { + case 'linux': + return writeLinux(data); + } + throw new UnsupportedError(process.platform); +} + +export { + read, + write, +}; -- cgit v1.2.3