2.0.0 release fixes (#815)
[dygraphs.git] / auto_tests / tests / pathological_cases.js
1 /**
2 * @fileoverview Tests zero and one-point charts.
3 * These don't have to render nicely, they just have to not crash.
4 *
5 * @author dan@dygraphs.com (Dan Vanderkam)
6 */
7
8 import Dygraph from '../../src/dygraph';
9 import Util from './Util';
10
11 describe("pathological-cases", function() {
12
13 cleanupAfterEach();
14
15 var restoreConsole;
16 var logs = {};
17 beforeEach(function() {
18 restoreConsole = Util.captureConsole(logs);
19 });
20
21 afterEach(function() {
22 restoreConsole();
23 });
24
25 var graph = document.getElementById("graph");
26
27 it('testZeroPoint', function() {
28 var opts = {
29 width: 480,
30 height: 320
31 };
32 var data = "X,Y\n";
33
34 var g = new Dygraph(graph, data, opts);
35 });
36
37 it('testOnePoint', function() {
38 var opts = {
39 width: 480,
40 height: 320
41 };
42 var data = "X,Y\n" +
43 "1,2\n";
44
45 var g = new Dygraph(graph, data, opts);
46 });
47
48 it('testCombinations', function() {
49 var dataSets = {
50 empty: [],
51 onePoint: [[10, 2]],
52 nanPoint: [[10, NaN]],
53 nanPoints: [[10, NaN], [20, NaN]],
54 multiNan1: [[10, NaN, 2], [20, 3, NaN]],
55 multiNan2: [[10, NaN, 2], [20, NaN, 4]],
56 multiNan3: [[10, NaN, NaN], [20, 3, 4], [30, NaN, NaN]],
57 atZero: [[0, 0]],
58 atZero2: [[0, 0, 0]],
59 negative: [[-10, -1]],
60 acrossZero: [[-10, 1], [10, 2]],
61 normal: [[0,1,9], [10,3,5], [20,2,7], [30,4,3]]
62 };
63
64 var baseOpts = {
65 lines: {},
66 stacked: {
67 stackedGraph: true
68 }
69 };
70
71 var variantOpts = {
72 none: {},
73 padded: {
74 includeZero: true,
75 drawAxesAtZero: true,
76 xRangePad: 2,
77 yRangePad: 4
78 }
79 };
80
81 for (var baseName in baseOpts) {
82 var base = baseOpts[baseName];
83 for (var variantName in variantOpts) {
84 var variant = variantOpts[variantName];
85
86 var opts = {
87 width: 300,
88 height: 150,
89 pointSize: 10
90 };
91 for (var key in base) {
92 if (base.hasOwnProperty(key)) opts[key] = base[key];
93 }
94 for (var key in variant) {
95 if (variant.hasOwnProperty(key)) opts[key] = variant[key];
96 }
97
98 var h = document.createElement('h3');
99 h.appendChild(document.createTextNode(baseName + ' ' + variantName));
100 graph.appendChild(h);
101 for (var dataName in dataSets) {
102 var data = dataSets[dataName];
103
104 var box = document.createElement('fieldset');
105 box.style.display = 'inline-block';
106 var legend = document.createElement('legend');
107 legend.appendChild(document.createTextNode(dataName));
108 box.appendChild(legend);
109 var gdiv = document.createElement('div');
110 gdiv.style.display = 'inline-block';
111 box.appendChild(gdiv);
112 graph.appendChild(box);
113
114 var cols = data && data[0] ? data[0].length : 0;
115 opts.labels = ['X', 'A', 'B', 'C'].slice(0, cols);
116
117 var g = new Dygraph(gdiv, data, opts);
118
119 if (dataName == 'empty') {
120 assert.deepEqual(logs, {
121 log: [], warn: [],
122 error: ["Can't plot empty data set"]
123 });
124 logs.error = []; // reset
125 } else {
126 assert.deepEqual(logs, {log: [], warn: [], error: []});
127 }
128 }
129 }
130 }
131 });
132
133 it('testNullLegend', function() {
134 var opts = {
135 width: 480,
136 height: 320,
137 labelsDiv: null
138 };
139 var data = "X,Y\n" +
140 "1,2\n";
141
142 var g = new Dygraph(graph, data, opts);
143 });
144
145 it('testDivAsString', function() {
146 var data = "X,Y\n" +
147 "1,2\n";
148
149 var g = new Dygraph('graph', data, {});
150 });
151
152
153 it('testConstantSeriesNegative', function() {
154 var data = "X,Y\n" +
155 "1,-1\n" +
156 "2,-1\n";
157
158 var g = new Dygraph('graph', data, {});
159 // This check could be loosened to
160 // g.yAxisRange()[0] < g.yAxisRange()[1] if it breaks in the future.
161 assert.deepEqual([-1.1, -0.9], g.yAxisRange());
162 });
163
164
165 it('testConstantSeriesNegativeIncludeZero', function() {
166 var data = "X,Y\n" +
167 "1,-1\n" +
168 "2,-1\n";
169
170 var g = new Dygraph('graph', data, {includeZero: true});
171 // This check could be loosened to
172 // g.yAxisRange()[0] < g.yAxisRange()[1] if it breaks in the future.
173 assert.deepEqual([-1.1, 0], g.yAxisRange());
174 });
175
176 it('should throw with non-existent divs', function() {
177 var data = "X,Y\n" +
178 "1,-1\n" +
179 "2,1\n";
180
181 assert.throws(function() {
182 new Dygraph(null, data);
183 }, /non-existent div/);
184
185 assert.throws(function() {
186 new Dygraph('non-existent-div-id', data);
187 }, /non-existent div/);
188 });
189
190 });