CopyToClipboard.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. 'use strict';
  2. const common = require('../common');
  3. describe('CopyToClipboard', function() {
  4. this.timeout(30000);
  5. describe ('Copy document to clipboard', function () {
  6. jsc.property('Copy with button click',
  7. common.jscFormats(),
  8. 'nestring',
  9. async function (format, text) {
  10. var clean = jsdom();
  11. common.enableClipboard();
  12. $('body').html(
  13. '<div id="placeholder"></div>' +
  14. '<div id="attachmentPreview" class="hidden"></div>' +
  15. '<h5 id="copyShortcutHint" class="hidden">' +
  16. '<small id="copyShortcutHintText"></small>' +
  17. '<button type="button" id="copyShortcutHintBtn"></button>' +
  18. '</h5>' +
  19. '<div id="prettymessage" class="hidden">' +
  20. '<pre id="prettyprint"></pre>' +
  21. '</div>'
  22. );
  23. $.PrivateBin.PasteViewer.init();
  24. $.PrivateBin.PasteViewer.setFormat(format);
  25. $.PrivateBin.PasteViewer.setText(text);
  26. $.PrivateBin.PasteViewer.run();
  27. $.PrivateBin.CopyToClipboard.init();
  28. $('#copyShortcutHintBtn').trigger('click');
  29. const savedToClipboardText = await navigator.clipboard.readText();
  30. clean();
  31. return text === savedToClipboardText;
  32. }
  33. );
  34. /**
  35. * Unfortunately in JSVerify impossible to check if copy with shortcut when user selected some text on the page
  36. * (the copy document to clipboard should not work in this case) due to lacking window.getSelection() in jsdom.
  37. */
  38. jsc.property('Copy with keyboard shortcut',
  39. common.jscFormats(),
  40. 'nestring',
  41. async function (format, text) {
  42. var clean = jsdom();
  43. common.enableClipboard();
  44. $('body').html(
  45. '<div id="placeholder"></div>' +
  46. '<div id="attachmentPreview" class="hidden"></div>' +
  47. '<h5 id="copyShortcutHint" class="hidden">' +
  48. '<small id="copyShortcutHintText"></small>' +
  49. '<button type="button" id="copyShortcutHintBtn"></button>' +
  50. '</h5>' +
  51. '<div id="prettymessage" class="hidden">' +
  52. '<pre id="prettyprint"></pre>' +
  53. '</div>'
  54. );
  55. $.PrivateBin.PasteViewer.init();
  56. $.PrivateBin.PasteViewer.setFormat(format);
  57. $.PrivateBin.PasteViewer.setText(text);
  58. $.PrivateBin.PasteViewer.run();
  59. $.PrivateBin.CopyToClipboard.init();
  60. $('body').trigger('copy');
  61. const copiedTextWithoutSelectedText = await navigator.clipboard.readText();
  62. clean();
  63. return copiedTextWithoutSelectedText === text;
  64. }
  65. );
  66. });
  67. jsc.property('Copy link to clipboard',
  68. 'nestring',
  69. async function (text) {
  70. var clean = jsdom();
  71. common.enableClipboard();
  72. $('body').html('<button id="copyLink"></button>');
  73. $.PrivateBin.CopyToClipboard.init();
  74. $.PrivateBin.CopyToClipboard.setUrl(text);
  75. $('#copyLink').trigger('click');
  76. const copiedText = await navigator.clipboard.readText();
  77. clean();
  78. return text === copiedText;
  79. }
  80. );
  81. describe('Keyboard shortcut hint', function () {
  82. jsc.property('Show hint', function () {
  83. var clean = jsdom();
  84. $('body').html('<h5 id="copyShortcutHint" class="hidden"></h5>');
  85. $.PrivateBin.CopyToClipboard.init();
  86. $.PrivateBin.CopyToClipboard.showKeyboardShortcutHint();
  87. const hasHidden = $('#copyShortcutHint').hasClass('hidden');
  88. clean();
  89. return !hasHidden;
  90. }
  91. );
  92. jsc.property('Hide hint', function () {
  93. var clean = jsdom();
  94. $('body').html('<h5 id="copyShortcutHint"></h5>');
  95. $.PrivateBin.CopyToClipboard.init();
  96. $.PrivateBin.CopyToClipboard.hideKeyboardShortcutHint();
  97. const hasHidden = $('#copyShortcutHint').hasClass('hidden');
  98. clean();
  99. return hasHidden;
  100. }
  101. );
  102. });
  103. });