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