gruff 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +9 -1
- data/Rakefile +11 -1
- data/lib/gruff.rb +4 -0
- data/lib/gruff/bar.rb +0 -1
- data/lib/gruff/base.rb +162 -12
- data/lib/gruff/line.rb +3 -4
- data/lib/gruff/net.rb +133 -0
- data/lib/gruff/pie.rb +8 -46
- data/lib/gruff/scene.rb +196 -0
- data/lib/gruff/spider.rb +130 -0
- data/test/area_test.rb +2 -6
- data/test/bar_test.rb +61 -41
- data/test/base_test.rb +8 -0
- data/test/gruff_test_case.rb +13 -0
- data/test/legend_test.rb +71 -0
- data/test/line_test.rb +13 -54
- data/test/net_test.rb +230 -0
- data/test/photo_test.rb +2 -5
- data/test/pie_test.rb +2 -6
- data/test/scene_test.rb +94 -0
- data/test/sidestacked_bar_test.rb +2 -6
- data/test/spider_test.rb +216 -0
- data/test/stacked_bar_test.rb +2 -6
- metadata +54 -37
data/test/base_test.rb
ADDED
data/test/legend_test.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
4
|
+
|
5
|
+
class TestGruffLegend < 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
|
+
["Vincent", [5, 10, 13, 11, 6, 16, 22, 32]],
|
16
|
+
["Jake", [5, 10, 13, 11, 6, 16, 22, 32]],
|
17
|
+
["Stephen", [5, 10, 13, 11, 6, 16, 22, 32]],
|
18
|
+
]
|
19
|
+
|
20
|
+
@sample_labels = {
|
21
|
+
0 => '5/6',
|
22
|
+
1 => '5/15',
|
23
|
+
2 => '5/24',
|
24
|
+
3 => '5/30',
|
25
|
+
4 => '6/4',
|
26
|
+
5 => '6/12',
|
27
|
+
6 => '6/21',
|
28
|
+
7 => '6/28',
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_bar_legend_wrap
|
33
|
+
[800, 400].each do |width|
|
34
|
+
[nil, 4, 16, 30].each do |font_size|
|
35
|
+
g = Gruff::Bar.new(width)
|
36
|
+
g.title = "Wrapped Legend Bar Test #{font_size}pts #{width}px"
|
37
|
+
g.labels = @sample_labels
|
38
|
+
0xEFD250.step(0xFF0000, 60) do |num|
|
39
|
+
g.colors << "#%x" % num
|
40
|
+
end
|
41
|
+
|
42
|
+
@datasets.each do |data|
|
43
|
+
g.data(data[0], data[1])
|
44
|
+
end
|
45
|
+
|
46
|
+
g.legend_font_size = font_size unless font_size.nil?
|
47
|
+
g.write("test/output/bar_wrapped_legend_#{font_size}_#{width}.png")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_pie_legend_wrap
|
53
|
+
[800, 400].each do |width|
|
54
|
+
[nil, 4, 16, 30].each do |font_size|
|
55
|
+
g = Gruff::Pie.new(width)
|
56
|
+
g.title = "Wrapped Legend Pie Test #{font_size}pts #{width}px"
|
57
|
+
g.labels = @sample_labels
|
58
|
+
0xEFD250.step(0xFF0000, 60) do |num|
|
59
|
+
g.colors << "#%x" % num
|
60
|
+
end
|
61
|
+
|
62
|
+
@datasets.each do |data|
|
63
|
+
g.data(data[0], data[1])
|
64
|
+
end
|
65
|
+
|
66
|
+
g.legend_font_size = font_size unless font_size.nil?
|
67
|
+
g.write("test/output/pie_wrapped_legend_#{font_size}_#{width}.png")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/test/line_test.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
|
3
|
-
|
4
|
-
#$:.unshift File.dirname(__FILE__) + "/fixtures/helpers"
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
5
4
|
|
6
|
-
|
7
|
-
require 'gruff'
|
8
|
-
|
9
|
-
class TestGruffLine < Test::Unit::TestCase
|
5
|
+
class TestGruffLine < GruffTestCase
|
10
6
|
|
11
7
|
# TODO Delete old output files once when starting tests
|
12
8
|
|
@@ -135,48 +131,13 @@ class TestGruffLine < Test::Unit::TestCase
|
|
135
131
|
g = Gruff::Line.new
|
136
132
|
g.title = "Similar High End Values Test"
|
137
133
|
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} )
|
138
|
-
|
139
|
-
|
140
|
-
g.
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
g
|
145
|
-
g.title = "Dots Test 800px"
|
146
|
-
g.labels = {
|
147
|
-
0 => '5/6',
|
148
|
-
10 => '5/15',
|
149
|
-
20 => '5/24',
|
150
|
-
30 => '5/30',
|
151
|
-
40 => '6/4',
|
152
|
-
50 => '6/16'
|
153
|
-
}
|
154
|
-
%w{jimmy jane philip arthur julie bert}.each do |student_name|
|
155
|
-
g.data(student_name, (0..50).collect { |i| rand 100 })
|
156
|
-
end
|
157
|
-
|
158
|
-
# Default theme
|
159
|
-
g.write("test/output/line_dots.png")
|
160
|
-
end
|
161
|
-
|
162
|
-
|
163
|
-
def test_dots_graph_small
|
164
|
-
g = Gruff::Line.new(400, false)
|
165
|
-
g.title = "Dots Test 400px"
|
166
|
-
g.labels = {
|
167
|
-
0 => '5/6',
|
168
|
-
10 => '5/15',
|
169
|
-
20 => '5/24',
|
170
|
-
30 => '5/30',
|
171
|
-
40 => '6/4',
|
172
|
-
50 => '6/16'
|
173
|
-
}
|
174
|
-
%w{jimmy jane philip arthur julie bert}.each do |student_name|
|
175
|
-
g.data(student_name, (0..50).collect { |i| rand 100 })
|
176
|
-
end
|
177
|
-
|
178
|
-
# Default theme
|
179
|
-
g.write("test/output/line_dots_small.png")
|
134
|
+
g.write("test/output/line_similar_high_end_values.png")
|
135
|
+
|
136
|
+
g = Gruff::Line.new
|
137
|
+
g.title = "Similar High End Values With Floor"
|
138
|
+
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} )
|
139
|
+
g.minimum_value = 0
|
140
|
+
g.write("test/output/line_similar_high_end_values_with_floor.png")
|
180
141
|
end
|
181
142
|
|
182
143
|
def test_many_lines_graph_small
|
@@ -198,9 +159,9 @@ class TestGruffLine < Test::Unit::TestCase
|
|
198
159
|
g.write("test/output/line_many_lines_small.png")
|
199
160
|
end
|
200
161
|
|
201
|
-
def
|
202
|
-
g = Gruff::Line.new(300
|
203
|
-
g.title = "
|
162
|
+
def test_graph_tiny
|
163
|
+
g = Gruff::Line.new(300)
|
164
|
+
g.title = "Tiny Test 300px"
|
204
165
|
g.labels = {
|
205
166
|
0 => '5/6',
|
206
167
|
10 => '5/15',
|
@@ -214,7 +175,7 @@ class TestGruffLine < Test::Unit::TestCase
|
|
214
175
|
end
|
215
176
|
|
216
177
|
# Default theme
|
217
|
-
g.write("test/output/
|
178
|
+
g.write("test/output/line_tiny.png")
|
218
179
|
end
|
219
180
|
|
220
181
|
def test_no_data
|
@@ -343,7 +304,6 @@ class TestGruffLine < Test::Unit::TestCase
|
|
343
304
|
g.write("test/output/line_all_neg_400.png")
|
344
305
|
end
|
345
306
|
|
346
|
-
|
347
307
|
def test_many_numbers
|
348
308
|
g = Gruff::Line.new('400x170')
|
349
309
|
g.title = "Line Test, Many Numbers"
|
@@ -419,7 +379,6 @@ class TestGruffLine < Test::Unit::TestCase
|
|
419
379
|
end
|
420
380
|
|
421
381
|
|
422
|
-
|
423
382
|
protected
|
424
383
|
|
425
384
|
# TODO Reset data after each theme
|
data/test/net_test.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
|
data/test/photo_test.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
|
3
|
-
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
4
4
|
|
5
|
-
|
6
|
-
require 'gruff'
|
7
|
-
|
8
|
-
class TestGruffPhotoBar < Test::Unit::TestCase
|
5
|
+
class TestGruffPhotoBar < GruffTestCase
|
9
6
|
|
10
7
|
def setup
|
11
8
|
@datasets = [
|
data/test/pie_test.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
|
3
|
-
|
4
|
-
#$:.unshift File.dirname(__FILE__) + "/fixtures/helpers"
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
5
4
|
|
6
|
-
|
7
|
-
require 'gruff'
|
8
|
-
|
9
|
-
class TestGruffPie < Test::Unit::TestCase
|
5
|
+
class TestGruffPie < GruffTestCase
|
10
6
|
|
11
7
|
def setup
|
12
8
|
@datasets = [
|