2 * @fileoverview Test cases for toDomCoords/toDataCoords
4 * @author danvk@google.com (Dan Vanderkam)
7 var ToDomCoordsTestCase
= TestCase("to-dom-coords");
9 ToDomCoordsTestCase
._origFunc
= Dygraph
.getContext
;
10 ToDomCoordsTestCase
.prototype.setUp
= function() {
11 document
.body
.innerHTML
= "<div id='graph'></div>";
12 Dygraph
.getContext
= function(canvas
) {
13 return new Proxy(ToDomCoordsTestCase
._origFunc(canvas
));
17 ToDomCoordsTestCase
.prototype.tearDown
= function() {
18 Dygraph
.getContext
= ToDomCoordsTestCase
._origFunc
;
21 // Checks that toDomCoords and toDataCoords are inverses of one another.
22 ToDomCoordsTestCase
.prototype.checkForInverses
= function(g
) {
23 var x_range
= g
.xAxisRange();
24 var y_range
= g
.yAxisRange();
25 for (var i
= 0; i
<= 10; i
++) {
26 var x
= x_range
[0] + i
/ 10.0 * (x_range
[1] - x_range
[0]);
27 for (var j
= 0; j
<= 10; j
++) {
28 var y
= y_range
[0] + j
/ 10.0 * (y_range
[1] - y_range
[0]);
29 assertEquals(x
, g
.toDataXCoord(g
.toDomXCoord(x
)));
30 assertEquals(y
, g
.toDataYCoord(g
.toDomYCoord(y
)));
35 ToDomCoordsTestCase
.prototype.testPlainChart
= function() {
55 var graph
= document
.getElementById("graph");
56 g
= new Dygraph(graph
, [ [0,0], [100,100] ], opts
);
58 assertEquals([0, 100], g
.toDataCoords(0, 0));
59 assertEquals([0, 0], g
.toDataCoords(0, 400));
60 assertEquals([100, 100], g
.toDataCoords(400, 0));
61 assertEquals([100, 0], g
.toDataCoords(400, 400));
63 this.checkForInverses(g
);
65 // TODO(konigsberg): This doesn't really belong here. Move to its own test.
66 var htx
= g
.hidden_ctx_
;
67 assertEquals(1, CanvasAssertions
.numLinesDrawn(htx
, '#ff0000'));
70 ToDomCoordsTestCase
.prototype.testChartWithAxes
= function() {
93 var graph
= document
.getElementById("graph");
94 g
= new Dygraph(graph
, [ [0,0], [100,100] ], opts
);
96 assertEquals([0, 100], g
.toDataCoords(100, 0));
97 assertEquals([0, 0], g
.toDataCoords(100, 400));
98 assertEquals([100, 100], g
.toDataCoords(500, 0));
99 assertEquals([100, 0], g
.toDataCoords(500, 400));
101 this.checkForInverses(g
);
104 ToDomCoordsTestCase
.prototype.testChartWithAxesAndLabels
= function() {
120 valueRange
: [0, 100],
121 dateWindow
: [0, 100],
125 ylabel
: 'This is the y-axis',
126 xlabel
: 'This is the x-axis',
128 title
: 'This is the title of the chart',
132 var graph
= document
.getElementById("graph");
133 g
= new Dygraph(graph
, [ [0,0], [100,100] ], opts
);
135 assertEquals([0, 100], g
.toDataCoords(100, 25));
136 assertEquals([0, 0], g
.toDataCoords(100, 425));
137 assertEquals([100, 100], g
.toDataCoords(500, 25));
138 assertEquals([100, 0], g
.toDataCoords(500, 425));
140 this.checkForInverses(g
);
143 ToDomCoordsTestCase
.prototype.testYAxisLabelWidth
= function() {
145 axes
: { y
: { axisLabelWidth
: 100 } },
148 valueRange
: [0, 100],
149 dateWindow
: [0, 100],
154 var graph
= document
.getElementById("graph");
155 g
= new Dygraph(graph
, [ [0,0], [100,100] ], opts
);
157 assertEquals([100, 0], g
.toDomCoords(0, 100));
158 assertEquals([500, 486], g
.toDomCoords(100, 0));
161 axes
: { y
: { axisLabelWidth
: 50 }},
163 assertEquals([50, 0], g
.toDomCoords(0, 100));
164 assertEquals([500, 486], g
.toDomCoords(100, 0));
167 ToDomCoordsTestCase
.prototype.testAxisTickSize
= function() {
169 axes
: { y
: { axisLabelWidth
: 100 } },
172 valueRange
: [0, 100],
173 dateWindow
: [0, 100],
178 var graph
= document
.getElementById("graph");
179 g
= new Dygraph(graph
, [ [0,0], [100,100] ], opts
);
181 assertEquals([100, 0], g
.toDomCoords(0, 100));
182 assertEquals([500, 486], g
.toDomCoords(100, 0));
184 g
.updateOptions({ axisTickSize
: 50 });
185 assertEquals([200, 0], g
.toDomCoords(0, 100));
186 assertEquals([500, 386], g
.toDomCoords(100, 0));
189 ToDomCoordsTestCase
.prototype.testChartLogarithmic_YAxis
= function() {
210 var graph
= document
.getElementById("graph");
211 g
= new Dygraph(graph
, [ [1,1], [4,4] ], opts
);
214 assertEqualsDelta([0, 4], g
.toDataCoords(0, 0), epsilon
);
215 assertEqualsDelta([0, 1], g
.toDataCoords(0, 400), epsilon
);
216 assertEqualsDelta([10, 4], g
.toDataCoords(400, 0), epsilon
);
217 assertEqualsDelta([10, 1], g
.toDataCoords(400, 400), epsilon
);
218 assertEqualsDelta([10, 2], g
.toDataCoords(400, 200), epsilon
);
220 assertEquals([0, 0], g
.toDomCoords(0, 4));
221 assertEquals([0, 400], g
.toDomCoords(0, 1));
222 assertEquals([400, 0], g
.toDomCoords(10, 4));
223 assertEquals([400, 400], g
.toDomCoords(10, 1));
224 assertEquals([400, 200], g
.toDomCoords(10, 2));
227 ToDomCoordsTestCase
.prototype.testChartLogarithmic_XAxis
= function() {
230 valueRange
: [1, 1000],
231 dateWindow
: [1, 1000],
248 var graph
= document
.getElementById("graph");
249 g
= new Dygraph(graph
, [ [1,1], [10, 10], [100,100], [1000,1000] ], opts
);
252 assertEqualsDelta(1, g
.toDataXCoord(0), epsilon
);
253 assertEqualsDelta(5.623413251903489, g
.toDataXCoord(100), epsilon
);
254 assertEqualsDelta(31.62277660168378, g
.toDataXCoord(200), epsilon
);
255 assertEqualsDelta(177.8279410038921, g
.toDataXCoord(300), epsilon
);
256 assertEqualsDelta(1000, g
.toDataXCoord(400), epsilon
);
258 assertEqualsDelta(0, g
.toDomXCoord(1), epsilon
);
259 assertEqualsDelta(3.6036036036036037, g
.toDomXCoord(10), epsilon
);
260 assertEqualsDelta(39.63963963963964, g
.toDomXCoord(100), epsilon
);
261 assertEqualsDelta(400, g
.toDomXCoord(1000), epsilon
);
263 assertEqualsDelta(0, g
.toPercentXCoord(1), epsilon
);
264 assertEqualsDelta(0.3333333333, g
.toPercentXCoord(10), epsilon
);
265 assertEqualsDelta(0.6666666666, g
.toPercentXCoord(100), epsilon
);
266 assertEqualsDelta(1, g
.toPercentXCoord(1000), epsilon
);
268 // Now zoom in and ensure that the methods return reasonable values.
269 g
.updateOptions({dateWindow
: [ 10, 100 ]});
271 assertEqualsDelta(10, g
.toDataXCoord(0), epsilon
);
272 assertEqualsDelta(17.78279410038923, g
.toDataXCoord(100), epsilon
);
273 assertEqualsDelta(31.62277660168379, g
.toDataXCoord(200), epsilon
);
274 assertEqualsDelta(56.23413251903491, g
.toDataXCoord(300), epsilon
);
275 assertEqualsDelta(100, g
.toDataXCoord(400), epsilon
);
277 assertEqualsDelta(-40, g
.toDomXCoord(1), epsilon
);
278 assertEqualsDelta(0, g
.toDomXCoord(10), epsilon
);
279 assertEqualsDelta(400, g
.toDomXCoord(100), epsilon
);
280 assertEqualsDelta(4400, g
.toDomXCoord(1000), epsilon
);
282 assertEqualsDelta(-1, g
.toPercentXCoord(1), epsilon
);
283 assertEqualsDelta(0, g
.toPercentXCoord(10), epsilon
);
284 assertEqualsDelta(1, g
.toPercentXCoord(100), epsilon
);
285 assertEqualsDelta(2, g
.toPercentXCoord(1000), epsilon
);