1 // Copyright 2011 Google Inc. All Rights Reserved.
4 * @fileoverview Tests for the updateOptions function.
5 * @author antrob@google.com (Anthony Robledo)
7 var UpdateOptionsTestCase
= TestCase("update-options");
9 UpdateOptionsTestCase
.prototype.opts
= {
14 UpdateOptionsTestCase
.prototype.data
= "X,Y1,Y2\n" +
21 UpdateOptionsTestCase
.prototype.setUp
= function() {
22 document
.body
.innerHTML
= "<div id='graph'></div><div id='labels'></div>";
25 UpdateOptionsTestCase
.prototype.tearDown
= function() {
29 * Tweaks the dygraph so it sets g._testDrawCalled to true when internal method
30 * drawGraph_ is called. Call unWrapDrawGraph when done with this.
32 UpdateOptionsTestCase
.prototype.wrapDrawGraph
= function(g
) {
33 g
._testDrawCalled
= false;
34 g
._oldDrawGraph
= g
.drawGraph_
;
35 g
.drawGraph_
= function() {
36 g
._testDrawCalled
= true;
37 g
._oldDrawGraph
.call(g
);
44 UpdateOptionsTestCase
.prototype.unwrapDrawGraph
= function(g
) {
45 g
.drawGraph_
= g
._oldDrawGraph
;
48 UpdateOptionsTestCase
.prototype.testStrokeAll
= function() {
49 var graphDiv
= document
.getElementById("graph");
50 var graph
= new Dygraph(graphDiv
, this.data
, this.opts
);
51 var updatedOptions
= { };
53 updatedOptions
['strokeWidth'] = 3;
55 // These options will allow us to jump to renderGraph_()
56 // drawGraph_() will be skipped.
57 this.wrapDrawGraph(graph
);
58 graph
.updateOptions(updatedOptions
);
59 this.unwrapDrawGraph(graph
);
60 assertFalse(graph
._testDrawCalled
);
63 UpdateOptionsTestCase
.prototype.testStrokeSingleSeries
= function() {
64 var graphDiv
= document
.getElementById("graph");
65 var graph
= new Dygraph(graphDiv
, this.data
, this.opts
);
66 var updatedOptions
= { };
67 var optionsForY1
= { };
69 optionsForY1
['strokeWidth'] = 3;
70 updatedOptions
['Y1'] = optionsForY1
;
72 // These options will allow us to jump to renderGraph_()
73 // drawGraph_() will be skipped.
74 this.wrapDrawGraph(graph
);
75 graph
.updateOptions(updatedOptions
);
76 this.unwrapDrawGraph(graph
);
77 assertFalse(graph
._testDrawCalled
);
80 UpdateOptionsTestCase
.prototype.testSingleSeriesRequiresNewPoints
= function() {
81 var graphDiv
= document
.getElementById("graph");
82 var graph
= new Dygraph(graphDiv
, this.data
, this.opts
);
83 var updatedOptions
= { };
84 var optionsForY1
= { };
85 var optionsForY2
= { };
87 // This will not require new points.
88 optionsForY1
['strokeWidth'] = 2;
89 updatedOptions
['Y1'] = optionsForY1
;
91 // This will require new points.
92 optionsForY2
['stepPlot'] = true;
93 updatedOptions
['Y2'] = optionsForY2
;
95 // These options will not allow us to jump to renderGraph_()
96 // drawGraph_() must be called
97 this.wrapDrawGraph(graph
);
98 graph
.updateOptions(updatedOptions
);
99 this.unwrapDrawGraph(graph
);
100 assertTrue(graph
._testDrawCalled
);
103 UpdateOptionsTestCase
.prototype.testWidthChangeNeedsNewPoints
= function() {
104 var graphDiv
= document
.getElementById("graph");
105 var graph
= new Dygraph(graphDiv
, this.data
, this.opts
);
106 var updatedOptions
= { };
108 // This will require new points.
109 updatedOptions
['width'] = 600;
111 // These options will not allow us to jump to renderGraph_()
112 // drawGraph_() must be called
113 this.wrapDrawGraph(graph
);
114 graph
.updateOptions(updatedOptions
);
115 this.unwrapDrawGraph(graph
);
116 assertTrue(graph
._testDrawCalled
);
119 // Test https://github.com/danvk/dygraphs/issues/87
120 UpdateOptionsTestCase
.prototype.testUpdateLabelsDivDoesntInfiniteLoop
= function() {
121 var graphDiv
= document
.getElementById("graph");
122 var labelsDiv
= document
.getElementById("labels");
123 var graph
= new Dygraph(graphDiv
, this.data
, this.opts
);
124 graph
.updateOptions({labelsDiv
: labelsDiv
});
127 // Test https://github.com/danvk/dygraphs/issues/247
128 UpdateOptionsTestCase
.prototype.testUpdateColors
= function() {
129 var graphDiv
= document
.getElementById("graph");
130 var graph
= new Dygraph(graphDiv
, this.data
, this.opts
);
132 var defaultColors
= ["rgb(0,128,0)", "rgb(0,0,128)"];
133 assertEquals(["rgb(0,128,0)", "rgb(0,0,128)"], graph
.getColors());
135 var colors1
= [ "#aaa", "#bbb" ];
136 graph
.updateOptions({ colors
: colors1
});
137 assertEquals(colors1
, graph
.getColors());
139 // extra colors are ignored until you add additional data series.
140 var colors2
= [ "#ddd", "#eee", "#fff" ];
141 graph
.updateOptions({ colors
: colors2
});
142 assertEquals(["#ddd", "#eee"], graph
.getColors());
144 graph
.updateOptions({ file
:
146 "2011-01-01,2,3,4\n" +
149 assertEquals(colors2
, graph
.getColors());
151 graph
.updateOptions({ colors
: null, file
: this.data
});
152 assertEquals(defaultColors
, graph
.getColors());
155 // Regression test for http://code.google.com/p/dygraphs/issues/detail
?id
=249
156 // Verifies that setting 'legend: always' via update immediately shows the
158 UpdateOptionsTestCase
.prototype.testUpdateLegendAlways
= function() {
159 var graphDiv
= document
.getElementById("graph");
160 var graph
= new Dygraph(graphDiv
, this.data
, this.opts
);
162 var legend
= document
.getElementsByClassName("dygraph-legend");
163 assertEquals(1, legend
.length
);
165 assertEquals("", legend
.innerHTML
);
167 graph
.updateOptions({legend
: 'always'});
169 legend
= document
.getElementsByClassName("dygraph-legend");
170 assertEquals(1, legend
.length
);
172 assertNotEquals(-1, legend
.textContent
.indexOf("Y1"));
173 assertNotEquals(-1, legend
.textContent
.indexOf("Y2"));