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, | |
93 | labelsDivWidth: 100, | |
94 | pointSize: 10 | |
95 | }; | |
96 | for (var key in base) { | |
97 | if (base.hasOwnProperty(key)) opts[key] = base[key]; | |
98 | } | |
99 | for (var key in variant) { | |
100 | if (variant.hasOwnProperty(key)) opts[key] = variant[key]; | |
101 | } | |
102 | ||
103 | var h = document.createElement('h3'); | |
104 | h.appendChild(document.createTextNode(baseName + ' ' + variantName)); | |
e8c70e4e | 105 | graph.appendChild(h); |
fa460473 KW |
106 | for (var dataName in dataSets) { |
107 | var data = dataSets[dataName]; | |
108 | ||
109 | var box = document.createElement('fieldset'); | |
110 | box.style.display = 'inline-block'; | |
111 | var legend = document.createElement('legend'); | |
112 | legend.appendChild(document.createTextNode(dataName)); | |
113 | box.appendChild(legend); | |
114 | var gdiv = document.createElement('div'); | |
115 | gdiv.style.display = 'inline-block'; | |
116 | box.appendChild(gdiv); | |
e8c70e4e | 117 | graph.appendChild(box); |
fa460473 KW |
118 | |
119 | var cols = data && data[0] ? data[0].length : 0; | |
120 | opts.labels = ['X', 'A', 'B', 'C'].slice(0, cols); | |
121 | ||
122 | var g = new Dygraph(gdiv, data, opts); | |
1b7afc93 DV |
123 | |
124 | if (dataName == 'empty') { | |
125 | assert.deepEqual(logs, { | |
126 | log: [], warn: [], | |
127 | error: ["Can't plot empty data set"] | |
128 | }); | |
129 | logs.error = []; // reset | |
130 | } else { | |
131 | assert.deepEqual(logs, {log: [], warn: [], error: []}); | |
132 | } | |
fa460473 KW |
133 | } |
134 | } | |
135 | } | |
89fdcedb | 136 | }); |
fa460473 | 137 | |
89fdcedb | 138 | it('testNullLegend', function() { |
e0ff43a1 DV |
139 | var opts = { |
140 | width: 480, | |
141 | height: 320, | |
142 | labelsDiv: null | |
143 | }; | |
144 | var data = "X,Y\n" + | |
145 | "1,2\n"; | |
146 | ||
e0ff43a1 | 147 | var g = new Dygraph(graph, data, opts); |
89fdcedb | 148 | }); |
2c623e51 | 149 | |
89fdcedb | 150 | it('testDivAsString', function() { |
2c623e51 RK |
151 | var data = "X,Y\n" + |
152 | "1,2\n"; | |
153 | ||
747681e6 | 154 | var g = new Dygraph('graph', data, {}); |
89fdcedb | 155 | }); |
62054606 DV |
156 | |
157 | ||
89fdcedb | 158 | it('testConstantSeriesNegative', function() { |
62054606 DV |
159 | var data = "X,Y\n" + |
160 | "1,-1\n" + | |
161 | "2,-1\n"; | |
162 | ||
89fdcedb | 163 | var g = new Dygraph('graph', data, {}); |
62054606 DV |
164 | // This check could be loosened to |
165 | // g.yAxisRange()[0] < g.yAxisRange()[1] if it breaks in the future. | |
89fdcedb DV |
166 | assert.deepEqual([-1.1, -0.9], g.yAxisRange()); |
167 | }); | |
62054606 DV |
168 | |
169 | ||
89fdcedb | 170 | it('testConstantSeriesNegativeIncludeZero', function() { |
62054606 DV |
171 | var data = "X,Y\n" + |
172 | "1,-1\n" + | |
173 | "2,-1\n"; | |
174 | ||
89fdcedb | 175 | var g = new Dygraph('graph', data, {includeZero: true}); |
62054606 DV |
176 | // This check could be loosened to |
177 | // g.yAxisRange()[0] < g.yAxisRange()[1] if it breaks in the future. | |
89fdcedb DV |
178 | assert.deepEqual([-1.1, 0], g.yAxisRange()); |
179 | }); | |
180 | ||
5db9ad5d DV |
181 | it('should throw with non-existent divs', function() { |
182 | var data = "X,Y\n" + | |
183 | "1,-1\n" + | |
184 | "2,1\n"; | |
185 | ||
186 | assert.throws(function() { | |
187 | new Dygraph(null, data); | |
188 | }, /non-existent div/); | |
189 | ||
190 | assert.throws(function() { | |
191 | new Dygraph('non-existent-div-id', data); | |
192 | }, /non-existent div/); | |
193 | }); | |
194 | ||
89fdcedb | 195 | }); |