Prevent labels from wrapping.
[dygraphs.git] / auto_tests / tests / interaction_model.js
index 9147f1b..e36c20b 100644 (file)
@@ -136,6 +136,34 @@ InteractionModelTestCase.clickAt = function(g, x, y) {
 }
 
 /**
+ * This tests that clickCallback is still called with the nonInteractiveModel.
+ */
+InteractionModelTestCase.prototype.testClickCallbackIsCalledWithNonInteractiveModel = function() {
+  var clicked;
+
+  // TODO(danvk): also test pointClickCallback here.
+  var clickCallback = function(event, x) {
+    clicked = x;
+  };
+
+  var opts = {
+    width: 100,
+    height : 100,
+    clickCallback : clickCallback,
+    interactionModel : Dygraph.Interaction.nonInteractiveModel_
+  };
+
+  var graph = document.getElementById("graph");
+  var g = new Dygraph(graph, data1, opts);
+
+  DygraphOps.dispatchMouseDown_Point(g, 10, 10);
+  DygraphOps.dispatchMouseMove_Point(g, 10, 10);
+  DygraphOps.dispatchMouseUp_Point(g, 10, 10);
+
+  assertEquals(20, clicked);
+};
+
+/**
  * A sanity test to ensure pointClickCallback is called.
  */
 InteractionModelTestCase.prototype.testPointClickCallback = function() {
@@ -214,3 +242,163 @@ InteractionModelTestCase.prototype.testClickCallback_clickOnPoint = function() {
   assertEquals(1, clicked);
 };
 
+InteractionModelTestCase.prototype.testIsZoomed_none = function() {
+  var g = new Dygraph(document.getElementById("graph"), data2, {});
+
+  assertFalse(g.isZoomed());
+  assertFalse(g.isZoomed("x"));
+  assertFalse(g.isZoomed("y"));
+};
+
+InteractionModelTestCase.prototype.testIsZoomed_x = function() {
+  var g = new Dygraph(document.getElementById("graph"), data2, {});
+
+  DygraphOps.dispatchMouseDown_Point(g, 100, 100);
+  DygraphOps.dispatchMouseMove_Point(g, 130, 100);
+  DygraphOps.dispatchMouseUp_Point(g, 130, 100);
+
+  assertTrue(g.isZoomed());
+  assertTrue(g.isZoomed("x"));
+  assertFalse(g.isZoomed("y"));
+};
+
+InteractionModelTestCase.prototype.testIsZoomed_y = function() {
+  var g = new Dygraph(document.getElementById("graph"), data2, {});
+
+  DygraphOps.dispatchMouseDown_Point(g, 10, 10);
+  DygraphOps.dispatchMouseMove_Point(g, 10, 30);
+  DygraphOps.dispatchMouseUp_Point(g, 10, 30);
+
+  assertTrue(g.isZoomed());
+  assertFalse(g.isZoomed("x"));
+  assertTrue(g.isZoomed("y"));
+};
+
+InteractionModelTestCase.prototype.testIsZoomed_both = function() {
+  var g = new Dygraph(document.getElementById("graph"), data2, {});
+
+  // Zoom x axis
+  DygraphOps.dispatchMouseDown_Point(g, 100, 100);
+  DygraphOps.dispatchMouseMove_Point(g, 130, 100);
+  DygraphOps.dispatchMouseUp_Point(g, 130, 100);
+
+  // Now zoom y axis
+  DygraphOps.dispatchMouseDown_Point(g, 100, 100);
+  DygraphOps.dispatchMouseMove_Point(g, 100, 130);
+  DygraphOps.dispatchMouseUp_Point(g, 100, 130);
+
+
+  assertTrue(g.isZoomed());
+  assertTrue(g.isZoomed("x"));
+  assertTrue(g.isZoomed("y"));
+};
+
+InteractionModelTestCase.prototype.testIsZoomed_updateOptions_none = function() {
+  var g = new Dygraph(document.getElementById("graph"), data2, {});
+
+  g.updateOptions({});
+
+  assertFalse(g.isZoomed());
+  assertFalse(g.isZoomed("x"));
+  assertFalse(g.isZoomed("y"));
+};
+
+InteractionModelTestCase.prototype.testIsZoomed_updateOptions_x = function() {
+  var g = new Dygraph(document.getElementById("graph"), data2, {});
+
+  g.updateOptions({dateWindow: [-.5, .3]});
+  assertTrue(g.isZoomed());
+  assertTrue(g.isZoomed("x"));
+  assertFalse(g.isZoomed("y"));
+};
+
+InteractionModelTestCase.prototype.testIsZoomed_updateOptions_y = function() {
+  var g = new Dygraph(document.getElementById("graph"), data2, {});
+
+  g.updateOptions({valueRange: [1, 10]});
+
+  assertTrue(g.isZoomed());
+  assertFalse(g.isZoomed("x"));
+  assertTrue(g.isZoomed("y"));
+};
+
+InteractionModelTestCase.prototype.testIsZoomed_updateOptions_both = function() {
+  var g = new Dygraph(document.getElementById("graph"), data2, {});
+
+  g.updateOptions({dateWindow: [-1, 1], valueRange: [1, 10]});
+
+  assertTrue(g.isZoomed());
+  assertTrue(g.isZoomed("x"));
+  assertTrue(g.isZoomed("y"));
+};
+
+
+InteractionModelTestCase.prototype.testCorrectAxisValueRangeAfterUnzoom = function() {
+  var g = new Dygraph(document.getElementById("graph"),
+      data2, {
+        valueRange: [1, 50],
+        dateWindow: [1, 9],
+        animatedZooms:false
+      });
+  
+  // Zoom x axis
+  DygraphOps.dispatchMouseDown_Point(g, 100, 100);
+  DygraphOps.dispatchMouseMove_Point(g, 130, 100);
+  DygraphOps.dispatchMouseUp_Point(g, 130, 100);
+
+  // Zoom y axis
+  DygraphOps.dispatchMouseDown_Point(g, 100, 100);
+  DygraphOps.dispatchMouseMove_Point(g, 100, 130);
+  DygraphOps.dispatchMouseUp_Point(g, 100, 130);
+  currentYAxisRange = g.yAxisRange();
+  currentXAxisRange = g.xAxisRange();
+  
+  //check that the range for the axis has changed
+  assertNotEquals(1, currentXAxisRange[0]);
+  assertNotEquals(10, currentXAxisRange[1]);
+  assertNotEquals(1, currentYAxisRange[0]);
+  assertNotEquals(50, currentYAxisRange[1]);
+  
+  // unzoom by doubleclick.  This is really the order in which a browser
+  // generates events, and we depend on it.
+  DygraphOps.dispatchMouseDown_Point(g, 10, 10);
+  DygraphOps.dispatchMouseUp_Point(g, 10, 10);
+  DygraphOps.dispatchMouseDown_Point(g, 10, 10);
+  DygraphOps.dispatchMouseUp_Point(g, 10, 10);
+  DygraphOps.dispatchDoubleClick(g, null);
+  
+  // check if range for y-axis was reset to original value 
+  // TODO check if range for x-axis is correct. 
+  // Currently not possible because dateRange is set to null and extremes are returned
+  newYAxisRange = g.yAxisRange();
+  assertEquals(1, newYAxisRange[0]);
+  assertEquals(50, newYAxisRange[1]);
+};
+
+/**
+ * Ensures pointClickCallback is called when some points along the y-axis don't
+ * exist.
+ */
+InteractionModelTestCase.prototype.testPointClickCallback_missingData = function() {
+
+  // There's a B-value at 2, but no A-value.
+  var data =
+    "X,A,B\n" +
+    "1,,100\n"+
+    "2,,110\n"+
+    "3,140,120\n"+
+    "4,130,110\n"+
+    "";
+
+  var clicked;
+  var g = new Dygraph(document.getElementById("graph"), data, {
+    pointClickCallback : function(event, point) {
+      clicked = point;
+    }
+  });
+
+  InteractionModelTestCase.clickAt(g, 2, 110);
+
+  assertEquals(2, clicked.xval);
+  assertEquals(110, clicked.yval);
+};