teejayvanslyke-gruff 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. data/History.txt +117 -0
  2. data/MIT-LICENSE +21 -0
  3. data/Manifest.txt +81 -0
  4. data/README.txt +40 -0
  5. data/Rakefile +55 -0
  6. data/assets/bubble.png +0 -0
  7. data/assets/city_scene/background/0000.png +0 -0
  8. data/assets/city_scene/background/0600.png +0 -0
  9. data/assets/city_scene/background/2000.png +0 -0
  10. data/assets/city_scene/clouds/cloudy.png +0 -0
  11. data/assets/city_scene/clouds/partly_cloudy.png +0 -0
  12. data/assets/city_scene/clouds/stormy.png +0 -0
  13. data/assets/city_scene/grass/default.png +0 -0
  14. data/assets/city_scene/haze/true.png +0 -0
  15. data/assets/city_scene/number_sample/1.png +0 -0
  16. data/assets/city_scene/number_sample/2.png +0 -0
  17. data/assets/city_scene/number_sample/default.png +0 -0
  18. data/assets/city_scene/sky/0000.png +0 -0
  19. data/assets/city_scene/sky/0200.png +0 -0
  20. data/assets/city_scene/sky/0400.png +0 -0
  21. data/assets/city_scene/sky/0600.png +0 -0
  22. data/assets/city_scene/sky/0800.png +0 -0
  23. data/assets/city_scene/sky/1000.png +0 -0
  24. data/assets/city_scene/sky/1200.png +0 -0
  25. data/assets/city_scene/sky/1400.png +0 -0
  26. data/assets/city_scene/sky/1500.png +0 -0
  27. data/assets/city_scene/sky/1700.png +0 -0
  28. data/assets/city_scene/sky/2000.png +0 -0
  29. data/assets/pc306715.jpg +0 -0
  30. data/assets/plastik/blue.png +0 -0
  31. data/assets/plastik/green.png +0 -0
  32. data/assets/plastik/red.png +0 -0
  33. data/init.rb +2 -0
  34. data/lib/gruff/accumulator_bar.rb +27 -0
  35. data/lib/gruff/area.rb +58 -0
  36. data/lib/gruff/bar.rb +87 -0
  37. data/lib/gruff/bar_conversion.rb +46 -0
  38. data/lib/gruff/base.rb +1123 -0
  39. data/lib/gruff/bullet.rb +109 -0
  40. data/lib/gruff/deprecated.rb +39 -0
  41. data/lib/gruff/dot.rb +113 -0
  42. data/lib/gruff/line.rb +135 -0
  43. data/lib/gruff/mini/bar.rb +37 -0
  44. data/lib/gruff/mini/legend.rb +82 -0
  45. data/lib/gruff/mini/pie.rb +36 -0
  46. data/lib/gruff/mini/side_bar.rb +35 -0
  47. data/lib/gruff/net.rb +140 -0
  48. data/lib/gruff/photo_bar.rb +100 -0
  49. data/lib/gruff/pie.rb +126 -0
  50. data/lib/gruff/scene.rb +209 -0
  51. data/lib/gruff/side_bar.rb +118 -0
  52. data/lib/gruff/side_stacked_bar.rb +77 -0
  53. data/lib/gruff/spider.rb +130 -0
  54. data/lib/gruff/stacked_area.rb +67 -0
  55. data/lib/gruff/stacked_bar.rb +57 -0
  56. data/lib/gruff/stacked_mixin.rb +23 -0
  57. data/lib/gruff.rb +28 -0
  58. data/rails_generators/gruff/gruff_generator.rb +63 -0
  59. data/rails_generators/gruff/templates/controller.rb +32 -0
  60. data/rails_generators/gruff/templates/functional_test.rb +24 -0
  61. data/test/gruff_test_case.rb +123 -0
  62. data/test/test_accumulator_bar.rb +50 -0
  63. data/test/test_area.rb +134 -0
  64. data/test/test_bar.rb +321 -0
  65. data/test/test_base.rb +8 -0
  66. data/test/test_bullet.rb +26 -0
  67. data/test/test_dot.rb +273 -0
  68. data/test/test_legend.rb +68 -0
  69. data/test/test_line.rb +556 -0
  70. data/test/test_mini_bar.rb +33 -0
  71. data/test/test_mini_pie.rb +20 -0
  72. data/test/test_mini_side_bar.rb +37 -0
  73. data/test/test_net.rb +230 -0
  74. data/test/test_photo.rb +41 -0
  75. data/test/test_pie.rb +154 -0
  76. data/test/test_scene.rb +100 -0
  77. data/test/test_side_bar.rb +12 -0
  78. data/test/test_sidestacked_bar.rb +89 -0
  79. data/test/test_sidestacked_bar_percentile.rb +29 -0
  80. data/test/test_spider.rb +216 -0
  81. data/test/test_stacked_area.rb +52 -0
  82. data/test/test_stacked_bar.rb +52 -0
  83. metadata +167 -0
data/test/test_net.rb ADDED
@@ -0,0 +1,230 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/gruff_test_case"
4
+
5
+ class TestGruffNet < GruffTestCase
6
+
7
+ def setup
8
+ @datasets = [
9
+ [:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]],
10
+ [:Charles, [80, 54, 67, 54, 68, 70, 90, 95]],
11
+ [:Julie, [22, 29, 35, 38, 36, 40, 46, 57]],
12
+ [:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
13
+ [:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
14
+ ["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
15
+ ]
16
+
17
+ @sample_labels = {
18
+ 0 => '5/6',
19
+ 1 => '5/15',
20
+ 2 => '5/24',
21
+ 3 => '5/30',
22
+ 4 => '6/4',
23
+ 5 => '6/12',
24
+ 6 => '6/21',
25
+ 7 => '6/28',
26
+ }
27
+ end
28
+
29
+ def test_net_small_values
30
+ @datasets = [
31
+ [:small, [0.1, 0.14356, 0.0, 0.5674839, 0.456]],
32
+ [:small2, [0.2, 0.3, 0.1, 0.05, 0.9]]
33
+ ]
34
+
35
+ g = Gruff::Net.new
36
+ g.title = "Small Values Net Graph Test"
37
+ @datasets.each do |data|
38
+ g.data(data[0], data[1])
39
+ end
40
+ g.write("test/output/net_small.png")
41
+
42
+ g = Gruff::Net.new(400)
43
+ g.title = "Small Values Net Graph Test 400px"
44
+ @datasets.each do |data|
45
+ g.data(data[0], data[1])
46
+ end
47
+ g.write("test/output/net_small_small.png")
48
+ end
49
+
50
+ def test_net_starts_with_zero
51
+ @datasets = [
52
+ [:first0, [0, 5, 10, 8, 18]],
53
+ [:normal, [1, 2, 3, 4, 5]]
54
+ ]
55
+
56
+ g = Gruff::Net.new
57
+ g.title = "Small Values Net Graph Test"
58
+ @datasets.each do |data|
59
+ g.data(data[0], data[1])
60
+ end
61
+ g.write("test/output/net_small_zero.png")
62
+
63
+ g = Gruff::Net.new(400)
64
+ g.title = "Small Values Net Graph Test 400px"
65
+ @datasets.each do |data|
66
+ g.data(data[0], data[1])
67
+ end
68
+ g.write("test/output/net_small_small_zero.png")
69
+ end
70
+
71
+
72
+ def test_net_large_values
73
+ @datasets = [
74
+ [:large, [100_005, 35_000, 28_000, 27_000]],
75
+ [:large2, [35_000, 28_000, 27_000, 100_005]],
76
+ [:large3, [28_000, 27_000, 100_005, 35_000]],
77
+ [:large4, [1_238, 39_092, 27_938, 48_876]]
78
+ ]
79
+
80
+ g = Gruff::Net.new
81
+ g.title = "Very Large Values Net Graph Test"
82
+ @datasets.each do |data|
83
+ g.data(data[0], data[1])
84
+ end
85
+
86
+ g.write("test/output/net_large.png")
87
+ end
88
+
89
+ def test_many_datapoints
90
+ g = Gruff::Net.new
91
+ g.title = "Many Multi-Net Graph Test"
92
+ g.labels = {
93
+ 0 => 'June',
94
+ 10 => 'July',
95
+ 30 => 'August',
96
+ 50 => 'September',
97
+ }
98
+ g.data('many points', (0..50).collect {|i| rand(100) })
99
+
100
+ # Default theme
101
+ g.write("test/output/net_many.png")
102
+ end
103
+
104
+
105
+ def test_similar_high_end_values
106
+ g = Gruff::Net.new
107
+ g.title = "Similar High End Values Test"
108
+ g.data('similar points', %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} )
109
+
110
+ # Default theme
111
+ g.write("test/output/net_similar_high_end_values.png")
112
+ end
113
+
114
+ def test_many_nets_graph_small
115
+ g = Gruff::Net.new(400)
116
+ g.title = "Many Values Net Test 400px"
117
+ g.labels = {
118
+ 0 => '5/6',
119
+ 10 => '5/15',
120
+ 20 => '5/24',
121
+ 30 => '5/30',
122
+ 40 => '6/4',
123
+ 50 => '6/16'
124
+ }
125
+ %w{jimmy jane philip arthur julie bert}.each do |student_name|
126
+ g.data(student_name, (0..50).collect { |i| rand 100 })
127
+ end
128
+
129
+ # Default theme
130
+ g.write("test/output/net_many_nets_small.png")
131
+ end
132
+
133
+ def test_dots_graph_tiny
134
+ g = Gruff::Net.new(300)
135
+ g.title = "Dots Test 300px"
136
+ g.labels = {
137
+ 0 => '5/6',
138
+ 10 => '5/15',
139
+ 20 => '5/24',
140
+ 30 => '5/30',
141
+ 40 => '6/4',
142
+ 50 => '6/16'
143
+ }
144
+ %w{jimmy jane philip arthur julie bert}.each do |student_name|
145
+ g.data(student_name, (0..50).collect { |i| rand 100 })
146
+ end
147
+
148
+ # Default theme
149
+ g.write("test/output/net_dots_tiny.png")
150
+ end
151
+
152
+ def test_no_data
153
+ g = Gruff::Net.new(400)
154
+ g.title = "No Data"
155
+ # Default theme
156
+ g.write("test/output/net_no_data.png")
157
+
158
+ g = Gruff::Net.new(400)
159
+ g.title = "No Data Title"
160
+ g.no_data_message = 'There is no data'
161
+ g.write("test/output/net_no_data_msg.png")
162
+ end
163
+
164
+
165
+ def test_all_zeros
166
+ g = Gruff::Net.new(400)
167
+ g.title = "All Zeros"
168
+
169
+ g.data(:gus, [0,0,0,0])
170
+
171
+ # Default theme
172
+ g.write("test/output/net_no_data_other.png")
173
+ end
174
+
175
+ def test_no_title
176
+ g = Gruff::Net.new(400)
177
+ g.labels = @sample_labels
178
+ @datasets.each do |data|
179
+ g.data(data[0], data[1])
180
+ end
181
+
182
+ g.write("test/output/net_no_title.png")
183
+ end
184
+
185
+ def test_no_net_markers
186
+ g = setup_basic_graph(400)
187
+ g.title = "No Net Markers"
188
+ g.hide_line_markers = true
189
+ g.write("test/output/net_no_net_markers.png")
190
+ end
191
+
192
+ def test_no_legend
193
+ g = setup_basic_graph(400)
194
+ g.title = "No Legend"
195
+ g.hide_legend = true
196
+ g.write("test/output/net_no_legend.png")
197
+ end
198
+
199
+ def test_nothing_but_the_graph
200
+ g = setup_basic_graph(400)
201
+ g.title = "THIS TITLE SHOULD NOT DISPLAY!!!"
202
+ g.hide_line_markers = true
203
+ g.hide_legend = true
204
+ g.hide_title = true
205
+ g.write("test/output/net_nothing_but_the_graph.png")
206
+ end
207
+
208
+ def test_wide_graph
209
+ g = setup_basic_graph('800x400')
210
+ g.title = "Wide Graph"
211
+ g.write("test/output/net_wide_graph.png")
212
+
213
+ g = setup_basic_graph('400x200')
214
+ g.title = "Wide Graph Small"
215
+ g.write("test/output/net_wide_graph_small.png")
216
+ end
217
+
218
+ protected
219
+
220
+ def setup_basic_graph(size=800)
221
+ g = Gruff::Net.new(size)
222
+ g.title = "My Graph Title"
223
+ g.labels = @sample_labels
224
+ @datasets.each do |data|
225
+ g.data(data[0], data[1])
226
+ end
227
+ return g
228
+ end
229
+
230
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/gruff_test_case"
4
+
5
+ class TestGruffPhotoBar < GruffTestCase
6
+
7
+ # def setup
8
+ # @datasets = [
9
+ # [:Jimmy, [25, 36, 86, 39]],
10
+ # [:Charles, [80, 54, 67, 54]],
11
+ # # [:Charity, [0, nil, 100, 90]],
12
+ # ]
13
+ # end
14
+ #
15
+ # def test_bar_graph
16
+ # bar_graph_sized
17
+ # bar_graph_sized(400)
18
+ # end
19
+ #
20
+ #
21
+ # protected
22
+ #
23
+ # def bar_graph_sized(size=800)
24
+ # g = Gruff::PhotoBar.new(size)
25
+ # g.title = "Photo Bar Graph Test #{size}px"
26
+ # g.labels = {
27
+ # 0 => '5/6',
28
+ # 1 => '5/15',
29
+ # 2 => '5/24',
30
+ # 3 => '5/30',
31
+ # }
32
+ # @datasets.each do |data|
33
+ # g.data(*data)
34
+ # end
35
+ #
36
+ # g.theme = 'plastik'
37
+ #
38
+ # g.write("test/output/photo_plastik_#{size}.png")
39
+ # end
40
+
41
+ end
data/test/test_pie.rb ADDED
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/gruff_test_case"
4
+
5
+ class TestGruffPie < GruffTestCase
6
+
7
+ def setup
8
+ @datasets = [
9
+ [:Darren, [25]],
10
+ [:Chris, [80]],
11
+ [:Egbert, [22]],
12
+ [:Adam, [95]],
13
+ [:Bill, [90]],
14
+ ["Frank", [5]],
15
+ ["Zero", [0]],
16
+ ]
17
+ end
18
+
19
+ def test_pie_graph
20
+ g = Gruff::Pie.new
21
+ g.title = "Visual Pie Graph Test"
22
+ @datasets.each do |data|
23
+ g.data(data[0], data[1])
24
+ end
25
+
26
+ # Default theme
27
+ g.write("test/output/pie_keynote.png")
28
+ end
29
+
30
+ def test_pie_graph_greyscale
31
+ g = Gruff::Pie.new
32
+ g.title = "Greyscale Pie Graph Test"
33
+ g.theme_greyscale
34
+ @datasets.each do |data|
35
+ g.data(data[0], data[1])
36
+ end
37
+
38
+ # Default theme
39
+ g.write("test/output/pie_grey.png")
40
+ end
41
+
42
+ def test_pie_graph_pastel
43
+ g = Gruff::Pie.new
44
+ g.theme_pastel
45
+ g.title = "Pastel Pie Graph Test"
46
+ @datasets.each do |data|
47
+ g.data(data[0], data[1])
48
+ end
49
+
50
+ # Default theme
51
+ g.write("test/output/pie_pastel.png")
52
+ end
53
+
54
+
55
+ def test_pie_graph_small
56
+ g = Gruff::Pie.new(400)
57
+ g.title = "Visual Pie Graph Test Small"
58
+ @datasets.each do |data|
59
+ g.data(data[0], data[1])
60
+ end
61
+
62
+ # Default theme
63
+ g.write("test/output/pie_keynote_small.png")
64
+ end
65
+
66
+ def test_pie_graph_nearly_equal
67
+ g = Gruff::Pie.new
68
+ g.title = "Pie Graph Nearly Equal"
69
+
70
+ g.data(:Blake, [41])
71
+ g.data(:Aaron, [42])
72
+ # g.data(:Grouch, [40])
73
+ # g.data(:Snuffleupagus, [43])
74
+
75
+ g.write("test/output/pie_nearly_equal.png")
76
+ end
77
+
78
+ def test_pie_graph_equal
79
+ g = Gruff::Pie.new
80
+ g.title = "Pie Graph Equal"
81
+
82
+ g.data(:Bert, [41])
83
+ g.data(:Adam, [41])
84
+
85
+ g.write("test/output/pie_equal.png")
86
+ end
87
+
88
+ def test_pie_graph_zero
89
+ g = Gruff::Pie.new
90
+ g.title = "Pie Graph One Zero"
91
+
92
+ g.data(:Bert, [0])
93
+ g.data(:Adam, [1])
94
+
95
+ g.write("test/output/pie_zero.png")
96
+ end
97
+
98
+
99
+ def test_pie_graph_one_val
100
+ g = Gruff::Pie.new
101
+ g.title = "Pie Graph One Val"
102
+
103
+ g.data(:Bert, 53)
104
+ g.data(:Adam, 29)
105
+
106
+ g.write("test/output/pie_one_val.png")
107
+ end
108
+
109
+
110
+ def test_wide
111
+ g = setup_basic_graph('800x400')
112
+ g.title = "Wide Pie"
113
+ g.write("test/output/pie_wide.png")
114
+ end
115
+
116
+ def test_label_size
117
+ g = setup_basic_graph()
118
+ g.title = "Pie With Small Legend"
119
+ g.legend_font_size = 10
120
+ g.write("test/output/pie_legend.png")
121
+
122
+ g = setup_basic_graph(400)
123
+ g.title = "Small Pie With Small Legend"
124
+ g.legend_font_size = 10
125
+ g.write("test/output/pie_legend_small.png")
126
+ end
127
+
128
+
129
+ def test_tiny_simple_pie
130
+ @datasets = (1..5).map {|n| ['Auto', [rand(100)]]}
131
+
132
+ g = setup_basic_graph 200
133
+ g.hide_legend = true
134
+ g.hide_title = true
135
+ g.hide_line_numbers = true
136
+
137
+ g.marker_font_size = 40.0
138
+ g.minimum_value = 0.0
139
+
140
+ write_test_file g, "pie_simple.png"
141
+ end
142
+
143
+ protected
144
+
145
+ def setup_basic_graph(size=800)
146
+ g = Gruff::Pie.new(size)
147
+ g.title = "My Graph Title"
148
+ @datasets.each do |data|
149
+ g.data(data[0], data[1])
150
+ end
151
+ return g
152
+ end
153
+
154
+ end
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/gruff_test_case"
4
+ require 'yaml'
5
+
6
+ class LayerStub < Gruff::Layer; attr_reader :base_dir, :filenames, :selected_filename; end
7
+
8
+ class TestGruffScene < GruffTestCase
9
+
10
+ def test_hazy
11
+ g = setup_scene
12
+ g.weather = "cloudy"
13
+ g.haze = true
14
+ g.time = Time.mktime(2006, 7, 4, 4, 35)
15
+ g.write "test/output/scene_hazy_night.png"
16
+ end
17
+
18
+ def test_stormy_night
19
+ g = setup_scene
20
+ g.weather = "stormy"
21
+ g.time = Time.mktime(2006, 7, 4, 0, 0)
22
+ g.write "test/output/scene_stormy_night.png"
23
+ end
24
+
25
+
26
+ def test_not_hazy
27
+ g = setup_scene
28
+ g.weather = "cloudy"
29
+ g.haze = false
30
+ g.time = Time.mktime(2006, 7, 4, 6, 00)
31
+ g.write "test/output/scene_not_hazy_day.png"
32
+ end
33
+
34
+ def test_partly_cloudy
35
+ g = setup_scene
36
+ g.weather = "partly cloudy"
37
+ g.haze = false
38
+ g.time = Time.mktime(2006, 7, 4, 13, 00)
39
+ g.write "test/output/scene_partly_cloudy_day.png"
40
+ end
41
+
42
+
43
+ def test_stormy_day
44
+ g = setup_scene
45
+ g.weather = "stormy"
46
+ g.haze = false
47
+ g.time = Time.mktime(2006, 7, 4, 8, 00)
48
+ g.write "test/output/scene_stormy_day.png"
49
+ end
50
+
51
+
52
+ def test_layer
53
+ l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "clouds")
54
+ assert_equal %w(cloudy.png partly_cloudy.png stormy.png), l.filenames
55
+
56
+ l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "grass")
57
+ assert_equal 'default.png', l.selected_filename
58
+
59
+ l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
60
+ l.update Time.mktime(2006, 7, 4, 12, 35) # 12:35, July 4, 2006
61
+ assert_equal '1200.png', l.selected_filename
62
+
63
+ l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
64
+ l.update Time.mktime(2006, 7, 4, 0, 0) # 00:00, July 4, 2006
65
+ assert_equal '0000.png', l.selected_filename
66
+
67
+ l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
68
+ l.update Time.mktime(2006, 7, 4, 23, 35) # 23:35, July 4, 2006
69
+ assert_equal '2000.png', l.selected_filename
70
+
71
+ l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
72
+ l.update Time.mktime(2006, 7, 4, 0, 1) # 00:01, July 4, 2006
73
+ assert_equal '0000.png', l.selected_filename
74
+
75
+ l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
76
+ l.update Time.mktime(2006, 7, 4, 2, 0) # 02:00, July 4, 2006
77
+ assert_equal '0200.png', l.selected_filename
78
+
79
+ l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
80
+ l.update Time.mktime(2006, 7, 4, 4, 00) # 04:00, July 4, 2006
81
+ assert_equal '0400.png', l.selected_filename
82
+
83
+ # TODO Need number_sample folder
84
+ # l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "number_sample")
85
+ # assert_equal %w(1.png 2.png default.png), l.filenames
86
+ # l.update 3
87
+ # assert_equal 'default.png', l.selected_filename
88
+ end
89
+
90
+ private
91
+
92
+ def setup_scene
93
+ g = Gruff::Scene.new("500x100", File.expand_path("../assets/city_scene", File.dirname(__FILE__)) )
94
+ g.layers = %w(background haze sky clouds)
95
+ g.weather_group = %w(clouds)
96
+ g.time_group = %w(background sky)
97
+ g
98
+ end
99
+
100
+ end
@@ -0,0 +1,12 @@
1
+
2
+ require File.dirname(__FILE__) + "/gruff_test_case"
3
+
4
+ class TestGruffSideBar < GruffTestCase
5
+
6
+ def test_bar_graph
7
+ g = setup_basic_graph(Gruff::SideBar, 800)
8
+ write_test_file g, 'side_bar.png'
9
+ end
10
+
11
+ end
12
+
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/gruff_test_case"
4
+
5
+ class TestGruffSideStackedBar < GruffTestCase
6
+
7
+ def setup
8
+ @datasets = [
9
+ [:Jimmy, [25, 36, 86, 39]],
10
+ [:Charles, [80, 54, 67, 54]],
11
+ [:Julie, [22, 29, 35, 38]],
12
+ #[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
13
+ #[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
14
+ #["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
15
+ ]
16
+ @sample_labels = {
17
+ 0 => '5/6',
18
+ 1 => '5/15',
19
+ 2 => '5/24'
20
+ }
21
+
22
+ end
23
+
24
+ def test_bar_graph
25
+ g = Gruff::SideStackedBar.new
26
+ g.title = "Visual Stacked Bar Graph Test"
27
+ g.labels = {
28
+ 0 => '5/6',
29
+ 1 => '5/15',
30
+ 2 => '5/24',
31
+ 3 => '5/30',
32
+ }
33
+ @datasets.each do |data|
34
+ g.data(data[0], data[1])
35
+ end
36
+ g.write "test/output/side_stacked_bar_keynote.png"
37
+ end
38
+
39
+
40
+ def test_bar_graph_small
41
+ g = Gruff::SideStackedBar.new(400)
42
+ g.title = "Visual Stacked Bar Graph Test"
43
+ g.labels = {
44
+ 0 => '5/6',
45
+ 1 => '5/15',
46
+ 2 => '5/24',
47
+ 3 => '5/30',
48
+ }
49
+ @datasets.each do |data|
50
+ g.data(data[0], data[1])
51
+ end
52
+ g.write "test/output/side_stacked_bar_keynote_small.png"
53
+ end
54
+
55
+ def test_wide
56
+ g = setup_basic_graph('800x400')
57
+ g.title = "Wide SSBar"
58
+ g.write "test/output/side_stacked_bar_wide.png"
59
+ end
60
+
61
+ def test_should_space_long_left_labels_appropriately
62
+ g = Gruff::SideStackedBar.new
63
+ g.title = "Stacked Bar Long Label"
64
+ g.labels = {
65
+ 0 => 'September',
66
+ 1 => 'Oct',
67
+ 2 => 'Nov',
68
+ 3 => 'Dec',
69
+ }
70
+ @datasets.each do |data|
71
+ g.data(data[0], data[1])
72
+ end
73
+ g.write "test/output/side_stacked_bar_long_label.png"
74
+ end
75
+
76
+ protected
77
+
78
+ def setup_basic_graph(size=800)
79
+ g = Gruff::SideStackedBar.new(size)
80
+ g.title = "My Graph Title"
81
+ g.labels = @sample_labels
82
+ @datasets.each do |data|
83
+ g.data(data[0], data[1])
84
+ end
85
+ return g
86
+ end
87
+
88
+ end
89
+
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/gruff_test_case"
4
+
5
+ class TestGruffSideStackedBar < GruffTestCase
6
+
7
+ def setup
8
+ @datasets = [
9
+ [:A, [ 25 ]],
10
+ [:B, [ 25 ]],
11
+ [:C, [ 25 ]],
12
+ [:D, [ 25 ]]
13
+ ]
14
+ @labels = {
15
+ 0 => 'Foobar'
16
+ }
17
+ end
18
+
19
+ def test_graph_should_render_100_wide
20
+ g = Gruff::SideStackedBar.new
21
+ g.title = "Side Stacked Bar As Percentile"
22
+ g.labels = @labels
23
+ @datasets.each do |data|
24
+ g.data(data[0], data[1])
25
+ end
26
+ g.write "test/output/side_stacked_bar_percentile.png"
27
+ end
28
+
29
+ end