renderer.spec.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. describe('settings', () => {
  2. describe('renderer', () => {
  3. var id = 'testContainer';
  4. beforeEach(function() {
  5. this.$container = $(`<div id="${id}"></div>`).appendTo('body');
  6. });
  7. afterEach(function() {
  8. if (this.$container) {
  9. destroy();
  10. this.$container.remove();
  11. }
  12. });
  13. describe('defined in constructor', () => {
  14. it('should use text renderer by default', () => {
  15. var originalTextRenderer = Handsontable.cellTypes.text.renderer;
  16. spyOn(Handsontable.cellTypes.text, 'renderer');
  17. Handsontable.renderers.registerRenderer('text', Handsontable.cellTypes.text.renderer);
  18. handsontable();
  19. expect(Handsontable.cellTypes.text.renderer).toHaveBeenCalled();
  20. Handsontable.renderers.registerRenderer('text', originalTextRenderer);
  21. });
  22. it('should use renderer from predefined string', () => {
  23. var originalTextRenderer = Handsontable.renderers.TextRenderer;
  24. spyOn(Handsontable.renderers, 'TextRenderer');
  25. Handsontable.renderers.registerRenderer('text', Handsontable.renderers.TextRenderer);
  26. var originalCheckboxRenderer = Handsontable.renderers.CheckboxRenderer;
  27. spyOn(Handsontable.renderers, 'CheckboxRenderer');
  28. Handsontable.renderers.registerRenderer('checkbox', Handsontable.renderers.CheckboxRenderer);
  29. handsontable({
  30. columns: [
  31. {
  32. renderer: 'checkbox'
  33. }
  34. ]
  35. });
  36. expect(Handsontable.renderers.TextRenderer).not.toHaveBeenCalled();
  37. expect(Handsontable.renderers.CheckboxRenderer).toHaveBeenCalled();
  38. Handsontable.renderers.registerRenderer('text', originalTextRenderer);
  39. Handsontable.renderers.registerRenderer('checkbox', originalCheckboxRenderer);
  40. });
  41. it('should use renderer from predefined string when columns is a function', () => {
  42. var originalTextRenderer = Handsontable.renderers.TextRenderer;
  43. spyOn(Handsontable.renderers, 'TextRenderer');
  44. Handsontable.renderers.registerRenderer('text', Handsontable.renderers.TextRenderer);
  45. var originalCheckboxRenderer = Handsontable.renderers.CheckboxRenderer;
  46. spyOn(Handsontable.renderers, 'CheckboxRenderer');
  47. Handsontable.renderers.registerRenderer('checkbox', Handsontable.renderers.CheckboxRenderer);
  48. handsontable({
  49. columns(column) {
  50. return column === 0 ? {renderer: 'checkbox'} : null;
  51. }
  52. });
  53. expect(Handsontable.renderers.TextRenderer).not.toHaveBeenCalled();
  54. expect(Handsontable.renderers.CheckboxRenderer).toHaveBeenCalled();
  55. Handsontable.renderers.registerRenderer('text', originalTextRenderer);
  56. Handsontable.renderers.registerRenderer('checkbox', originalCheckboxRenderer);
  57. });
  58. it('should use renderer from custom function', () => {
  59. var called = false;
  60. function myRenderer() {
  61. called = true;
  62. }
  63. handsontable({
  64. columns: [
  65. {
  66. renderer: myRenderer
  67. }
  68. ]
  69. });
  70. expect(called).toBe(true);
  71. });
  72. it('should use renderer from custom function when columns is a function', () => {
  73. var called = false;
  74. function myRenderer() {
  75. called = true;
  76. }
  77. handsontable({
  78. columns(column) {
  79. return column === 0 ? {renderer: myRenderer} : null;
  80. }
  81. });
  82. expect(called).toBe(true);
  83. });
  84. it('should use renderer from custom string', () => {
  85. var myRenderer = jasmine.createSpy('myRenderer');
  86. Handsontable.renderers.registerRenderer('myRenderer', myRenderer);
  87. handsontable({
  88. columns: [
  89. {
  90. renderer: 'myRenderer'
  91. }
  92. ]
  93. });
  94. expect(myRenderer).toHaveBeenCalled();
  95. });
  96. it('should use renderer from custom string when columns is a function', () => {
  97. var myRenderer = jasmine.createSpy('myRenderer');
  98. Handsontable.renderers.registerRenderer('myRenderer', myRenderer);
  99. handsontable({
  100. columns(column) {
  101. return column === 0 ? {renderer: 'myRenderer'} : null;
  102. }
  103. });
  104. expect(myRenderer).toHaveBeenCalled();
  105. });
  106. });
  107. it('should call renderer with cellProperties.row, cellProperties.col matching row and col arguments', () => {
  108. var rendererSpy = jasmine.createSpy('rendererSpy').and.callThrough();
  109. var cellPropertiesCache = [];
  110. rendererSpy.and.callFake((instance, TD, row, col, prop, value, cellProperties) => {
  111. cellPropertiesCache.push({
  112. row: cellProperties.row,
  113. col: cellProperties.col
  114. });
  115. });
  116. handsontable({
  117. renderer: rendererSpy
  118. });
  119. for (var i = 0, len = rendererSpy.calls.count(); i < len; i++) {
  120. var args = rendererSpy.calls.argsFor(i);
  121. var row = args[2];
  122. var col = args[3];
  123. var cellProperties = cellPropertiesCache[i];
  124. expect(row).toEqual(cellProperties.row);
  125. expect(col).toEqual(cellProperties.col);
  126. }
  127. });
  128. it('should call cells function before passing cellProperties to renderer', () => {
  129. var rendererSpy = jasmine.createSpy('rendererSpy').and.callThrough();
  130. var cellPropertiesCache = [];
  131. rendererSpy.and.callFake((instance, TD, row, col, prop, value, cellProperties) => {
  132. cellPropertiesCache.push({
  133. cellsRow: cellProperties.cellsRow,
  134. cellsCol: cellProperties.cellsCol
  135. });
  136. });
  137. handsontable({
  138. renderer: rendererSpy,
  139. cells(row, col) {
  140. return {
  141. cellsRow: row,
  142. cellsCol: col
  143. };
  144. }
  145. });
  146. for (var i = 0, len = rendererSpy.calls.count(); i < len; i++) {
  147. var args = rendererSpy.calls.argsFor(i);
  148. var row = args[2];
  149. var col = args[3];
  150. var cellProperties = cellPropertiesCache[i];
  151. expect(row).toEqual(cellProperties.cellsRow);
  152. expect(col).toEqual(cellProperties.cellsCol);
  153. }
  154. });
  155. });
  156. });