1 // Copyright (c) 2011 Google, Inc.
3 // Permission is hereby granted, free of charge, to any person obtaining a copy
4 // of this software and associated documentation files (the "Software"), to deal
5 // in the Software without restriction, including without limitation the rights
6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 // copies of the Software, and to permit persons to whom the Software is
8 // furnished to do so, subject to the following conditions:
10 // The above copyright notice and this permission notice shall be included in
11 // all copies or substantial portions of the Software.
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 * @fileoverview Test valueRange and dateWindow changes.
25 * @author konigsberg@google.com (Robert Konigsberg)
27 var ZERO_TO_FIFTY
= [[ 10, 0 ] , [ 20, 50 ]];
28 var ZERO_TO_FIFTY_STEPS
= function() {
33 for (step
= 0; step
<= 50; step
++) {
34 a
.push([x
+ (step
* .2), y
+ step
]);
39 var RangeTestCase
= TestCase("range-tests");
41 RangeTestCase
.prototype.setUp
= function() {
42 document
.body
.innerHTML
= "<div id='graph'></div>";
45 RangeTestCase
.prototype.createGraph
= function(opts
) {
46 var graph
= document
.getElementById("graph");
47 var g
= new Dygraph(graph
, ZERO_TO_FIFTY_STEPS
, opts
);
49 assertEquals([10, 20], g
.xAxisRange());
50 assertEquals([0, 55], g
.yAxisRange(0));
56 * Test that changes to valueRange and dateWindow are reflected
59 RangeTestCase
.prototype.testRangeSetOperations
= function() {
60 var g
= this.createGraph({valueRange
: [ 0, 55 ]});
62 g
.updateOptions({ dateWindow
: [ 12, 18 ] });
63 assertEquals([12, 18], g
.xAxisRange());
64 assertEquals([0, 55], g
.yAxisRange(0));
66 g
.updateOptions({ valueRange
: [ 10, 40 ] });
67 assertEquals([12, 18], g
.xAxisRange());
68 assertEquals([10, 40], g
.yAxisRange(0));
71 assertEquals([12, 18], g
.xAxisRange());
72 assertEquals([10, 40], g
.yAxisRange(0));
74 g
.updateOptions({ dateWindow
: null, valueRange
: null });
75 assertEquals([10, 20], g
.xAxisRange());
76 assertEquals([0, 55], g
.yAxisRange(0));
80 * Verify that when zoomed in by mouse operations, an empty call to
81 * updateOptions doesn't change the displayed ranges.
83 RangeTestCase
.prototype.zoom
= function(g
, xRange
, yRange
) {
84 var originalXRange
= g
.xAxisRange();
85 var originalYRange
= g
.yAxisRange(0);
87 // Editing e.shiftKey post construction doesn't work for Firefox. Damn.
88 DygraphOps
.dispatchMouseDown(g
, xRange
[0], yRange
[0]);
89 DygraphOps
.dispatchMouseMove(g
, xRange
[1], yRange
[0]); // this is really necessary.
90 DygraphOps
.dispatchMouseUp(g
, xRange
[1], yRange
[0]);
92 assertEqualsDelta(xRange
, g
.xAxisRange(), 0.2);
93 // assertEqualsDelta(originalYRange, g.yAxisRange(0), 0.2); // Not
true, it
's something in the middle.
95 var midX = (xRange[1] - xRange[0]) / 2;
96 DygraphOps.dispatchMouseDown(g, midX, yRange[0]);
97 DygraphOps.dispatchMouseMove(g, midX, yRange[1]); // this is really necessary.
98 DygraphOps.dispatchMouseUp(g, midX, yRange[1]);
100 assertEqualsDelta(xRange, g.xAxisRange(), 0.2);
101 assertEqualsDelta(yRange, g.yAxisRange(0), 0.2);
106 * Verify that when zoomed in by mouse operations, an empty call to
107 * updateOptions doesn't change the displayed ranges
.
109 RangeTestCase
.prototype.testEmptyUpdateOptions_doesntUnzoom
= function() {
110 var g
= this.createGraph();
111 this.zoom(g
, [ 11, 18 ], [ 35, 40 ]);
113 assertEqualsDelta([11, 18], g
.xAxisRange(), 0.1);
114 assertEqualsDelta([35, 40], g
.yAxisRange(0), 0.2);
118 // This currently fails.
119 // See http://code.google.com/p/dygraphs/issues/detail
?id
=192
120 assertEqualsDelta([11, 18], g
.xAxisRange(), 0.1);
121 // assertEqualsDelta([35, 40], g.yAxisRange(0), 0.2);
125 * Verify that when zoomed in by mouse operations, a call to
126 * updateOptions({ dateWindow : null, valueRange : null }) fully
129 RangeTestCase
.prototype.testRestoreOriginalRanges_viaUpdateOptions
= function() {
130 var g
= this.createGraph();
131 this.zoom(g
, [ 11, 18 ], [ 35, 40 ]);
133 g
.updateOptions({ dateWindow
: null, valueRange
: null });
135 assertEquals([0, 55], g
.yAxisRange(0));
136 assertEquals([10, 20], g
.xAxisRange());