Merge pull request #674 from danvk/module
[dygraphs.git] / auto_tests / tests / connect_separated_points.js
index 4bfe09c..7b9fe4c 100644 (file)
@@ -3,26 +3,29 @@
  *
  * @author julian.eichstaedt@ch.sauter-bc.com (Fr. Sauter AG)
  */
-var ConnectSeparatedPointsTestCase = TestCase("connect-separated-points");
 
-ConnectSeparatedPointsTestCase.prototype.setUp = function() {
-  document.body.innerHTML = "<div id='graph'></div>";
-};
+import Dygraph from '../../src/dygraph';
+import * as utils from '../../src/dygraph-utils';
+import CanvasAssertions from './CanvasAssertions';
+import Proxy from './Proxy';
 
-ConnectSeparatedPointsTestCase.origFunc = Dygraph.getContext;
+describe("connect-separated-points", function() {
 
-ConnectSeparatedPointsTestCase.prototype.setUp = function() {
-  document.body.innerHTML = "<div id='graph'></div>";
-  Dygraph.getContext = function(canvas) {
-    return new Proxy(ConnectSeparatedPointsTestCase.origFunc(canvas));
+cleanupAfterEach();
+
+var origFunc = utils.getContext;
+
+beforeEach(function() {
+  utils.getContext = function(canvas) {
+    return new Proxy(origFunc(canvas));
   };
-};
+});
 
-ConnectSeparatedPointsTestCase.prototype.tearDown = function() {
-  Dygraph.getContext = ConnectSeparatedPointsTestCase.origFunc;
-};
+afterEach(function() {
+  Dygraph.getContext = origFunc;
+});
 
-ConnectSeparatedPointsTestCase.prototype.testEdgePointsSimple = function() {
+it('testEdgePointsSimple', function() {
   var opts = {
     width: 480,
     height: 320,
@@ -47,7 +50,7 @@ ConnectSeparatedPointsTestCase.prototype.testEdgePointsSimple = function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
   
-  htx = g.hidden_ctx_;
+  var htx = g.hidden_ctx_;
 
   var attrs = {};  
 
@@ -84,9 +87,9 @@ ConnectSeparatedPointsTestCase.prototype.testEdgePointsSimple = function() {
   // Check if both points are connected at the right edge of the canvas and if the option "connectSeparatedPoints" works properly
   // even if the point is outside the visible range and only one series has a valid value for this point.
   CanvasAssertions.assertLineDrawn(htx, xy1, xy2, attrs);
-};
+});
 
-ConnectSeparatedPointsTestCase.prototype.testEdgePointsCustomBars = function() {
+it('testEdgePointsCustomBars', function() {
   var opts = {
     width: 480,
     height: 320,
@@ -113,7 +116,7 @@ ConnectSeparatedPointsTestCase.prototype.testEdgePointsCustomBars = function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
   
-  htx = g.hidden_ctx_;
+  var htx = g.hidden_ctx_;
 
   var attrs = {};  
 
@@ -213,9 +216,9 @@ ConnectSeparatedPointsTestCase.prototype.testEdgePointsCustomBars = function() {
   // Check if both points are connected at the right edge of the canvas and if the option "connectSeparatedPoints" works properly
   // even if the point is outside the visible range and only one series has a valid value for this point.
   CanvasAssertions.assertLineDrawn(htx, xy1, xy2, attrs);
-};
+});
 
-ConnectSeparatedPointsTestCase.prototype.testEdgePointsErrorBars = function() {
+it('testEdgePointsErrorBars', function() {
   var opts = {
     width: 480,
     height: 320,
@@ -243,7 +246,7 @@ ConnectSeparatedPointsTestCase.prototype.testEdgePointsErrorBars = function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
   
-  htx = g.hidden_ctx_;
+  var htx = g.hidden_ctx_;
 
   var attrs = {};  
 
@@ -350,4 +353,102 @@ ConnectSeparatedPointsTestCase.prototype.testEdgePointsErrorBars = function() {
   // Check if both points are connected at the right edge of the canvas and if the option "connectSeparatedPoints" works properly
   // even if the point is outside the visible range and only one series has a valid value for this point.
   CanvasAssertions.assertLineDrawn(htx, xy1, xy2, attrs);
-};
+});
+
+it('testConnectSeparatedPointsPerSeries', function() {
+  var assertExpectedLinesDrawnPerSeries = function(htx, expectedSeries1, expectedSeries2, expectedSeries3) {
+    var expected = [expectedSeries1, expectedSeries2, expectedSeries3];    
+    var actual = [ 
+        CanvasAssertions.numLinesDrawn(htx, "#ff0000"),
+        CanvasAssertions.numLinesDrawn(htx, "#00ff00"),
+        CanvasAssertions.numLinesDrawn(htx, "#0000ff")];
+    assert.deepEqual(expected, actual);
+  }
+
+  var g = new Dygraph(document.getElementById("graph"),
+      [
+        [1, 10, 10, 10],
+        [2, 15, 11, 12],
+        [3, null, null, 12],
+        [4, 20, 14, null],
+        [5, 15, null, 17],
+        [6, 18, null, null],
+        [7, 12, 14, null]
+      ],
+      {
+        labels: ["Date","Series1","Series2","Series3"],
+        connectSeparatedPoints: false,
+        colors: ["#ff0000", "#00ff00", "#0000ff"]
+      });
+
+  var htx = g.hidden_ctx_;
+  assertExpectedLinesDrawnPerSeries(htx, 4, 1, 2);
+
+  Proxy.reset(htx);
+  g.updateOptions({
+    connectSeparatedPoints : true,
+  });
+  assertExpectedLinesDrawnPerSeries(htx, 5, 3, 3);
+
+  Proxy.reset(htx);
+  g.updateOptions({
+    connectSeparatedPoints : false,
+    series : {
+      Series1 : { connectSeparatedPoints : true }
+    }
+  });
+  assertExpectedLinesDrawnPerSeries(htx, 5, 1, 2);
+
+
+  Proxy.reset(htx);
+  g.updateOptions({
+    connectSeparatedPoints : true,
+    series : {
+      Series1 : { connectSeparatedPoints : false }
+    }
+  });
+  assertExpectedLinesDrawnPerSeries(htx, 4, 3, 3);
+});
+
+it('testNaNErrorBars', function() {
+  var data = [
+    [0,[1,2,3]],
+    [1,[2,3,4]],
+    [2,[3,4,5]],
+    [3,[null,null,null]],
+    [4,[2,3,4]],
+    [5,[3,4,5]],
+    [6,[2,3,4]],
+    [7,[NaN,NaN,NaN]],
+    [8,[2,3,4]],
+    [9,[2,3,4]],
+    [10,[2,3,4]],
+    [11,[2,3,4]]
+  ];
+    
+  var opts = {
+    labels: ["x", "y"],
+    colors: ["#ff0000"],
+    customBars: true,
+    connectSeparatedPoints: true
+  };
+  
+  var graph = document.getElementById("graph");
+  var g = new Dygraph(graph, data, opts);
+  
+  var htx = g.hidden_ctx_;
+
+  var attrs = {};  
+  
+  // Line should be drawn across the null gap.
+  CanvasAssertions.assertLineDrawn(htx, 
+       g.toDomCoords(data[2][0], data[2][1][1]),
+       g.toDomCoords(data[4][0], data[4][1][1]),
+        attrs);
+
+  // No line across the NaN gap, and a single line (not two)
+  // across the null gap.
+  assert.equal(8, CanvasAssertions.numLinesDrawn(htx, '#ff0000'));
+});
+
+});