42ece30a22a328059238d1962a4118cceb4f4e3d82425b82cc425d011c62241661e20f03f46aa2efa23890cb41d5d9340d41fd3bc9c68e94846ba64fdf782e 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. describe('Core_paste', () => {
  2. var id = 'testContainer';
  3. beforeEach(function() {
  4. this.$container = $(`<div id="${id}"></div>`).appendTo('body');
  5. });
  6. afterEach(function() {
  7. if (this.$container) {
  8. destroy();
  9. this.$container.remove();
  10. }
  11. });
  12. var arrayOfArrays = function() {
  13. return [
  14. ['', 'Kia', 'Nissan', 'Toyota', 'Honda'],
  15. ['2008', 10, 11, 12, 13],
  16. ['2009', 20, 11, 14, 13],
  17. ['2010', 30, 15, 12, 13]
  18. ];
  19. };
  20. it('should not create new rows or columns when allowInsertRow and allowInsertColumn equal false', (done) => {
  21. handsontable({
  22. data: arrayOfArrays(),
  23. pasteMode: 'shift_down',
  24. allowInsertRow: false,
  25. allowInsertColumn: false
  26. });
  27. selectCell(3, 4); // selectAll
  28. triggerPaste('Kia\tNissan\tToyota');
  29. setTimeout(() => {
  30. var expected = arrayOfArrays();
  31. expected[3][4] = 'Kia';
  32. expect(getData()).toEqual(expected);
  33. done();
  34. }, 60);
  35. });
  36. it('should shift data down instead of overwrite when paste (when allowInsertRow = false)', (done) => {
  37. handsontable({
  38. data: arrayOfArrays(),
  39. pasteMode: 'shift_down',
  40. allowInsertRow: false
  41. });
  42. selectCell(1, 0); // selectAll
  43. triggerPaste('Kia\tNissan\tToyota');
  44. setTimeout(() => {
  45. expect(getData().length).toEqual(4);
  46. expect(getData(0, 0, 2, 4)).toEqual([['', 'Kia', 'Nissan', 'Toyota', 'Honda'], ['Kia', 'Nissan', 'Toyota', 12, 13], ['2008', 10, 11, 14, 13]]);
  47. done();
  48. }, 60);
  49. });
  50. it('should shift data down instead of overwrite when paste (minSpareRows > 0)', (done) => {
  51. handsontable({
  52. data: arrayOfArrays(),
  53. pasteMode: 'shift_down',
  54. minSpareRows: 1
  55. });
  56. selectCell(1, 0); // selectAll
  57. triggerPaste('Kia\tNissan\tToyota');
  58. setTimeout(() => {
  59. expect(getData().length).toEqual(6);
  60. expect(getData(0, 0, 2, 4)).toEqual([['', 'Kia', 'Nissan', 'Toyota', 'Honda'], ['Kia', 'Nissan', 'Toyota', 12, 13], ['2008', 10, 11, 14, 13]]);
  61. done();
  62. }, 60);
  63. });
  64. it('should shift right insert instead of overwrite when paste', (done) => {
  65. handsontable({
  66. data: arrayOfArrays(),
  67. pasteMode: 'shift_right',
  68. allowInsertColumn: false
  69. });
  70. selectCell(1, 0); // selectAll
  71. triggerPaste('Kia\tNissan\tToyota');
  72. setTimeout(() => {
  73. expect(getData()[0].length).toEqual(5);
  74. expect(getDataAtRow(1)).toEqual(['Kia', 'Nissan', 'Toyota', '2008', 10]);
  75. done();
  76. }, 60);
  77. });
  78. it('should shift right insert instead of overwrite when paste (minSpareCols > 0)', (done) => {
  79. handsontable({
  80. data: arrayOfArrays(),
  81. pasteMode: 'shift_right',
  82. minSpareCols: 1
  83. });
  84. selectCell(1, 0); // selectAll
  85. triggerPaste('Kia\tNissan\tToyota');
  86. setTimeout(() => {
  87. expect(getData()[0].length).toEqual(9);
  88. expect(getDataAtRow(1)).toEqual(['Kia', 'Nissan', 'Toyota', '2008', 10, 11, 12, 13, null]);
  89. done();
  90. }, 60);
  91. });
  92. it('should not throw an error when changes are null in `once` hook', (done) => {
  93. var errors = 0;
  94. try {
  95. handsontable({
  96. data: arrayOfArrays(),
  97. afterChange(changes, source) {
  98. if (source === 'loadData') {
  99. return;
  100. }
  101. loadData(arrayOfArrays());
  102. }
  103. });
  104. selectCell(1, 0); // selectAll
  105. triggerPaste('Kia\tNissan\tToyota');
  106. } catch (e) {
  107. errors++;
  108. }
  109. setTimeout(() => {
  110. expect(errors).toEqual(0);
  111. done();
  112. }, 60);
  113. });
  114. it('should not paste any data, if no cell is selected', function(done) {
  115. var hot = handsontable({
  116. data: Handsontable.helper.createSpreadsheetData(3, 1)
  117. });
  118. var copiedData1 = 'foo';
  119. var copiedData2 = 'bar';
  120. expect(this.$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
  121. expect(this.$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual('A2');
  122. expect(this.$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual('A3');
  123. expect(getSelected()).toBeUndefined();
  124. hot.copyPaste.triggerPaste($.Event(), copiedData1);
  125. setTimeout(() => {
  126. expect(spec().$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
  127. expect(spec().$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual('A2');
  128. expect(spec().$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual('A3');
  129. }, 100);
  130. setTimeout(() => {
  131. selectCell(1, 0, 2, 0);
  132. hot.copyPaste.triggerPaste($.Event(), copiedData2);
  133. }, 200);
  134. setTimeout(() => {
  135. expect(spec().$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
  136. expect(spec().$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual(copiedData2);
  137. expect(spec().$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual(copiedData2);
  138. done();
  139. }, 300);
  140. });
  141. it('should not paste any data, if no cell is selected (select/deselect cell using mouse)', function(done) {
  142. var hot = handsontable({
  143. data: Handsontable.helper.createSpreadsheetData(3, 1)
  144. });
  145. var copiedData = 'foo';
  146. expect(this.$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
  147. expect(this.$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual('A2');
  148. expect(this.$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual('A3');
  149. this.$container.find('tbody tr:eq(1) td:eq(0)').simulate('mousedown');
  150. this.$container.find('tbody tr:eq(1) td:eq(0)').simulate('mouseup');
  151. expect(getSelected()).toEqual([1, 0, 1, 0]);
  152. $('html').simulate('mousedown');
  153. expect(getSelected()).toBeUndefined();
  154. hot.copyPaste.triggerPaste($.Event(), copiedData);
  155. setTimeout(() => {
  156. expect(spec().$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
  157. expect(spec().$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual('A2');
  158. expect(spec().$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual('A3');
  159. done();
  160. }, 100);
  161. });
  162. });