interactions.spec.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. describe('interactions', function() {
  2. describe('context.active', function() {
  3. it('should be false for non active elements (default)', function() {
  4. var options = {color: function() {}};
  5. var spy = spyOn(options, 'color');
  6. jasmine.chart.acquire({
  7. type: 'line',
  8. data: {
  9. labels: [1, 2, 3],
  10. datasets: [{
  11. data: [1, 2, 3],
  12. fill: false
  13. }]
  14. },
  15. options: {
  16. plugins: {
  17. datalabels: options
  18. }
  19. }
  20. });
  21. expect(spy.calls.count()).toBe(3);
  22. expect(spy.calls.argsFor(0)[0].active).toBe(false);
  23. expect(spy.calls.argsFor(1)[0].active).toBe(false);
  24. expect(spy.calls.argsFor(2)[0].active).toBe(false);
  25. });
  26. it('should be true for active elements', function() {
  27. var options = {color: function() {}};
  28. var spy = spyOn(options, 'color');
  29. var chart = jasmine.chart.acquire({
  30. type: 'line',
  31. data: {
  32. labels: [1, 2, 3],
  33. datasets: [{
  34. data: [1, 2, 3],
  35. fill: false
  36. }]
  37. },
  38. options: {
  39. plugins: {
  40. datalabels: options
  41. }
  42. }
  43. });
  44. spy.calls.reset();
  45. var ds0 = chart.getDatasetMeta(0);
  46. jasmine.triggerMouseEvent(chart, 'mousemove', ds0.data[1]);
  47. expect(spy.calls.count()).toBe(1);
  48. expect(spy.calls.argsFor(0)[0].active).toBe(true);
  49. expect(spy.calls.argsFor(0)[0].dataIndex).toBe(1);
  50. expect(spy.calls.argsFor(0)[0].datasetIndex).toBe(0);
  51. });
  52. });
  53. describe('when the user hover elements', function() {
  54. it('should not update the whole chart (only render)', function() {
  55. var chart = jasmine.chart.acquire({
  56. type: 'line',
  57. data: {
  58. labels: [1, 2, 3],
  59. datasets: [{
  60. data: [1, 2, 3],
  61. fill: false
  62. }]
  63. }
  64. });
  65. spyOn(chart, 'update');
  66. spyOn(chart, 'render');
  67. jasmine.triggerMouseEvent(chart, 'mousemove', chart.getDatasetMeta(0).data[1]);
  68. expect(chart.update).not.toHaveBeenCalled();
  69. expect(chart.render).toHaveBeenCalled();
  70. });
  71. it('should only update active elements (context.active: true)', function() {
  72. var options = {color: function() {}};
  73. var spy = spyOn(options, 'color');
  74. var chart = jasmine.chart.acquire({
  75. type: 'line',
  76. data: {
  77. labels: [1, 2, 3],
  78. datasets: [{
  79. data: [1, 2, 3],
  80. fill: false
  81. }]
  82. },
  83. options: {
  84. plugins: {
  85. datalabels: options
  86. }
  87. }
  88. });
  89. expect(spy.calls.count()).toBe(3);
  90. spy.calls.reset();
  91. jasmine.triggerMouseEvent(chart, 'mousemove', chart.getDatasetMeta(0).data[1]);
  92. expect(spy.calls.count()).toBe(1);
  93. expect(spy.calls.argsFor(0)[0].active).toBe(true);
  94. expect(spy.calls.argsFor(0)[0].dataIndex).toBe(1);
  95. expect(spy.calls.argsFor(0)[0].datasetIndex).toBe(0);
  96. });
  97. it('should only update previously active elements (context.active: false)', function() {
  98. var options = {color: function() {}};
  99. var spy = spyOn(options, 'color');
  100. var chart = jasmine.chart.acquire({
  101. type: 'line',
  102. data: {
  103. labels: [1, 2, 3],
  104. datasets: [{
  105. data: [1, 2, 3],
  106. fill: false
  107. }]
  108. },
  109. options: {
  110. plugins: {
  111. datalabels: options
  112. }
  113. }
  114. });
  115. expect(spy.calls.count()).toBe(3);
  116. spy.calls.reset();
  117. jasmine.triggerMouseEvent(chart, 'mousemove', chart.getDatasetMeta(0).data[1]);
  118. expect(spy.calls.count()).toBe(1);
  119. spy.calls.reset();
  120. jasmine.triggerMouseEvent(chart, 'mouseout', null);
  121. expect(spy.calls.count()).toBe(1);
  122. expect(spy.calls.argsFor(0)[0].active).toBe(false);
  123. expect(spy.calls.argsFor(0)[0].dataIndex).toBe(1);
  124. expect(spy.calls.argsFor(0)[0].datasetIndex).toBe(0);
  125. });
  126. });
  127. });