Commit | Line | Data |
---|---|---|
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 | |
8 | import Dygraph from '../../src/dygraph'; | |
9 | import Util from './Util'; | |
10 | ||
89fdcedb | 11 | describe("pathological-cases", function() { |
395e98a3 | 12 | |
e8c70e4e DV |
13 | cleanupAfterEach(); |
14 | ||
1b7afc93 DV |
15 | var restoreConsole; |
16 | var logs = {}; | |
89fdcedb | 17 | beforeEach(function() { |
1b7afc93 | 18 | restoreConsole = Util.captureConsole(logs); |
89fdcedb | 19 | }); |
395e98a3 | 20 | |
89fdcedb | 21 | afterEach(function() { |
1b7afc93 | 22 | restoreConsole(); |
89fdcedb | 23 | }); |
395e98a3 | 24 | |
e8c70e4e DV |
25 | var graph = document.getElementById("graph"); |
26 | ||
89fdcedb | 27 | it('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 | 37 | it('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 | 48 | it('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 | 137 | it('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 | 149 | it('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 | 157 | it('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 | 169 | it('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 |
180 | it('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 | }); |