Unit test for animated zooms.
authorDan Vanderkam <danvdk@gmail.com>
Sat, 28 Mar 2015 18:57:06 +0000 (14:57 -0400)
committerDan Vanderkam <danvdk@gmail.com>
Sat, 28 Mar 2015 18:57:06 +0000 (14:57 -0400)
Also documents the behavior of zoomCallback more clearly.

auto_tests/tests/interaction_model.js
src/dygraph-options-reference.js

index 9ae4efc..41d0e43 100644 (file)
@@ -405,4 +405,54 @@ it('testPointClickCallback_missingData', function() {
   assert.equal(110, clicked.yval);
 });
 
+describe('animated zooms', function() {
+  var oldDuration;
+
+  before(function() {
+    oldDuration = Dygraph.ANIMATION_DURATION;
+    Dygraph.ANIMATION_DURATION = 100;  // speed up the animation for testing
+  });
+  after(function() {
+    Dygraph.ANIMATION_DURATION = oldDuration;
+  });
+
+  it('should support animated zooms', function(done) {
+    var data =
+      "X,A,B\n" +
+      "1,120,100\n"+
+      "2,110,110\n"+
+      "3,140,120\n"+
+      "4,130,110\n";
+
+    var ranges = [];
+
+    var g = new Dygraph('graph', data, {
+      animatedZooms: true,
+    });
+
+    // updating the dateWindow does not result in an animation.
+    assert.deepEqual([1, 4], g.xAxisRange());
+    g.updateOptions({dateWindow: [2, 4]});
+    assert.deepEqual([2, 4], g.xAxisRange());
+
+    g.updateOptions({
+      // zoomCallback is called once when the animation is complete.
+      zoomCallback: function(xMin, xMax) {
+        assert.equal(1, xMin);
+        assert.equal(4, xMax);
+        assert.deepEqual([1, 4], g.xAxisRange());
+        done();
+      }
+    }, false);
+
+    // Zoom out -- resetZoom() _does_ produce an animation.
+    g.resetZoom();
+    assert.notDeepEqual([2, 4], g.xAxisRange());  // first frame is synchronous
+    assert.notDeepEqual([1, 4], g.xAxisRange());
+
+    // at this point control flow goes up to zoomCallback
+  });
+
+});
+
 });
index ca94dc5..933bdab 100644 (file)
@@ -83,7 +83,7 @@ Dygraph.OPTIONS_REFERENCE =  // <JSON>
       [ "maxDate" , "milliseconds since epoch." ],
       [ "yRanges" , "is an array of [bottom, top] pairs, one for each y-axis." ]
     ],
-    "description": "A function to call when the zoom window is changed (either by zooming in or out)."
+    "description": "A function to call when the zoom window is changed (either by zooming in or out). When animatedZooms is set, zoomCallback is called once at the end of the transition (it will not be called for intermediate frames)."
   },
   "pointClickCallback": {
     "snippet": "function(e, point){<br>&nbsp;&nbsp;alert(point);<br>}",