Set x appropriately for series but not point selection (#779)
[dygraphs.git] / auto_tests / tests / pathological_cases.js
CommitLineData
395e98a3
DV
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 */
e8c70e4e
DV
7
8import Dygraph from '../../src/dygraph';
9import Util from './Util';
10
89fdcedb 11describe("pathological-cases", function() {
395e98a3 12
e8c70e4e
DV
13cleanupAfterEach();
14
1b7afc93
DV
15var restoreConsole;
16var logs = {};
89fdcedb 17beforeEach(function() {
1b7afc93 18 restoreConsole = Util.captureConsole(logs);
89fdcedb 19});
395e98a3 20
89fdcedb 21afterEach(function() {
1b7afc93 22 restoreConsole();
89fdcedb 23});
395e98a3 24
e8c70e4e
DV
25var graph = document.getElementById("graph");
26
89fdcedb 27it('testZeroPoint', function() {
395e98a3
DV
28 var opts = {
29 width: 480,
30 height: 320
31 };
32 var data = "X,Y\n";
33
395e98a3 34 var g = new Dygraph(graph, data, opts);
89fdcedb 35});
395e98a3 36
89fdcedb 37it('testOnePoint', function() {
395e98a3
DV
38 var opts = {
39 width: 480,
40 height: 320
41 };
42 var data = "X,Y\n" +
43 "1,2\n";
44
395e98a3 45 var g = new Dygraph(graph, data, opts);
89fdcedb 46});
e0ff43a1 47
89fdcedb 48it('testCombinations', function() {
fa460473
KW
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 avoidMinZero: {
74 avoidMinZero: true,
75 includeZero: true
76 },
77 padded: {
78 includeZero: true,
79 drawAxesAtZero: true,
ccecde93
KW
80 xRangePad: 2,
81 yRangePad: 4
fa460473
KW
82 }
83 };
84
85 for (var baseName in baseOpts) {
86 var base = baseOpts[baseName];
87 for (var variantName in variantOpts) {
88 var variant = variantOpts[variantName];
89
90 var opts = {
91 width: 300,
92 height: 150,
fa460473
KW
93 pointSize: 10
94 };
95 for (var key in base) {
96 if (base.hasOwnProperty(key)) opts[key] = base[key];
97 }
98 for (var key in variant) {
99 if (variant.hasOwnProperty(key)) opts[key] = variant[key];
100 }
101
102 var h = document.createElement('h3');
103 h.appendChild(document.createTextNode(baseName + ' ' + variantName));
e8c70e4e 104 graph.appendChild(h);
fa460473
KW
105 for (var dataName in dataSets) {
106 var data = dataSets[dataName];
107
108 var box = document.createElement('fieldset');
109 box.style.display = 'inline-block';
110 var legend = document.createElement('legend');
111 legend.appendChild(document.createTextNode(dataName));
112 box.appendChild(legend);
113 var gdiv = document.createElement('div');
114 gdiv.style.display = 'inline-block';
115 box.appendChild(gdiv);
e8c70e4e 116 graph.appendChild(box);
fa460473
KW
117
118 var cols = data && data[0] ? data[0].length : 0;
119 opts.labels = ['X', 'A', 'B', 'C'].slice(0, cols);
120
121 var g = new Dygraph(gdiv, data, opts);
1b7afc93
DV
122
123 if (dataName == 'empty') {
124 assert.deepEqual(logs, {
125 log: [], warn: [],
126 error: ["Can't plot empty data set"]
127 });
128 logs.error = []; // reset
129 } else {
130 assert.deepEqual(logs, {log: [], warn: [], error: []});
131 }
fa460473
KW
132 }
133 }
134 }
89fdcedb 135});
fa460473 136
89fdcedb 137it('testNullLegend', function() {
e0ff43a1
DV
138 var opts = {
139 width: 480,
140 height: 320,
141 labelsDiv: null
142 };
143 var data = "X,Y\n" +
144 "1,2\n";
145
e0ff43a1 146 var g = new Dygraph(graph, data, opts);
89fdcedb 147});
2c623e51 148
89fdcedb 149it('testDivAsString', function() {
2c623e51
RK
150 var data = "X,Y\n" +
151 "1,2\n";
152
747681e6 153 var g = new Dygraph('graph', data, {});
89fdcedb 154});
62054606
DV
155
156
89fdcedb 157it('testConstantSeriesNegative', function() {
62054606
DV
158 var data = "X,Y\n" +
159 "1,-1\n" +
160 "2,-1\n";
161
89fdcedb 162 var g = new Dygraph('graph', data, {});
62054606
DV
163 // This check could be loosened to
164 // g.yAxisRange()[0] < g.yAxisRange()[1] if it breaks in the future.
89fdcedb
DV
165 assert.deepEqual([-1.1, -0.9], g.yAxisRange());
166});
62054606
DV
167
168
89fdcedb 169it('testConstantSeriesNegativeIncludeZero', function() {
62054606
DV
170 var data = "X,Y\n" +
171 "1,-1\n" +
172 "2,-1\n";
173
89fdcedb 174 var g = new Dygraph('graph', data, {includeZero: true});
62054606
DV
175 // This check could be loosened to
176 // g.yAxisRange()[0] < g.yAxisRange()[1] if it breaks in the future.
89fdcedb
DV
177 assert.deepEqual([-1.1, 0], g.yAxisRange());
178});
179
5db9ad5d
DV
180it('should throw with non-existent divs', function() {
181 var data = "X,Y\n" +
182 "1,-1\n" +
183 "2,1\n";
184
185 assert.throws(function() {
186 new Dygraph(null, data);
187 }, /non-existent div/);
188
189 assert.throws(function() {
190 new Dygraph('non-existent-div-id', data);
191 }, /non-existent div/);
192});
193
89fdcedb 194});