- Changes from code review:
[dygraphs.git] / auto_tests / tests / axis_labels.js
index 3c0ad7c..f9f7196 100644 (file)
@@ -30,11 +30,21 @@ function getXLabels() {
   return ary;
 }
 
+function makeNumbers(ary) {
+  var ret = [];
+  for (var i = 0; i < ary.length; i++) {
+    ret.push(parseFloat(ary[i]));
+  }
+  return ret;
+}
+
 function getLegend() {
   var legend = document.getElementsByClassName("dygraph-legend")[0];
   return legend.textContent;
 }
 
+AxisLabelsTestCase.prototype.kCloseFloat = 1.0e-10;
+
 AxisLabelsTestCase.prototype.testMinusOneToOne = function() {
   var opts = {
     width: 480,
@@ -74,6 +84,7 @@ AxisLabelsTestCase.prototype.testMinusOneToOne = function() {
 
 AxisLabelsTestCase.prototype.testSmallRangeNearZero = function() {
   var opts = {
+    drawAxesAtZero: true,
     width: 480,
     height: 320
   };
@@ -87,16 +98,18 @@ AxisLabelsTestCase.prototype.testSmallRangeNearZero = function() {
 
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
-  assertEquals(["-0.1","-0.08","-0.06","-0.04","-0.02","0","0.02","0.04","0.06","0.08"], getYLabels());
+  assertEqualsDelta(makeNumbers(["-0.1","-0.08","-0.06","-0.04","-0.02","0","0.02","0.04","0.06","0.08"]),
+                    makeNumbers(getYLabels()), this.kCloseFloat);
 
   opts.valueRange = [-0.05, 0.05];
   g.updateOptions(opts);
   // TODO(danvk): why '1.00e-2' and not '0.01'?
-  assertEquals(["-0.05","-0.04","-0.03","-0.02","-0.01","0","1.00e-2","0.02","0.03","0.04"], getYLabels());
+  assertEquals(makeNumbers(["-0.05","-0.04","-0.03","-0.02","-0.01","0","1.00e-2","0.02","0.03","0.04"]),
+               makeNumbers(getYLabels()));
 
   opts.valueRange = [-0.01, 0.01];
   g.updateOptions(opts);
-  assertEquals(["-0.01","-8.00e-3","-6.00e-3","-4.00e-3","-2.00e-3","0","2.00e-3","4.00e-3","6.00e-3","8.00e-3"], getYLabels());
+  assertEquals(makeNumbers(["-0.01","-8.00e-3","-6.00e-3","-4.00e-3","-2.00e-3","0","2.00e-3","4.00e-3","6.00e-3","8.00e-3"]), makeNumbers(getYLabels()));
 
   g.setSelection(1);
   assertEquals('1: Y:0', getLegend());
@@ -142,22 +155,26 @@ AxisLabelsTestCase.prototype.testXAxisTimeLabelFormatter = function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
   g.updateOptions({
-    xAxisLabelFormatter: function (totalMinutes) {
-      var hours   = Math.floor( totalMinutes / 60);
-      var minutes = Math.floor((totalMinutes - (hours * 60)));
-      var seconds = Math.round((totalMinutes * 60) - (hours * 3600) - (minutes * 60));
-
-      if (hours   < 10) hours   = "0" + hours;
-      if (minutes < 10) minutes = "0" + minutes;
-      if (seconds < 10) seconds = "0" + seconds;
-
-      return hours + ':' + minutes + ':' + seconds;
+    axes : {
+      x : {
+        axisLabelFormatter : function (totalMinutes) {
+          var hours   = Math.floor( totalMinutes / 60);
+          var minutes = Math.floor((totalMinutes - (hours * 60)));
+          var seconds = Math.round((totalMinutes * 60) - (hours * 3600) - (minutes * 60));
+
+          if (hours   < 10) hours   = "0" + hours;
+          if (minutes < 10) minutes = "0" + minutes;
+          if (seconds < 10) seconds = "0" + seconds;
+
+          return hours + ':' + minutes + ':' + seconds;
+        }
+      }
     }
   });
 
   assertEquals(["00:05:00","00:05:12","00:05:24","00:05:36","00:05:48"], getXLabels());
 
-  // The legend does not use the xAxisLabelFormatter:
+  // The legend does not use the axisLabelFormatter:
   g.setSelection(1);
   assertEquals('5.1: Y1:1', getLegend());
 };
@@ -166,19 +183,25 @@ AxisLabelsTestCase.prototype.testAxisLabelFormatter = function () {
   var opts = {
     width: 480,
     height: 320,
-    xAxisLabelFormatter: function(x, granularity, opts, dg) {
-      assertEquals('number', typeof(x));
-      assertEquals('number', typeof(granularity));
-      assertEquals('function', typeof(opts));
-      assertEquals('[Dygraph graph]', dg.toString());
-      return 'x' + x;
-    },
-    yAxisLabelFormatter: function(y, granularity, opts, dg) {
-      assertEquals('number', typeof(y));
-      assertEquals('number', typeof(granularity));
-      assertEquals('function', typeof(opts));
-      assertEquals('[Dygraph graph]', dg.toString());
-      return 'y' + y;
+    axes : {
+      x : {
+        axisLabelFormatter : function(x, granularity, opts, dg) {
+          assertEquals('number', typeof(x));
+          assertEquals('number', typeof(granularity));
+          assertEquals('function', typeof(opts));
+          assertEquals('[Dygraph graph]', dg.toString());
+          return 'x' + x;
+        }
+      },
+      y : {
+        axisLabelFormatter : function(y, granularity, opts, dg) {
+          assertEquals('number', typeof(y));
+          assertEquals('number', typeof(granularity));
+          assertEquals('function', typeof(opts));
+          assertEquals('[Dygraph graph]', dg.toString());
+          return 'y' + y;
+        }
+      }
     },
     labels: ['x', 'y']
   };
@@ -200,19 +223,25 @@ AxisLabelsTestCase.prototype.testDateAxisLabelFormatter = function () {
   var opts = {
     width: 480,
     height: 320,
-    xAxisLabelFormatter: function(x, granularity, opts, dg) {
-      assertTrue(Dygraph.isDateLike(x));
-      assertEquals('number', typeof(granularity));
-      assertEquals('function', typeof(opts));
-      assertEquals('[Dygraph graph]', dg.toString());
-      return 'x' + x.strftime('%Y/%m/%d');
-    },
-    yAxisLabelFormatter: function(y, granularity, opts, dg) {
-      assertEquals('number', typeof(y));
-      assertEquals('number', typeof(granularity));
-      assertEquals('function', typeof(opts));
-      assertEquals('[Dygraph graph]', dg.toString());
-      return 'y' + y;
+    axes : {
+      x : {
+        axisLabelFormatter : function(x, granularity, opts, dg) {
+          assertTrue(Dygraph.isDateLike(x));
+          assertEquals('number', typeof(granularity));
+          assertEquals('function', typeof(opts));
+          assertEquals('[Dygraph graph]', dg.toString());
+          return 'x' + x.strftime('%Y/%m/%d');
+        }
+      },
+      y : {
+        axisLabelFormatter : function(y, granularity, opts, dg) {
+          assertEquals('number', typeof(y));
+          assertEquals('number', typeof(granularity));
+          assertEquals('function', typeof(opts));
+          assertEquals('[Dygraph graph]', dg.toString());
+          return 'y' + y;
+        }
+      }
     },
     labels: ['x', 'y']
   };
@@ -237,19 +266,25 @@ AxisLabelsTestCase.prototype.testValueFormatter = function () {
   var opts = {
     width: 480,
     height: 320,
-    xValueFormatter: function(x, opts, series_name, dg) {
-      assertEquals('number', typeof(x));
-      assertEquals('function', typeof(opts));
-      assertEquals('string', typeof(series_name));
-      assertEquals('[Dygraph graph]', dg.toString());
-      return 'x' + x;
-    },
-    yValueFormatter: function(y, opts, series_name, dg) {
-      assertEquals('number', typeof(y));
-      assertEquals('function', typeof(opts));
-      assertEquals('string', typeof(series_name));
-      assertEquals('[Dygraph graph]', dg.toString());
-      return 'y' + y;
+    axes : {
+      x : {
+        valueFormatter: function(x, opts, series_name, dg) {
+          assertEquals('number', typeof(x));
+          assertEquals('function', typeof(opts));
+          assertEquals('string', typeof(series_name));
+          assertEquals('[Dygraph graph]', dg.toString());
+          return 'x' + x;
+        }
+      },
+      y : {
+        valueFormatter: function(y, opts, series_name, dg) {
+          assertEquals('number', typeof(y));
+          assertEquals('function', typeof(opts));
+          assertEquals('string', typeof(series_name));
+          assertEquals('[Dygraph graph]', dg.toString());
+          return 'y' + y;
+        }
+      }
     },
     labels: ['x', 'y']
   };
@@ -274,19 +309,25 @@ AxisLabelsTestCase.prototype.testDateValueFormatter = function () {
   var opts = {
     width: 480,
     height: 320,
-    xValueFormatter: function(x, opts, series_name, dg) {
-      assertEquals('number', typeof(x));
-      assertEquals('function', typeof(opts));
-      assertEquals('string', typeof(series_name));
-      assertEquals('[Dygraph graph]', dg.toString());
-      return 'x' + new Date(x).strftime('%Y/%m/%d');
-    },
-    yValueFormatter: function(y, opts, series_name, dg) {
-      assertEquals('number', typeof(y));
-      assertEquals('function', typeof(opts));
-      assertEquals('string', typeof(series_name));
-      assertEquals('[Dygraph graph]', dg.toString());
-      return 'y' + y;
+    axes : {
+      x : {
+        valueFormatter: function(x, opts, series_name, dg) {
+          assertEquals('number', typeof(x));
+          assertEquals('function', typeof(opts));
+          assertEquals('string', typeof(series_name));
+          assertEquals('[Dygraph graph]', dg.toString());
+          return 'x' + new Date(x).strftime('%Y/%m/%d');
+        }
+      },
+      y : {
+        valueFormatter: function(y, opts, series_name, dg) {
+          assertEquals('number', typeof(y));
+          assertEquals('function', typeof(opts));
+          assertEquals('string', typeof(series_name));
+          assertEquals('[Dygraph graph]', dg.toString());
+          return 'y' + y;
+        }
+      }
     },
     labels: ['x', 'y']
   };
@@ -313,17 +354,23 @@ AxisLabelsTestCase.prototype.testAxisLabelFormatterPrecedence = function () {
   var opts = {
     width: 480,
     height: 320,
-    xValueFormatter: function(x) {
-      return 'xvf' + x;
-    },
-    yValueFormatter: function(y) {
-      return 'yvf' + y;
-    },
-    xAxisLabelFormatter: function(x, granularity) {
-      return 'x' + x;
-    },
-    yAxisLabelFormatter: function(y) {
-      return 'y' + y;
+    axes : {
+      x : {
+        valueFormatter: function(x) {
+          return 'xvf' + x;
+        },
+        axisLabelFormatter: function(x, granularity) {
+          return 'x' + x;
+        }
+      },
+      y : {
+        valueFormatter: function(y) {
+          return 'yvf' + y;
+        },
+        axisLabelFormatter: function(y) {
+          return 'y' + y;
+        }
+      }
     },
     labels: ['x', 'y']
   };
@@ -356,23 +403,39 @@ AxisLabelsTestCase.prototype.testAxisLabelFormatterIncremental = function () {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
   g.updateOptions({
-    xValueFormatter: function(x) {
-      return 'xvf' + x;
+    axes : {
+      x : {
+        valueFormatter: function(x) {
+          return 'xvf' + x;
+        }
+      }
     }
   });
   g.updateOptions({
-    yValueFormatter: function(y) {
-      return 'yvf' + y;
+    axes : {
+      y : {
+        valueFormatter: function(y) {
+          return 'yvf' + y;
+        }
+      }
     }
   });
   g.updateOptions({
-    xAxisLabelFormatter: function(x, granularity) {
-      return 'x' + x;
+    axes : {
+      x : {
+        axisLabelFormatter: function(x, granularity) {
+          return 'x' + x;
+        }
+      }
     }
   });
   g.updateOptions({
-    yAxisLabelFormatter: function(y) {
-      return 'y' + y;
+    axes : {
+      y : {
+        axisLabelFormatter: function(y) {
+          return 'y' + y;
+        }
+      }
     }
   });
 
@@ -408,3 +471,30 @@ AxisLabelsTestCase.prototype.testGlobalFormatters = function() {
   g.setSelection(9);
   assertEquals("vf9: y:vf18", getLegend());
 };
+
+AxisLabelsTestCase.prototype.testSeriesOrder = function() {
+  var opts = {
+    width: 480,
+    height: 320
+  };
+  var data = "x,00,01,10,11\n" +
+      "0,101,201,301,401\n" +
+      "1,102,202,302,402\n" +
+      "2,103,203,303,403\n" +
+      "3,104,204,304,404\n"
+  ;
+
+  var graph = document.getElementById("graph");
+  var g = new Dygraph(graph, data, opts);
+
+  g.setSelection(2);
+  assertEquals('2: 00:103 01:203 10:303 11:403', getLegend());
+
+  // Sanity checks for indexFromSetName
+  assertEquals(0, g.indexFromSetName("x"));
+  assertEquals(1, g.indexFromSetName("00"));
+  assertEquals(null, g.indexFromSetName("abcde"));
+
+  // Verify that we get the label list back in the right order
+  assertEquals(["x", "00", "01", "10", "11"], g.getLabels());
+};