gruff 0.5.1-java → 0.10.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/.editorconfig +14 -0
- data/.github/ISSUE_TEMPLATE.md +18 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +109 -0
- data/.rubocop_todo.yml +130 -0
- data/.travis.yml +24 -12
- data/.yardopts +1 -0
- data/{History.txt → CHANGELOG.md} +61 -25
- data/Gemfile +3 -7
- data/README.md +57 -25
- data/Rakefile +6 -201
- data/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/docker/Dockerfile +14 -0
- data/docker/build.sh +4 -0
- data/docker/launch.sh +4 -0
- data/gruff.gemspec +19 -14
- data/init.rb +2 -0
- data/lib/gruff.rb +26 -2
- data/lib/gruff/accumulator_bar.rb +18 -8
- data/lib/gruff/area.rb +33 -19
- data/lib/gruff/bar.rb +76 -45
- data/lib/gruff/base.rb +337 -613
- data/lib/gruff/bezier.rb +34 -19
- data/lib/gruff/bullet.rb +51 -62
- data/lib/gruff/dot.rb +38 -62
- data/lib/gruff/helper/bar_conversion.rb +47 -0
- data/lib/gruff/helper/bar_value_label_mixin.rb +30 -0
- data/lib/gruff/helper/stacked_mixin.rb +23 -0
- data/lib/gruff/histogram.rb +59 -0
- data/lib/gruff/line.rb +130 -150
- data/lib/gruff/mini/bar.rb +17 -10
- data/lib/gruff/mini/legend.rb +24 -36
- data/lib/gruff/mini/pie.rb +18 -12
- data/lib/gruff/mini/side_bar.rb +26 -12
- data/lib/gruff/net.rb +60 -84
- data/lib/gruff/patch/rmagick.rb +33 -0
- data/lib/gruff/patch/string.rb +10 -0
- data/lib/gruff/photo_bar.rb +27 -30
- data/lib/gruff/pie.rb +190 -93
- data/lib/gruff/renderer/bezier.rb +21 -0
- data/lib/gruff/renderer/circle.rb +21 -0
- data/lib/gruff/renderer/dash_line.rb +22 -0
- data/lib/gruff/renderer/dot.rb +39 -0
- data/lib/gruff/renderer/ellipse.rb +21 -0
- data/lib/gruff/renderer/line.rb +34 -0
- data/lib/gruff/renderer/polygon.rb +23 -0
- data/lib/gruff/renderer/polyline.rb +21 -0
- data/lib/gruff/renderer/rectangle.rb +19 -0
- data/lib/gruff/renderer/renderer.rb +127 -0
- data/lib/gruff/renderer/text.rb +42 -0
- data/lib/gruff/scatter.rb +156 -180
- data/lib/gruff/scene.rb +31 -41
- data/lib/gruff/side_bar.rb +77 -63
- data/lib/gruff/side_stacked_bar.rb +77 -60
- data/lib/gruff/spider.rb +37 -50
- data/lib/gruff/stacked_area.rb +32 -30
- data/lib/gruff/stacked_bar.rb +87 -49
- data/lib/gruff/store/base_data.rb +34 -0
- data/lib/gruff/store/custom_data.rb +34 -0
- data/lib/gruff/store/store.rb +80 -0
- data/lib/gruff/store/xy_data.rb +55 -0
- data/lib/gruff/themes.rb +32 -33
- data/lib/gruff/version.rb +3 -1
- metadata +88 -94
- data/Manifest.txt +0 -81
- data/RELEASE.md +0 -30
- 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 -154
- 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 -8
- data/test/test_bezier.rb +0 -33
- data/test/test_bullet.rb +0 -26
- data/test/test_dot.rb +0 -263
- data/test/test_legend.rb +0 -68
- data/test/test_line.rb +0 -657
- 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 -154
- data/test/test_scatter.rb +0 -233
- 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 -52
data/test/test_base.rb
DELETED
data/test/test_bezier.rb
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/gruff_test_case"
|
|
2
|
-
|
|
3
|
-
class TestBezier < GruffTestCase
|
|
4
|
-
|
|
5
|
-
def setup
|
|
6
|
-
@data_args = [75, 100, {
|
|
7
|
-
:target => 80,
|
|
8
|
-
:low => 50,
|
|
9
|
-
:high => 90
|
|
10
|
-
}]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_bezier
|
|
14
|
-
g = Gruff::Bezier.new
|
|
15
|
-
g.title = "Bezier?"
|
|
16
|
-
g.data 'Series 1', [0, 100]
|
|
17
|
-
g.write("test/output/bezier.png")
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def test_bezier_2
|
|
21
|
-
g = Gruff::Bezier.new
|
|
22
|
-
g.data 'Series 2', [0, 127, 150]
|
|
23
|
-
g.write("test/output/bezier_2.png")
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def test_bezier_3
|
|
27
|
-
g = Gruff::Bezier.new
|
|
28
|
-
g.data 'Series 3', [100,300,200,250]
|
|
29
|
-
g.minimum_value = 0
|
|
30
|
-
g.write("test/output/bezier_3.png")
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
end
|
data/test/test_bullet.rb
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/gruff_test_case"
|
|
2
|
-
|
|
3
|
-
class TestGruffBullet < GruffTestCase
|
|
4
|
-
|
|
5
|
-
def setup
|
|
6
|
-
@data_args = [75, 100, {
|
|
7
|
-
:target => 80,
|
|
8
|
-
:low => 50,
|
|
9
|
-
:high => 90
|
|
10
|
-
}]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_bullet_graph
|
|
14
|
-
g = Gruff::Bullet.new
|
|
15
|
-
g.title = "Monthly Revenue"
|
|
16
|
-
g.data *@data_args
|
|
17
|
-
g.write("test/output/bullet_greyscale.png")
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def test_no_options
|
|
21
|
-
g = Gruff::Bullet.new
|
|
22
|
-
g.data *@data_args
|
|
23
|
-
g.write("test/output/bullet_no_options.png")
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
end
|
data/test/test_dot.rb
DELETED
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/ruby
|
|
2
|
-
|
|
3
|
-
require File.dirname(__FILE__) + '/gruff_test_case'
|
|
4
|
-
|
|
5
|
-
class TestGruffDot < GruffTestCase
|
|
6
|
-
|
|
7
|
-
# TODO Delete old output files once when starting tests
|
|
8
|
-
|
|
9
|
-
def setup
|
|
10
|
-
@datasets = [
|
|
11
|
-
[:Jimmy, [25, 36, 86, 39]],
|
|
12
|
-
[:Charles, [80, 54, 67, 54]],
|
|
13
|
-
[:Julie, [22, 29, 35, 38]],
|
|
14
|
-
#[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
|
|
15
|
-
#[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
|
|
16
|
-
#["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
|
|
17
|
-
]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def test_dot_graph
|
|
21
|
-
g = setup_basic_graph
|
|
22
|
-
g.title = 'Dot Graph Test'
|
|
23
|
-
g.write('test/output/dot.png')
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def test_dot_graph_set_colors
|
|
27
|
-
g = Gruff::Dot.new
|
|
28
|
-
g.title = 'Dot Graph With Manual Colors'
|
|
29
|
-
g.labels = {
|
|
30
|
-
0 => '5/6',
|
|
31
|
-
1 => '5/15',
|
|
32
|
-
2 => '5/24',
|
|
33
|
-
3 => '5/30',
|
|
34
|
-
}
|
|
35
|
-
g.data(:Art, [0, 5, 8, 15], '#990000')
|
|
36
|
-
g.data(:Philosophy, [10, 3, 2, 8], '#009900')
|
|
37
|
-
g.data(:Science, [2, 15, 8, 11], '#990099')
|
|
38
|
-
|
|
39
|
-
g.minimum_value = 0
|
|
40
|
-
|
|
41
|
-
g.write('test/output/dot_manual_colors.png')
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def test_dot_graph_small
|
|
45
|
-
g = setup_basic_graph(400)
|
|
46
|
-
g.title = 'Visual Multi-Line Dot Graph Test'
|
|
47
|
-
g.write('test/output/dot_small.png')
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Somewhat worthless test. Should an error be thrown?
|
|
51
|
-
# def test_nil_font
|
|
52
|
-
# g = setup_basic_graph 400
|
|
53
|
-
# g.title = "Nil Font"
|
|
54
|
-
# g.font = nil
|
|
55
|
-
# g.write "test/output/dot_nil_font.png"
|
|
56
|
-
# end
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def test_no_line_markers
|
|
60
|
-
g = setup_basic_graph(400)
|
|
61
|
-
g.title = 'No Line Markers'
|
|
62
|
-
g.hide_line_markers = true
|
|
63
|
-
g.write('test/output/dot_no_line_markers.png')
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def test_no_legend
|
|
67
|
-
g = setup_basic_graph(400)
|
|
68
|
-
g.title = 'No Legend'
|
|
69
|
-
g.hide_legend = true
|
|
70
|
-
g.write('test/output/dot_no_legend.png')
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def test_no_title
|
|
74
|
-
g = setup_basic_graph(400)
|
|
75
|
-
g.title = 'No Title'
|
|
76
|
-
g.hide_title = true
|
|
77
|
-
g.write('test/output/dot_no_title.png')
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def test_no_title_or_legend
|
|
81
|
-
g = setup_basic_graph(400)
|
|
82
|
-
g.title = 'No Title or Legend'
|
|
83
|
-
g.hide_legend = true
|
|
84
|
-
g.hide_title = true
|
|
85
|
-
g.write('test/output/dot_no_title_or_legend.png')
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def test_set_marker_count
|
|
89
|
-
g = setup_basic_graph(400)
|
|
90
|
-
g.title = 'Set marker'
|
|
91
|
-
g.marker_count = 10
|
|
92
|
-
g.write('test/output/dot_set_marker.png')
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def test_set_legend_box_size
|
|
96
|
-
g = setup_basic_graph(400)
|
|
97
|
-
g.title = 'Set Small Legend Box Size'
|
|
98
|
-
g.legend_box_size = 10.0
|
|
99
|
-
g.write('test/output/dot_set_legend_box_size_sm.png')
|
|
100
|
-
|
|
101
|
-
g = setup_basic_graph(400)
|
|
102
|
-
g.title = 'Set Large Legend Box Size'
|
|
103
|
-
g.legend_box_size = 50.0
|
|
104
|
-
g.write('test/output/dot_set_legend_box_size_lg.png')
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def test_x_y_labels
|
|
108
|
-
g = setup_basic_graph(400)
|
|
109
|
-
g.title = 'X Y Labels'
|
|
110
|
-
g.x_axis_label = 'Score (%)'
|
|
111
|
-
g.y_axis_label = 'Students'
|
|
112
|
-
g.write('test/output/dot_x_y_labels.png')
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def test_wide_graph
|
|
116
|
-
g = setup_basic_graph('800x400')
|
|
117
|
-
g.title = 'Wide Graph'
|
|
118
|
-
g.write('test/output/dot_wide_graph.png')
|
|
119
|
-
|
|
120
|
-
g = setup_basic_graph('400x200')
|
|
121
|
-
g.title = 'Wide Graph Small'
|
|
122
|
-
g.write('test/output/dot_wide_graph_small.png')
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
def test_tall_graph
|
|
127
|
-
g = setup_basic_graph('400x600')
|
|
128
|
-
g.title = 'Tall Graph'
|
|
129
|
-
g.write('test/output/dot_tall_graph.png')
|
|
130
|
-
|
|
131
|
-
g = setup_basic_graph('200x400')
|
|
132
|
-
g.title = 'Tall Graph Small'
|
|
133
|
-
g.write('test/output/dot_tall_graph_small.png')
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def test_one_value
|
|
138
|
-
g = Gruff::Dot.new
|
|
139
|
-
g.title = 'One Value Graph Test'
|
|
140
|
-
g.labels = {
|
|
141
|
-
0 => '1',
|
|
142
|
-
1 => '2'
|
|
143
|
-
}
|
|
144
|
-
g.data('one', [1,1])
|
|
145
|
-
|
|
146
|
-
g.write('test/output/dot_one_value.png')
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
def test_negative
|
|
151
|
-
g = Gruff::Dot.new
|
|
152
|
-
g.title = 'Pos/Neg Dot Graph Test'
|
|
153
|
-
g.labels = {
|
|
154
|
-
0 => '5/6',
|
|
155
|
-
1 => '5/15',
|
|
156
|
-
2 => '5/24',
|
|
157
|
-
3 => '5/30',
|
|
158
|
-
}
|
|
159
|
-
g.data(:apples, [-1, 0, 4, -4])
|
|
160
|
-
g.data(:peaches, [10, 8, 6, 3])
|
|
161
|
-
|
|
162
|
-
g.write('test/output/dot_pos_neg.png')
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
def test_nearly_zero
|
|
167
|
-
g = Gruff::Dot.new
|
|
168
|
-
g.title = 'Nearly Zero Graph'
|
|
169
|
-
g.labels = {
|
|
170
|
-
0 => '5/6',
|
|
171
|
-
1 => '5/15',
|
|
172
|
-
2 => '5/24',
|
|
173
|
-
3 => '5/30',
|
|
174
|
-
}
|
|
175
|
-
g.data(:apples, [1, 2, 3, 4])
|
|
176
|
-
g.data(:peaches, [4, 3, 2, 1])
|
|
177
|
-
g.minimum_value = 0
|
|
178
|
-
g.maximum_value = 10
|
|
179
|
-
g.write('test/output/dot_nearly_zero_max_10.png')
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
def test_y_axis_increment
|
|
183
|
-
generate_with_y_axis_increment 2.0
|
|
184
|
-
generate_with_y_axis_increment 1
|
|
185
|
-
generate_with_y_axis_increment 5
|
|
186
|
-
generate_with_y_axis_increment 20
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
def generate_with_y_axis_increment(increment)
|
|
190
|
-
g = Gruff::Dot.new
|
|
191
|
-
g.title = "Y Axis Set to #{increment}"
|
|
192
|
-
g.labels = {
|
|
193
|
-
0 => '5/6',
|
|
194
|
-
1 => '5/15',
|
|
195
|
-
2 => '5/24',
|
|
196
|
-
3 => '5/30',
|
|
197
|
-
}
|
|
198
|
-
g.y_axis_increment = increment
|
|
199
|
-
g.data(:apples, [1, 0.2, 0.5, 0.7])
|
|
200
|
-
g.data(:peaches, [2.5, 2.3, 2, 6.1])
|
|
201
|
-
g.write("test/output/dot_y_increment_#{increment}.png")
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
def test_custom_theme
|
|
206
|
-
g = Gruff::Dot.new
|
|
207
|
-
g.title = 'Custom Theme'
|
|
208
|
-
g.font = File.expand_path('CREABBRG.TTF', ENV['MAGICK_FONT_PATH'])
|
|
209
|
-
g.title_font_size = 60
|
|
210
|
-
g.legend_font_size = 32
|
|
211
|
-
g.marker_font_size = 32
|
|
212
|
-
g.theme = {
|
|
213
|
-
:colors => %w(#efd250 #666699 #e5573f #9595e2),
|
|
214
|
-
:marker_color => 'white',
|
|
215
|
-
:font_color => 'blue',
|
|
216
|
-
:background_image => 'assets/pc306715.jpg'
|
|
217
|
-
}
|
|
218
|
-
g.labels = {
|
|
219
|
-
0 => '5/6',
|
|
220
|
-
1 => '5/15',
|
|
221
|
-
2 => '5/24',
|
|
222
|
-
3 => '5/30',
|
|
223
|
-
}
|
|
224
|
-
g.data(:vancouver, [1, 2, 3, 4])
|
|
225
|
-
g.data(:seattle, [2, 4, 6, 8])
|
|
226
|
-
g.data(:portland, [3, 1, 7, 3])
|
|
227
|
-
g.data(:victoria, [4, 3, 5, 7])
|
|
228
|
-
g.minimum_value = 0
|
|
229
|
-
g.write('test/output/dot_themed.png')
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
def test_july_enhancements
|
|
233
|
-
g = Gruff::Dot.new(600)
|
|
234
|
-
g.hide_legend = true
|
|
235
|
-
g.title = 'Full speed ahead'
|
|
236
|
-
g.labels = (0..10).inject({}) { |memo, i| memo.merge({ i => (i*10).to_s}) }
|
|
237
|
-
g.data(:apples, (0..9).map { rand(20)/10.0 })
|
|
238
|
-
g.y_axis_increment = 1.0
|
|
239
|
-
g.x_axis_label = 'Score (%)'
|
|
240
|
-
g.y_axis_label = 'Students'
|
|
241
|
-
write_test_file g, 'enhancements.png'
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
protected
|
|
246
|
-
|
|
247
|
-
def setup_basic_graph(size=800)
|
|
248
|
-
g = Gruff::Dot.new(size)
|
|
249
|
-
g.title = 'My Dot Graph'
|
|
250
|
-
g.labels = {
|
|
251
|
-
0 => '5/6',
|
|
252
|
-
1 => '5/15',
|
|
253
|
-
2 => '5/24',
|
|
254
|
-
3 => '5/30',
|
|
255
|
-
}
|
|
256
|
-
@datasets.each do |data|
|
|
257
|
-
g.data(data[0], data[1])
|
|
258
|
-
end
|
|
259
|
-
g
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
end
|
|
263
|
-
|
data/test/test_legend.rb
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '/gruff_test_case'
|
|
2
|
-
|
|
3
|
-
class TestGruffLegend < GruffTestCase
|
|
4
|
-
|
|
5
|
-
def setup
|
|
6
|
-
@datasets = [
|
|
7
|
-
[:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]],
|
|
8
|
-
[:Charles, [80, 54, 67, 54, 68, 70, 90, 95]],
|
|
9
|
-
[:Julie, [22, 29, 35, 38, 36, 40, 46, 57]],
|
|
10
|
-
[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
|
|
11
|
-
[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
|
|
12
|
-
[:Arthur, [5, 10, 13, 11, 6, 16, 22, 32]],
|
|
13
|
-
[:Vincent, [5, 10, 13, 11, 6, 16, 22, 32]],
|
|
14
|
-
[:Jake, [5, 10, 13, 11, 6, 16, 22, 32]],
|
|
15
|
-
[:Stephen, [5, 10, 13, 11, 6, 16, 22, 32]],
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
@sample_labels = {
|
|
19
|
-
0 => '5/6',
|
|
20
|
-
1 => '5/15',
|
|
21
|
-
2 => '5/24',
|
|
22
|
-
3 => '5/30',
|
|
23
|
-
4 => '6/4',
|
|
24
|
-
5 => '6/12',
|
|
25
|
-
6 => '6/21',
|
|
26
|
-
7 => '6/28',
|
|
27
|
-
}
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def full_suite_for(name, type)
|
|
31
|
-
[800, 400].each do |width|
|
|
32
|
-
[nil, 4, 16, 30].each do |font_size|
|
|
33
|
-
g = type.new(width)
|
|
34
|
-
g.title = "Wrapped Legend Bar Test #{font_size}pts #{width}px"
|
|
35
|
-
g.labels = @sample_labels
|
|
36
|
-
0xEFD250.step(0xFF0000, 60) do |num|
|
|
37
|
-
g.colors << '#%x' % num
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
@datasets.each do |data|
|
|
41
|
-
g.data(data[0], data[1])
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
g.legend_font_size = font_size unless font_size.nil?
|
|
45
|
-
g.write("test/output/#{name}_wrapped_legend_#{font_size}_#{width}.png")
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def test_bar_legend_wrap
|
|
51
|
-
full_suite_for(:bar, Gruff::Bar)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def test_pie_legend_wrap
|
|
55
|
-
full_suite_for(:pie, Gruff::Pie)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def test_more_than_two_lines_of_legends
|
|
59
|
-
@datasets = @datasets + [[:Julie2, [22, 29, 35, 38, 36, 40, 46, 57]],
|
|
60
|
-
[:Jane2, [95, 95, 95, 90, 85, 80, 88, 100]],
|
|
61
|
-
[:Philip2, [90, 34, 23, 12, 78, 89, 98, 88]],
|
|
62
|
-
[:Arthur2, [5, 10, 13, 11, 6, 16, 22, 32]],
|
|
63
|
-
[:Vincent2, [5, 10, 13, 11, 6, 16, 22, 32]],
|
|
64
|
-
[:Jake2, [5, 10, 13, 11, 6, 16, 22, 32]],
|
|
65
|
-
[:Stephen2, [5, 10, 13, 11, 6, 16, 22, 32]]]
|
|
66
|
-
full_suite_for(:bar2, Gruff::Bar)
|
|
67
|
-
end
|
|
68
|
-
end
|
data/test/test_line.rb
DELETED
|
@@ -1,657 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/ruby
|
|
2
|
-
|
|
3
|
-
require File.dirname(__FILE__) + '/gruff_test_case'
|
|
4
|
-
|
|
5
|
-
class TestGruffLine < GruffTestCase
|
|
6
|
-
def test_should_render_with_transparent_theme
|
|
7
|
-
g = Gruff::Line.new(400)
|
|
8
|
-
g.title = 'Transparent Background'
|
|
9
|
-
g.theme = {
|
|
10
|
-
:colors => %w(black grey),
|
|
11
|
-
:marker_color => 'grey',
|
|
12
|
-
:font_color => 'black',
|
|
13
|
-
:background_colors => 'transparent'
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
g.labels = {
|
|
17
|
-
0 => '5/6',
|
|
18
|
-
1 => '5/15',
|
|
19
|
-
2 => '5/24',
|
|
20
|
-
3 => '5/30',
|
|
21
|
-
}
|
|
22
|
-
g.data(:apples, [-1, 0, 4, -4])
|
|
23
|
-
g.data(:peaches, [10, 8, 6, 3])
|
|
24
|
-
g.write('test/output/line_transparent.png')
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def test_very_small
|
|
28
|
-
g = Gruff::Line.new(200)
|
|
29
|
-
g.title = 'Very Small Line Chart 200px'
|
|
30
|
-
g.labels = @labels
|
|
31
|
-
@datasets.each do |data|
|
|
32
|
-
g.data(data[0], data[1])
|
|
33
|
-
end
|
|
34
|
-
g.write('test/output/line_very_small.png')
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def test_line_graph_with_themes
|
|
38
|
-
line_graph_with_themes()
|
|
39
|
-
line_graph_with_themes(400)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def test_one_value
|
|
43
|
-
g = Gruff::Line.new
|
|
44
|
-
g.title = 'One Value'
|
|
45
|
-
g.labels = {
|
|
46
|
-
0 => '1',
|
|
47
|
-
1 => '2'
|
|
48
|
-
}
|
|
49
|
-
g.data('one', 1)
|
|
50
|
-
|
|
51
|
-
g.write('test/output/line_one_value.png')
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def test_one_value_array
|
|
55
|
-
g = Gruff::Line.new
|
|
56
|
-
g.title = 'One Value in an Array'
|
|
57
|
-
g.labels = {
|
|
58
|
-
0 => '1',
|
|
59
|
-
1 => '2'
|
|
60
|
-
}
|
|
61
|
-
g.data('one', [1])
|
|
62
|
-
|
|
63
|
-
g.write('test/output/line_one_value_array.png')
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
def test_should_not_hang_with_0_0_100
|
|
68
|
-
g = Gruff::Line.new(320)
|
|
69
|
-
g.title = 'Hang Value Graph Test'
|
|
70
|
-
g.data('test', [0, 0, 100])
|
|
71
|
-
|
|
72
|
-
g.write('test/output/line_hang_value.png')
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# TODO
|
|
76
|
-
# def test_fix_crash
|
|
77
|
-
# g = Gruff::Line.new(370)
|
|
78
|
-
# g.title = "Crash Test"
|
|
79
|
-
# g.data "ichi", [5]
|
|
80
|
-
# g.data "ni", [0]
|
|
81
|
-
# g.data "san", [0]
|
|
82
|
-
# g.data "shi", [0]
|
|
83
|
-
# g.write("test/output/line_crash_fix_test.png")
|
|
84
|
-
# end
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
def test_line_small_values
|
|
88
|
-
@datasets = [
|
|
89
|
-
[:small, [0.1, 0.14356, 0.0, 0.5674839, 0.456]],
|
|
90
|
-
[:small2, [0.2, 0.3, 0.1, 0.05, 0.9]]
|
|
91
|
-
]
|
|
92
|
-
|
|
93
|
-
g = Gruff::Line.new
|
|
94
|
-
g.title = 'Small Values Line Graph Test'
|
|
95
|
-
@datasets.each do |data|
|
|
96
|
-
g.data(data[0], data[1])
|
|
97
|
-
end
|
|
98
|
-
g.write('test/output/line_small_values.png')
|
|
99
|
-
|
|
100
|
-
g = Gruff::Line.new(400)
|
|
101
|
-
g.title = 'Small Values Line Graph Test 400px'
|
|
102
|
-
@datasets.each do |data|
|
|
103
|
-
g.data(data[0], data[1])
|
|
104
|
-
end
|
|
105
|
-
g.write('test/output/line_small_values_small.png')
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def test_line_starts_with_zero
|
|
109
|
-
@datasets = [
|
|
110
|
-
[:first0, [0, 5, 10, 8, 18]],
|
|
111
|
-
[:normal, [1, 2, 3, 4, 5]]
|
|
112
|
-
]
|
|
113
|
-
|
|
114
|
-
g = Gruff::Line.new
|
|
115
|
-
g.title = 'Small Values Line Graph Test'
|
|
116
|
-
@datasets.each do |data|
|
|
117
|
-
g.data(data[0], data[1])
|
|
118
|
-
end
|
|
119
|
-
g.write('test/output/line_small_zero.png')
|
|
120
|
-
|
|
121
|
-
g = Gruff::Line.new(400)
|
|
122
|
-
g.title = 'Small Values Line Graph Test 400px'
|
|
123
|
-
@datasets.each do |data|
|
|
124
|
-
g.data(data[0], data[1])
|
|
125
|
-
end
|
|
126
|
-
g.write('test/output/line_small_small_zero.png')
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
def test_line_large_values
|
|
131
|
-
@datasets = [
|
|
132
|
-
[:large, [100_005, 35_000, 28_000, 27_000]],
|
|
133
|
-
[:large2, [35_000, 28_000, 27_000, 100_005]],
|
|
134
|
-
[:large3, [28_000, 27_000, 100_005, 35_000]],
|
|
135
|
-
[:large4, [1_238, 39_092, 27_938, 48_876]]
|
|
136
|
-
]
|
|
137
|
-
|
|
138
|
-
g = Gruff::Line.new
|
|
139
|
-
g.title = 'Very Large Values Line Graph Test'
|
|
140
|
-
g.baseline_value = 50_000
|
|
141
|
-
g.baseline_color = 'green'
|
|
142
|
-
g.dot_radius = 15
|
|
143
|
-
g.line_width = 3
|
|
144
|
-
@datasets.each do |data|
|
|
145
|
-
g.data(data[0], data[1])
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
g.write('test/output/line_large.png')
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
# def test_long_title
|
|
152
|
-
#
|
|
153
|
-
# end
|
|
154
|
-
#
|
|
155
|
-
# def test_add_colors
|
|
156
|
-
#
|
|
157
|
-
# end
|
|
158
|
-
#
|
|
159
|
-
|
|
160
|
-
def test_request_too_many_colors
|
|
161
|
-
g = Gruff::Line.new
|
|
162
|
-
g.title = 'More Sets Than in Color Array'
|
|
163
|
-
# g.theme = {} # Sets theme with only black and white
|
|
164
|
-
@datasets.each do |data|
|
|
165
|
-
g.data(data[0], data[1])
|
|
166
|
-
end
|
|
167
|
-
@datasets.each do |data|
|
|
168
|
-
g.data("#{data[0]}-B", data[1].map { |d| d + 20 })
|
|
169
|
-
end
|
|
170
|
-
g.write('test/output/line_more_sets_than_colors.png')
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
#
|
|
174
|
-
# def test_add_data
|
|
175
|
-
#
|
|
176
|
-
# end
|
|
177
|
-
|
|
178
|
-
def test_many_datapoints
|
|
179
|
-
g = Gruff::Line.new
|
|
180
|
-
g.title = 'Many Multi-Line Graph Test'
|
|
181
|
-
g.labels = {
|
|
182
|
-
0 => 'June',
|
|
183
|
-
10 => 'July',
|
|
184
|
-
30 => 'August',
|
|
185
|
-
50 => 'September',
|
|
186
|
-
}
|
|
187
|
-
g.data('many points', (0..50).collect { |i| rand(100) })
|
|
188
|
-
g.x_axis_label = 'Months'
|
|
189
|
-
|
|
190
|
-
# Default theme
|
|
191
|
-
g.write('test/output/line_many.png')
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
def test_similar_high_end_values
|
|
196
|
-
@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 }
|
|
197
|
-
|
|
198
|
-
g = Gruff::Line.new
|
|
199
|
-
g.title = 'Similar High End Values Test'
|
|
200
|
-
g.data('similar points', @dataset)
|
|
201
|
-
g.write('test/output/line_similar_high_end_values.png')
|
|
202
|
-
|
|
203
|
-
g = Gruff::Line.new
|
|
204
|
-
g.title = 'Similar High End Values With Floor'
|
|
205
|
-
g.data('similar points', @dataset)
|
|
206
|
-
g.minimum_value = 0
|
|
207
|
-
g.y_axis_label = 'Barometric Pressure'
|
|
208
|
-
g.write('test/output/line_similar_high_end_values_with_floor.png')
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
def test_many_lines_graph_small
|
|
212
|
-
g = Gruff::Line.new(400)
|
|
213
|
-
g.title = 'Many Values Line Test 400px'
|
|
214
|
-
g.labels = {
|
|
215
|
-
0 => '5/6',
|
|
216
|
-
10 => '5/15',
|
|
217
|
-
20 => '5/24',
|
|
218
|
-
30 => '5/30',
|
|
219
|
-
40 => '6/4',
|
|
220
|
-
50 => '6/16'
|
|
221
|
-
}
|
|
222
|
-
%w{jimmy jane philip arthur julie bert}.each do |student_name|
|
|
223
|
-
g.data(student_name, (0..50).collect { |i| rand 100 })
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
# Default theme
|
|
227
|
-
g.write('test/output/line_many_lines_small.png')
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
def test_graph_tiny
|
|
231
|
-
g = Gruff::Line.new(300)
|
|
232
|
-
g.title = 'Tiny Test 300px'
|
|
233
|
-
g.labels = {
|
|
234
|
-
0 => '5/6',
|
|
235
|
-
10 => '5/15',
|
|
236
|
-
20 => '5/24',
|
|
237
|
-
30 => '5/30',
|
|
238
|
-
40 => '6/4',
|
|
239
|
-
50 => '6/16'
|
|
240
|
-
}
|
|
241
|
-
%w{jimmy jane philip arthur julie bert}.each do |student_name|
|
|
242
|
-
g.data(student_name, (0..50).collect { |i| rand 100 })
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
# Default theme
|
|
246
|
-
g.write('test/output/line_tiny.png')
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
def test_no_data
|
|
250
|
-
g = Gruff::Line.new(400)
|
|
251
|
-
g.title = 'No Data'
|
|
252
|
-
# Default theme
|
|
253
|
-
g.write('test/output/line_no_data.png')
|
|
254
|
-
|
|
255
|
-
g = Gruff::Line.new(400)
|
|
256
|
-
g.title = 'No Data Title'
|
|
257
|
-
g.no_data_message = 'There is no data'
|
|
258
|
-
g.write('test/output/line_no_data_msg.png')
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
def test_all_zeros
|
|
263
|
-
g = Gruff::Line.new(400)
|
|
264
|
-
g.title = 'All Zeros'
|
|
265
|
-
|
|
266
|
-
g.data(:gus, [0, 0, 0, 0])
|
|
267
|
-
|
|
268
|
-
# Default theme
|
|
269
|
-
g.write('test/output/line_no_data_other.png')
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
def test_some_nil_points
|
|
274
|
-
g = Gruff::Line.new
|
|
275
|
-
g.title = 'Some Nil Points'
|
|
276
|
-
|
|
277
|
-
@datasets = [
|
|
278
|
-
[:data1, [1, 2, 3, nil, 3, 5, 6]],
|
|
279
|
-
[:data2, [5, nil, nil, 5, nil, nil, 5]],
|
|
280
|
-
[:data3, [4, nil, 2, 1, 0]],
|
|
281
|
-
[:data4, [nil, nil, 3, 1, 2]]
|
|
282
|
-
]
|
|
283
|
-
|
|
284
|
-
@datasets.each do |data|
|
|
285
|
-
g.data(*data)
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
# Default theme
|
|
289
|
-
g.write('test/output/line_some_nil_points.png')
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
def test_no_title
|
|
293
|
-
g = Gruff::Line.new(400)
|
|
294
|
-
g.labels = @labels
|
|
295
|
-
@datasets.each do |data|
|
|
296
|
-
g.data(data[0], data[1])
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
g.write('test/output/line_no_title.png')
|
|
300
|
-
end
|
|
301
|
-
|
|
302
|
-
def test_no_line_markers
|
|
303
|
-
g = setup_basic_graph(400)
|
|
304
|
-
g.title = 'No Line Markers'
|
|
305
|
-
g.hide_line_markers = true
|
|
306
|
-
g.write('test/output/line_no_line_markers.png')
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
def test_no_legend
|
|
310
|
-
g = setup_basic_graph(400)
|
|
311
|
-
g.title = 'No Legend'
|
|
312
|
-
g.hide_legend = true
|
|
313
|
-
g.write('test/output/line_no_legend.png')
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
def test_nothing_but_the_graph
|
|
317
|
-
g = setup_basic_graph(400)
|
|
318
|
-
g.title = 'THIS TITLE SHOULD NOT DISPLAY!!!'
|
|
319
|
-
g.hide_line_markers = true
|
|
320
|
-
g.hide_legend = true
|
|
321
|
-
g.hide_title = true
|
|
322
|
-
g.write('test/output/line_nothing_but_the_graph.png')
|
|
323
|
-
end
|
|
324
|
-
|
|
325
|
-
def test_legend_below_the_chart
|
|
326
|
-
g = setup_basic_graph(400)
|
|
327
|
-
g.title = 'Legend below the chart'
|
|
328
|
-
g.legend_at_bottom = true
|
|
329
|
-
g.write('test/output/line_legend_at_bottom.png')
|
|
330
|
-
end
|
|
331
|
-
|
|
332
|
-
def test_baseline_larger_than_data
|
|
333
|
-
g = setup_basic_graph(400)
|
|
334
|
-
g.title = 'Baseline Larger Than Data'
|
|
335
|
-
g.baseline_value = 150
|
|
336
|
-
g.write('test/output/line_large_baseline.png')
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
def test_hide_dots
|
|
340
|
-
g = setup_basic_graph(400)
|
|
341
|
-
g.title = 'Hide Dots'
|
|
342
|
-
g.hide_dots = true
|
|
343
|
-
g.write('test/output/line_hide_dots.png')
|
|
344
|
-
end
|
|
345
|
-
|
|
346
|
-
def test_hide_lines
|
|
347
|
-
g = setup_basic_graph(400)
|
|
348
|
-
g.title = 'Hide Lines'
|
|
349
|
-
g.hide_lines = true
|
|
350
|
-
g.write('test/output/line_hide_lines.png')
|
|
351
|
-
end
|
|
352
|
-
|
|
353
|
-
def test_wide_graph
|
|
354
|
-
g = setup_basic_graph('800x400')
|
|
355
|
-
g.title = 'Wide Graph'
|
|
356
|
-
g.write('test/output/line_wide_graph.png')
|
|
357
|
-
|
|
358
|
-
g = setup_basic_graph('400x200')
|
|
359
|
-
g.title = 'Wide Graph Small'
|
|
360
|
-
g.write('test/output/line_wide_graph_small.png')
|
|
361
|
-
end
|
|
362
|
-
|
|
363
|
-
def test_negative
|
|
364
|
-
g = setup_pos_neg(800)
|
|
365
|
-
g.write('test/output/line_pos_neg.png')
|
|
366
|
-
|
|
367
|
-
g = setup_pos_neg(400)
|
|
368
|
-
g.title = 'Pos/Neg Line Test Small'
|
|
369
|
-
g.write('test/output/line_pos_neg_400.png')
|
|
370
|
-
end
|
|
371
|
-
|
|
372
|
-
def test_all_negative
|
|
373
|
-
g = setup_all_neg(800)
|
|
374
|
-
g.maximum_value = 0
|
|
375
|
-
g.write('test/output/line_all_neg.png')
|
|
376
|
-
end
|
|
377
|
-
|
|
378
|
-
def test_all_negative_no_max_value
|
|
379
|
-
g = setup_all_neg(800)
|
|
380
|
-
g.write('test/output/line_all_neg_no_max.png')
|
|
381
|
-
end
|
|
382
|
-
|
|
383
|
-
def test_all_negative_400
|
|
384
|
-
g = setup_all_neg(400)
|
|
385
|
-
g.maximum_value = 0
|
|
386
|
-
g.title = 'All Neg Line Test Small'
|
|
387
|
-
g.write('test/output/line_all_neg_400.png')
|
|
388
|
-
end
|
|
389
|
-
|
|
390
|
-
def test_many_numbers
|
|
391
|
-
g = Gruff::Line.new('400x170')
|
|
392
|
-
g.title = 'Line Test, Many Numbers'
|
|
393
|
-
|
|
394
|
-
data = [
|
|
395
|
-
{:date => '01',
|
|
396
|
-
:wpm => 0,
|
|
397
|
-
:errors => 0,
|
|
398
|
-
:accuracy => 0},
|
|
399
|
-
{:date => '02',
|
|
400
|
-
:wpm => 10,
|
|
401
|
-
:errors => 2,
|
|
402
|
-
:accuracy => 80},
|
|
403
|
-
{:date => '03',
|
|
404
|
-
:wpm => 15,
|
|
405
|
-
:errors => 0,
|
|
406
|
-
:accuracy => 100},
|
|
407
|
-
{:date => '04',
|
|
408
|
-
:wpm => 16,
|
|
409
|
-
:errors => 2,
|
|
410
|
-
:accuracy => 87},
|
|
411
|
-
{:date => '05'},
|
|
412
|
-
{:date => '06',
|
|
413
|
-
:wpm => 18,
|
|
414
|
-
:errors => 1,
|
|
415
|
-
:accuracy => 94},
|
|
416
|
-
{:date => '07'},
|
|
417
|
-
{:date => '08'},
|
|
418
|
-
{:date => '09',
|
|
419
|
-
:wpm => 21,
|
|
420
|
-
:errors => 1,
|
|
421
|
-
:accuracy => 95},
|
|
422
|
-
{:date => '10'},
|
|
423
|
-
{:date => '11'},
|
|
424
|
-
{:date => '12'},
|
|
425
|
-
{:date => '13'},
|
|
426
|
-
{:date => '14'},
|
|
427
|
-
{:date => '15'},
|
|
428
|
-
{:date => '16'},
|
|
429
|
-
{:date => '17'},
|
|
430
|
-
{:date => '18'},
|
|
431
|
-
{:date => '19',
|
|
432
|
-
:wpm => 28,
|
|
433
|
-
:errors => 5,
|
|
434
|
-
:accuracy => 82},
|
|
435
|
-
{:date => '20'},
|
|
436
|
-
{:date => '21'},
|
|
437
|
-
{:date => '22'},
|
|
438
|
-
{:date => '23'},
|
|
439
|
-
{:date => '24'},
|
|
440
|
-
{:date => '25'},
|
|
441
|
-
{:date => '26'},
|
|
442
|
-
{:date => '27',
|
|
443
|
-
:wpm => 37,
|
|
444
|
-
:errors => 3,
|
|
445
|
-
:accuracy => 92},
|
|
446
|
-
]
|
|
447
|
-
|
|
448
|
-
[:wpm, :errors, :accuracy].each do |field|
|
|
449
|
-
g.dataxy(field, data.each_with_index.map { |d, i| [i + 1, d[field]] if d[field] }.compact)
|
|
450
|
-
end
|
|
451
|
-
|
|
452
|
-
labels = Hash.new
|
|
453
|
-
data.each_with_index do |d, i|
|
|
454
|
-
labels[i + 1] = d[:date] if d.size > 1
|
|
455
|
-
end
|
|
456
|
-
g.labels = labels
|
|
457
|
-
|
|
458
|
-
g.write('test/output/line_many_numbers.png')
|
|
459
|
-
end
|
|
460
|
-
|
|
461
|
-
def test_no_hide_line_no_labels
|
|
462
|
-
g = Gruff::Line.new
|
|
463
|
-
g.title = 'No Hide Line No Labels'
|
|
464
|
-
@datasets.each do |data|
|
|
465
|
-
g.data(data[0], data[1])
|
|
466
|
-
end
|
|
467
|
-
g.hide_line_markers = false
|
|
468
|
-
g.write('test/output/line_no_hide.png')
|
|
469
|
-
end
|
|
470
|
-
|
|
471
|
-
def test_xy_data
|
|
472
|
-
g = Gruff::Line.new
|
|
473
|
-
g.title = 'X/Y Dataset'
|
|
474
|
-
g.dataxy('Apples', [1, 3, 4, 5, 6, 10], [1, 2, 3, 4, 4, 3])
|
|
475
|
-
g.dataxy('Bapples', [1, 3, 4, 5, 7, 9], [1, 1, 2, 2, 3, 3])
|
|
476
|
-
g.data('Capples', [1, 1, 2, 2, 3, 3])
|
|
477
|
-
g.labels = {0 => '2003', 2 => '2004', 4 => '2005', 6 => '2006', 8 => '2007', 10 => '2008'}
|
|
478
|
-
g.write('test/output/line_xy.png')
|
|
479
|
-
end
|
|
480
|
-
|
|
481
|
-
def test_xy_data_pairs
|
|
482
|
-
g = Gruff::Line.new
|
|
483
|
-
g.title = 'X/Y Dataset Pairs'
|
|
484
|
-
g.dataxy('Apples', [[1, 1], [3, 2], [4, 3], [5, 4], [6, 4], [10, 3]])
|
|
485
|
-
g.dataxy('Bapples', [[1, 1], [3, 1], [4, 2], [5, 2], [7, 3], [9, 3]])
|
|
486
|
-
g.data('Capples', [1, 1, 2, 2, 3, 3])
|
|
487
|
-
g.dataxy('Dapples', [[1, 1], [2, 2], [5, 6], [13, 13], [15, nil], [2, 17], [3, nil], [3, 17], [13, nil], [3, 18], [5, nil], [2, 18]])
|
|
488
|
-
g.dataxy('Eapples', [[1, 1], [2, 3], [5, 8], [13, 21], [13, 8], [5, 3], [2, 1], [1, 1]])
|
|
489
|
-
g.labels = {0 => '2003', 2 => '2004', 4 => '2005', 6 => '2006', 8 => '2007', 10 => '2008', 12 => '2009'}
|
|
490
|
-
g.write('test/output/line_xy_pairs.png')
|
|
491
|
-
end
|
|
492
|
-
|
|
493
|
-
def test_jruby_error
|
|
494
|
-
g = Gruff::Line.new
|
|
495
|
-
g.theme = {
|
|
496
|
-
:colors => %w(#7F0099 #2F85ED #2FED09 #EC962F),
|
|
497
|
-
:marker_color => '#aaa',
|
|
498
|
-
:background_colors => %w(#E8E8E8 #B9FD6C)
|
|
499
|
-
}
|
|
500
|
-
g.hide_title = true
|
|
501
|
-
|
|
502
|
-
g.legend_font_size = 12
|
|
503
|
-
g.marker_font_size = 16
|
|
504
|
-
g.hide_dots = false
|
|
505
|
-
|
|
506
|
-
g.write('test/output/line_jruby_error.png')
|
|
507
|
-
end
|
|
508
|
-
|
|
509
|
-
def test_marker_label_accuracy
|
|
510
|
-
g = Gruff::Line.new
|
|
511
|
-
g.title = 'Marker label accuracy'
|
|
512
|
-
g.labels = {
|
|
513
|
-
0 => '1',
|
|
514
|
-
1 => '2',
|
|
515
|
-
2 => '3',
|
|
516
|
-
3 => '4',
|
|
517
|
-
4 => '5'
|
|
518
|
-
}
|
|
519
|
-
g.data('first', [0.5, 0.51, 0.52, 0.53, 0.54])
|
|
520
|
-
g.data('second', [0.6, 0.61, 0.62, 0.63, 0.64])
|
|
521
|
-
g.data('third', [0.7, 0.71, 0.72, 0.73, 0.74])
|
|
522
|
-
|
|
523
|
-
g.write('test/output/line_marker_label_accuracy.png')
|
|
524
|
-
end
|
|
525
|
-
|
|
526
|
-
def test_y_axis_increment
|
|
527
|
-
g = Gruff::Line.new
|
|
528
|
-
g.title = 'y axis increment'
|
|
529
|
-
|
|
530
|
-
g.data('data', [1, 2, 3])
|
|
531
|
-
|
|
532
|
-
g.y_axis_increment = 1
|
|
533
|
-
|
|
534
|
-
g.write('test/output/line_y_axis_increment.png')
|
|
535
|
-
end
|
|
536
|
-
|
|
537
|
-
def test_multiple_reference_lines
|
|
538
|
-
|
|
539
|
-
g = Gruff::Line.new
|
|
540
|
-
g.title = 'Line Chart with Multiple Reference Lines'
|
|
541
|
-
|
|
542
|
-
g.data('Apples', [3, 2, 3, 4, 4, 3])
|
|
543
|
-
g.data('Oranges', [4, 8, 7, 9, 8, 9])
|
|
544
|
-
g.data('Watermelon', [2, 3, 4, 5, 6, 8])
|
|
545
|
-
g.data('Peaches', [9, 9, 10, 8, 7, 9])
|
|
546
|
-
|
|
547
|
-
g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
|
|
548
|
-
|
|
549
|
-
g.reference_line_default_width = 1
|
|
550
|
-
|
|
551
|
-
g.reference_lines[:baseline] = { :value => 5 }
|
|
552
|
-
g.reference_lines[:lots] = { :value => 9 }
|
|
553
|
-
g.reference_lines[:little] = { :value => 3 }
|
|
554
|
-
g.reference_lines[:horiz_one] = { :index => 1, :color => 'green' }
|
|
555
|
-
g.reference_lines[:horiz_two] = { :index => 3, :color => 'green' }
|
|
556
|
-
|
|
557
|
-
g.write('line_reference_lines.png')
|
|
558
|
-
end
|
|
559
|
-
|
|
560
|
-
def test_baseline
|
|
561
|
-
g = Gruff::Line.new
|
|
562
|
-
g.title = 'Line Chart with Baseline = 5'
|
|
563
|
-
|
|
564
|
-
g.data('Apples', [3, 2, 3, 4, 4, 3])
|
|
565
|
-
g.data('Oranges', [4, 8, 7, 9, 8, 9])
|
|
566
|
-
g.data('Watermelon', [2, 3, 4, 5, 6, 8])
|
|
567
|
-
g.data('Peaches', [9, 9, 10, 8, 7, 9])
|
|
568
|
-
|
|
569
|
-
g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
|
|
570
|
-
g.baseline_value = 5
|
|
571
|
-
|
|
572
|
-
g.write('line_baseline.png')
|
|
573
|
-
end
|
|
574
|
-
|
|
575
|
-
def test_webp
|
|
576
|
-
g = setup_basic_graph('800x400')
|
|
577
|
-
g.title = 'Line Chart WEBP'
|
|
578
|
-
g.write('line_webp.webp')
|
|
579
|
-
rescue Magick::ImageMagickError
|
|
580
|
-
assert_match /no encode delegate for this image format .*\.webp/, $!.message
|
|
581
|
-
end
|
|
582
|
-
|
|
583
|
-
private
|
|
584
|
-
|
|
585
|
-
# TODO Reset data after each theme
|
|
586
|
-
def line_graph_with_themes(size=nil)
|
|
587
|
-
g = Gruff::Line.new(size)
|
|
588
|
-
g.title = "Multi-Line Graph Test #{size}"
|
|
589
|
-
g.labels = @labels
|
|
590
|
-
g.baseline_value = 90
|
|
591
|
-
@datasets.each do |data|
|
|
592
|
-
g.data(data[0], data[1])
|
|
593
|
-
end
|
|
594
|
-
# Default theme
|
|
595
|
-
g.write("test/output/line_theme_keynote_#{size}.png")
|
|
596
|
-
|
|
597
|
-
g = Gruff::Line.new(size)
|
|
598
|
-
g.title = "Multi-Line Graph Test #{size}"
|
|
599
|
-
g.labels = @labels
|
|
600
|
-
g.baseline_value = 90
|
|
601
|
-
g.theme = Gruff::Themes::THIRTYSEVEN_SIGNALS
|
|
602
|
-
@datasets.each do |data|
|
|
603
|
-
g.data(data[0], data[1])
|
|
604
|
-
end
|
|
605
|
-
g.write("test/output/line_theme_37signals_#{size}.png")
|
|
606
|
-
|
|
607
|
-
g = Gruff::Line.new(size)
|
|
608
|
-
g.title = "Multi-Line Graph Test #{size}"
|
|
609
|
-
g.labels = @labels
|
|
610
|
-
g.baseline_value = 90
|
|
611
|
-
g.theme = Gruff::Themes::RAILS_KEYNOTE
|
|
612
|
-
@datasets.each do |data|
|
|
613
|
-
g.data(data[0], data[1])
|
|
614
|
-
end
|
|
615
|
-
g.write("test/output/line_theme_rails_keynote_#{size}.png")
|
|
616
|
-
|
|
617
|
-
g = Gruff::Line.new(size)
|
|
618
|
-
g.title = "Multi-Line Graph Test #{size}"
|
|
619
|
-
g.labels = @labels
|
|
620
|
-
g.baseline_value = 90
|
|
621
|
-
g.theme = Gruff::Themes::ODEO
|
|
622
|
-
@datasets.each do |data|
|
|
623
|
-
g.data(data[0], data[1])
|
|
624
|
-
end
|
|
625
|
-
g.write("test/output/line_theme_odeo_#{size}.png")
|
|
626
|
-
end
|
|
627
|
-
|
|
628
|
-
def setup_pos_neg(size=800)
|
|
629
|
-
g = Gruff::Line.new(size)
|
|
630
|
-
g.title = 'Pos/Neg Line Graph Test'
|
|
631
|
-
g.labels = {
|
|
632
|
-
0 => '5/6',
|
|
633
|
-
1 => '5/15',
|
|
634
|
-
2 => '5/24',
|
|
635
|
-
3 => '5/30',
|
|
636
|
-
}
|
|
637
|
-
g.data(:apples, [-1, 0, 4, -4])
|
|
638
|
-
g.data(:peaches, [10, 8, 6, 3])
|
|
639
|
-
g
|
|
640
|
-
end
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
def setup_all_neg(size=800)
|
|
644
|
-
g = Gruff::Line.new(size)
|
|
645
|
-
g.title = 'All Neg Line Graph Test'
|
|
646
|
-
g.labels = {
|
|
647
|
-
0 => '5/6',
|
|
648
|
-
1 => '5/15',
|
|
649
|
-
2 => '5/24',
|
|
650
|
-
3 => '5/30',
|
|
651
|
-
}
|
|
652
|
-
g.data(:apples, [-1, -5, -20, -4])
|
|
653
|
-
g.data(:peaches, [-10, -8, -6, -3])
|
|
654
|
-
g
|
|
655
|
-
end
|
|
656
|
-
|
|
657
|
-
end
|