From 23d242158490d7fae9551f670e5ae5f33ace5ce8 Mon Sep 17 00:00:00 2001 From: lana-k Date: Sun, 29 Aug 2021 21:32:13 +0200 Subject: [PATCH] add tests for clipboard lib --- src/lib/utils/clipboardIo.js | 46 ++++++++++++++--------------- tests/lib/utils/clipboardIo.spec.js | 30 +++++++++++++++++++ 2 files changed, 53 insertions(+), 23 deletions(-) create mode 100644 tests/lib/utils/clipboardIo.spec.js diff --git a/src/lib/utils/clipboardIo.js b/src/lib/utils/clipboardIo.js index aabdff4..9806a32 100644 --- a/src/lib/utils/clipboardIo.js +++ b/src/lib/utils/clipboardIo.js @@ -1,27 +1,6 @@ import Lib from 'plotly.js/src/lib' import dataUrlToBlob from 'dataurl-to-blob' -async function _copyBlob (blob) { - await navigator.clipboard.write([ - new ClipboardItem({ // eslint-disable-line no-undef - [blob.type]: blob - }) - ]) -} - -async function _copyFromDataUrl (url) { - const blob = dataUrlToBlob(url) - await _copyBlob(blob) - Lib.notifier('Image copied to clipboard successfully', 'long') -} - -async function _copyCanvas (canvas) { - canvas.toBlob(async (blob) => { - await _copyBlob(blob) - Lib.notifier('Image copied to clipboard successfully', 'long') - }, 'image/png', 1) -} - export default { async copyCsv (str) { await navigator.clipboard.writeText(str) @@ -30,9 +9,30 @@ export default { async copyImage (source) { if (source instanceof HTMLCanvasElement) { - return _copyCanvas(source) + return this._copyCanvas(source) } else { - return _copyFromDataUrl(source) + return this._copyFromDataUrl(source) } + }, + + async _copyBlob (blob) { + await navigator.clipboard.write([ + new ClipboardItem({ // eslint-disable-line no-undef + [blob.type]: blob + }) + ]) + }, + + async _copyFromDataUrl (url) { + const blob = dataUrlToBlob(url) + await this._copyBlob(blob) + Lib.notifier('Image copied to clipboard successfully', 'long') + }, + + async _copyCanvas (canvas) { + canvas.toBlob(async (blob) => { + await this._copyBlob(blob) + Lib.notifier('Image copied to clipboard successfully', 'long') + }, 'image/png', 1) } } diff --git a/tests/lib/utils/clipboardIo.spec.js b/tests/lib/utils/clipboardIo.spec.js new file mode 100644 index 0000000..3a61d57 --- /dev/null +++ b/tests/lib/utils/clipboardIo.spec.js @@ -0,0 +1,30 @@ +import { expect } from 'chai' +import cIo from '@/lib/utils/clipboardIo' +import sinon from 'sinon' + +describe('clipboardIo.js', async () => { + afterEach(() => { + sinon.restore() + }) + + it('copyCsv', async () => { + sinon.stub(navigator.clipboard, 'writeText').resolves(true) + await cIo.copyCsv('id\tname\r\n1\t2') + expect(navigator.clipboard.writeText.calledOnceWith('id\tname\r\n1\t2')) + }) + + it('copyImage for canvas calls _copyCanvas', async () => { + sinon.stub(cIo, '_copyCanvas').resolves(true) + const canvas = document.createElement('canvas') + + await cIo.copyImage(canvas) + expect(cIo._copyCanvas.calledOnceWith(canvas)) + }) + + it('copyImage for dataUrl calls _copyFromDataUrl', async () => { + sinon.stub(cIo, '_copyFromDataUrl').resolves(true) + const url = document.createElement('canvas').toDataURL() + await cIo.copyImage(url) + expect(cIo._copyFromDataUrl.calledOnceWith(url)) + }) +})