dcos-dygraphs
Version:
dygraphs is a fast, flexible open source JavaScript charting library.
174 lines (142 loc) • 4.85 kB
JavaScript
// Copyright 2011 Google Inc. All Rights Reserved.
/**
* @fileoverview Tests for the updateOptions function.
* @author antrob@google.com (Anthony Robledo)
*/
import Dygraph from '../../src/dygraph';
describe("update-options", function() {
cleanupAfterEach();
var opts = {
width: 480,
height: 320,
};
var data = "X,Y1,Y2\n" +
"2011-01-01,2,3\n" +
"2011-02-02,5,3\n" +
"2011-03-03,6,1\n" +
"2011-04-04,9,5\n" +
"2011-05-05,8,3\n";
/*
* Tweaks the dygraph so it sets g._testDrawCalled to true when internal method
* drawGraph_ is called. Call unWrapDrawGraph when done with this.
*/
var wrapDrawGraph = function(g) {
g._testDrawCalled = false;
g._oldDrawGraph = g.drawGraph_;
g.drawGraph_ = function() {
g._testDrawCalled = true;
g._oldDrawGraph.call(g);
}
};
/*
* See wrapDrawGraph
*/
var unwrapDrawGraph = function(g) {
g.drawGraph_ = g._oldDrawGraph;
}
it('testStrokeAll', function() {
var graphDiv = document.getElementById("graph");
var graph = new Dygraph(graphDiv, data, opts);
var updatedOptions = { };
updatedOptions['strokeWidth'] = 3;
// These options will allow us to jump to renderGraph_()
// drawGraph_() will be skipped.
wrapDrawGraph(graph);
graph.updateOptions(updatedOptions);
unwrapDrawGraph(graph);
assert.isFalse(graph._testDrawCalled);
});
it('testStrokeSingleSeries', function() {
var graphDiv = document.getElementById("graph");
var graph = new Dygraph(graphDiv, data, opts);
var updatedOptions = { };
var optionsForY1 = { };
optionsForY1['strokeWidth'] = 3;
updatedOptions['series'] = {'Y1': optionsForY1};
// These options will allow us to jump to renderGraph_()
// drawGraph_() will be skipped.
wrapDrawGraph(graph);
graph.updateOptions(updatedOptions);
unwrapDrawGraph(graph);
assert.isFalse(graph._testDrawCalled);
});
it('testSingleSeriesRequiresNewPoints', function() {
var graphDiv = document.getElementById("graph");
var graph = new Dygraph(graphDiv, data, opts);
var updatedOptions = {
series: {
Y1: {
strokeWidth: 2
},
Y2: {
stepPlot: true
}
}
};
// These options will not allow us to jump to renderGraph_()
// drawGraph_() must be called
wrapDrawGraph(graph);
graph.updateOptions(updatedOptions);
unwrapDrawGraph(graph);
assert.isTrue(graph._testDrawCalled);
});
it('testWidthChangeNeedsNewPoints', function() {
var graphDiv = document.getElementById("graph");
var graph = new Dygraph(graphDiv, data, opts);
var updatedOptions = { };
// This will require new points.
updatedOptions['width'] = 600;
// These options will not allow us to jump to renderGraph_()
// drawGraph_() must be called
wrapDrawGraph(graph);
graph.updateOptions(updatedOptions);
unwrapDrawGraph(graph);
assert.isTrue(graph._testDrawCalled);
});
// Test https://github.com/danvk/dygraphs/issues/87
it('testUpdateLabelsDivDoesntInfiniteLoop', function() {
var graphDiv = document.getElementById("graph");
var labelsDiv = document.getElementById("labels");
var graph = new Dygraph(graphDiv, data, opts);
graph.updateOptions({labelsDiv : labelsDiv});
});
// Test https://github.com/danvk/dygraphs/issues/247
it('testUpdateColors', function() {
var graphDiv = document.getElementById("graph");
var graph = new Dygraph(graphDiv, data, opts);
var defaultColors = ["rgb(0,128,0)", "rgb(0,0,128)"];
assert.deepEqual(["rgb(0,128,0)", "rgb(0,0,128)"], graph.getColors());
var colors1 = [ "#aaa", "#bbb" ];
graph.updateOptions({ colors: colors1 });
assert.deepEqual(colors1, graph.getColors());
// extra colors are ignored until you add additional data series.
var colors2 = [ "#ddd", "#eee", "#fff" ];
graph.updateOptions({ colors: colors2 });
assert.deepEqual(["#ddd", "#eee"], graph.getColors());
graph.updateOptions({ file:
"X,Y1,Y2,Y3\n" +
"2011-01-01,2,3,4\n" +
"2011-02-02,5,3,2\n"
});
assert.deepEqual(colors2, graph.getColors());
graph.updateOptions({ colors: null, file: data });
assert.deepEqual(defaultColors, graph.getColors());
});
// Regression test for http://code.google.com/p/dygraphs/issues/detail?id=249
// Verifies that setting 'legend: always' via update immediately shows the
// legend.
it('testUpdateLegendAlways', function() {
var graphDiv = document.getElementById("graph");
var graph = new Dygraph(graphDiv, data, opts);
var legend = document.getElementsByClassName("dygraph-legend");
assert.equal(1, legend.length);
legend = legend[0];
assert.equal("", legend.innerHTML);
graph.updateOptions({legend: 'always'});
legend = document.getElementsByClassName("dygraph-legend");
assert.equal(1, legend.length);
legend = legend[0];
assert.notEqual(-1, legend.textContent.indexOf("Y1"));
assert.notEqual(-1, legend.textContent.indexOf("Y2"));
});
});