aboutsummaryrefslogtreecommitdiff
path: root/e2e/lib/clipboard.js
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2019-04-16 13:07:19 +0000
committerGitHub <noreply@github.com>2019-04-16 13:07:19 +0000
commit938fe9f752e393f0ea21def020e849a51ea79300 (patch)
treea1291d993c3e12ef4994a8fa4820fef69f23c7e2 /e2e/lib/clipboard.js
parent19ca873a38500b125133b6e2db47c8ca074f9c50 (diff)
parent9f7150e96b7b228429f9f893657f4647e5a8cb51 (diff)
Merge pull request #565 from ueokande/add-e2e-tests
Add e2e tests
Diffstat (limited to 'e2e/lib/clipboard.js')
-rw-r--r--e2e/lib/clipboard.js63
1 files changed, 63 insertions, 0 deletions
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();