Only include visible series in range selector (#785)
[dygraphs.git] / auto_tests / tests / range_selector.js
index 584e054..1bba353 100644 (file)
@@ -4,12 +4,23 @@
  * @fileoverview Regression tests for range selector.
  * @author paul.eric.felix@gmail.com (Paul Felix)
  */
+
+import Dygraph from '../../src/dygraph';
+import * as utils from '../../src/dygraph-utils';
+import RangeSelectorPlugin from '../../src/plugins/range-selector';
+
+import Util from './Util';
+import DygraphOps from './DygraphOps';
+import CanvasAssertions from './CanvasAssertions';
+import Proxy from './Proxy';
+
 describe("range-selector", function() {
 
+cleanupAfterEach();
+
 var restoreConsole;
 var logs = {};
 beforeEach(function() {
-  document.body.innerHTML = "<div id='graph'></div>";
   restoreConsole = Util.captureConsole(logs);
 });
 
@@ -403,9 +414,9 @@ it('testRangeSelectorPositionIfXAxisNotDrawn', function() {
 
 it('testMiniPlotDrawn', function() {
   // Install Proxy to track canvas calls.
-  var origFunc = Dygraph.getContext;
+  var origFunc = utils.getContext;
   var miniHtx;
-  Dygraph.getContext = function(canvas) {
+  utils.getContext = function(canvas) {
     if (canvas.className != 'dygraph-rangesel-bgcanvas') {
       return origFunc(canvas);
     }
@@ -435,7 +446,7 @@ it('testMiniPlotDrawn', function() {
   assert.isNotNull(miniHtx);
   assert.isTrue(0 < CanvasAssertions.numLinesDrawn(miniHtx, '#ff0000'));
 
-  Dygraph.getContext = origFunc;
+  utils.getContext = origFunc;
 });
 
 // Tests data computation for the mini plot with a single series.
@@ -452,7 +463,7 @@ it('testSingleCombinedSeries', function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
 
-  var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector);
+  var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
   assert.isNotNull(rangeSelector);
 
   var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
@@ -482,7 +493,7 @@ it('testCombinedSeries', function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
 
-  var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector);
+  var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
   assert.isNotNull(rangeSelector);
 
   var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
@@ -515,7 +526,7 @@ it('testSelectedCombinedSeries', function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
 
-  var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector);
+  var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
   assert.isNotNull(rangeSelector);
 
   var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
@@ -545,7 +556,7 @@ it('testSingleCombinedSeriesCustomBars', function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
 
-  var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector);
+  var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
   assert.isNotNull(rangeSelector);
 
   var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
@@ -574,7 +585,7 @@ it('testSingleCombinedSeriesErrorBars', function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
 
-  var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector);
+  var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
   assert.isNotNull(rangeSelector);
 
   var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
@@ -604,7 +615,7 @@ it('testTwoCombinedSeriesCustomBars', function() {
   var graph = document.getElementById("graph");
   var g = new Dygraph(graph, data, opts);
 
-  var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector);
+  var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
   assert.isNotNull(rangeSelector);
 
   var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
@@ -619,6 +630,73 @@ it('testTwoCombinedSeriesCustomBars', function() {
   }, combinedSeries);
 });
 
+it('testHiddenSeriesExcludedFromMiniplot', function() {
+  var opts = {
+    showRangeSelector: true,
+    labels: ['X', 'Y1', 'Y2'],
+    visibility: [true, false]
+  };
+  var data = [
+      [0, 1, 3],  // average = 2
+      [5, 4, 6],  // average = 5
+      [10, 7, 9]  // average = 8
+    ];
+  var graph = document.getElementById("graph");
+  var g = new Dygraph(graph, data, opts);
+
+  var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
+  assert.isNotNull(rangeSelector);
+
+  // Invisible series (e.g. Y2) are not included in the combined series.
+  var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
+  assert.deepEqual({
+    yMin: 1 - 6 * 0.25,  // 25% padding on single series range.
+    yMax: 7 + 6 * 0.25,
+    data: [
+      [0, 1],
+      [5, 4],
+      [10, 7]
+    ]
+  }, combinedSeries);
+
+  // If Y2 is explicitly marked to be included in the range selector,
+  // then it will be (even if it's not visible). Since we've started being
+  // explicit about marking series for inclusion, this means that Y1 is no
+  // longer included.
+  g.updateOptions({
+    series: {
+      Y2: { showInRangeSelector: true },
+    }
+  });
+  combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
+  assert.deepEqual({
+    yMin: 3 - 6 * 0.25,  // 25% padding on combined series range.
+    yMax: 9 + 6 * 0.25,
+    data: [
+      [0, 3],
+      [5, 6],
+      [10, 9]
+    ]
+  }, combinedSeries);
+
+  // If we explicitly mark Y1, too, then it also gets included.
+  g.updateOptions({
+    series: {
+      Y1: { showInRangeSelector: true },
+      Y2: { showInRangeSelector: true },
+    }
+  });
+  combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
+  assert.deepEqual({
+    yMin: 2 - 6 * 0.25,  // 25% padding on combined series range.
+    yMax: 8 + 6 * 0.25,
+    data: [
+      [0, 2],
+      [5, 5],
+      [10, 8]
+    ]
+  }, combinedSeries);
+});
 
 var assertGraphExistence = function(g, graph) {
   assert.isNotNull(g);