Commit | Line | Data |
---|---|---|
9ca829f2 DV |
1 | // Copyright 2011 Google Inc. All Rights Reserved. |
2 | ||
3 | /** | |
4 | * @fileoverview Tests for the updateOptions function. | |
5 | * @author antrob@google.com (Anthony Robledo) | |
6 | */ | |
7 | var UpdateOptionsTestCase = TestCase("update-options"); | |
8 | ||
9 | UpdateOptionsTestCase.prototype.opts = { | |
10 | width: 480, | |
11 | height: 320, | |
12 | }; | |
13 | ||
14 | UpdateOptionsTestCase.prototype.data = "X,Y1,Y2\n" + | |
15 | "2011-01-01,2,3\n" + | |
16 | "2011-02-02,5,3\n" + | |
17 | "2011-03-03,6,1\n" + | |
18 | "2011-04-04,9,5\n" + | |
19 | "2011-05-05,8,3\n"; | |
20 | ||
21 | UpdateOptionsTestCase.prototype.setUp = function() { | |
1a27bd14 | 22 | document.body.innerHTML = "<div id='graph'></div><div id='labels'></div>"; |
9ca829f2 DV |
23 | }; |
24 | ||
25 | UpdateOptionsTestCase.prototype.tearDown = function() { | |
26 | }; | |
27 | ||
8c5d3797 RK |
28 | /* |
29 | * Tweaks the dygraph so it sets g._testDrawCalled to true when internal method | |
30 | * drawGraph_ is called. Call unWrapDrawGraph when done with this. | |
31 | */ | |
32 | UpdateOptionsTestCase.prototype.wrapDrawGraph = function(g) { | |
9ca829f2 | 33 | g._testDrawCalled = false; |
8c5d3797 RK |
34 | g._oldDrawGraph = g.drawGraph_; |
35 | g.drawGraph_ = function() { | |
9ca829f2 | 36 | g._testDrawCalled = true; |
8c5d3797 | 37 | g._oldDrawGraph.call(g); |
9ca829f2 | 38 | } |
9ca829f2 DV |
39 | } |
40 | ||
8c5d3797 RK |
41 | /* |
42 | * See wrapDrawGraph | |
43 | */ | |
44 | UpdateOptionsTestCase.prototype.unwrapDrawGraph = function(g) { | |
45 | g.drawGraph_ = g._oldDrawGraph; | |
9ca829f2 DV |
46 | } |
47 | ||
48 | UpdateOptionsTestCase.prototype.testStrokeAll = function() { | |
49 | var graphDiv = document.getElementById("graph"); | |
50 | var graph = new Dygraph(graphDiv, this.data, this.opts); | |
51 | var updatedOptions = { }; | |
52 | ||
53 | updatedOptions['strokeWidth'] = 3; | |
54 | ||
55 | // These options will allow us to jump to renderGraph_() | |
56 | // drawGraph_() will be skipped. | |
8c5d3797 | 57 | this.wrapDrawGraph(graph); |
9ca829f2 | 58 | graph.updateOptions(updatedOptions); |
8c5d3797 | 59 | this.unwrapDrawGraph(graph); |
9ca829f2 DV |
60 | assertFalse(graph._testDrawCalled); |
61 | }; | |
62 | ||
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 = { }; | |
68 | ||
69 | optionsForY1['strokeWidth'] = 3; | |
8887663f | 70 | updatedOptions['series'] = {'Y1': optionsForY1}; |
9ca829f2 DV |
71 | |
72 | // These options will allow us to jump to renderGraph_() | |
73 | // drawGraph_() will be skipped. | |
8c5d3797 | 74 | this.wrapDrawGraph(graph); |
9ca829f2 | 75 | graph.updateOptions(updatedOptions); |
8c5d3797 | 76 | this.unwrapDrawGraph(graph); |
9ca829f2 DV |
77 | assertFalse(graph._testDrawCalled); |
78 | }; | |
79 | ||
80 | UpdateOptionsTestCase.prototype.testSingleSeriesRequiresNewPoints = function() { | |
81 | var graphDiv = document.getElementById("graph"); | |
82 | var graph = new Dygraph(graphDiv, this.data, this.opts); | |
8887663f DV |
83 | var updatedOptions = { |
84 | series: { | |
85 | Y1: { | |
86 | strokeWidth: 2 | |
87 | }, | |
88 | Y2: { | |
89 | stepPlot: true | |
90 | } | |
91 | } | |
92 | }; | |
9ca829f2 DV |
93 | |
94 | // These options will not allow us to jump to renderGraph_() | |
95 | // drawGraph_() must be called | |
8c5d3797 | 96 | this.wrapDrawGraph(graph); |
9ca829f2 | 97 | graph.updateOptions(updatedOptions); |
8c5d3797 | 98 | this.unwrapDrawGraph(graph); |
9ca829f2 DV |
99 | assertTrue(graph._testDrawCalled); |
100 | }; | |
101 | ||
102 | UpdateOptionsTestCase.prototype.testWidthChangeNeedsNewPoints = function() { | |
103 | var graphDiv = document.getElementById("graph"); | |
104 | var graph = new Dygraph(graphDiv, this.data, this.opts); | |
105 | var updatedOptions = { }; | |
106 | ||
107 | // This will require new points. | |
108 | updatedOptions['width'] = 600; | |
109 | ||
110 | // These options will not allow us to jump to renderGraph_() | |
111 | // drawGraph_() must be called | |
8c5d3797 | 112 | this.wrapDrawGraph(graph); |
9ca829f2 | 113 | graph.updateOptions(updatedOptions); |
8c5d3797 | 114 | this.unwrapDrawGraph(graph); |
9ca829f2 DV |
115 | assertTrue(graph._testDrawCalled); |
116 | }; | |
66ad3609 RK |
117 | |
118 | // Test https://github.com/danvk/dygraphs/issues/87 | |
119 | UpdateOptionsTestCase.prototype.testUpdateLabelsDivDoesntInfiniteLoop = function() { | |
120 | var graphDiv = document.getElementById("graph"); | |
121 | var labelsDiv = document.getElementById("labels"); | |
122 | var graph = new Dygraph(graphDiv, this.data, this.opts); | |
123 | graph.updateOptions({labelsDiv : labelsDiv}); | |
124 | } | |
125 | ||
8c5d3797 RK |
126 | // Test https://github.com/danvk/dygraphs/issues/247 |
127 | UpdateOptionsTestCase.prototype.testUpdateColors = function() { | |
128 | var graphDiv = document.getElementById("graph"); | |
129 | var graph = new Dygraph(graphDiv, this.data, this.opts); | |
130 | ||
131 | var defaultColors = ["rgb(0,128,0)", "rgb(0,0,128)"]; | |
132 | assertEquals(["rgb(0,128,0)", "rgb(0,0,128)"], graph.getColors()); | |
133 | ||
134 | var colors1 = [ "#aaa", "#bbb" ]; | |
135 | graph.updateOptions({ colors: colors1 }); | |
136 | assertEquals(colors1, graph.getColors()); | |
137 | ||
a8f4eb62 | 138 | // extra colors are ignored until you add additional data series. |
45efb726 | 139 | var colors2 = [ "#ddd", "#eee", "#fff" ]; |
8c5d3797 | 140 | graph.updateOptions({ colors: colors2 }); |
45efb726 | 141 | assertEquals(["#ddd", "#eee"], graph.getColors()); |
8c5d3797 | 142 | |
a8f4eb62 DV |
143 | graph.updateOptions({ file: |
144 | "X,Y1,Y2,Y3\n" + | |
145 | "2011-01-01,2,3,4\n" + | |
146 | "2011-02-02,5,3,2\n" | |
147 | }); | |
148 | assertEquals(colors2, graph.getColors()); | |
8c5d3797 | 149 | |
a8f4eb62 | 150 | graph.updateOptions({ colors: null, file: this.data }); |
8c5d3797 RK |
151 | assertEquals(defaultColors, graph.getColors()); |
152 | } | |
4a0cb9c4 DV |
153 | |
154 | // Regression test for http://code.google.com/p/dygraphs/issues/detail?id=249 | |
155 | // Verifies that setting 'legend: always' via update immediately shows the | |
156 | // legend. | |
157 | UpdateOptionsTestCase.prototype.testUpdateLegendAlways = function() { | |
158 | var graphDiv = document.getElementById("graph"); | |
159 | var graph = new Dygraph(graphDiv, this.data, this.opts); | |
160 | ||
161 | var legend = document.getElementsByClassName("dygraph-legend"); | |
162 | assertEquals(1, legend.length); | |
163 | legend = legend[0]; | |
164 | assertEquals("", legend.innerHTML); | |
165 | ||
166 | graph.updateOptions({legend: 'always'}); | |
167 | ||
168 | legend = document.getElementsByClassName("dygraph-legend"); | |
169 | assertEquals(1, legend.length); | |
170 | legend = legend[0]; | |
171 | assertNotEquals(-1, legend.textContent.indexOf("Y1")); | |
172 | assertNotEquals(-1, legend.textContent.indexOf("Y2")); | |
173 | }; |