| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- describe('Core_paste', () => {
- var id = 'testContainer';
- beforeEach(function() {
- this.$container = $(`<div id="${id}"></div>`).appendTo('body');
- });
- afterEach(function() {
- if (this.$container) {
- destroy();
- this.$container.remove();
- }
- });
- var arrayOfArrays = function() {
- return [
- ['', 'Kia', 'Nissan', 'Toyota', 'Honda'],
- ['2008', 10, 11, 12, 13],
- ['2009', 20, 11, 14, 13],
- ['2010', 30, 15, 12, 13]
- ];
- };
- it('should not create new rows or columns when allowInsertRow and allowInsertColumn equal false', (done) => {
- handsontable({
- data: arrayOfArrays(),
- pasteMode: 'shift_down',
- allowInsertRow: false,
- allowInsertColumn: false
- });
- selectCell(3, 4); // selectAll
- triggerPaste('Kia\tNissan\tToyota');
- setTimeout(() => {
- var expected = arrayOfArrays();
- expected[3][4] = 'Kia';
- expect(getData()).toEqual(expected);
- done();
- }, 60);
- });
- it('should shift data down instead of overwrite when paste (when allowInsertRow = false)', (done) => {
- handsontable({
- data: arrayOfArrays(),
- pasteMode: 'shift_down',
- allowInsertRow: false
- });
- selectCell(1, 0); // selectAll
- triggerPaste('Kia\tNissan\tToyota');
- setTimeout(() => {
- expect(getData().length).toEqual(4);
- expect(getData(0, 0, 2, 4)).toEqual([['', 'Kia', 'Nissan', 'Toyota', 'Honda'], ['Kia', 'Nissan', 'Toyota', 12, 13], ['2008', 10, 11, 14, 13]]);
- done();
- }, 60);
- });
- it('should shift data down instead of overwrite when paste (minSpareRows > 0)', (done) => {
- handsontable({
- data: arrayOfArrays(),
- pasteMode: 'shift_down',
- minSpareRows: 1
- });
- selectCell(1, 0); // selectAll
- triggerPaste('Kia\tNissan\tToyota');
- setTimeout(() => {
- expect(getData().length).toEqual(6);
- expect(getData(0, 0, 2, 4)).toEqual([['', 'Kia', 'Nissan', 'Toyota', 'Honda'], ['Kia', 'Nissan', 'Toyota', 12, 13], ['2008', 10, 11, 14, 13]]);
- done();
- }, 60);
- });
- it('should shift right insert instead of overwrite when paste', (done) => {
- handsontable({
- data: arrayOfArrays(),
- pasteMode: 'shift_right',
- allowInsertColumn: false
- });
- selectCell(1, 0); // selectAll
- triggerPaste('Kia\tNissan\tToyota');
- setTimeout(() => {
- expect(getData()[0].length).toEqual(5);
- expect(getDataAtRow(1)).toEqual(['Kia', 'Nissan', 'Toyota', '2008', 10]);
- done();
- }, 60);
- });
- it('should shift right insert instead of overwrite when paste (minSpareCols > 0)', (done) => {
- handsontable({
- data: arrayOfArrays(),
- pasteMode: 'shift_right',
- minSpareCols: 1
- });
- selectCell(1, 0); // selectAll
- triggerPaste('Kia\tNissan\tToyota');
- setTimeout(() => {
- expect(getData()[0].length).toEqual(9);
- expect(getDataAtRow(1)).toEqual(['Kia', 'Nissan', 'Toyota', '2008', 10, 11, 12, 13, null]);
- done();
- }, 60);
- });
- it('should not throw an error when changes are null in `once` hook', (done) => {
- var errors = 0;
- try {
- handsontable({
- data: arrayOfArrays(),
- afterChange(changes, source) {
- if (source === 'loadData') {
- return;
- }
- loadData(arrayOfArrays());
- }
- });
- selectCell(1, 0); // selectAll
- triggerPaste('Kia\tNissan\tToyota');
- } catch (e) {
- errors++;
- }
- setTimeout(() => {
- expect(errors).toEqual(0);
- done();
- }, 60);
- });
- it('should not paste any data, if no cell is selected', function(done) {
- var hot = handsontable({
- data: Handsontable.helper.createSpreadsheetData(3, 1)
- });
- var copiedData1 = 'foo';
- var copiedData2 = 'bar';
- expect(this.$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
- expect(this.$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual('A2');
- expect(this.$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual('A3');
- expect(getSelected()).toBeUndefined();
- hot.copyPaste.triggerPaste($.Event(), copiedData1);
- setTimeout(() => {
- expect(spec().$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
- expect(spec().$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual('A2');
- expect(spec().$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual('A3');
- }, 100);
- setTimeout(() => {
- selectCell(1, 0, 2, 0);
- hot.copyPaste.triggerPaste($.Event(), copiedData2);
- }, 200);
- setTimeout(() => {
- expect(spec().$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
- expect(spec().$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual(copiedData2);
- expect(spec().$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual(copiedData2);
- done();
- }, 300);
- });
- it('should not paste any data, if no cell is selected (select/deselect cell using mouse)', function(done) {
- var hot = handsontable({
- data: Handsontable.helper.createSpreadsheetData(3, 1)
- });
- var copiedData = 'foo';
- expect(this.$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
- expect(this.$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual('A2');
- expect(this.$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual('A3');
- this.$container.find('tbody tr:eq(1) td:eq(0)').simulate('mousedown');
- this.$container.find('tbody tr:eq(1) td:eq(0)').simulate('mouseup');
- expect(getSelected()).toEqual([1, 0, 1, 0]);
- $('html').simulate('mousedown');
- expect(getSelected()).toBeUndefined();
- hot.copyPaste.triggerPaste($.Event(), copiedData);
- setTimeout(() => {
- expect(spec().$container.find('tbody tr:eq(0) td:eq(0)').text()).toEqual('A1');
- expect(spec().$container.find('tbody tr:eq(1) td:eq(0)').text()).toEqual('A2');
- expect(spec().$container.find('tbody tr:eq(2) td:eq(0)').text()).toEqual('A3');
- done();
- }, 100);
- });
- });
|