+ // TODO(danvk): more precise tests.
+ assert.isNotNull(miniHtx);
+ assert.isTrue(0 < CanvasAssertions.numLinesDrawn(miniHtx, '#ff0000'));
+
+ utils.getContext = origFunc;
+});
+
+// Tests data computation for the mini plot with a single series.
+it('testSingleCombinedSeries', function() {
+ var opts = {
+ showRangeSelector: true,
+ labels: ['X', 'Y1']
+ };
+ var data = [
+ [0, 1],
+ [5, 4],
+ [10, 8]
+ ];
+ var graph = document.getElementById("graph");
+ var g = new Dygraph(graph, data, opts);
+
+ var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
+ assert.isNotNull(rangeSelector);
+
+ var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
+ assert.deepEqual({
+ yMin: 1 - 7 * 0.25, // 25% padding
+ yMax: 8 + 7 * 0.25,
+ data: [
+ [0, 1],
+ [5, 4],
+ [10, 8]
+ ]
+ }, combinedSeries);
+});
+
+
+// Tests that multiple series are averaged for the miniplot.
+it('testCombinedSeries', function() {
+ var opts = {
+ showRangeSelector: true,
+ labels: ['X', 'Y1', 'Y2']
+ };
+ 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);
+
+ var 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);
+});
+
+// Tests selection of a specific series to average for the mini plot.
+it('testSelectedCombinedSeries', function() {
+ var opts = {
+ showRangeSelector: true,
+ labels: ['X', 'Y1', 'Y2', 'Y3', 'Y4'],
+ series: {
+ 'Y1': { showInRangeSelector: true },
+ 'Y3': { showInRangeSelector: true }
+ }
+ };
+ var data = [
+ [0, 5, 8, 13, 21], // average (first and third) = 9
+ [5, 1, 3, 7, 14], // average (first and third) = 4
+ [10, 0, 19, 10, 6] // average (first and third) = 5
+ ];
+ var graph = document.getElementById("graph");
+ var g = new Dygraph(graph, data, opts);
+
+ var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
+ assert.isNotNull(rangeSelector);
+
+ var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
+ assert.deepEqual({
+ yMin: 4 - 5 * 0.25, // 25% padding on combined series range.
+ yMax: 9 + 5 * 0.25,
+ data: [
+ [0, 9],
+ [5, 4],
+ [10, 5]
+ ]
+ }, combinedSeries);
+});
+
+// Tests data computation for the mini plot with a single error bar series.
+it('testSingleCombinedSeriesCustomBars', function() {
+ var opts = {
+ customBars: true,
+ showRangeSelector: true,
+ labels: ['X', 'Y1']
+ };
+ var data = [
+ [0, [0, 1, 2]], // [low, value, high]
+ [5, [1, 4, 5]],
+ [10, [7, 8, 9]]
+ ];
+ var graph = document.getElementById("graph");
+ var g = new Dygraph(graph, data, opts);
+
+ var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
+ assert.isNotNull(rangeSelector);
+
+ var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
+ assert.deepEqual({
+ yMin: 1 - 7 * 0.25, // 25% padding
+ yMax: 8 + 7 * 0.25,
+ data: [
+ [0, 1],
+ [5, 4],
+ [10, 8]
+ ]
+ }, combinedSeries);
+});
+
+it('testSingleCombinedSeriesErrorBars', function() {
+ var opts = {
+ errorBars: true,
+ showRangeSelector: true,
+ labels: ['X', 'Y1']
+ };
+ var data = [
+ [0, [1, 1]], // [value, standard deviation]
+ [5, [4, 2]],
+ [10, [8, 1]]
+ ];
+ var graph = document.getElementById("graph");
+ var g = new Dygraph(graph, data, opts);
+
+ var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
+ assert.isNotNull(rangeSelector);
+
+ var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
+ assert.deepEqual({
+ yMin: 1 - 7 * 0.25, // 25% padding
+ yMax: 8 + 7 * 0.25,
+ data: [
+ [0, 1],
+ [5, 4],
+ [10, 8]
+ ]
+ }, combinedSeries);
+});
+
+// Tests data computation for the mini plot with two custom bar series.
+it('testTwoCombinedSeriesCustomBars', function() {
+ var opts = {
+ customBars: true,
+ showRangeSelector: true,
+ labels: ['X', 'Y1', 'Y2']
+ };
+ var data = [
+ [0, [0, 1, 2], [4, 5, 6]], // [low, value, high], avg_val = 3
+ [5, [1, 4, 5], [5, 8, 9]], // avg_val = 6
+ [10, [7, 8, 9], [11, 12, 13]] // avg_val = 10
+ ];
+ var graph = document.getElementById("graph");
+ var g = new Dygraph(graph, data, opts);
+
+ var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin);
+ assert.isNotNull(rangeSelector);
+
+ var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_();
+ assert.deepEqual({
+ yMin: 3 - 7 * 0.25, // 25% padding
+ yMax: 10 + 7 * 0.25,
+ data: [
+ [0, 3],
+ [5, 6],
+ [10, 10]
+ ]
+ }, 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);