Commit | Line | Data |
---|---|---|
6d6c60b6 RK |
1 | /** |
2 | * @fileoverview Test cases for how axis labels are chosen and formatted. | |
3 | * | |
4 | * @author dan@dygraphs.com (Dan Vanderkam) | |
5 | */ | |
89fdcedb | 6 | describe("axis-labels", function() { |
6d6c60b6 | 7 | |
89fdcedb | 8 | beforeEach(function() { |
6d6c60b6 | 9 | document.body.innerHTML = "<div id='graph'></div>"; |
89fdcedb | 10 | }); |
6d6c60b6 | 11 | |
89fdcedb DV |
12 | afterEach(function() { |
13 | }); | |
6d6c60b6 | 14 | |
319d0361 | 15 | var simpleData = |
d574a45e | 16 | "X,Y,Y2\n" + |
cb136039 RK |
17 | "0,-1,.5\n" + |
18 | "1,0,.7\n" + | |
19 | "2,1,.4\n" + | |
20 | "3,0,.98\n"; | |
6d6c60b6 | 21 | |
319d0361 | 22 | var kCloseFloat = 1.0e-10; |
6d6c60b6 | 23 | |
89fdcedb | 24 | it('testMinusOneToOne', function() { |
6d6c60b6 RK |
25 | var opts = { |
26 | width: 480, | |
27 | height: 320 | |
28 | }; | |
29 | var data = "X,Y\n" + | |
30 | "0,-1\n" + | |
31 | "1,0\n" + | |
32 | "2,1\n" + | |
33 | "3,0\n" | |
34 | ; | |
35 | ||
36 | var graph = document.getElementById("graph"); | |
37 | var g = new Dygraph(graph, data, opts); | |
38 | ||
39 | // TODO(danvk): would ['-1.0','-0.5','0.0','0.5','1.0'] be better? | |
89fdcedb | 40 | assert.deepEqual(['-1','-0.5','0','0.5','1'], Util.getYLabels()); |
6d6c60b6 RK |
41 | |
42 | // Go up to 2 | |
43 | data += "4,2\n"; | |
44 | g.updateOptions({file: data}); | |
89fdcedb | 45 | assert.deepEqual(['-1','-0.5','0','0.5','1','1.5','2'], Util.getYLabels()); |
6d6c60b6 RK |
46 | |
47 | // Now 10 | |
48 | data += "5,10\n"; | |
49 | g.updateOptions({file: data}); | |
89fdcedb | 50 | assert.deepEqual(['-2','0','2','4','6','8','10'], Util.getYLabels()); |
6d6c60b6 RK |
51 | |
52 | // Now 100 | |
53 | data += "6,100\n"; | |
54 | g.updateOptions({file: data}); | |
89fdcedb | 55 | assert.deepEqual(['0','20','40','60','80','100'], Util.getYLabels()); |
6d6c60b6 RK |
56 | |
57 | g.setSelection(0); | |
89fdcedb DV |
58 | assert.equal('0: Y: -1', Util.getLegend()); |
59 | }); | |
6d6c60b6 | 60 | |
89fdcedb | 61 | it('testSmallRangeNearZero', function() { |
6d6c60b6 RK |
62 | var opts = { |
63 | drawAxesAtZero: true, | |
64 | width: 480, | |
65 | height: 320 | |
66 | }; | |
67 | var data = "X,Y\n" + | |
68 | "0,-1\n" + | |
69 | "1,0\n" + | |
70 | "2,1\n" + | |
71 | "3,0\n" | |
72 | ; | |
73 | opts.valueRange = [-0.1, 0.1]; | |
74 | ||
75 | var graph = document.getElementById("graph"); | |
76 | var g = new Dygraph(graph, data, opts); | |
dc910fce | 77 | assertDeepCloseTo([-0.1,-0.05,0,0.05], |
319d0361 | 78 | Util.makeNumbers(Util.getYLabels()), kCloseFloat); |
6d6c60b6 RK |
79 | |
80 | opts.valueRange = [-0.05, 0.05]; | |
81 | g.updateOptions(opts); | |
89fdcedb | 82 | assert.deepEqual([-0.04,-0.02,0,0.02,0.04], |
dc910fce | 83 | Util.makeNumbers(Util.getYLabels())); |
6d6c60b6 RK |
84 | |
85 | opts.valueRange = [-0.01, 0.01]; | |
86 | g.updateOptions(opts); | |
89fdcedb | 87 | assert.deepEqual([-0.01,-0.005,0,0.005], |
dc910fce | 88 | Util.makeNumbers(Util.getYLabels())); |
6d6c60b6 RK |
89 | |
90 | g.setSelection(1); | |
89fdcedb DV |
91 | assert.equal('1: Y: 0', Util.getLegend()); |
92 | }); | |
6d6c60b6 | 93 | |
89fdcedb | 94 | it('testSmallRangeAwayFromZero', function() { |
6d6c60b6 RK |
95 | var opts = { |
96 | width: 480, | |
97 | height: 320 | |
98 | }; | |
99 | var data = "X,Y\n" + | |
100 | "0,-1\n" + | |
101 | "1,0\n" + | |
102 | "2,1\n" + | |
103 | "3,0\n" | |
104 | ; | |
105 | var graph = document.getElementById("graph"); | |
106 | ||
107 | opts.valueRange = [9.9, 10.1]; | |
108 | var g = new Dygraph(graph, data, opts); | |
89fdcedb | 109 | assert.deepEqual(["9.9","9.92","9.94","9.96","9.98","10","10.02","10.04","10.06","10.08"], Util.getYLabels()); |
6d6c60b6 RK |
110 | |
111 | opts.valueRange = [9.99, 10.01]; | |
112 | g.updateOptions(opts); | |
113 | // TODO(danvk): this is bad | |
89fdcedb | 114 | assert.deepEqual(["9.99","9.99","9.99","10","10","10","10","10","10.01","10.01"], Util.getYLabels()); |
6d6c60b6 RK |
115 | |
116 | opts.valueRange = [9.999, 10.001]; | |
117 | g.updateOptions(opts); | |
118 | // TODO(danvk): this is even worse! | |
89fdcedb | 119 | assert.deepEqual(["10","10","10","10"], Util.getYLabels()); |
6d6c60b6 RK |
120 | |
121 | g.setSelection(1); | |
89fdcedb DV |
122 | assert.equal('1: Y: 0', Util.getLegend()); |
123 | }); | |
6d6c60b6 | 124 | |
89fdcedb | 125 | it('testXAxisTimeLabelFormatter', function() { |
6d6c60b6 RK |
126 | var opts = { |
127 | width: 480, | |
128 | height: 320 | |
129 | }; | |
130 | var data = [[5.0,0],[5.1,1],[5.2,2],[5.3,3],[5.4,4],[5.5,5],[5.6,6],[5.7,7],[5.8,8],[5.9,9]]; | |
131 | var graph = document.getElementById("graph"); | |
132 | var g = new Dygraph(graph, data, opts); | |
133 | g.updateOptions({ | |
134 | axes : { | |
135 | x : { | |
136 | axisLabelFormatter : function (totalMinutes) { | |
137 | var hours = Math.floor( totalMinutes / 60); | |
138 | var minutes = Math.floor((totalMinutes - (hours * 60))); | |
139 | var seconds = Math.round((totalMinutes * 60) - (hours * 3600) - (minutes * 60)); | |
140 | ||
141 | if (hours < 10) hours = "0" + hours; | |
142 | if (minutes < 10) minutes = "0" + minutes; | |
143 | if (seconds < 10) seconds = "0" + seconds; | |
144 | ||
145 | return hours + ':' + minutes + ':' + seconds; | |
146 | } | |
147 | } | |
148 | } | |
149 | }); | |
150 | ||
89fdcedb | 151 | assert.deepEqual(["00:05:00","00:05:12","00:05:24","00:05:36","00:05:48"], Util.getXLabels()); |
6d6c60b6 RK |
152 | |
153 | // The legend does not use the axisLabelFormatter: | |
154 | g.setSelection(1); | |
89fdcedb DV |
155 | assert.equal('5.1: Y1: 1', Util.getLegend()); |
156 | }); | |
6d6c60b6 | 157 | |
89fdcedb | 158 | it('testAxisLabelFormatter', function() { |
6d6c60b6 RK |
159 | var opts = { |
160 | width: 480, | |
161 | height: 320, | |
162 | axes : { | |
163 | x : { | |
164 | axisLabelFormatter : function(x, granularity, opts, dg) { | |
89fdcedb DV |
165 | assert.equal('number', typeof(x)); |
166 | assert.equal('number', typeof(granularity)); | |
167 | assert.equal('function', typeof(opts)); | |
168 | assert.equal('[Dygraph graph]', dg.toString()); | |
6d6c60b6 RK |
169 | return 'x' + x; |
170 | } | |
171 | }, | |
172 | y : { | |
173 | axisLabelFormatter : function(y, granularity, opts, dg) { | |
89fdcedb DV |
174 | assert.equal('number', typeof(y)); |
175 | assert.equal('number', typeof(granularity)); | |
176 | assert.equal('function', typeof(opts)); | |
177 | assert.equal('[Dygraph graph]', dg.toString()); | |
6d6c60b6 RK |
178 | return 'y' + y; |
179 | } | |
180 | } | |
181 | }, | |
182 | labels: ['x', 'y'] | |
183 | }; | |
184 | var data = []; | |
185 | for (var i = 0; i < 10; i++) { | |
186 | data.push([i, 2 * i]); | |
187 | } | |
188 | var graph = document.getElementById("graph"); | |
189 | var g = new Dygraph(graph, data, opts); | |
190 | ||
89fdcedb DV |
191 | assert.deepEqual(['x0','x2','x4','x6','x8'], Util.getXLabels()); |
192 | assert.deepEqual(["y0","y5","y10","y15"], Util.getYLabels()); | |
6d6c60b6 RK |
193 | |
194 | g.setSelection(2); | |
89fdcedb DV |
195 | assert.equal("2: y: 4", Util.getLegend()); |
196 | }); | |
6d6c60b6 | 197 | |
89fdcedb | 198 | it('testDateAxisLabelFormatter', function() { |
6d6c60b6 RK |
199 | var opts = { |
200 | width: 480, | |
201 | height: 320, | |
202 | axes : { | |
203 | x : { | |
e0269a3d | 204 | pixelsPerLabel: 60, |
6d6c60b6 | 205 | axisLabelFormatter : function(x, granularity, opts, dg) { |
89fdcedb DV |
206 | assert.isTrue(Dygraph.isDateLike(x)); |
207 | assert.equal('number', typeof(granularity)); | |
208 | assert.equal('function', typeof(opts)); | |
209 | assert.equal('[Dygraph graph]', dg.toString()); | |
464b5f50 | 210 | return 'x' + Util.formatDate(x); |
6d6c60b6 RK |
211 | } |
212 | }, | |
213 | y : { | |
214 | axisLabelFormatter : function(y, granularity, opts, dg) { | |
89fdcedb DV |
215 | assert.equal('number', typeof(y)); |
216 | assert.equal('number', typeof(granularity)); | |
217 | assert.equal('function', typeof(opts)); | |
218 | assert.equal('[Dygraph graph]', dg.toString()); | |
6d6c60b6 RK |
219 | return 'y' + y; |
220 | } | |
221 | } | |
222 | }, | |
223 | labels: ['x', 'y'] | |
224 | }; | |
225 | var data = []; | |
226 | for (var i = 1; i < 10; i++) { | |
227 | data.push([new Date("2011/01/0" + i), 2 * i]); | |
228 | } | |
229 | var graph = document.getElementById("graph"); | |
230 | var g = new Dygraph(graph, data, opts); | |
231 | ||
89fdcedb DV |
232 | assert.deepEqual(["x2011/01/02","x2011/01/04","x2011/01/06","x2011/01/08"], Util.getXLabels()); |
233 | assert.deepEqual(["y5","y10","y15"], Util.getYLabels()); | |
6d6c60b6 RK |
234 | |
235 | g.setSelection(0); | |
89fdcedb DV |
236 | assert.equal("2011/01/01: y: 2", Util.getLegend()); |
237 | }); | |
6d6c60b6 RK |
238 | |
239 | // This test verifies that when a valueFormatter is set (but not an | |
240 | // axisLabelFormatter), then the valueFormatter is used to format the axis | |
241 | // labels. | |
89fdcedb | 242 | it('testValueFormatter', function() { |
6d6c60b6 RK |
243 | var opts = { |
244 | width: 480, | |
245 | height: 320, | |
6addd5b7 DV |
246 | axes: { |
247 | x: { | |
be7543ac | 248 | valueFormatter: function(x, opts, series_name, dg, row, col) { |
89fdcedb DV |
249 | assert.equal('number', typeof(x)); |
250 | assert.equal('function', typeof(opts)); | |
251 | assert.equal('string', typeof(series_name)); | |
252 | assert.equal('[Dygraph graph]', dg.toString()); | |
253 | assert.equal('number', typeof(row)); | |
254 | assert.equal('number', typeof(col)); | |
255 | assert.equal(dg, this); | |
6d6c60b6 RK |
256 | return 'x' + x; |
257 | } | |
258 | }, | |
6addd5b7 | 259 | y: { |
be7543ac | 260 | valueFormatter: function(y, opts, series_name, dg, row, col) { |
89fdcedb DV |
261 | assert.equal('number', typeof(y)); |
262 | assert.equal('function', typeof(opts)); | |
263 | assert.equal('string', typeof(series_name)); | |
264 | assert.equal('[Dygraph graph]', dg.toString()); | |
265 | assert.equal('number', typeof(row)); | |
266 | assert.equal('number', typeof(col)); | |
267 | assert.equal(dg, this); | |
6d6c60b6 RK |
268 | return 'y' + y; |
269 | } | |
270 | } | |
271 | }, | |
272 | labels: ['x', 'y'] | |
273 | }; | |
274 | var data = []; | |
275 | for (var i = 0; i < 10; i++) { | |
276 | data.push([i, 2 * i]); | |
277 | } | |
278 | var graph = document.getElementById("graph"); | |
279 | var g = new Dygraph(graph, data, opts); | |
280 | ||
281 | // the valueFormatter options do not affect the ticks. | |
89fdcedb DV |
282 | assert.deepEqual(['0','2','4','6','8'], Util.getXLabels()); |
283 | assert.deepEqual(["0","5","10","15"], | |
846038aa | 284 | Util.getYLabels()); |
6d6c60b6 RK |
285 | |
286 | // they do affect the legend, however. | |
287 | g.setSelection(2); | |
89fdcedb DV |
288 | assert.equal("x2: y: y4", Util.getLegend()); |
289 | }); | |
6d6c60b6 | 290 | |
89fdcedb | 291 | it('testDateValueFormatter', function() { |
6d6c60b6 RK |
292 | var opts = { |
293 | width: 480, | |
294 | height: 320, | |
295 | axes : { | |
296 | x : { | |
e0269a3d | 297 | pixelsPerLabel: 60, |
be7543ac | 298 | valueFormatter: function(x, opts, series_name, dg, row, col) { |
89fdcedb DV |
299 | assert.equal('number', typeof(x)); |
300 | assert.equal('function', typeof(opts)); | |
301 | assert.equal('string', typeof(series_name)); | |
302 | assert.equal('[Dygraph graph]', dg.toString()); | |
303 | assert.equal('number', typeof(row)); | |
304 | assert.equal('number', typeof(col)); | |
305 | assert.equal(dg, this); | |
464b5f50 | 306 | return 'x' + Util.formatDate(x); |
6d6c60b6 RK |
307 | } |
308 | }, | |
309 | y : { | |
be7543ac | 310 | valueFormatter: function(y, opts, series_name, dg, row, col) { |
89fdcedb DV |
311 | assert.equal('number', typeof(y)); |
312 | assert.equal('function', typeof(opts)); | |
313 | assert.equal('string', typeof(series_name)); | |
314 | assert.equal('[Dygraph graph]', dg.toString()); | |
315 | assert.equal('number', typeof(row)); | |
316 | assert.equal('number', typeof(col)); | |
317 | assert.equal(dg, this); | |
6d6c60b6 RK |
318 | return 'y' + y; |
319 | } | |
320 | } | |
321 | }, | |
322 | labels: ['x', 'y'] | |
323 | }; | |
324 | ||
325 | var data = []; | |
326 | for (var i = 1; i < 10; i++) { | |
327 | data.push([new Date("2011/01/0" + i), 2 * i]); | |
328 | } | |
329 | var graph = document.getElementById("graph"); | |
330 | var g = new Dygraph(graph, data, opts); | |
331 | ||
332 | // valueFormatters do not affect ticks. | |
89fdcedb DV |
333 | assert.deepEqual(["02 Jan","04 Jan","06 Jan","08 Jan"], Util.getXLabels()); |
334 | assert.deepEqual(["5","10","15"], Util.getYLabels()); | |
6d6c60b6 RK |
335 | |
336 | // the valueFormatter options also affect the legend. | |
337 | g.setSelection(2); | |
89fdcedb DV |
338 | assert.equal('x2011/01/03: y: y6', Util.getLegend()); |
339 | }); | |
6d6c60b6 RK |
340 | |
341 | // This test verifies that when both a valueFormatter and an axisLabelFormatter | |
342 | // are specified, the axisLabelFormatter takes precedence. | |
89fdcedb | 343 | it('testAxisLabelFormatterPrecedence', function() { |
6d6c60b6 RK |
344 | var opts = { |
345 | width: 480, | |
346 | height: 320, | |
347 | axes : { | |
348 | x : { | |
349 | valueFormatter: function(x) { | |
89fdcedb | 350 | assert.equal('[Dygraph graph]', this.toString()); |
6d6c60b6 RK |
351 | return 'xvf' + x; |
352 | }, | |
353 | axisLabelFormatter: function(x, granularity) { | |
89fdcedb | 354 | assert.equal('[Dygraph graph]', this.toString()); |
6d6c60b6 RK |
355 | return 'x' + x; |
356 | } | |
357 | }, | |
358 | y : { | |
359 | valueFormatter: function(y) { | |
89fdcedb | 360 | assert.equal('[Dygraph graph]', this.toString()); |
6d6c60b6 RK |
361 | return 'yvf' + y; |
362 | }, | |
363 | axisLabelFormatter: function(y) { | |
89fdcedb | 364 | assert.equal('[Dygraph graph]', this.toString()); |
6d6c60b6 RK |
365 | return 'y' + y; |
366 | } | |
367 | } | |
368 | }, | |
369 | labels: ['x', 'y'] | |
370 | }; | |
371 | var data = []; | |
372 | for (var i = 0; i < 10; i++) { | |
373 | data.push([i, 2 * i]); | |
374 | } | |
375 | var graph = document.getElementById("graph"); | |
376 | var g = new Dygraph(graph, data, opts); | |
377 | ||
89fdcedb DV |
378 | assert.deepEqual(['x0','x2','x4','x6','x8'], Util.getXLabels()); |
379 | assert.deepEqual(["y0","y5","y10","y15"], Util.getYLabels()); | |
6d6c60b6 RK |
380 | |
381 | g.setSelection(9); | |
89fdcedb DV |
382 | assert.equal("xvf9: y: yvf18", Util.getLegend()); |
383 | }); | |
6d6c60b6 RK |
384 | |
385 | // This is the same as the previous test, except that options are added | |
386 | // one-by-one. | |
89fdcedb | 387 | it('testAxisLabelFormatterIncremental', function() { |
6d6c60b6 RK |
388 | var opts = { |
389 | width: 480, | |
390 | height: 320, | |
391 | labels: ['x', 'y'] | |
392 | }; | |
393 | var data = []; | |
394 | for (var i = 0; i < 10; i++) { | |
395 | data.push([i, 2 * i]); | |
396 | } | |
397 | var graph = document.getElementById("graph"); | |
398 | var g = new Dygraph(graph, data, opts); | |
399 | g.updateOptions({ | |
400 | axes : { | |
401 | x : { | |
402 | valueFormatter: function(x) { | |
403 | return 'xvf' + x; | |
404 | } | |
405 | } | |
406 | } | |
407 | }); | |
408 | g.updateOptions({ | |
409 | axes : { | |
410 | y : { | |
411 | valueFormatter: function(y) { | |
412 | return 'yvf' + y; | |
413 | } | |
414 | } | |
415 | } | |
416 | }); | |
417 | g.updateOptions({ | |
418 | axes : { | |
419 | x : { | |
420 | axisLabelFormatter: function(x, granularity) { | |
421 | return 'x' + x; | |
422 | } | |
423 | } | |
424 | } | |
425 | }); | |
426 | g.updateOptions({ | |
427 | axes : { | |
428 | y : { | |
429 | axisLabelFormatter: function(y) { | |
430 | return 'y' + y; | |
431 | } | |
432 | } | |
433 | } | |
434 | }); | |
435 | ||
89fdcedb DV |
436 | assert.deepEqual(["x0","x2","x4","x6","x8"], Util.getXLabels()); |
437 | assert.deepEqual(["y0","y5","y10","y15"], Util.getYLabels()); | |
6d6c60b6 RK |
438 | |
439 | g.setSelection(9); | |
89fdcedb DV |
440 | assert.equal("xvf9: y: yvf18", Util.getLegend()); |
441 | }); | |
6d6c60b6 | 442 | |
89fdcedb | 443 | it('testGlobalFormatters', function() { |
6d6c60b6 RK |
444 | var opts = { |
445 | width: 480, | |
446 | height: 320, | |
447 | labels: ['x', 'y'], | |
448 | valueFormatter: function(x) { | |
89fdcedb | 449 | assert.equal('[Dygraph graph]', this); |
6d6c60b6 RK |
450 | return 'vf' + x; |
451 | }, | |
452 | axisLabelFormatter: function(x) { | |
89fdcedb | 453 | assert.equal('[Dygraph graph]', this); |
6d6c60b6 RK |
454 | return 'alf' + x; |
455 | } | |
456 | }; | |
457 | var data = []; | |
458 | for (var i = 0; i < 10; i++) { | |
459 | data.push([i, 2 * i]); | |
460 | } | |
461 | var graph = document.getElementById("graph"); | |
462 | var g = new Dygraph(graph, data, opts); | |
463 | ||
89fdcedb DV |
464 | assert.deepEqual(['alf0','alf2','alf4','alf6','alf8'], Util.getXLabels()); |
465 | assert.deepEqual(["alf0","alf5","alf10","alf15"], Util.getYLabels()); | |
6d6c60b6 RK |
466 | |
467 | g.setSelection(9); | |
89fdcedb DV |
468 | assert.equal("vf9: y: vf18", Util.getLegend()); |
469 | }); | |
6d6c60b6 | 470 | |
89fdcedb | 471 | it('testValueFormatterParameters', function() { |
be7543ac DV |
472 | var calls = []; |
473 | // change any functions in list to 'fn' -- functions can't be asserted. | |
474 | var killFunctions = function(list) { | |
475 | var out = []; | |
476 | for (var i = 0; i < list.length; i++) { | |
477 | if (typeof(list[i]) == 'function') { | |
478 | out[i] = 'fn'; | |
479 | } else { | |
480 | out[i] = list[i]; | |
481 | } | |
482 | } | |
483 | return out; | |
484 | }; | |
485 | var taggedRecorder = function(tag) { | |
486 | return function() { | |
6addd5b7 | 487 | calls.push([tag].concat([this], killFunctions(arguments))); |
be7543ac DV |
488 | return ''; |
489 | } | |
490 | }; | |
491 | var opts = { | |
492 | axes: { | |
493 | x: { valueFormatter: taggedRecorder('x') }, | |
494 | y: { valueFormatter: taggedRecorder('y') }, | |
495 | y2: { valueFormatter: taggedRecorder('y2') } | |
496 | }, | |
497 | series: { | |
498 | 'y1': { axis: 'y1'}, | |
499 | 'y2': { axis: 'y2'} | |
500 | }, | |
501 | labels: ['x', 'y1', 'y2'] | |
502 | }; | |
503 | var data = [ | |
504 | [0, 1, 2], | |
505 | [1, 3, 4] | |
506 | ]; | |
507 | var graph = document.getElementById('graph'); | |
508 | var g = new Dygraph(graph, data, opts); | |
509 | ||
89fdcedb | 510 | assert.deepEqual([], calls); |
be7543ac | 511 | g.setSelection(0); |
89fdcedb | 512 | assert.deepEqual([ |
be7543ac | 513 | // num or millis, opts, series, dygraph, row, col |
6addd5b7 DV |
514 | [ 'x', g, 0, 'fn', 'x', g, 0, 0], |
515 | [ 'y', g, 1, 'fn', 'y1', g, 0, 1], | |
516 | ['y2', g, 2, 'fn', 'y2', g, 0, 2] | |
54f4c379 DV |
517 | ], calls); |
518 | ||
519 | calls = []; | |
520 | g.setSelection(1); | |
89fdcedb | 521 | assert.deepEqual([ |
6addd5b7 DV |
522 | [ 'x', g, 1, 'fn', 'x', g, 1, 0], |
523 | [ 'y', g, 3, 'fn', 'y1', g, 1, 1], | |
524 | ['y2', g, 4, 'fn', 'y2', g, 1, 2] | |
be7543ac | 525 | ], calls); |
89fdcedb | 526 | }); |
be7543ac | 527 | |
89fdcedb | 528 | it('testSeriesOrder', function() { |
6d6c60b6 RK |
529 | var opts = { |
530 | width: 480, | |
531 | height: 320 | |
532 | }; | |
533 | var data = "x,00,01,10,11\n" + | |
534 | "0,101,201,301,401\n" + | |
535 | "1,102,202,302,402\n" + | |
536 | "2,103,203,303,403\n" + | |
537 | "3,104,204,304,404\n" | |
538 | ; | |
539 | ||
540 | var graph = document.getElementById("graph"); | |
541 | var g = new Dygraph(graph, data, opts); | |
542 | ||
543 | g.setSelection(2); | |
89fdcedb | 544 | assert.equal('2: 00: 103 01: 203 10: 303 11: 403', Util.getLegend()); |
6d6c60b6 RK |
545 | |
546 | // Sanity checks for indexFromSetName | |
89fdcedb DV |
547 | assert.equal(0, g.indexFromSetName("x")); |
548 | assert.equal(1, g.indexFromSetName("00")); | |
549 | assert.equal(null, g.indexFromSetName("abcde")); | |
6d6c60b6 RK |
550 | |
551 | // Verify that we get the label list back in the right order | |
89fdcedb DV |
552 | assert.deepEqual(["x", "00", "01", "10", "11"], g.getLabels()); |
553 | }); | |
de624512 | 554 | |
89fdcedb | 555 | it('testLabelKMB', function() { |
de624512 RK |
556 | var data = []; |
557 | data.push([0,0]); | |
558 | data.push([1,2000]); | |
559 | data.push([2,1000]); | |
560 | ||
561 | var g = new Dygraph( | |
562 | document.getElementById("graph"), | |
563 | data, | |
564 | { | |
565 | labels: [ 'X', 'bar' ], | |
566 | axes : { | |
567 | y: { | |
568 | labelsKMB: true | |
569 | } | |
570 | } | |
571 | } | |
572 | ); | |
573 | ||
89fdcedb DV |
574 | assert.deepEqual(["0", "500", "1K", "1.5K", "2K"], Util.getYLabels()); |
575 | }); | |
de624512 | 576 | |
89fdcedb | 577 | it('testLabelKMG2', function() { |
de624512 RK |
578 | var data = []; |
579 | data.push([0,0]); | |
580 | data.push([1,2000]); | |
581 | data.push([2,1000]); | |
582 | ||
583 | var g = new Dygraph( | |
584 | document.getElementById("graph"), | |
585 | data, | |
586 | { | |
587 | labels: [ 'X', 'bar' ], | |
588 | axes : { | |
589 | y: { | |
590 | labelsKMG2: true | |
591 | } | |
592 | } | |
593 | } | |
594 | ); | |
595 | ||
dc910fce DV |
596 | assert.deepEqual(["0","256","512","768","1k","1.25k","1.5k","1.75k","2k"], |
597 | Util.getYLabels()); | |
89fdcedb | 598 | }); |
b0d3471d | 599 | |
94647da2 | 600 | // Same as testLabelKMG2 but specifies the option at the |
a716aff2 | 601 | // top of the option dictionary. |
89fdcedb | 602 | it('testLabelKMG2_top', function() { |
a716aff2 RK |
603 | var data = []; |
604 | data.push([0,0]); | |
605 | data.push([1,2000]); | |
606 | data.push([2,1000]); | |
607 | ||
608 | var g = new Dygraph( | |
609 | document.getElementById("graph"), | |
610 | data, | |
611 | { | |
612 | labels: [ 'X', 'bar' ], | |
613 | labelsKMG2: true | |
614 | } | |
615 | ); | |
616 | ||
dc910fce | 617 | assert.deepEqual( |
a716aff2 RK |
618 | ["0","256","512","768","1k","1.25k","1.5k","1.75k","2k"], |
619 | Util.getYLabels()); | |
89fdcedb | 620 | }); |
a716aff2 | 621 | |
b0d3471d RK |
622 | /** |
623 | * Verify that log scale axis range is properly specified. | |
624 | */ | |
89fdcedb | 625 | it('testLogScale', function() { |
b0d3471d RK |
626 | var g = new Dygraph("graph", [[0, 5], [1, 1000]], { logscale : true }); |
627 | var nonEmptyLabels = Util.getYLabels().filter(function(x) { return x.length > 0; }); | |
89fdcedb | 628 | assert.deepEqual(["5","10","20","50","100","200","500","1000"], nonEmptyLabels); |
b0d3471d RK |
629 | |
630 | g.updateOptions({ logscale : false }); | |
89fdcedb DV |
631 | assert.deepEqual(['0','200','400','600','800','1000'], Util.getYLabels()); |
632 | }); | |
478b866b RK |
633 | |
634 | /** | |
635 | * Verify that include zero range is properly specified. | |
636 | */ | |
89fdcedb | 637 | it('testIncludeZero', function() { |
478b866b | 638 | var g = new Dygraph("graph", [[0, 500], [1, 1000]], { includeZero : true }); |
89fdcedb | 639 | assert.deepEqual(['0','200','400','600','800','1000'], Util.getYLabels()); |
478b866b RK |
640 | |
641 | g.updateOptions({ includeZero : false }); | |
89fdcedb DV |
642 | assert.deepEqual(['500','600','700','800','900','1000'], Util.getYLabels()); |
643 | }); | |
d574a45e | 644 | |
89fdcedb | 645 | it('testAxisLabelFontSize', function() { |
48dc3815 | 646 | var graph = document.getElementById("graph"); |
319d0361 | 647 | var g = new Dygraph(graph, simpleData, {}); |
48dc3815 RK |
648 | |
649 | // Be sure we're dealing with a 14-point default. | |
89fdcedb | 650 | assert.equal(14, Dygraph.DEFAULT_ATTRS.axisLabelFontSize); |
48dc3815 | 651 | |
3a84670d RK |
652 | var assertFontSize = function(selector, expected) { |
653 | Util.assertStyleOfChildren(selector, "font-size", expected); | |
654 | } | |
655 | ||
dc910fce DV |
656 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-x"), "14px"); |
657 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-y") , "14px"); | |
48dc3815 RK |
658 | |
659 | g.updateOptions({ axisLabelFontSize : 8}); | |
dc910fce DV |
660 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-x"), "8px"); |
661 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-y"), "8px"); | |
48dc3815 RK |
662 | |
663 | g.updateOptions({ | |
664 | axisLabelFontSize : null, | |
665 | axes : { | |
666 | x : { axisLabelFontSize : 5 }, | |
667 | } | |
668 | }); | |
669 | ||
dc910fce DV |
670 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-x"), "5px"); |
671 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-y"), "14px"); | |
48dc3815 RK |
672 | |
673 | g.updateOptions({ | |
674 | axes : { | |
675 | y : { axisLabelFontSize : 20 }, | |
676 | } | |
677 | }); | |
678 | ||
dc910fce DV |
679 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-x"), "5px"); |
680 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-y"), "20px"); | |
48dc3815 RK |
681 | |
682 | g.updateOptions({ | |
683 | series : { | |
684 | Y2 : { axis : "y2" } // copy y2 series to y2 axis. | |
685 | }, | |
686 | axes : { | |
687 | y2 : { axisLabelFontSize : 12 }, | |
688 | } | |
689 | }); | |
690 | ||
dc910fce DV |
691 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-x"), "5px"); |
692 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-y1"), "20px"); | |
693 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-y2"), "12px"); | |
89fdcedb | 694 | }); |
48dc3815 | 695 | |
89fdcedb | 696 | it('testAxisLabelFontSizeNull', function() { |
d574a45e | 697 | var graph = document.getElementById("graph"); |
319d0361 | 698 | var g = new Dygraph(graph, simpleData, |
d574a45e RK |
699 | { |
700 | axisLabelFontSize: null | |
701 | }); | |
702 | ||
3a84670d RK |
703 | var assertFontSize = function(selector, expected) { |
704 | Util.assertStyleOfChildren(selector, "font-size", expected); | |
5ab63877 | 705 | }; |
3a84670d RK |
706 | |
707 | // Be sure we're dealing with a 14-point default. | |
89fdcedb | 708 | assert.equal(14, Dygraph.DEFAULT_ATTRS.axisLabelFontSize); |
3a84670d | 709 | |
dc910fce DV |
710 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-x"), "14px"); |
711 | assertFontSize(document.querySelectorAll(".dygraph-axis-label-y"), "14px"); | |
89fdcedb | 712 | }); |
3a84670d | 713 | |
89fdcedb | 714 | it('testAxisLabelColor', function() { |
3a84670d | 715 | var graph = document.getElementById("graph"); |
319d0361 | 716 | var g = new Dygraph(graph, simpleData, {}); |
3a84670d RK |
717 | |
718 | // Be sure we're dealing with a black default. | |
89fdcedb | 719 | assert.equal("black", Dygraph.DEFAULT_ATTRS.axisLabelColor); |
3a84670d RK |
720 | |
721 | var assertColor = function(selector, expected) { | |
722 | Util.assertStyleOfChildren(selector, "color", expected); | |
723 | } | |
724 | ||
dc910fce DV |
725 | assertColor(document.querySelectorAll(".dygraph-axis-label-x"), "rgb(0, 0, 0)"); |
726 | assertColor(document.querySelectorAll(".dygraph-axis-label-y"), "rgb(0, 0, 0)"); | |
3a84670d RK |
727 | |
728 | g.updateOptions({ axisLabelColor : "red"}); | |
dc910fce DV |
729 | assertColor(document.querySelectorAll(".dygraph-axis-label-x"), "rgb(255, 0, 0)"); |
730 | assertColor(document.querySelectorAll(".dygraph-axis-label-y"), "rgb(255, 0, 0)"); | |
3a84670d RK |
731 | |
732 | g.updateOptions({ | |
733 | axisLabelColor : null, | |
734 | axes : { | |
735 | x : { axisLabelColor : "blue" }, | |
736 | } | |
737 | }); | |
738 | ||
dc910fce DV |
739 | assertColor(document.querySelectorAll(".dygraph-axis-label-x"), "rgb(0, 0, 255)"); |
740 | assertColor(document.querySelectorAll(".dygraph-axis-label-y"), "rgb(0, 0, 0)"); | |
3a84670d RK |
741 | |
742 | g.updateOptions({ | |
743 | axes : { | |
744 | y : { axisLabelColor : "green" }, | |
745 | } | |
746 | }); | |
747 | ||
dc910fce DV |
748 | assertColor(document.querySelectorAll(".dygraph-axis-label-x"), "rgb(0, 0, 255)"); |
749 | assertColor(document.querySelectorAll(".dygraph-axis-label-y"), "rgb(0, 128, 0)"); | |
3a84670d RK |
750 | |
751 | g.updateOptions({ | |
752 | series : { | |
753 | Y2 : { axis : "y2" } // copy y2 series to y2 axis. | |
754 | }, | |
755 | axes : { | |
756 | y2 : { axisLabelColor : "yellow" }, | |
757 | } | |
758 | }); | |
759 | ||
dc910fce DV |
760 | assertColor(document.querySelectorAll(".dygraph-axis-label-x"), "rgb(0, 0, 255)"); |
761 | assertColor(document.querySelectorAll(".dygraph-axis-label-y1"), "rgb(0, 128, 0)"); | |
762 | assertColor(document.querySelectorAll(".dygraph-axis-label-y2"), "rgb(255, 255, 0)"); | |
89fdcedb | 763 | }); |
3a84670d | 764 | |
89fdcedb | 765 | it('testAxisLabelColorNull', function() { |
3a84670d | 766 | var graph = document.getElementById("graph"); |
319d0361 | 767 | var g = new Dygraph(graph, simpleData, |
3a84670d RK |
768 | { |
769 | axisLabelColor: null | |
770 | }); | |
771 | ||
772 | var assertColor = function(selector, expected) { | |
773 | Util.assertStyleOfChildren(selector, "color", expected); | |
774 | } | |
775 | ||
d574a45e | 776 | // Be sure we're dealing with a 14-point default. |
89fdcedb | 777 | assert.equal(14, Dygraph.DEFAULT_ATTRS.axisLabelFontSize); |
d574a45e | 778 | |
dc910fce DV |
779 | assertColor(document.querySelectorAll(".dygraph-axis-label-x"), "rgb(0, 0, 0)"); |
780 | assertColor(document.querySelectorAll(".dygraph-axis-label-y"), "rgb(0, 0, 0)"); | |
89fdcedb | 781 | }); |
2fd143d3 DV |
782 | |
783 | /* | |
784 | * This test shows that the label formatter overrides labelsKMB for all values. | |
785 | */ | |
89fdcedb | 786 | it('testLabelFormatterOverridesLabelsKMB', function() { |
2fd143d3 DV |
787 | var g = new Dygraph( |
788 | document.getElementById("graph"), | |
789 | "X,a,b\n" + | |
790 | "1,0,2000\n" + | |
791 | "2,500,1500\n" + | |
792 | "3,1000,1000\n" + | |
793 | "4,2000,0\n", { | |
794 | labelsKMB: true, | |
795 | axisLabelFormatter: function (v) { | |
796 | return v + ":X"; | |
797 | } | |
798 | }); | |
89fdcedb DV |
799 | assert.deepEqual(["0:X","500:X","1000:X","1500:X","2000:X"], Util.getYLabels()); |
800 | assert.deepEqual(["1:X","2:X","3:X"], Util.getXLabels()); | |
801 | }); | |
2fd143d3 DV |
802 | |
803 | /* | |
804 | * This test shows that you can override labelsKMB on the axis level. | |
805 | */ | |
89fdcedb | 806 | it('testLabelsKMBPerAxis', function() { |
c6975231 | 807 | var g = new Dygraph( |
2fd143d3 DV |
808 | document.getElementById("graph"), |
809 | "x,a,b\n" + | |
94647da2 RK |
810 | "1000,0,2000\n" + |
811 | "2000,500,1500\n" + | |
812 | "3000,1000,1000\n" + | |
813 | "4000,2000,0\n", { | |
814 | labelsKMB: false, | |
2fd143d3 | 815 | axes: { |
94647da2 RK |
816 | y2: { labelsKMB: true }, |
817 | x: { labelsKMB: true } | |
2fd143d3 DV |
818 | }, |
819 | series: { | |
d4cddcca | 820 | b: { axis: "y2" } |
2fd143d3 DV |
821 | } |
822 | }); | |
94647da2 RK |
823 | |
824 | // labelsKMB doesn't apply to the x axis. This value should be different. | |
bc262c40 | 825 | // BUG : https://code.google.com/p/dygraphs/issues/detail?id=488 |
89fdcedb | 826 | assert.deepEqual(["1000","2000","3000"], Util.getXLabels()); |
dc910fce | 827 | assert.deepEqual(["0","500","1000","1500","2000"], Util.getYLabels(1)); |
89fdcedb DV |
828 | assert.deepEqual(["0","500","1K","1.5K","2K"], Util.getYLabels(2)); |
829 | }); | |
c6975231 | 830 | |
ace524b5 | 831 | /* |
94647da2 RK |
832 | * This test shows that you can override labelsKMG2 on the axis level. |
833 | */ | |
89fdcedb | 834 | it('testLabelsKMBG2IPerAxis', function() { |
94647da2 RK |
835 | var g = new Dygraph( |
836 | document.getElementById("graph"), | |
837 | "x,a,b\n" + | |
838 | "1000,0,2000\n" + | |
839 | "2000,500,1500\n" + | |
840 | "3000,1000,1000\n" + | |
841 | "4000,2000,0\n", { | |
842 | labelsKMG2: false, | |
843 | axes: { | |
844 | y2: { labelsKMG2: true }, | |
e0269a3d | 845 | x: { labelsKMG2: true, pixelsPerLabel: 60 } |
94647da2 RK |
846 | }, |
847 | series: { | |
d4cddcca | 848 | b: { axis: "y2" } |
94647da2 RK |
849 | } |
850 | }); | |
851 | ||
852 | // It is weird that labelsKMG2 does something on the x axis but KMB does not. | |
853 | // Plus I can't be sure they're doing the same thing as they're done in different | |
854 | // bits of code. | |
bc262c40 | 855 | // BUG : https://code.google.com/p/dygraphs/issues/detail?id=488 |
89fdcedb | 856 | assert.deepEqual(["1024","2048","3072"], Util.getXLabels()); |
dc910fce | 857 | assert.deepEqual(["0","500","1000","1500","2000"], Util.getYLabels(1)); |
89fdcedb DV |
858 | assert.deepEqual(["0","500","1000","1.46k","1.95k"], Util.getYLabels(2)); |
859 | }); | |
94647da2 RK |
860 | |
861 | /** | |
862 | * This test shows you can override sigFigs on the axis level. | |
863 | */ | |
89fdcedb | 864 | it('testSigFigsPerAxis', function() { |
94647da2 RK |
865 | var g = new Dygraph( |
866 | document.getElementById("graph"), | |
867 | "x,a,b\n" + | |
868 | "1000,0,2000\n" + | |
869 | "2000,500,1500\n" + | |
870 | "3000,1000,1000\n" + | |
871 | "4000,2000,0\n", { | |
872 | sigFigs: 2, | |
873 | axes: { | |
874 | y2: { sigFigs: 6 }, | |
875 | x: { sigFigs: 8 } | |
876 | }, | |
877 | series: { | |
d4cddcca | 878 | b: { axis: "y2" } |
94647da2 RK |
879 | } |
880 | ||
881 | }); | |
882 | // sigFigs doesn't apply to the x axis. This value should be different. | |
bc262c40 | 883 | // BUG : https://code.google.com/p/dygraphs/issues/detail?id=488 |
89fdcedb DV |
884 | assert.deepEqual(["1000","2000","3000"], Util.getXLabels()); |
885 | assert.deepEqual(["0.0","5.0e+2","1.0e+3","1.5e+3","2.0e+3"], Util.getYLabels(1)); | |
886 | assert.deepEqual(["0.00000","500.000","1000.00","1500.00","2000.00"], Util.getYLabels(2)); | |
887 | }); | |
94647da2 RK |
888 | |
889 | /** | |
890 | * This test shows you can override digitsAfterDecimal on the axis level. | |
891 | */ | |
89fdcedb | 892 | it('testDigitsAfterDecimalPerAxis', function() { |
94647da2 RK |
893 | var g = new Dygraph( |
894 | document.getElementById("graph"), | |
895 | "x,a,b\n" + | |
896 | "0.006,0.001,0.008\n" + | |
897 | "0.007,0.002,0.007\n" + | |
898 | "0.008,0.003,0.006\n" + | |
899 | "0.009,0.004,0.005\n", { | |
900 | digitsAfterDecimal: 1, | |
901 | series: { | |
d4cddcca | 902 | b: { axis: "y2" } |
94647da2 RK |
903 | } |
904 | ||
905 | }); | |
906 | ||
907 | g.updateOptions({ axes: { y: { digitsAfterDecimal: 3 }}}); | |
89fdcedb | 908 | assert.deepEqual(["0.001","0.002","0.002","0.003","0.003","0.004","0.004"], Util.getYLabels(1)); |
94647da2 | 909 | g.updateOptions({ axes: { y: { digitsAfterDecimal: 4 }}}); |
89fdcedb | 910 | assert.deepEqual(["0.001","0.0015","0.002","0.0025","0.003","0.0035","0.004"], Util.getYLabels(1)); |
94647da2 | 911 | g.updateOptions({ axes: { y: { digitsAfterDecimal: 5 }}}); |
89fdcedb | 912 | assert.deepEqual(["0.001","0.0015","0.002","0.0025","0.003","0.0035","0.004"], Util.getYLabels(1)); |
94647da2 | 913 | g.updateOptions({ axes: { y: { digitsAfterDecimal: null }}}); |
89fdcedb | 914 | assert.deepEqual(["1e-3","2e-3","2e-3","3e-3","3e-3","4e-3","4e-3"], Util.getYLabels(1)); |
94647da2 RK |
915 | |
916 | g.updateOptions({ axes: { y2: { digitsAfterDecimal: 3 }}}); | |
89fdcedb | 917 | assert.deepEqual(["0.005","0.006","0.006","0.007","0.007","0.008","0.008"], Util.getYLabels(2)); |
94647da2 | 918 | g.updateOptions({ axes: { y2: { digitsAfterDecimal: 4 }}}); |
89fdcedb | 919 | assert.deepEqual(["0.005","0.0055","0.006","0.0065","0.007","0.0075","0.008"], Util.getYLabels(2)); |
94647da2 | 920 | g.updateOptions({ axes: { y2: { digitsAfterDecimal: 5 }}}); |
89fdcedb | 921 | assert.deepEqual(["0.005","0.0055","0.006","0.0065","0.007","0.0075","0.008"], Util.getYLabels(2)); |
94647da2 | 922 | g.updateOptions({ axes: { y2: { digitsAfterDecimal: null }}}); |
89fdcedb | 923 | assert.deepEqual(["5e-3","6e-3","6e-3","7e-3","7e-3","7e-3","8e-3"], Util.getYLabels(2)); |
94647da2 RK |
924 | |
925 | ||
926 | // digitsAfterDecimal is ignored for the x-axis. | |
bc262c40 | 927 | // BUG : https://code.google.com/p/dygraphs/issues/detail?id=488 |
94647da2 | 928 | g.updateOptions({ axes: { x: { digitsAfterDecimal: 3 }}}); |
89fdcedb | 929 | assert.deepEqual(["0.006","0.007","0.008"], Util.getXLabels()); |
94647da2 | 930 | g.updateOptions({ axes: { x: { digitsAfterDecimal: 4 }}}); |
89fdcedb | 931 | assert.deepEqual(["0.006","0.007","0.008"], Util.getXLabels()); |
94647da2 | 932 | g.updateOptions({ axes: { x: { digitsAfterDecimal: 5 }}}); |
89fdcedb | 933 | assert.deepEqual(["0.006","0.007","0.008"], Util.getXLabels()); |
94647da2 | 934 | g.updateOptions({ axes: { x: { digitsAfterDecimal: null }}}); |
89fdcedb DV |
935 | assert.deepEqual(["0.006","0.007","0.008"], Util.getXLabels()); |
936 | }); | |
94647da2 RK |
937 | |
938 | /** | |
939 | * This test shows you can override digitsAfterDecimal on the axis level. | |
940 | */ | |
89fdcedb | 941 | it('testMaxNumberWidthPerAxis', function() { |
94647da2 RK |
942 | var g = new Dygraph( |
943 | document.getElementById("graph"), | |
944 | "x,a,b\n" + | |
945 | "12401,12601,12804\n" + | |
946 | "12402,12602,12803\n" + | |
947 | "12403,12603,12802\n" + | |
948 | "12404,12604,12801\n", { | |
949 | maxNumberWidth: 1, | |
950 | series: { | |
d4cddcca | 951 | b: { axis: "y2" } |
94647da2 RK |
952 | } |
953 | }); | |
d4cddcca | 954 | |
94647da2 | 955 | g.updateOptions({ axes: { y: { maxNumberWidth: 4 }}}); |
89fdcedb | 956 | assert.deepEqual(["1.26e+4","1.26e+4","1.26e+4","1.26e+4","1.26e+4","1.26e+4","1.26e+4"] , Util.getYLabels(1)); |
94647da2 | 957 | g.updateOptions({ axes: { y: { maxNumberWidth: 5 }}}); |
89fdcedb | 958 | assert.deepEqual(["12601","12601.5","12602","12602.5","12603","12603.5","12604"] , Util.getYLabels(1)); |
94647da2 | 959 | g.updateOptions({ axes: { y: { maxNumberWidth: null }}}); |
89fdcedb | 960 | assert.deepEqual(["1.26e+4","1.26e+4","1.26e+4","1.26e+4","1.26e+4","1.26e+4","1.26e+4"] , Util.getYLabels(1)); |
94647da2 RK |
961 | |
962 | g.updateOptions({ axes: { y2: { maxNumberWidth: 4 }}}); | |
89fdcedb | 963 | assert.deepEqual(["1.28e+4","1.28e+4","1.28e+4","1.28e+4","1.28e+4","1.28e+4","1.28e+4"], Util.getYLabels(2)); |
94647da2 | 964 | g.updateOptions({ axes: { y2: { maxNumberWidth: 5 }}}); |
89fdcedb | 965 | assert.deepEqual(["12801","12801.5","12802","12802.5","12803","12803.5","12804"], Util.getYLabels(2)); |
94647da2 | 966 | g.updateOptions({ axes: { y2: { maxNumberWidth: null }}}); |
89fdcedb | 967 | assert.deepEqual(["1.28e+4","1.28e+4","1.28e+4","1.28e+4","1.28e+4","1.28e+4","1.28e+4"], Util.getYLabels(2)); |
94647da2 RK |
968 | |
969 | // maxNumberWidth is ignored for the x-axis. | |
bc262c40 | 970 | // BUG : https://code.google.com/p/dygraphs/issues/detail?id=488 |
94647da2 | 971 | g.updateOptions({ axes: { x: { maxNumberWidth: 4 }}}); |
89fdcedb | 972 | assert.deepEqual(["12401","12402","12403"], Util.getXLabels()); |
94647da2 | 973 | g.updateOptions({ axes: { x: { maxNumberWidth: 5 }}}); |
89fdcedb | 974 | assert.deepEqual(["12401","12402","12403"], Util.getXLabels()); |
94647da2 | 975 | g.updateOptions({ axes: { x: { maxNumberWidth: null }}}); |
89fdcedb DV |
976 | assert.deepEqual(["12401","12402","12403"], Util.getXLabels()); |
977 | }); | |
94647da2 RK |
978 | |
979 | /* | |
c6975231 DV |
980 | // Regression test for http://code.google.com/p/dygraphs/issues/detail?id=147 |
981 | // Checks that axis labels stay sane across a DST change. | |
89fdcedb | 982 | it('testLabelsCrossDstChange', function() { |
c6975231 DV |
983 | // (From tests/daylight-savings.html) |
984 | var g = new Dygraph( | |
985 | document.getElementById("graph"), | |
986 | "Date/Time,Purchases\n" + | |
987 | "2010-11-05 00:00:00,167082\n" + | |
988 | "2010-11-06 00:00:00,168571\n" + | |
989 | "2010-11-07 00:00:00,177796\n" + | |
990 | "2010-11-08 00:00:00,165587\n" + | |
991 | "2010-11-09 00:00:00,164380\n", | |
992 | { width: 1024 } | |
993 | ); | |
994 | ||
995 | // Dates and "nice" hours: 6AM/PM and noon, not 5AM/11AM/... | |
996 | var okLabels = { | |
997 | '05Nov': true, | |
998 | '06Nov': true, | |
999 | '07Nov': true, | |
1000 | '08Nov': true, | |
1001 | '09Nov': true, | |
1002 | '06:00': true, | |
1003 | '12:00': true, | |
1004 | '18:00': true | |
1005 | }; | |
1006 | ||
1007 | var xLabels = Util.getXLabels(); | |
1008 | for (var i = 0; i < xLabels.length; i++) { | |
89fdcedb | 1009 | assert.isTrue(okLabels[xLabels[i]]); |
c6975231 | 1010 | } |
0f9bf369 DV |
1011 | |
1012 | // This range had issues of its own on tests/daylight-savings.html. | |
1013 | g.updateOptions({ | |
1014 | dateWindow: [1289109997722.8127, 1289261208937.7659] | |
1015 | }); | |
1016 | xLabels = Util.getXLabels(); | |
1017 | for (var i = 0; i < xLabels.length; i++) { | |
89fdcedb | 1018 | assert.isTrue(okLabels[xLabels[i]]); |
0f9bf369 | 1019 | } |
89fdcedb | 1020 | }); |
0f9bf369 DV |
1021 | |
1022 | ||
1023 | // Tests data which crosses a "fall back" at a high enough frequency that you | |
1024 | // can see both 1:00 A.M.s. | |
89fdcedb | 1025 | it('testLabelsCrossDstChangeHighFreq', function() { |
0f9bf369 DV |
1026 | // Generate data which crosses the EST/EDT boundary. |
1027 | var dst_data = []; | |
1028 | var base_ms = 1383454200000; | |
1029 | for (var x = base_ms; x < base_ms + 1000 * 60 * 80; x += 1000) { | |
1030 | dst_data.push([new Date(x), x]); | |
1031 | } | |
1032 | ||
1033 | var g = new Dygraph( | |
1034 | document.getElementById("graph"), | |
1035 | dst_data, | |
1036 | { width: 1024, labels: ['Date', 'Value'] } | |
1037 | ); | |
1038 | ||
89fdcedb | 1039 | assert.deepEqual([ |
0f9bf369 DV |
1040 | '00:50', '00:55', |
1041 | '01:00', '01:05', '01:10', '01:15', '01:20', '01:25', | |
1042 | '01:30', '01:35', '01:40', '01:45', '01:50', '01:55', | |
1043 | '01:00', '01:05' // 1 AM number two! | |
1044 | ], Util.getXLabels()); | |
1045 | ||
1046 | // Now zoom past the initial 1 AM. This used to cause trouble. | |
1047 | g.updateOptions({ | |
1048 | dateWindow: [1383454200000 + 15*60*1000, g.xAxisExtremes()[1]]} | |
1049 | ); | |
89fdcedb | 1050 | assert.deepEqual([ |
0f9bf369 DV |
1051 | '01:05', '01:10', '01:15', '01:20', '01:25', |
1052 | '01:30', '01:35', '01:40', '01:45', '01:50', '01:55', | |
1053 | '01:00', '01:05' // 1 AM number two! | |
1054 | ], Util.getXLabels()); | |
89fdcedb | 1055 | }); |
fb0c64b0 DV |
1056 | |
1057 | ||
1058 | // Tests data which crosses a "spring forward" at a low frequency. | |
1059 | // Regression test for http://code.google.com/p/dygraphs/issues/detail?id=433 | |
89fdcedb | 1060 | it('testLabelsCrossSpringForward', function() { |
fb0c64b0 DV |
1061 | var g = new Dygraph( |
1062 | document.getElementById("graph"), | |
1063 | "Date/Time,Purchases\n" + | |
1064 | "2011-03-11 00:00:00,167082\n" + | |
1065 | "2011-03-12 00:00:00,168571\n" + | |
1066 | "2011-03-13 00:00:00,177796\n" + | |
1067 | "2011-03-14 00:00:00,165587\n" + | |
1068 | "2011-03-15 00:00:00,164380\n", | |
1069 | { | |
1070 | width: 1024, | |
1071 | dateWindow: [1299989043119.4365, 1300080693627.4866] | |
1072 | }); | |
1073 | ||
1074 | var okLabels = { | |
1075 | '13Mar': true, | |
1076 | // '02:00': true, // not a real time! | |
1077 | '04:00': true, | |
1078 | '06:00': true, | |
1079 | '08:00': true, | |
1080 | '10:00': true, | |
1081 | '12:00': true, | |
1082 | '14:00': true, | |
1083 | '16:00': true, | |
1084 | '18:00': true, | |
1085 | '20:00': true, | |
1086 | '22:00': true, | |
1087 | '14Mar': true | |
1088 | }; | |
1089 | ||
1090 | var xLabels = Util.getXLabels(); | |
1091 | for (var i = 0; i < xLabels.length; i++) { | |
89fdcedb | 1092 | assert.isTrue(okLabels[xLabels[i]]); |
fb0c64b0 | 1093 | } |
89fdcedb | 1094 | }); |
fb0c64b0 | 1095 | |
89fdcedb | 1096 | it('testLabelsCrossSpringForwardHighFreq', function() { |
fb0c64b0 DV |
1097 | var base_ms_spring = 1299999000000; |
1098 | var dst_data_spring = []; | |
1099 | for (var x = base_ms_spring; x < base_ms_spring + 1000 * 60 * 80; x += 1000) { | |
1100 | dst_data_spring.push([new Date(x), x]); | |
1101 | } | |
1102 | ||
1103 | var g = new Dygraph( | |
1104 | document.getElementById("graph"), | |
1105 | dst_data_spring, | |
1106 | { width: 1024, labels: ['Date', 'Value'] } | |
1107 | ); | |
1108 | ||
89fdcedb | 1109 | assert.deepEqual([ |
fb0c64b0 DV |
1110 | '01:50', '01:55', |
1111 | '03:00', '03:05', '03:10', '03:15', '03:20', '03:25', | |
1112 | '03:30', '03:35', '03:40', '03:45', '03:50', '03:55', | |
1113 | '04:00', '04:05' | |
1114 | ], Util.getXLabels()); | |
89fdcedb | 1115 | }); |
ace524b5 | 1116 | */ |
89fdcedb DV |
1117 | |
1118 | }); |