Add spec
This commit is contained in:
parent
7e0a4c5e57
commit
6127192783
2 changed files with 55 additions and 6 deletions
|
@ -273,12 +273,12 @@ const gfmRules = {
|
|||
|
||||
class CopyAsGFM {
|
||||
constructor() {
|
||||
$(document).on('copy', '.md, .wiki', (e) => { this.copyAsGFM(e, CopyAsGFM.transformGFMSelection); });
|
||||
$(document).on('copy', 'pre.code.highlight, .diff-content .line_content', (e) => { this.copyAsGFM(e, CopyAsGFM.transformCodeSelection); });
|
||||
$(document).on('paste', '.js-gfm-input', this.pasteGFM.bind(this));
|
||||
$(document).on('copy', '.md, .wiki', (e) => { CopyAsGFM.copyAsGFM(e, CopyAsGFM.transformGFMSelection); });
|
||||
$(document).on('copy', 'pre.code.highlight, .diff-content .line_content', (e) => { CopyAsGFM.copyAsGFM(e, CopyAsGFM.transformCodeSelection); });
|
||||
$(document).on('paste', '.js-gfm-input', CopyAsGFM.pasteGFM);
|
||||
}
|
||||
|
||||
copyAsGFM(e, transformer) {
|
||||
static copyAsGFM(e, transformer) {
|
||||
const clipboardData = e.originalEvent.clipboardData;
|
||||
if (!clipboardData) return;
|
||||
|
||||
|
@ -292,10 +292,10 @@ class CopyAsGFM {
|
|||
e.stopPropagation();
|
||||
|
||||
clipboardData.setData('text/plain', el.textContent);
|
||||
clipboardData.setData('text/x-gfm', CopyAsGFM.nodeToGFM(el));
|
||||
clipboardData.setData('text/x-gfm', this.nodeToGFM(el));
|
||||
}
|
||||
|
||||
pasteGFM(e) {
|
||||
static pasteGFM(e) {
|
||||
const clipboardData = e.originalEvent.clipboardData;
|
||||
if (!clipboardData) return;
|
||||
|
||||
|
|
49
spec/javascripts/copy_as_gfm_spec.js
Normal file
49
spec/javascripts/copy_as_gfm_spec.js
Normal file
|
@ -0,0 +1,49 @@
|
|||
require('~/copy_as_gfm');
|
||||
|
||||
(() => {
|
||||
describe('gl.CopyAsGFM', () => {
|
||||
describe('gl.CopyAsGFM.pasteGFM', () => {
|
||||
function callPasteGFM() {
|
||||
const e = {
|
||||
originalEvent: {
|
||||
clipboardData: {
|
||||
getData(mimeType) {
|
||||
// When GFM code is copied, we put the regular plain text
|
||||
// on the clipboard as `text/plain`, and the GFM as `text/x-gfm`.
|
||||
// This emulates the behavior of `getData` with that data.
|
||||
if (mimeType === 'text/plain') {
|
||||
return 'code';
|
||||
}
|
||||
if (mimeType === 'text/x-gfm') {
|
||||
return '`code`';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
},
|
||||
},
|
||||
preventDefault() {},
|
||||
};
|
||||
|
||||
window.gl.CopyAsGFM.pasteGFM(e);
|
||||
}
|
||||
|
||||
it('wraps pasted code when not already in code tags', () => {
|
||||
spyOn(window.gl.utils, 'insertText').and.callFake((el, textFunc) => {
|
||||
const insertedText = textFunc('This is code: ', '');
|
||||
expect(insertedText).toEqual('`code`');
|
||||
});
|
||||
|
||||
callPasteGFM();
|
||||
});
|
||||
|
||||
it('does not wrap pasted code when already in code tags', () => {
|
||||
spyOn(window.gl.utils, 'insertText').and.callFake((el, textFunc) => {
|
||||
const insertedText = textFunc('This is code: `', '`');
|
||||
expect(insertedText).toEqual('code');
|
||||
});
|
||||
|
||||
callPasteGFM();
|
||||
});
|
||||
});
|
||||
});
|
||||
})();
|
Loading…
Reference in a new issue