]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Animation events sanity (#7629)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Thu, 16 Jul 2020 17:30:07 +0000 (20:30 +0300)
committerGitHub <noreply@github.com>
Thu, 16 Jul 2020 17:30:07 +0000 (13:30 -0400)
src/core/core.animator.js
test/specs/core.animator.tests.js [new file with mode: 0644]

index 18afeaaa3d5812c3d0a406a8bd2f632ba2cd25b8..bed5e2854b10a469d4b4dd0fb4275efd152cc868 100644 (file)
@@ -40,7 +40,7 @@ export class Animator {
                callbacks.forEach(fn => fn({
                        chart,
                        numSteps,
-                       currentStep: date - anims.start
+                       currentStep: Math.min(date - anims.start, numSteps)
                }));
        }
 
@@ -98,14 +98,13 @@ export class Animator {
 
                        if (draw) {
                                chart.draw();
+                               me._notify(chart, anims, date, 'progress');
                        }
 
                        if (chart.options.animation.debug) {
                                drawFPS(chart, items.length, date, me._lastDate);
                        }
 
-                       me._notify(chart, anims, date, 'progress');
-
                        if (!items.length) {
                                anims.running = false;
                                me._notify(chart, anims, date, 'complete');
diff --git a/test/specs/core.animator.tests.js b/test/specs/core.animator.tests.js
new file mode 100644 (file)
index 0000000..ea68235
--- /dev/null
@@ -0,0 +1,40 @@
+describe('Chart.animator', function() {
+       it('should fire onProgress for each draw', function(done) {
+               let count = 0;
+               let drawCount = 0;
+               const progress = (animation) => {
+                       count++;
+                       expect(animation.numSteps).toEqual(250);
+                       expect(animation.currentStep <= 250).toBeTrue();
+               };
+               acquireChart({
+                       type: 'bar',
+                       data: {
+                               datasets: [
+                                       {data: [10, 5, 0, 25, 78, -10]}
+                               ],
+                               labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick5', 'tick6']
+                       },
+                       options: {
+                               animation: {
+                                       duration: 250,
+                                       onProgress: progress,
+                                       onComplete: function() {
+                                               expect(count).toEqual(drawCount);
+                                               done();
+                                       }
+                               }
+                       },
+                       plugins: [{
+                               afterDraw() {
+                                       drawCount++;
+                               }
+                       }]
+               }, {
+                       canvas: {
+                               height: 150,
+                               width: 250
+                       },
+               });
+       });
+});