From 52b13f85cab26c6149d3f266e6e3309907f81baf Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Mon, 15 Apr 2019 21:18:54 +0900 Subject: Add e2e tests for yank/paste --- e2e/lib/clipboard.js | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 e2e/lib/clipboard.js (limited to 'e2e/lib/clipboard.js') 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(); -- cgit v1.2.3