d66c0eb2624e6cf63b13ddfcc513a6397f1a7072a983f5a5624c5d20ae2add5f3a54e9d537bba3b55073940cd2b59867bec445c640669f1015bb2cbe81cfa4 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. describe('Core_render', () => {
  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. it('all cells should get green background', function() {
  13. function greenCell(instance, td, row, col, prop, value, cellProperties) {
  14. Handsontable.renderers.TextRenderer.apply(this, arguments);
  15. td.style.backgroundColor = 'green';
  16. }
  17. handsontable({
  18. data: [
  19. ['a', 'b'],
  20. ['c', 'd']
  21. ],
  22. minRows: 4,
  23. minCols: 4,
  24. minSpareRows: 4,
  25. minSpareCols: 4,
  26. cells() {
  27. return {
  28. renderer: greenCell
  29. };
  30. }
  31. });
  32. var $tds = this.$container.find('.htCore tbody td');
  33. $tds.each(function() {
  34. expect(this.style.backgroundColor).toEqual('green');
  35. });
  36. });
  37. it('render should update border dimensions', function() {
  38. var data = [
  39. ['a', 'b'],
  40. ['c', 'd']
  41. ];
  42. handsontable({
  43. data,
  44. minRows: 4,
  45. minCols: 4,
  46. minSpareRows: 4,
  47. minSpareCols: 4
  48. });
  49. selectCell(1, 1);
  50. data[1][1] = 'dddddddddddddddddddd';
  51. render();
  52. var $td = this.$container.find('.htCore tbody tr:eq(1) td:eq(1)');
  53. expect(this.$container.find('.wtBorder.current').width()).toBeGreaterThan($td.width());
  54. });
  55. it('should not render table twice', () => {
  56. var counter = 0;
  57. handsontable({
  58. data: [
  59. ['Joe Red']
  60. ],
  61. afterRender() {
  62. counter++;
  63. }
  64. });
  65. populateFromArray(0, 0, [['t', 'e', 's', 't']]);
  66. expect(counter).toEqual(2); // 1 from load and 1 from populateFromArray
  67. });
  68. it('should run afterRenderer hook', function() {
  69. var lastCellProperties;
  70. handsontable({
  71. data: [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]],
  72. afterRenderer(td, row, col, prop, value, cellProperties) {
  73. td.innerHTML = 'Changed by plugin';
  74. if (!cellProperties) {
  75. throw new Error();
  76. }
  77. lastCellProperties = cellProperties;
  78. }
  79. });
  80. expect(this.$container.find('td:eq(0)')[0].innerHTML).toEqual('Changed by plugin');
  81. expect(lastCellProperties.row).toEqual(1);
  82. expect(lastCellProperties.col).toEqual(4);
  83. });
  84. it('should run beforeRenderer hook', function() {
  85. var lastCellProperties;
  86. handsontable({
  87. data: [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]],
  88. beforeRenderer(td, row, col, prop, value, cellProperties) {
  89. td.innerHTML = 'Changed by plugin';
  90. lastCellProperties = cellProperties;
  91. }
  92. });
  93. // Value is overwritten by text renderer
  94. expect(this.$container.find('td:eq(0)')[0].innerHTML).toEqual('1');
  95. expect(lastCellProperties.row).toEqual(1);
  96. expect(lastCellProperties.col).toEqual(4);
  97. });
  98. it('should reflect changes applied in beforeRenderer into afterRenderer', () => {
  99. var afterRenderer = jasmine.createSpy();
  100. handsontable({
  101. data: [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]],
  102. beforeRenderer(td, row, col, prop, value, cellProperties) {
  103. cellProperties.foo = 'bar';
  104. },
  105. afterRenderer,
  106. });
  107. expect(afterRenderer.calls.count()).toBe(10);
  108. expect(afterRenderer.calls.argsFor(0)[0] instanceof HTMLTableCellElement).toBe(true);
  109. expect(afterRenderer.calls.argsFor(0)[1]).toBe(0);
  110. expect(afterRenderer.calls.argsFor(0)[2]).toBe(0);
  111. expect(afterRenderer.calls.argsFor(0)[3]).toBe(0);
  112. expect(afterRenderer.calls.argsFor(0)[4]).toBe(1);
  113. expect(afterRenderer.calls.argsFor(0)[5].foo).toBe('bar');
  114. });
  115. });