gruff 0.7.0-java → 0.12.0-java
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.
- checksums.yaml +5 -5
- data/{History.txt → CHANGELOG.md} +81 -25
- data/Gemfile +3 -1
- data/README.md +51 -23
- data/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/gruff.gemspec +23 -13
- data/init.rb +2 -0
- data/lib/gruff.rb +33 -4
- data/lib/gruff/accumulator_bar.rb +17 -9
- data/lib/gruff/area.rb +31 -21
- data/lib/gruff/bar.rb +90 -46
- data/lib/gruff/base.rb +476 -710
- data/lib/gruff/bezier.rb +29 -18
- data/lib/gruff/bullet.rb +58 -71
- data/lib/gruff/dot.rb +35 -83
- data/lib/gruff/helper/bar_conversion.rb +47 -0
- data/lib/gruff/helper/bar_value_label_mixin.rb +33 -0
- data/lib/gruff/helper/stacked_mixin.rb +23 -0
- data/lib/gruff/histogram.rb +59 -0
- data/lib/gruff/line.rb +121 -199
- data/lib/gruff/mini/bar.rb +17 -10
- data/lib/gruff/mini/legend.rb +26 -38
- data/lib/gruff/mini/pie.rb +18 -13
- data/lib/gruff/mini/side_bar.rb +25 -12
- data/lib/gruff/net.rb +69 -83
- data/lib/gruff/patch/rmagick.rb +31 -0
- data/lib/gruff/patch/string.rb +13 -0
- data/lib/gruff/photo_bar.rb +36 -43
- data/lib/gruff/pie.rb +42 -103
- data/lib/gruff/renderer/bezier.rb +22 -0
- data/lib/gruff/renderer/circle.rb +22 -0
- data/lib/gruff/renderer/dash_line.rb +23 -0
- data/lib/gruff/renderer/dot.rb +40 -0
- data/lib/gruff/renderer/ellipse.rb +22 -0
- data/lib/gruff/renderer/line.rb +43 -0
- data/lib/gruff/renderer/polygon.rb +24 -0
- data/lib/gruff/renderer/polyline.rb +22 -0
- data/lib/gruff/renderer/rectangle.rb +20 -0
- data/lib/gruff/renderer/renderer.rb +120 -0
- data/lib/gruff/renderer/text.rb +57 -0
- data/lib/gruff/scatter.rb +128 -201
- data/lib/gruff/scene.rb +30 -41
- data/lib/gruff/side_bar.rb +100 -68
- data/lib/gruff/side_stacked_bar.rb +92 -63
- data/lib/gruff/spider.rb +47 -53
- data/lib/gruff/stacked_area.rb +37 -34
- data/lib/gruff/stacked_bar.rb +99 -54
- data/lib/gruff/store/basic_data.rb +36 -0
- data/lib/gruff/store/custom_data.rb +36 -0
- data/lib/gruff/store/store.rb +81 -0
- data/lib/gruff/store/xy_data.rb +58 -0
- data/lib/gruff/themes.rb +32 -33
- data/lib/gruff/version.rb +3 -1
- metadata +74 -102
- data/.gitignore +0 -7
- data/.travis.yml +0 -19
- data/Manifest.txt +0 -81
- data/RELEASE.md +0 -30
- data/Rakefile +0 -218
- data/assets/bubble.png +0 -0
- data/assets/city_scene/background/0000.png +0 -0
- data/assets/city_scene/background/0600.png +0 -0
- data/assets/city_scene/background/2000.png +0 -0
- data/assets/city_scene/clouds/cloudy.png +0 -0
- data/assets/city_scene/clouds/partly_cloudy.png +0 -0
- data/assets/city_scene/clouds/stormy.png +0 -0
- data/assets/city_scene/grass/default.png +0 -0
- data/assets/city_scene/haze/true.png +0 -0
- data/assets/city_scene/number_sample/1.png +0 -0
- data/assets/city_scene/number_sample/2.png +0 -0
- data/assets/city_scene/number_sample/default.png +0 -0
- data/assets/city_scene/sky/0000.png +0 -0
- data/assets/city_scene/sky/0200.png +0 -0
- data/assets/city_scene/sky/0400.png +0 -0
- data/assets/city_scene/sky/0600.png +0 -0
- data/assets/city_scene/sky/0800.png +0 -0
- data/assets/city_scene/sky/1000.png +0 -0
- data/assets/city_scene/sky/1200.png +0 -0
- data/assets/city_scene/sky/1400.png +0 -0
- data/assets/city_scene/sky/1500.png +0 -0
- data/assets/city_scene/sky/1700.png +0 -0
- data/assets/city_scene/sky/2000.png +0 -0
- data/assets/pc306715.jpg +0 -0
- data/lib/gruff/bar_conversion.rb +0 -46
- data/lib/gruff/deprecated.rb +0 -39
- data/lib/gruff/stacked_mixin.rb +0 -23
- data/test/gruff_test_case.rb +0 -152
- data/test/image_compare.rb +0 -58
- data/test/test_accumulator_bar.rb +0 -51
- data/test/test_area.rb +0 -134
- data/test/test_bar.rb +0 -505
- data/test/test_base.rb +0 -33
- data/test/test_bezier.rb +0 -33
- data/test/test_bullet.rb +0 -26
- data/test/test_dot.rb +0 -263
- data/test/test_labels_for_null_data.rb +0 -27
- data/test/test_legend.rb +0 -68
- data/test/test_line.rb +0 -674
- data/test/test_mini_bar.rb +0 -33
- data/test/test_mini_pie.rb +0 -25
- data/test/test_mini_side_bar.rb +0 -36
- data/test/test_net.rb +0 -231
- data/test/test_photo.rb +0 -41
- data/test/test_pie.rb +0 -194
- data/test/test_scatter.rb +0 -270
- data/test/test_scene.rb +0 -100
- data/test/test_side_bar.rb +0 -56
- data/test/test_sidestacked_bar.rb +0 -105
- data/test/test_spider.rb +0 -226
- data/test/test_stacked_area.rb +0 -52
- data/test/test_stacked_bar.rb +0 -68
data/test/test_scatter.rb
DELETED
@@ -1,270 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
|
3
|
-
require File.dirname(__FILE__) + '/gruff_test_case'
|
4
|
-
|
5
|
-
class TestGruffScatter < Minitest::Test
|
6
|
-
|
7
|
-
def setup
|
8
|
-
@datasets = [
|
9
|
-
[:Chuck, [20, 10, 5, 12, 11, 6, 10, 7], [5, 10, 19, 6, 9, 1, 14, 8]],
|
10
|
-
[:Brown, [5, 10, 20, 6, 9, 12, 14, 8], [20, 10, 5, 12, 11, 6, 10, 7]],
|
11
|
-
[:Lucy, [19, 9, 6, 11, 12, 7, 15, 8], [6, 11, 18, 8, 12, 8, 10, 6]]
|
12
|
-
]
|
13
|
-
end
|
14
|
-
|
15
|
-
# Done
|
16
|
-
def test_scatter_graph
|
17
|
-
g = setup_basic_graph
|
18
|
-
g.title = 'Basic Scatter Plot Test'
|
19
|
-
g.write('test/output/scatter_basic.png')
|
20
|
-
end
|
21
|
-
|
22
|
-
#~ # Done
|
23
|
-
def test_many_datapoints
|
24
|
-
g = Gruff::Scatter.new
|
25
|
-
g.title = 'Many Datapoint Graph Test'
|
26
|
-
y_values = (0..50).map { rand(100) }
|
27
|
-
x_values = (0..50).map { rand(100) }
|
28
|
-
g.data('many points', x_values, y_values)
|
29
|
-
|
30
|
-
# Default theme
|
31
|
-
g.write('test/output/scatter_many.png')
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_custom_label_format
|
35
|
-
g = Gruff::Scatter.new('1000x500')
|
36
|
-
g.top_margin = 0
|
37
|
-
g.hide_legend = true
|
38
|
-
g.hide_title = true
|
39
|
-
g.marker_font_size = 10
|
40
|
-
g.theme = {
|
41
|
-
:colors => ['#12a702', '#aedaa9'],
|
42
|
-
:marker_color => '#dddddd',
|
43
|
-
:font_color => 'black',
|
44
|
-
:background_colors => 'white'
|
45
|
-
}
|
46
|
-
|
47
|
-
# Points style
|
48
|
-
g.circle_radius = 1
|
49
|
-
g.stroke_width = 0.01
|
50
|
-
|
51
|
-
# Axis labels
|
52
|
-
g.x_label_margin = 40
|
53
|
-
g.bottom_margin = 60
|
54
|
-
g.disable_significant_rounding_x_axis = true
|
55
|
-
g.use_vertical_x_labels = true
|
56
|
-
g.enable_vertical_line_markers = true
|
57
|
-
g.marker_x_count = 50 # One label every 2 days
|
58
|
-
g.x_axis_label_format = lambda do |value|
|
59
|
-
DateTime.strptime(value.to_i.to_s,'%s').strftime('%d.%m.%Y')
|
60
|
-
end
|
61
|
-
g.y_axis_increment = 1
|
62
|
-
|
63
|
-
# Fake data (100 days, random times of day between 5 and 16)
|
64
|
-
r = Random.new(269155)
|
65
|
-
y_values = (0..100).map { 5 + r.rand(12) }
|
66
|
-
x_values = (0..100).map { |i| Date.today.strftime('%s').to_i + i*3600*24 }
|
67
|
-
g.data('many points', x_values, y_values)
|
68
|
-
g.write('test/output/scatter_custom_label_format.png')
|
69
|
-
end
|
70
|
-
|
71
|
-
# Done
|
72
|
-
def test_no_data
|
73
|
-
g = Gruff::Scatter.new(400)
|
74
|
-
g.title = 'No Data'
|
75
|
-
# Default theme
|
76
|
-
g.write('test/output/scatter_no_data.png')
|
77
|
-
|
78
|
-
g = Gruff::Scatter.new(400)
|
79
|
-
g.title = 'No Data Title'
|
80
|
-
g.no_data_message = 'There is no data'
|
81
|
-
g.write('test/output/scatter_no_data_msg.png')
|
82
|
-
end
|
83
|
-
|
84
|
-
# Done
|
85
|
-
def test_all_zeros
|
86
|
-
g = Gruff::Scatter.new(400)
|
87
|
-
g.title = 'All Zeros'
|
88
|
-
|
89
|
-
g.data(:gus, [0, 0, 0, 0], [0, 0, 0, 0])
|
90
|
-
|
91
|
-
# Default theme
|
92
|
-
g.write('test/output/scatter_no_data_other.png')
|
93
|
-
end
|
94
|
-
|
95
|
-
# Done
|
96
|
-
def test_some_nil_points
|
97
|
-
g = Gruff::Scatter.new
|
98
|
-
g.title = 'Some Nil Points'
|
99
|
-
|
100
|
-
@datasets = [
|
101
|
-
[:data1, [1, 2, 3, nil, 3, 5, 6], [5, nil, nil, nil, nil, 5, 7]]
|
102
|
-
]
|
103
|
-
|
104
|
-
@datasets.each do |data|
|
105
|
-
assert_raises ArgumentError do
|
106
|
-
g.data(*data)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
# Done
|
112
|
-
def test_unequal_number_of_x_and_y_values
|
113
|
-
g = Gruff::Scatter.new
|
114
|
-
g.title = 'Unequal number of X and Y values'
|
115
|
-
|
116
|
-
@datasets = [
|
117
|
-
[:data1, [1, 2, 3], [1, 2]],
|
118
|
-
[:data2, [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6]],
|
119
|
-
]
|
120
|
-
|
121
|
-
@datasets.each do |data|
|
122
|
-
assert_raises ArgumentError do
|
123
|
-
g.data(*data)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
# Done
|
129
|
-
def test_empty_set_of_axis_values
|
130
|
-
g = Gruff::Scatter.new
|
131
|
-
g.title = 'Missing Axis Values'
|
132
|
-
|
133
|
-
@datasets = [
|
134
|
-
[:data1, [1, 2, 3, 4, 5]]
|
135
|
-
]
|
136
|
-
|
137
|
-
@datasets.each do |data|
|
138
|
-
assert_raises ArgumentError do
|
139
|
-
g.data(*data)
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
# Done
|
145
|
-
def test_no_title
|
146
|
-
g = Gruff::Scatter.new(400)
|
147
|
-
g.data(:data1, [1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
|
148
|
-
g.write('test/output/scatter_no_title.png')
|
149
|
-
end
|
150
|
-
|
151
|
-
# Done
|
152
|
-
def test_no_line_markers
|
153
|
-
g = setup_basic_graph(400)
|
154
|
-
g.title = 'No Line Markers'
|
155
|
-
g.hide_line_markers = true
|
156
|
-
g.write('test/output/scatter_no_line_markers.png')
|
157
|
-
end
|
158
|
-
|
159
|
-
# Done
|
160
|
-
def test_no_legend
|
161
|
-
g = setup_basic_graph(400)
|
162
|
-
g.title = 'No Legend'
|
163
|
-
g.hide_legend = true
|
164
|
-
g.write('test/output/scatter_no_legend.png')
|
165
|
-
end
|
166
|
-
|
167
|
-
# Done
|
168
|
-
def test_nothing_but_the_graph
|
169
|
-
g = setup_basic_graph(400)
|
170
|
-
g.title = 'THIS TITLE SHOULD NOT DISPLAY!!!'
|
171
|
-
g.hide_line_markers = true
|
172
|
-
g.hide_legend = true
|
173
|
-
g.hide_title = true
|
174
|
-
g.write('test/output/scatter_nothing_but_the_graph.png')
|
175
|
-
end
|
176
|
-
|
177
|
-
# TODO Implement baselines on x and y axis
|
178
|
-
#~ def test_baseline_larger_than_data
|
179
|
-
#~ g = setup_basic_graph(400)
|
180
|
-
#~ g.title = "Baseline Larger Than Data"
|
181
|
-
#~ g.baseline_value = 150
|
182
|
-
#~ g.write("test/output/scatter_large_baseline.png")
|
183
|
-
#~ end
|
184
|
-
|
185
|
-
# Done
|
186
|
-
def test_wide_graph
|
187
|
-
g = setup_basic_graph('800x400')
|
188
|
-
g.title = 'Wide Graph'
|
189
|
-
g.write('test/output/scatter_wide_graph.png')
|
190
|
-
|
191
|
-
g = setup_basic_graph('400x200')
|
192
|
-
g.title = 'Wide Graph Small'
|
193
|
-
g.write('test/output/scatter_wide_graph_small.png')
|
194
|
-
end
|
195
|
-
|
196
|
-
# Done
|
197
|
-
def test_negative
|
198
|
-
g = setup_pos_neg(800)
|
199
|
-
g.write('test/output/scatter_pos_neg.png')
|
200
|
-
|
201
|
-
g = setup_pos_neg(400)
|
202
|
-
g.title = 'Pos/Neg Line Test Small'
|
203
|
-
g.write('test/output/scatter_pos_neg_400.png')
|
204
|
-
end
|
205
|
-
|
206
|
-
# Done
|
207
|
-
def test_all_negative
|
208
|
-
g = setup_all_neg(800)
|
209
|
-
g.write('test/output/scatter_all_neg.png')
|
210
|
-
|
211
|
-
g = setup_all_neg(400)
|
212
|
-
g.title = 'All Neg Line Test Small'
|
213
|
-
g.write('test/output/scatter_all_neg_400.png')
|
214
|
-
end
|
215
|
-
|
216
|
-
# Done
|
217
|
-
def test_no_hide_line_no_labels
|
218
|
-
g = Gruff::Scatter.new
|
219
|
-
g.title = 'No Hide Line No Labels'
|
220
|
-
@datasets.each do |data|
|
221
|
-
g.data(data[0], data[1], data[2])
|
222
|
-
end
|
223
|
-
g.hide_line_markers = false
|
224
|
-
g.write('test/output/scatter_no_hide.png')
|
225
|
-
end
|
226
|
-
|
227
|
-
def test_no_set_labels
|
228
|
-
g = Gruff::Scatter.new
|
229
|
-
g.title = 'Setting Labels Test'
|
230
|
-
g.labels = {
|
231
|
-
0 => 'This',
|
232
|
-
1 => 'should',
|
233
|
-
2 => 'not',
|
234
|
-
3 => 'show',
|
235
|
-
4 => 'up'
|
236
|
-
}
|
237
|
-
@datasets.each do |data|
|
238
|
-
g.data(data[0], data[1], data[2])
|
239
|
-
end
|
240
|
-
g.write('test/output/scatter_no_labels.png')
|
241
|
-
end
|
242
|
-
|
243
|
-
protected
|
244
|
-
|
245
|
-
def setup_basic_graph(size=800)
|
246
|
-
g = Gruff::Scatter.new(size)
|
247
|
-
g.title = 'Rad Graph'
|
248
|
-
@datasets.each do |data|
|
249
|
-
g.data(data[0], data[1], data[2])
|
250
|
-
end
|
251
|
-
g
|
252
|
-
end
|
253
|
-
|
254
|
-
def setup_pos_neg(size=800)
|
255
|
-
g = Gruff::Scatter.new(size)
|
256
|
-
g.title = 'Pos/Neg Scatter Graph Test'
|
257
|
-
g.data(:apples, [-1, 0, 4, -4], [-5, -1, 3, 4])
|
258
|
-
g.data(:peaches, [10, 8, 6, 3], [-1, 1, 3, 3])
|
259
|
-
g
|
260
|
-
end
|
261
|
-
|
262
|
-
def setup_all_neg(size=800)
|
263
|
-
g = Gruff::Scatter.new(size)
|
264
|
-
g.title = 'Neg Scatter Graph Test'
|
265
|
-
g.data(:apples, [-1, -1, -4, -4], [-5, -1, -3, -4])
|
266
|
-
g.data(:peaches, [-10, -8, -6, -3], [-1, -1, -3, -3])
|
267
|
-
g
|
268
|
-
end
|
269
|
-
|
270
|
-
end # end GruffTestCase
|
data/test/test_scene.rb
DELETED
@@ -1,100 +0,0 @@
|
|
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.sort
|
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
|
data/test/test_side_bar.rb
DELETED
@@ -1,56 +0,0 @@
|
|
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
|
-
def test_bar_spacing
|
12
|
-
g = setup_basic_graph(Gruff::SideBar, 800)
|
13
|
-
g.bar_spacing = 0
|
14
|
-
g.title = "100% spacing between bars"
|
15
|
-
g.write("test/output/side_bar_spacing_full.png")
|
16
|
-
|
17
|
-
g = setup_basic_graph(Gruff::SideBar, 800)
|
18
|
-
g.bar_spacing = 0.5
|
19
|
-
g.title = "50% spacing between bars"
|
20
|
-
g.write("test/output/side_bar_spacing_half.png")
|
21
|
-
|
22
|
-
g = setup_basic_graph(Gruff::SideBar, 800)
|
23
|
-
g.bar_spacing = 1
|
24
|
-
g.title = "0% spacing between bars"
|
25
|
-
g.write("test/output/side_bar_spacing_none.png")
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_x_axis_range
|
29
|
-
g = Gruff::SideBar.new('400x300')
|
30
|
-
g.title = 'Should run from 8 to 32'
|
31
|
-
g.hide_line_numbers = false
|
32
|
-
g.theme_37signals
|
33
|
-
g.data("Grapes", [8])
|
34
|
-
g.data("Apples", [24])
|
35
|
-
g.data("Oranges", [32])
|
36
|
-
g.data("Watermelon", [8])
|
37
|
-
g.data("Peaches", [12])
|
38
|
-
g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
|
39
|
-
g.write("test/output/side_bar_data_range.png")
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_bar_labels
|
43
|
-
g = Gruff::SideBar.new('400x300')
|
44
|
-
g.title = 'Should show labels for each bar'
|
45
|
-
g.data("Grapes", [8])
|
46
|
-
g.data("Apples", [24])
|
47
|
-
g.data("Oranges", [32])
|
48
|
-
g.data("Watermelon", [8])
|
49
|
-
g.data("Peaches", [12])
|
50
|
-
g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
|
51
|
-
g.show_labels_for_bar_values = true
|
52
|
-
g.write("test/output/side_bar_labels.png")
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
|
@@ -1,105 +0,0 @@
|
|
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
|
-
def test_bar_labels
|
77
|
-
g = Gruff::SideStackedBar.new
|
78
|
-
g.title = "Stacked Bar Long Label"
|
79
|
-
g.labels = {
|
80
|
-
0 => 'September',
|
81
|
-
1 => 'Oct',
|
82
|
-
2 => 'Nov',
|
83
|
-
3 => 'Dec',
|
84
|
-
}
|
85
|
-
@datasets.each do |data|
|
86
|
-
g.data(data[0], data[1])
|
87
|
-
end
|
88
|
-
g.show_labels_for_bar_values = true
|
89
|
-
g.write "test/output/side_stacked_bar_labels.png"
|
90
|
-
end
|
91
|
-
|
92
|
-
protected
|
93
|
-
|
94
|
-
def setup_basic_graph(size=800)
|
95
|
-
g = Gruff::SideStackedBar.new(size)
|
96
|
-
g.title = "My Graph Title"
|
97
|
-
g.labels = @sample_labels
|
98
|
-
@datasets.each do |data|
|
99
|
-
g.data(data[0], data[1])
|
100
|
-
end
|
101
|
-
return g
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|