fix security issue
[selectricity] / lib / gruff-0.2.8 / test / test_line.rb
1 #!/usr/bin/ruby
2
3 require File.dirname(__FILE__) + "/gruff_test_case"
4
5 class TestGruffLine < GruffTestCase
6
7   # TODO Delete old output files once when starting tests
8   
9   def test_line_graph_with_themes
10     line_graph_with_themes()
11     line_graph_with_themes(400)
12   end
13   
14   def test_one_value
15     g = Gruff::Line.new
16     g.title = "One Value"
17     g.labels = {
18       0 => '1', 
19       1 => '2'
20     }
21     g.data('one', 1)
22
23     g.write("test/output/line_one_value.png")
24   end
25
26   def test_one_value_array
27     g = Gruff::Line.new
28     g.title = "One Value in an Array"
29     g.labels = {
30       0 => '1', 
31       1 => '2'
32     }
33     g.data('one', [1])
34
35     g.write("test/output/line_one_value_array.png")
36   end
37
38
39   def test_should_not_hang_with_0_0_100
40     g = Gruff::Line.new(320)
41     g.title = "Hang Value Graph Test"
42     g.data('test', [0,0,100])
43
44     g.write("test/output/line_hang_value.png")
45   end
46
47   # TODO
48   # def test_fix_crash
49   #   g = Gruff::Line.new(370)
50   #   g.title = "Crash Test"
51   #   g.data "ichi", [5]
52   #   g.data "ni", [0]
53   #   g.data "san", [0]
54   #   g.data "shi", [0]
55   #   g.write("test/output/line_crash_fix_test.png")
56   # end
57
58   
59   def test_line_small_values    
60     @datasets = [
61       [:small, [0.1, 0.14356, 0.0, 0.5674839, 0.456]],
62       [:small2, [0.2, 0.3, 0.1, 0.05, 0.9]]
63       ]
64
65     g = Gruff::Line.new
66     g.title = "Small Values Line Graph Test"
67     @datasets.each do |data|
68       g.data(data[0], data[1])
69     end
70     g.write("test/output/line_small.png")
71
72     g = Gruff::Line.new(400)
73     g.title = "Small Values Line Graph Test 400px"
74     @datasets.each do |data|
75       g.data(data[0], data[1])
76     end
77     g.write("test/output/line_small_small.png")
78   end
79
80   def test_line_starts_with_zero
81     @datasets = [
82       [:first0, [0, 5, 10, 8, 18]],
83       [:normal, [1, 2, 3, 4, 5]]
84       ]
85
86     g = Gruff::Line.new
87     g.title = "Small Values Line Graph Test"
88     @datasets.each do |data|
89       g.data(data[0], data[1])
90     end
91     g.write("test/output/line_small_zero.png")
92
93     g = Gruff::Line.new(400)
94     g.title = "Small Values Line Graph Test 400px"
95     @datasets.each do |data|
96       g.data(data[0], data[1])
97     end
98     g.write("test/output/line_small_small_zero.png")
99   end
100
101     
102   def test_line_large_values    
103     @datasets = [
104       [:large, [100_005, 35_000, 28_000, 27_000]],
105       [:large2, [35_000, 28_000, 27_000, 100_005]],
106       [:large3, [28_000, 27_000, 100_005, 35_000]],
107       [:large4, [1_238, 39_092, 27_938, 48_876]]
108       ]
109
110     g = Gruff::Line.new
111     g.title = "Very Large Values Line Graph Test"
112     g.baseline_value = 50_000
113     g.baseline_color = 'green'
114     @datasets.each do |data|
115       g.data(data[0], data[1])
116     end
117
118     g.write("test/output/line_large.png")
119   end
120     
121   def test_long_title
122     
123   end
124   
125   def test_add_colors
126     
127   end
128
129   def test_request_too_many_colors
130     
131   end
132
133   def test_add_data
134     
135   end
136
137   def test_many_datapoints
138     g = Gruff::Line.new
139     g.title = "Many Multi-Line Graph Test"
140     g.labels = {
141       0 => 'June', 
142       10 => 'July', 
143       30 => 'August', 
144       50 => 'September', 
145     }
146     g.data('many points', (0..50).collect {|i| rand(100) })
147     g.x_axis_label = "Months"
148
149     # Default theme
150     g.write("test/output/line_many.png")
151   end
152
153
154   def test_similar_high_end_values
155     @dataset = %w(29.43 29.459 29.498 29.53 29.548 29.589 29.619 29.66 29.689 29.849 29.878 29.74 29.769 29.79 29.808 29.828).collect {|i| i.to_f}
156
157     g = Gruff::Line.new
158     g.title = "Similar High End Values Test"
159     g.data('similar points', @dataset )
160     g.write("test/output/line_similar_high_end_values.png")
161     
162     g = Gruff::Line.new
163     g.title = "Similar High End Values With Floor"
164     g.data('similar points', @dataset )
165     g.minimum_value = 0
166     g.y_axis_label = "Barometric Pressure"
167     g.write("test/output/line_similar_high_end_values_with_floor.png")
168   end
169
170   def test_many_lines_graph_small
171     g = Gruff::Line.new(400)
172     g.title = "Many Values Line Test 400px"
173     g.labels = {
174       0 => '5/6', 
175       10 => '5/15', 
176       20 => '5/24', 
177       30 => '5/30', 
178       40 => '6/4', 
179       50 => '6/16'
180     }
181     %w{jimmy jane philip arthur julie bert}.each do |student_name|
182       g.data(student_name, (0..50).collect { |i| rand 100 })
183     end
184
185     # Default theme
186     g.write("test/output/line_many_lines_small.png")
187   end
188
189   def test_graph_tiny
190     g = Gruff::Line.new(300)
191     g.title = "Tiny Test 300px"
192     g.labels = {
193       0 => '5/6', 
194       10 => '5/15', 
195       20 => '5/24', 
196       30 => '5/30', 
197       40 => '6/4', 
198       50 => '6/16'
199     }
200     %w{jimmy jane philip arthur julie bert}.each do |student_name|
201       g.data(student_name, (0..50).collect { |i| rand 100 })
202     end
203
204     # Default theme
205     g.write("test/output/line_tiny.png")
206   end
207
208   def test_no_data
209     g = Gruff::Line.new(400)
210     g.title = "No Data"
211     # Default theme
212     g.write("test/output/line_no_data.png")
213     
214     g = Gruff::Line.new(400)
215     g.title = "No Data Title"
216     g.no_data_message = 'There is no data'
217     g.write("test/output/line_no_data_msg.png")
218   end
219
220
221   def test_all_zeros
222     g = Gruff::Line.new(400)
223     g.title = "All Zeros"
224
225     g.data(:gus, [0,0,0,0])
226
227     # Default theme
228     g.write("test/output/line_no_data_other.png")    
229   end
230
231
232   def test_some_nil_points
233     g = Gruff::Line.new
234     g.title = "Some Nil Points"
235
236     @datasets = [
237       [:data1, [1, 2, 3, nil, 3, 5, 6]],
238       [:data2, [5, nil, nil, nil, nil, nil, 5]],
239       [:data3, [4, nil, 2, 1, 0]],
240       [:data4, [nil, nil, 3, 1, 2]]
241       ]
242
243     @datasets.each do |data|
244       g.data(*data)
245     end
246
247     # Default theme
248     g.write("test/output/line_some_nil_points.png")    
249   end
250
251   def test_no_title
252     g = Gruff::Line.new(400)
253     g.labels = @labels
254     @datasets.each do |data|
255       g.data(data[0], data[1])
256     end
257
258     g.write("test/output/line_no_title.png")
259   end
260
261   def test_no_line_markers
262     g = setup_basic_graph(400)
263     g.title = "No Line Markers"
264     g.hide_line_markers = true
265     g.write("test/output/line_no_line_markers.png")    
266   end
267
268   def test_no_legend
269     g = setup_basic_graph(400)
270     g.title = "No Legend"
271     g.hide_legend = true
272     g.write("test/output/line_no_legend.png")
273   end
274
275   def test_nothing_but_the_graph
276     g = setup_basic_graph(400)
277     g.title = "THIS TITLE SHOULD NOT DISPLAY!!!"
278     g.hide_line_markers = true
279     g.hide_legend = true
280     g.hide_title = true
281     g.write("test/output/line_nothing_but_the_graph.png")    
282   end
283
284   def test_baseline_larger_than_data
285     g = setup_basic_graph(400)
286     g.title = "Baseline Larger Than Data"
287     g.baseline_value = 150
288     g.write("test/output/line_large_baseline.png")    
289   end
290
291
292   def test_hide_dots
293     g = setup_basic_graph(400)
294     g.title = "Hide Dots"
295     g.hide_dots = true
296     g.write("test/output/line_hide_dots.png")    
297   end
298
299   def test_hide_lines
300     g = setup_basic_graph(400)
301     g.title = "Hide Lines"
302     g.hide_lines = true
303     g.write("test/output/line_hide_lines.png")    
304   end
305
306   def test_wide_graph
307     g = setup_basic_graph('800x400')
308     g.title = "Wide Graph"
309     g.write("test/output/line_wide_graph.png")    
310
311     g = setup_basic_graph('400x200')
312     g.title = "Wide Graph Small"
313     g.write("test/output/line_wide_graph_small.png")
314   end
315
316   def test_negative
317     g = setup_pos_neg(800)
318     g.write("test/output/line_pos_neg.png")
319     
320     g = setup_pos_neg(400)
321     g.title = 'Pos/Neg Line Test Small'
322     g.write("test/output/line_pos_neg_400.png")
323   end
324
325   def test_all_negative
326     g = setup_all_neg(800)
327     g.write("test/output/line_all_neg.png")
328     
329     g = setup_all_neg(400)
330     g.title = 'All Neg Line Test Small'
331     g.write("test/output/line_all_neg_400.png")
332   end
333
334   def test_many_numbers    
335     g = Gruff::Line.new('400x170')
336     g.title = "Line Test, Many Numbers"
337
338     data = [
339       { :date => '01',
340         :wpm => 0,
341         :errors => 0,
342         :accuracy => 0 },
343       { :date => '02',
344         :wpm => 10,
345         :errors => 2,
346         :accuracy => 80 },
347       { :date => '03',
348         :wpm => 15,
349         :errors => 0,
350         :accuracy => 100 },
351       { :date => '04',
352         :wpm => 16,
353         :errors => 2,
354         :accuracy => 87 },
355       { :date => '05',
356           :wpm => nil,
357           :errors => nil,
358           :accuracy => nil },
359       { :date => '06',
360         :wpm => 18,
361         :errors => 1,
362         :accuracy => 94 },
363       { :date => '07'},
364       { :date => '08' },
365       { :date => '09',
366          :wpm => 21,
367          :errors => 1,
368          :accuracy => 95 },
369       { :date => '10'},
370       { :date => '11'},
371       { :date => '12'},
372       { :date => '13'},
373       { :date => '14'},
374       { :date => '15'},
375       { :date => '16'},
376       { :date => '17'},
377       { :date => '18'},
378       { :date => '19',
379          :wpm => 28,
380          :errors => 5,
381          :accuracy => 82 },
382       { :date => '20'},
383       { :date => '21'},
384       { :date => '22'},
385       { :date => '23'},
386       { :date => '24'},
387       { :date => '25'},
388       { :date => '26'},     
389       { :date => '27',
390          :wpm => 37,
391          :errors => 3,
392          :accuracy => 92 },
393     ]
394
395     [:wpm, :errors, :accuracy].each do |field|
396       g.data(field.to_s, data.collect {|d| d[field] })
397     end
398
399     labels = Hash.new
400     data.each_with_index do |d, i|
401       labels[i] = d[:date]
402     end
403     g.labels = labels
404
405     g.write('test/output/line_many_numbers.png')
406   end
407
408   def test_no_hide_line_no_labels
409     g = Gruff::Line.new
410     g.title = "No Hide Line No Labels"
411     @datasets.each do |data|
412       g.data(data[0], data[1])
413     end
414     g.hide_line_markers = false
415     g.write('test/output/line_no_hide.png')
416   end
417
418 protected
419
420   # TODO Reset data after each theme
421   def line_graph_with_themes(size=nil)
422     g = Gruff::Line.new(size)
423     g.title = "Multi-Line Graph Test #{size}"
424     g.labels = @labels
425     g.baseline_value = 90
426     @datasets.each do |data|
427       g.data(data[0], data[1])
428     end
429     # Default theme
430     g.write("test/output/line_theme_keynote_#{size}.png")
431   
432     g = Gruff::Line.new(size)
433     g.title = "Multi-Line Graph Test #{size}"
434     g.labels = @labels
435     g.baseline_value = 90
436     g.theme_37signals
437     @datasets.each do |data|
438       g.data(data[0], data[1])
439     end
440     g.write("test/output/line_theme_37signals_#{size}.png")
441   
442
443     g = Gruff::Line.new(size)
444     g.title = "Multi-Line Graph Test #{size}"
445     g.labels = @labels
446     g.baseline_value = 90
447     g.theme_rails_keynote
448     @datasets.each do |data|
449       g.data(data[0], data[1])
450     end
451     g.write("test/output/line_theme_rails_keynote_#{size}.png")
452   
453     g = Gruff::Line.new(size)
454     g.title = "Multi-Line Graph Test #{size}"
455     g.labels = @labels
456     g.baseline_value = 90
457     g.theme_odeo
458     @datasets.each do |data|
459       g.data(data[0], data[1])
460     end
461     g.write("test/output/line_theme_odeo_#{size}.png")
462   end
463
464   def setup_pos_neg(size=800)
465     g = Gruff::Line.new(size)
466     g.title = "Pos/Neg Line Graph Test"
467     g.labels = {
468       0 => '5/6', 
469       1 => '5/15', 
470       2 => '5/24', 
471       3 => '5/30', 
472     }
473     g.data(:apples, [-1, 0, 4, -4])
474     g.data(:peaches, [10, 8, 6, 3])
475     return g
476   end
477
478
479   def setup_all_neg(size=800)
480     g = Gruff::Line.new(size)
481     g.title = "All Neg Line Graph Test"
482     g.labels = {
483       0 => '5/6', 
484       1 => '5/15', 
485       2 => '5/24', 
486       3 => '5/30', 
487     }
488     g.data(:apples, [-1, -5, -20, -4])
489     g.data(:peaches, [-10, -8, -6, -3])
490     g
491   end
492   
493 end

Benjamin Mako Hill || Want to submit a patch?