Merge pull request #465 from danvk/callback-this
[dygraphs.git] / auto_tests / tests / resize.js
1 /**
2 * @fileoverview Test cases for resizing.
3 *
4 * @author konigsberg@google.com (Robert Konigsberg)
5 */
6 var ResizeTestCase = TestCase("resize");
7
8 ResizeTestCase.data =
9 "X,Y\n" +
10 "1,100\n" +
11 "2,200\n" +
12 "3,300\n" +
13 "4,400\n" +
14 "5,300\n" +
15 "6,100\n";
16
17 ResizeTestCase.prototype.setUp = function() {
18 document.body.innerHTML = "<div id='graph'></div>";
19 };
20
21 ResizeTestCase.prototype.tearDown = function() {
22 };
23
24 ResizeTestCase.prototype.testResizeMaintainsMouseOperations = function() {
25 document.body.innerHTML =
26 '<div id="graph" style="width: 640px; height: 480px;"></div>' +
27 '</div>';
28 var graph = document.getElementById("graph");
29
30 var callbackCount = 0;
31 var callback = function() {
32 callbackCount++;
33 }
34
35 // Strum the mouse along the y-coordinate y, from 0 to x2. These are DOM values.
36 var strum = function(g, y, x2) {
37 DygraphOps.dispatchMouseDown_Point(g, 0, y);
38 for (var x = 0; x < x2; x++) {
39 DygraphOps.dispatchMouseMove_Point(g, x, y);
40 }
41 DygraphOps.dispatchMouseUp_Point(g, x2 - 1, y);
42 }
43
44 g = new Dygraph(graph, ResizeTestCase.data, {highlightCallback: callback});
45
46 strum(g, 300, 640);
47 assertEquals(6, callbackCount);
48
49 document.getElementById("graph").style.width = "500px";
50 g.resize();
51
52 callbackCount = 0;
53 strum(g, 300, 500);
54 assertEquals(6, callbackCount);
55 };
56
57 /**
58 * Tests that a graph created in a not-displayed div works as expected
59 * if the graph options include height and width. Resize not needed.
60 */
61 ResizeTestCase.prototype.testHiddenDivWithSizedGraph = function() {
62 var div = document.getElementById("graph");
63
64 div.style.display = 'none';
65 var g = new Dygraph(div, ResizeTestCase.data, {width: 400, height: 300});
66 div.style.display = '';
67
68 var area = g.getArea();
69 assertTrue(area.w > 0);
70 assertTrue(area.h > 0);
71 };
72
73 /**
74 * Tests that a graph created in a not-displayed div with
75 * CSS-specified size but no graph height or width options works as
76 * expected. The user needs to call resize() on it after displaying
77 * it.
78 */
79 ResizeTestCase.prototype.testHiddenDivWithResize = function() {
80 var div = document.getElementById("graph");
81
82 div.style.display = 'none';
83 div.style.width = '400px';
84 div.style.height = '300px';
85
86 // Setting strokeWidth 3 removes any ambiguitiy from the pixel sampling
87 // request, below.
88 var g = new Dygraph(div, ResizeTestCase.data, {strokeWidth: 3});
89 div.style.display = '';
90
91 g.resize();
92 area = g.getArea();
93 assertTrue(area.w > 0);
94 assertTrue(area.h > 0);
95
96 // Regression test: check that graph remains visible after no-op resize.
97 g.resize();
98 var x = Math.floor(g.toDomXCoord(2));
99 var y = Math.floor(g.toDomYCoord(200));
100 assertEquals("Unexpected grid color found at pixel: x: " + x + " y: " + y,
101 [0, 128, 128, 255], Util.samplePixel(g.hidden_, x, y));
102 };