123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- describe('GhostTable', () => {
- var hotSettings = {
- data: [['A', '1', 'A\nB\nC'], ['B', '2', 'A-----B-------C'], ['C', '3', 'A---\n--B-------C']]
- };
- var gt;
- beforeEach(function() {
- this.$container = $('<div id="testContainer"></div>').appendTo('body');
- });
- afterEach(function() {
- if (this.$container) {
- destroy();
- this.$container.remove();
- }
- if (gt) {
- gt.clean();
- gt = null;
- }
- });
- describe('row', () => {
- it('should throw exception if we try to add column after added row', () => {
- var hot = handsontable(hotSettings);
- var exception = false;
- var samples = new Map();
- gt = new Handsontable.__GhostTable(hot);
- gt.addRow(0, samples);
- try {
- gt.addColumn(0, samples);
- } catch (ex) {
- exception = true;
- }
- expect(exception).toBe(true);
- });
- it('should create container element only for first row', () => {
- var hot = handsontable(hotSettings);
- var samples = new Map();
- gt = new Handsontable.__GhostTable(hot);
- spyOn(gt, 'createContainer').and.callThrough();
- gt.addRow(0, samples);
- gt.addRow(0, samples);
- gt.addRow(0, samples);
- gt.addRow(1, samples);
- gt.addRow(2, samples);
- expect(gt.createContainer.calls.count()).toBe(1);
- expect(gt.createContainer.calls.mostRecent().args).toEqual(['handsontable']);
- });
- it('should add row to rows collection after call `addRow` method', () => {
- var hot = handsontable(hotSettings);
- var samples = new Map();
- gt = new Handsontable.__GhostTable(hot);
- expect(gt.rows.length).toBe(0);
- samples.clear();
- samples.set(0, {strings: [{value: 'Foo', row: 0}, {value: 'Foo Bar', row: 0}]});
- gt.addRow(0, samples);
- expect(gt.rows.length).toBe(1);
- expect(gt.rows[0].row).toBe(0);
- expect(gt.rows[0].table.className).toBe('htCore');
- expect(gt.rows[0].table.nodeName).toBe('TABLE');
- expect(gt.rows[0].table.querySelectorAll('colgroup > col').length).toBe(2);
- expect(gt.rows[0].table.querySelector('tbody > tr > td').innerHTML).toBe('Foo');
- samples.clear();
- samples.set(0, {strings: [{value: 'Bar', row: 1}, {value: 'Baz1234', row: 1}]});
- gt.addRow(1, samples);
- expect(gt.rows.length).toBe(2);
- expect(gt.rows[1].row).toBe(1);
- expect(gt.rows[1].table.className).toBe('htCore');
- expect(gt.rows[1].table.nodeName).toBe('TABLE');
- expect(gt.rows[1].table.querySelectorAll('colgroup > col').length).toBe(2);
- expect(gt.rows[1].table.querySelector('tbody > tr > td').innerHTML).toBe('Bar');
- });
- it('should get valid heights', () => {
- var hot = handsontable(hotSettings);
- var heightSpy = jasmine.createSpy();
- var samples = new Map();
- gt = new Handsontable.__GhostTable(hot);
- samples.clear();
- samples.set(0, {strings: [{value: 'Foo', row: 0}, {value: 'Foo.....Bar', row: 0}]});
- gt.addRow(0, samples);
- samples.clear();
- samples.set(0, {strings: [{value: 'Foo\nBar\nsqw', row: 1}]});
- gt.addRow(1, samples);
- samples.clear();
- samples.set(0, {strings: [{value: 'Foo', row: 0}, {value: 'Foo Bar', row: 0}]});
- gt.addRow(2, samples);
- gt.getHeights(heightSpy);
- expect(heightSpy.calls.count()).toBe(3);
- expect(heightSpy.calls.argsFor(0)[0]).toBe(0);
- expect(heightSpy.calls.argsFor(0)[1]).toBe(23);
- expect(heightSpy.calls.argsFor(1)[0]).toBe(1);
- expect(heightSpy.calls.argsFor(1)[1]).toBe(64);
- expect(heightSpy.calls.argsFor(2)[0]).toBe(2);
- expect(heightSpy.calls.argsFor(2)[1]).toBe(43);
- });
- });
- describe('column', () => {
- it('should throw exception if we try to add row after added column', () => {
- var hot = handsontable(hotSettings);
- var exception = false;
- var samples = new Map();
- gt = new Handsontable.__GhostTable(hot);
- gt.addColumn(0, samples);
- try {
- gt.addRow(0, samples);
- } catch (ex) {
- exception = true;
- }
- expect(exception).toBe(true);
- });
- it('should create container element only for first column', () => {
- var hot = handsontable(hotSettings);
- var samples = new Map();
- gt = new Handsontable.__GhostTable(hot);
- spyOn(gt, 'createContainer').and.callThrough();
- gt.addColumn(0, samples);
- gt.addColumn(0, samples);
- gt.addColumn(0, samples);
- gt.addColumn(1, samples);
- gt.addColumn(2, samples);
- expect(gt.createContainer.calls.count()).toBe(1);
- expect(gt.createContainer.calls.mostRecent().args).toEqual(['handsontable']);
- });
- it('should add column to columns collection after call `addColumn` method', () => {
- var hot = handsontable(hotSettings);
- var samples = new Map();
- gt = new Handsontable.__GhostTable(hot);
- expect(gt.columns.length).toBe(0);
- samples.clear();
- samples.set(0, {strings: [{value: 'Foo', col: 0}, {value: 'Foo Bar', col: 0}]});
- gt.addColumn(0, samples);
- expect(gt.columns.length).toBe(1);
- expect(gt.columns[0].col).toBe(0);
- expect(gt.columns[0].table.className).toBe('htCore');
- expect(gt.columns[0].table.style.width).toBe('auto');
- expect(gt.columns[0].table.style.tableLayout).toBe('auto');
- expect(gt.columns[0].table.nodeName).toBe('TABLE');
- expect(gt.columns[0].table.querySelectorAll('thead > tr > th').length).toBe(1);
- expect(gt.columns[0].table.querySelector('tbody > tr > td').innerHTML).toBe('Foo');
- samples.clear();
- samples.set(0, {strings: [{value: 'Bar', row: 1}, {value: 'Baz1234', row: 1}]});
- gt.addColumn(1, samples);
- expect(gt.columns.length).toBe(2);
- expect(gt.columns[1].col).toBe(1);
- expect(gt.columns[1].table.className).toBe('htCore');
- expect(gt.columns[1].table.nodeName).toBe('TABLE');
- expect(gt.columns[1].table.querySelectorAll('thead > tr > th').length).toBe(1);
- expect(gt.columns[1].table.querySelector('tbody > tr > td').innerHTML).toBe('Bar');
- });
- it('should get valid widths', () => {
- var hot = handsontable(hotSettings);
- var widthSpy = jasmine.createSpy();
- var samples = new Map();
- gt = new Handsontable.__GhostTable(hot);
- samples.clear();
- samples.set(0, {strings: [{value: 'Foo', col: 0}, {value: 'Foo.....Bar', col: 0}]});
- gt.addColumn(0, samples);
- samples.clear();
- samples.set(0, {strings: [{value: 'Foo\nBar\nsqw', col: 1}]});
- gt.addColumn(1, samples);
- samples.clear();
- samples.set(0, {strings: [{value: 'Foo', col: 0}, {value: 'Foo Bar', col: 0}]});
- gt.addColumn(2, samples);
- gt.getWidths(widthSpy);
- expect(widthSpy.calls.count()).toBe(3);
- expect(widthSpy.calls.argsFor(0)[0]).toBe(0);
- expect(widthSpy.calls.argsFor(0)[1]).toBeAroundValue(87, 4);
- expect(widthSpy.calls.argsFor(1)[0]).toBe(1);
- expect(widthSpy.calls.argsFor(1)[1]).toBeAroundValue(41, 4);
- expect(widthSpy.calls.argsFor(2)[0]).toBe(2);
- expect(widthSpy.calls.argsFor(2)[1]).toBeAroundValue(68, 4);
- });
- });
- it('should reset internal state after call `clean` method', () => {
- var hot = handsontable(hotSettings);
- var samples = new Map();
- gt = new Handsontable.__GhostTable(hot);
- gt.addColumn(0, samples);
- gt.rows.push({});
- gt.getWidths(() => {});
- expect(gt.columns.length).toBe(1);
- expect(gt.samples).toBeDefined();
- expect(gt.injected).toBe(true);
- expect(gt.container).toBeDefined();
- expect(document.querySelector('.htGhostTable')).toBeDefined();
- gt.clean();
- expect(gt.columns.length).toBe(0);
- expect(gt.samples).toBe(null);
- expect(gt.injected).toBe(false);
- expect(gt.container).toBe(null);
- expect(document.querySelector('.htGhostTable')).toBe(null);
- });
- it('should be detected as vertical if at least one row is added', () => {
- var hot = handsontable(hotSettings);
- var samples = new Map();
- var gt = new Handsontable.__GhostTable(hot);
- gt.addRow(0, samples);
- expect(gt.isVertical()).toBe(true);
- expect(gt.isHorizontal()).toBe(false);
- });
- it('should be detected as horizontal if at least one column is added', () => {
- var hot = handsontable(hotSettings);
- var samples = new Map();
- var gt = new Handsontable.__GhostTable(hot);
- gt.addColumn(0, samples);
- expect(gt.isVertical()).toBe(false);
- expect(gt.isHorizontal()).toBe(true);
- });
- });
|