rmagick4j 0.3.4-java → 0.3.9-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.
Files changed (164) hide show
  1. checksums.yaml +7 -0
  2. data/History.txt +84 -0
  3. data/LICENSE.txt +31 -0
  4. data/README.txt +25 -0
  5. data/Rakefile +65 -0
  6. data/lib/magick4j.jar +0 -0
  7. data/lib/{RMagick.rb → rmagick.rb} +574 -405
  8. data/lib/rmagick4j/constants.rb +34 -0
  9. data/lib/rmagick4j/draw.rb +124 -0
  10. data/lib/rmagick4j/enum.rb +120 -0
  11. data/lib/rmagick4j/gradient_fill.rb +14 -0
  12. data/lib/rmagick4j/image.rb +351 -0
  13. data/lib/rmagick4j/image_list.rb +25 -0
  14. data/lib/rmagick4j/pixel.rb +170 -0
  15. data/lib/rmagick4j/rmagick4j.rb +15 -430
  16. data/lib/rmagick4j/texture_fill.rb +14 -0
  17. data/lib/rmagick4j/type_metric.rb +8 -0
  18. data/lib/rmagick4j/version.rb +5 -0
  19. data/lib/rvg/clippath.rb +2 -2
  20. data/lib/rvg/container.rb +2 -2
  21. data/lib/rvg/describable.rb +2 -2
  22. data/lib/rvg/embellishable.rb +2 -2
  23. data/lib/rvg/misc.rb +3 -3
  24. data/lib/rvg/paint.rb +7 -2
  25. data/lib/rvg/pathdata.rb +2 -2
  26. data/lib/rvg/rvg.rb +3 -3
  27. data/lib/rvg/stretchable.rb +15 -3
  28. data/lib/rvg/stylable.rb +2 -2
  29. data/lib/rvg/text.rb +2 -2
  30. data/lib/rvg/transformable.rb +2 -2
  31. data/lib/rvg/units.rb +2 -2
  32. data/test/RMagickTestSuite.rb +129 -0
  33. data/test/eyetests/bullseye.rb +151 -0
  34. data/test/eyetests/doc.rb +79 -0
  35. data/test/eyetests/tests/draw_arc_basic.rb +16 -0
  36. data/test/eyetests/tests/draw_circle_affine.rb +19 -0
  37. data/test/eyetests/tests/draw_circle_basic.rb +16 -0
  38. data/test/eyetests/tests/draw_clip_path.rb +44 -0
  39. data/test/eyetests/tests/draw_ellipse_affine.rb +19 -0
  40. data/test/eyetests/tests/draw_ellipse_basic.rb +16 -0
  41. data/test/eyetests/tests/draw_line_affine.rb +24 -0
  42. data/test/eyetests/tests/draw_line_basic.rb +21 -0
  43. data/test/eyetests/tests/draw_multiline_type_metrics.rb +42 -0
  44. data/test/eyetests/tests/draw_pattern_1.rb +35 -0
  45. data/test/eyetests/tests/draw_polygon_affine.rb +22 -0
  46. data/test/eyetests/tests/draw_polygon_basic.rb +19 -0
  47. data/test/eyetests/tests/draw_polyline_affine.rb +19 -0
  48. data/test/eyetests/tests/draw_polyline_basic.rb +18 -0
  49. data/test/eyetests/tests/draw_pop_push.rb +16 -0
  50. data/test/eyetests/tests/draw_pop_push_translate.rb +22 -0
  51. data/test/eyetests/tests/draw_rectangle_affine.rb +16 -0
  52. data/test/eyetests/tests/draw_rectangle_basic.rb +16 -0
  53. data/test/eyetests/tests/draw_rectangle_narrow.rb +18 -0
  54. data/test/eyetests/tests/draw_rmagick_test_01.rb +35 -0
  55. data/test/eyetests/tests/draw_rmagick_test_02.rb +40 -0
  56. data/test/eyetests/tests/draw_rmagick_test_03.rb +17 -0
  57. data/test/eyetests/tests/draw_rmagick_test_04.rb +21 -0
  58. data/test/eyetests/tests/draw_rotate_01.rb +33 -0
  59. data/test/eyetests/tests/draw_roundrectangle_affine.rb +19 -0
  60. data/test/eyetests/tests/draw_roundrectangle_basic.rb +16 -0
  61. data/test/eyetests/tests/draw_scale_01.rb +33 -0
  62. data/test/eyetests/tests/draw_skewx_01.rb +34 -0
  63. data/test/eyetests/tests/draw_skewy_01.rb +33 -0
  64. data/test/eyetests/tests/draw_stroke_miterlimit.rb +21 -0
  65. data/test/eyetests/tests/effect_blur.rb +9 -0
  66. data/test/eyetests/tests/effect_charcoal.rb +9 -0
  67. data/test/eyetests/tests/effect_edge.rb +9 -0
  68. data/test/eyetests/tests/effect_implode.rb +9 -0
  69. data/test/eyetests/tests/effect_negate.rb +9 -0
  70. data/test/eyetests/tests/effect_negate_true.rb +9 -0
  71. data/test/eyetests/tests/effect_normalize.rb +9 -0
  72. data/test/eyetests/tests/effect_shade.rb +9 -0
  73. data/test/eyetests/tests/effect_solarize.rb +10 -0
  74. data/test/eyetests/tests/effect_wave.rb +9 -0
  75. data/test/eyetests/tests/gradient_fill_horizontal_diagonal_fill.rb +9 -0
  76. data/test/eyetests/tests/gradient_fill_horizontal_fill.rb +9 -0
  77. data/test/eyetests/tests/gradient_fill_point_fill.rb +9 -0
  78. data/test/eyetests/tests/gradient_fill_vertical_diagonal_fill.rb +9 -0
  79. data/test/eyetests/tests/gradient_fill_vertical_fill.rb +9 -0
  80. data/test/eyetests/tests/gruff_accumulator_bar.rb +29 -0
  81. data/test/eyetests/tests/gruff_area_1.rb +16 -0
  82. data/test/eyetests/tests/gruff_area_2.rb +27 -0
  83. data/test/eyetests/tests/gruff_bar_1.rb +29 -0
  84. data/test/eyetests/tests/gruff_bar_2.rb +19 -0
  85. data/test/eyetests/tests/gruff_dot_1.rb +19 -0
  86. data/test/eyetests/tests/gruff_line_1.rb +13 -0
  87. data/test/eyetests/tests/gruff_line_2.rb +20 -0
  88. data/test/eyetests/tests/gruff_net_1.rb +16 -0
  89. data/test/eyetests/tests/gruff_net_2.rb +16 -0
  90. data/test/eyetests/tests/gruff_pie_1.rb +21 -0
  91. data/test/eyetests/tests/gruff_pie_2.rb +22 -0
  92. data/test/eyetests/tests/gruff_scene_1.rb +14 -0
  93. data/test/eyetests/tests/gruff_scene_2.rb +14 -0
  94. data/test/eyetests/tests/gruff_sidebar.rb +32 -0
  95. data/test/eyetests/tests/gruff_sidestacked_bar_1.rb +26 -0
  96. data/test/eyetests/tests/gruff_sidestacked_bar_2.rb +26 -0
  97. data/test/eyetests/tests/gruff_spider_1.rb +22 -0
  98. data/test/eyetests/tests/gruff_spider_2.rb +15 -0
  99. data/test/eyetests/tests/gruff_stacked_area_1.rb +23 -0
  100. data/test/eyetests/tests/gruff_stacked_bar_1.rb +23 -0
  101. data/test/eyetests/tests/gruff_stacked_bar_2.rb +26 -0
  102. data/test/eyetests/tests/hatch_fill.rb +9 -0
  103. data/test/eyetests/tests/image_list_flatten_images.rb +15 -0
  104. data/test/eyetests/tests/new_image.rb +31 -0
  105. data/test/eyetests/tests/path_a_command_01.rb +16 -0
  106. data/test/eyetests/tests/path_a_command_02.rb +19 -0
  107. data/test/eyetests/tests/path_c_command_01.rb +16 -0
  108. data/test/eyetests/tests/path_c_command_02.rb +16 -0
  109. data/test/eyetests/tests/path_complex_01.rb +16 -0
  110. data/test/eyetests/tests/path_espiral_01.rb +29 -0
  111. data/test/eyetests/tests/path_h_command_01.rb +16 -0
  112. data/test/eyetests/tests/path_h_command_02.rb +16 -0
  113. data/test/eyetests/tests/path_l_command_01.rb +16 -0
  114. data/test/eyetests/tests/path_l_command_02.rb +16 -0
  115. data/test/eyetests/tests/path_m_command_01.rb +16 -0
  116. data/test/eyetests/tests/path_m_command_02.rb +16 -0
  117. data/test/eyetests/tests/path_m_command_03.rb +16 -0
  118. data/test/eyetests/tests/path_q_command_01.rb +16 -0
  119. data/test/eyetests/tests/path_q_command_02.rb +16 -0
  120. data/test/eyetests/tests/path_q_command_03.rb +25 -0
  121. data/test/eyetests/tests/path_s_command_01.rb +16 -0
  122. data/test/eyetests/tests/path_s_command_02.rb +16 -0
  123. data/test/eyetests/tests/path_star_01.rb +19 -0
  124. data/test/eyetests/tests/path_t_command_01.rb +16 -0
  125. data/test/eyetests/tests/path_t_command_02.rb +16 -0
  126. data/test/eyetests/tests/path_v_command_01.rb +16 -0
  127. data/test/eyetests/tests/path_v_command_02.rb +16 -0
  128. data/test/eyetests/tests/store_pixel_smiley.rb +123 -0
  129. data/test/eyetests/tests/texture_fill.rb +11 -0
  130. data/test/gruff_tests/test/gruff_test_case.rb +123 -0
  131. data/test/gruff_tests/test/monkey_gruff.rb +7 -0
  132. data/test/gruff_tests/test/test_accumulator_bar.rb +50 -0
  133. data/test/gruff_tests/test/test_area.rb +134 -0
  134. data/test/gruff_tests/test/test_bar.rb +295 -0
  135. data/test/gruff_tests/test/test_base.rb +8 -0
  136. data/test/gruff_tests/test/test_bullet.rb +26 -0
  137. data/test/gruff_tests/test/test_dot.rb +273 -0
  138. data/test/gruff_tests/test/test_legend.rb +68 -0
  139. data/test/gruff_tests/test/test_line.rb +554 -0
  140. data/test/gruff_tests/test/test_mini_bar.rb +33 -0
  141. data/test/gruff_tests/test/test_mini_pie.rb +20 -0
  142. data/test/gruff_tests/test/test_mini_side_bar.rb +37 -0
  143. data/test/gruff_tests/test/test_net.rb +230 -0
  144. data/test/gruff_tests/test/test_photo.rb +41 -0
  145. data/test/gruff_tests/test/test_pie.rb +154 -0
  146. data/test/gruff_tests/test/test_scene.rb +100 -0
  147. data/test/gruff_tests/test/test_side_bar.rb +12 -0
  148. data/test/gruff_tests/test/test_sidestacked_bar.rb +89 -0
  149. data/test/gruff_tests/test/test_spider.rb +216 -0
  150. data/test/gruff_tests/test/test_stacked_area.rb +52 -0
  151. data/test/gruff_tests/test/test_stacked_bar.rb +52 -0
  152. data/test/images/clown.jpg +0 -0
  153. data/test/images/texture.jpg +0 -0
  154. data/test/implemented_methods.rb +18 -0
  155. data/test/spec/draw_spec.rb +43 -0
  156. data/test/spec/features/step_definitions/geometry_steps.rb +22 -0
  157. data/test/spec/features/step_definitions/image_filling_steps.rb +49 -0
  158. data/test/spec/features/support/env.rb +3 -0
  159. data/test/spec/image_constants.rb +76 -0
  160. data/test/spec/image_spec.rb +83 -0
  161. data/test/spec/pixel_spec.rb +89 -0
  162. metadata +333 -45
  163. data/lib/RMagick.jar +0 -0
  164. data/lib/jhlabs-filters.jar +0 -0
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/gruff_test_case"
4
+
5
+ class TestGruffBase < GruffTestCase
6
+
7
+
8
+ end
@@ -0,0 +1,26 @@
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 127, 150
23
+ # g.write("test/output/bullet_no_options.png")
24
+ # end
25
+ #
26
+ # end
@@ -0,0 +1,273 @@
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_keynote.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 = Gruff::Dot.new(400)
46
+ g.title = "Visual Multi-Line Dot Graph Test"
47
+ g.labels = {
48
+ 0 => '5/6',
49
+ 1 => '5/15',
50
+ 2 => '5/24',
51
+ 3 => '5/30',
52
+ }
53
+ @datasets.each do |data|
54
+ g.data(data[0], data[1])
55
+ end
56
+
57
+ g.write("test/output/dot_keynote_small.png")
58
+ end
59
+
60
+ # Somewhat worthless test. Should an error be thrown?
61
+ # def test_nil_font
62
+ # g = setup_basic_graph 400
63
+ # g.title = "Nil Font"
64
+ # g.font = nil
65
+ # g.write "test/output/dot_nil_font.png"
66
+ # end
67
+
68
+
69
+ def test_no_line_markers
70
+ g = setup_basic_graph(400)
71
+ g.title = "No Line Markers"
72
+ g.hide_line_markers = true
73
+ g.write("test/output/dot_no_line_markers.png")
74
+ end
75
+
76
+ def test_no_legend
77
+ g = setup_basic_graph(400)
78
+ g.title = "No Legend"
79
+ g.hide_legend = true
80
+ g.write("test/output/dot_no_legend.png")
81
+ end
82
+
83
+ def test_no_title
84
+ g = setup_basic_graph(400)
85
+ g.title = "No Title"
86
+ g.hide_title = true
87
+ g.write("test/output/dot_no_title.png")
88
+ end
89
+
90
+ def test_no_title_or_legend
91
+ g = setup_basic_graph(400)
92
+ g.title = "No Title or Legend"
93
+ g.hide_legend = true
94
+ g.hide_title = true
95
+ g.write("test/output/dot_no_title_or_legend.png")
96
+ end
97
+
98
+ def test_set_marker_count
99
+ g = setup_basic_graph(400)
100
+ g.title = "Set marker"
101
+ g.marker_count = 10
102
+ g.write("test/output/dot_set_marker.png")
103
+ end
104
+
105
+ def test_set_legend_box_size
106
+ g = setup_basic_graph(400)
107
+ g.title = "Set Small Legend Box Size"
108
+ g.legend_box_size = 10.0
109
+ g.write("test/output/dot_set_legend_box_size_sm.png")
110
+
111
+ g = setup_basic_graph(400)
112
+ g.title = "Set Large Legend Box Size"
113
+ g.legend_box_size = 50.0
114
+ g.write("test/output/dot_set_legend_box_size_lg.png")
115
+ end
116
+
117
+ def test_x_y_labels
118
+ g = setup_basic_graph(400)
119
+ g.title = "X Y Labels"
120
+ g.x_axis_label = 'Score (%)'
121
+ g.y_axis_label = "Students"
122
+ g.write("test/output/dot_x_y_labels.png")
123
+ end
124
+
125
+ def test_wide_graph
126
+ g = setup_basic_graph('800x400')
127
+ g.title = "Wide Graph"
128
+ g.write("test/output/dot_wide_graph.png")
129
+
130
+ g = setup_basic_graph('400x200')
131
+ g.title = "Wide Graph Small"
132
+ g.write("test/output/dot_wide_graph_small.png")
133
+ end
134
+
135
+
136
+ def test_tall_graph
137
+ g = setup_basic_graph('400x600')
138
+ g.title = "Tall Graph"
139
+ g.write("test/output/dot_tall_graph.png")
140
+
141
+ g = setup_basic_graph('200x400')
142
+ g.title = "Tall Graph Small"
143
+ g.write("test/output/dot_tall_graph_small.png")
144
+ end
145
+
146
+
147
+ def test_one_value
148
+ g = Gruff::Dot.new
149
+ g.title = "One Value Graph Test"
150
+ g.labels = {
151
+ 0 => '1',
152
+ 1 => '2'
153
+ }
154
+ g.data('one', [1,1])
155
+
156
+ g.write("test/output/dot_one_value.png")
157
+ end
158
+
159
+
160
+ def test_negative
161
+ g = Gruff::Dot.new
162
+ g.title = "Pos/Neg Dot Graph Test"
163
+ g.labels = {
164
+ 0 => '5/6',
165
+ 1 => '5/15',
166
+ 2 => '5/24',
167
+ 3 => '5/30',
168
+ }
169
+ g.data(:apples, [-1, 0, 4, -4])
170
+ g.data(:peaches, [10, 8, 6, 3])
171
+
172
+ g.write("test/output/dot_pos_neg.png")
173
+ end
174
+
175
+
176
+ def test_nearly_zero
177
+ g = Gruff::Dot.new
178
+ g.title = "Nearly Zero Graph"
179
+ g.labels = {
180
+ 0 => '5/6',
181
+ 1 => '5/15',
182
+ 2 => '5/24',
183
+ 3 => '5/30',
184
+ }
185
+ g.data(:apples, [1, 2, 3, 4])
186
+ g.data(:peaches, [4, 3, 2, 1])
187
+ g.minimum_value = 0
188
+ g.maximum_value = 10
189
+ g.write("test/output/dot_nearly_zero_max_10.png")
190
+ end
191
+
192
+ def test_y_axis_increment
193
+ generate_with_y_axis_increment 2.0
194
+ generate_with_y_axis_increment 1
195
+ generate_with_y_axis_increment 5
196
+ generate_with_y_axis_increment 20
197
+ end
198
+
199
+ def generate_with_y_axis_increment(increment)
200
+ g = Gruff::Dot.new
201
+ g.title = "Y Axis Set to #{increment}"
202
+ g.labels = {
203
+ 0 => '5/6',
204
+ 1 => '5/15',
205
+ 2 => '5/24',
206
+ 3 => '5/30',
207
+ }
208
+ g.y_axis_increment = increment
209
+ g.data(:apples, [1, 0.2, 0.5, 0.7])
210
+ g.data(:peaches, [2.5, 2.3, 2, 6.1])
211
+ g.write("test/output/dot_y_increment_#{increment}.png")
212
+ end
213
+
214
+
215
+ def test_custom_theme
216
+ g = Gruff::Dot.new
217
+ g.title = "Custom Theme"
218
+ g.font = File.expand_path('CREABBRG.TTF', ENV['MAGICK_FONT_PATH'])
219
+ g.title_font_size = 60
220
+ g.legend_font_size = 32
221
+ g.marker_font_size = 32
222
+ g.theme = {
223
+ :colors => %w(#efd250 #666699 #e5573f #9595e2),
224
+ :marker_color => 'white',
225
+ :font_color => 'blue',
226
+ :background_image => "assets/pc306715.jpg"
227
+ }
228
+ g.labels = {
229
+ 0 => '5/6',
230
+ 1 => '5/15',
231
+ 2 => '5/24',
232
+ 3 => '5/30',
233
+ }
234
+ g.data(:vancouver, [1, 2, 3, 4])
235
+ g.data(:seattle, [2, 4, 6, 8])
236
+ g.data(:portland, [3, 1, 7, 3])
237
+ g.data(:victoria, [4, 3, 5, 7])
238
+ g.minimum_value = 0
239
+ g.write("test/output/dot_themed.png")
240
+ end
241
+
242
+ def test_july_enhancements
243
+ g = Gruff::Dot.new(600)
244
+ g.hide_legend = true
245
+ g.title = "Full speed ahead"
246
+ g.labels = (0..10).inject({}) { |memo, i| memo.merge({ i => (i*10).to_s}) }
247
+ g.data(:apples, (0..9).map { rand(20)/10.0 })
248
+ g.y_axis_increment = 1.0
249
+ g.x_axis_label = 'Score (%)'
250
+ g.y_axis_label = 'Students'
251
+ write_test_file g, 'enhancements.png'
252
+ end
253
+
254
+
255
+ protected
256
+
257
+ def setup_basic_graph(size=800)
258
+ g = Gruff::Dot.new(size)
259
+ g.title = "My Dot Graph"
260
+ g.labels = {
261
+ 0 => '5/6',
262
+ 1 => '5/15',
263
+ 2 => '5/24',
264
+ 3 => '5/30',
265
+ }
266
+ @datasets.each do |data|
267
+ g.data(data[0], data[1])
268
+ end
269
+ g
270
+ end
271
+
272
+ end
273
+
@@ -0,0 +1,68 @@
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
@@ -0,0 +1,554 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/gruff_test_case"
4
+
5
+ class TestGruffLine < GruffTestCase
6
+
7
+ # TODO Delete old output files once when starting tests
8
+
9
+ def test_should_render_with_transparent_theme
10
+ g = Gruff::Line.new(400)
11
+ g.title = "Transparent Background"
12
+ g.theme = {
13
+ :colors => ['black', 'grey'],
14
+ :marker_color => 'grey',
15
+ :font_color => 'black',
16
+ :background_colors => 'transparent'
17
+ }
18
+
19
+ g.labels = {
20
+ 0 => '5/6',
21
+ 1 => '5/15',
22
+ 2 => '5/24',
23
+ 3 => '5/30',
24
+ }
25
+ g.data(:apples, [-1, 0, 4, -4])
26
+ g.data(:peaches, [10, 8, 6, 3])
27
+ g.write("test/output/line_transparent.png")
28
+ end
29
+
30
+ def test_line_graph_with_themes
31
+ line_graph_with_themes()
32
+ line_graph_with_themes(400)
33
+ end
34
+
35
+ def test_one_value
36
+ g = Gruff::Line.new
37
+ g.title = "One Value"
38
+ g.labels = {
39
+ 0 => '1',
40
+ 1 => '2'
41
+ }
42
+ g.data('one', 1)
43
+
44
+ g.write("test/output/line_one_value.png")
45
+ end
46
+
47
+ def test_one_value_array
48
+ g = Gruff::Line.new
49
+ g.title = "One Value in an Array"
50
+ g.labels = {
51
+ 0 => '1',
52
+ 1 => '2'
53
+ }
54
+ g.data('one', [1])
55
+
56
+ g.write("test/output/line_one_value_array.png")
57
+ end
58
+
59
+
60
+ def test_should_not_hang_with_0_0_100
61
+ g = Gruff::Line.new(320)
62
+ g.title = "Hang Value Graph Test"
63
+ g.data('test', [0,0,100])
64
+
65
+ g.write("test/output/line_hang_value.png")
66
+ end
67
+
68
+ # TODO
69
+ # def test_fix_crash
70
+ # g = Gruff::Line.new(370)
71
+ # g.title = "Crash Test"
72
+ # g.data "ichi", [5]
73
+ # g.data "ni", [0]
74
+ # g.data "san", [0]
75
+ # g.data "shi", [0]
76
+ # g.write("test/output/line_crash_fix_test.png")
77
+ # end
78
+
79
+
80
+ def test_line_small_values
81
+ @datasets = [
82
+ [:small, [0.1, 0.14356, 0.0, 0.5674839, 0.456]],
83
+ [:small2, [0.2, 0.3, 0.1, 0.05, 0.9]]
84
+ ]
85
+
86
+ g = Gruff::Line.new
87
+ g.title = "Small Values Line Graph Test"
88
+ @datasets.each do |data|
89
+ g.data(data[0], data[1])
90
+ end
91
+ g.write("test/output/line_small.png")
92
+
93
+ g = Gruff::Line.new(400)
94
+ g.title = "Small Values Line Graph Test 400px"
95
+ @datasets.each do |data|
96
+ g.data(data[0], data[1])
97
+ end
98
+ g.write("test/output/line_small_small.png")
99
+ end
100
+
101
+ def test_line_starts_with_zero
102
+ @datasets = [
103
+ [:first0, [0, 5, 10, 8, 18]],
104
+ [:normal, [1, 2, 3, 4, 5]]
105
+ ]
106
+
107
+ g = Gruff::Line.new
108
+ g.title = "Small Values Line Graph Test"
109
+ @datasets.each do |data|
110
+ g.data(data[0], data[1])
111
+ end
112
+ g.write("test/output/line_small_zero.png")
113
+
114
+ g = Gruff::Line.new(400)
115
+ g.title = "Small Values Line Graph Test 400px"
116
+ @datasets.each do |data|
117
+ g.data(data[0], data[1])
118
+ end
119
+ g.write("test/output/line_small_small_zero.png")
120
+ end
121
+
122
+
123
+ def test_line_large_values
124
+ @datasets = [
125
+ [:large, [100_005, 35_000, 28_000, 27_000]],
126
+ [:large2, [35_000, 28_000, 27_000, 100_005]],
127
+ [:large3, [28_000, 27_000, 100_005, 35_000]],
128
+ [:large4, [1_238, 39_092, 27_938, 48_876]]
129
+ ]
130
+
131
+ g = Gruff::Line.new
132
+ g.title = "Very Large Values Line Graph Test"
133
+ g.baseline_value = 50_000
134
+ g.baseline_color = 'green'
135
+ @datasets.each do |data|
136
+ g.data(data[0], data[1])
137
+ end
138
+
139
+ g.write("test/output/line_large.png")
140
+ end
141
+
142
+ # def test_long_title
143
+ #
144
+ # end
145
+ #
146
+ # def test_add_colors
147
+ #
148
+ # end
149
+ #
150
+
151
+ def test_request_too_many_colors
152
+ g = Gruff::Line.new
153
+ g.title = "More Sets Than in Color Array"
154
+ # g.theme = {} # Sets theme with only black and white
155
+ @datasets.each do |data|
156
+ g.data(data[0], data[1])
157
+ end
158
+ @datasets.each do |data|
159
+ g.data("#{data[0]}-B", data[1].map {|d| d + 20})
160
+ end
161
+ g.write("test/output/line_more_sets_than_colors.png")
162
+ end
163
+
164
+ #
165
+ # def test_add_data
166
+ #
167
+ # end
168
+
169
+ def test_many_datapoints
170
+ g = Gruff::Line.new
171
+ g.title = "Many Multi-Line Graph Test"
172
+ g.labels = {
173
+ 0 => 'June',
174
+ 10 => 'July',
175
+ 30 => 'August',
176
+ 50 => 'September',
177
+ }
178
+ g.data('many points', (0..50).collect {|i| rand(100) })
179
+ g.x_axis_label = "Months"
180
+
181
+ # Default theme
182
+ g.write("test/output/line_many.png")
183
+ end
184
+
185
+
186
+ def test_similar_high_end_values
187
+ @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}
188
+
189
+ g = Gruff::Line.new
190
+ g.title = "Similar High End Values Test"
191
+ g.data('similar points', @dataset )
192
+ g.write("test/output/line_similar_high_end_values.png")
193
+
194
+ g = Gruff::Line.new
195
+ g.title = "Similar High End Values With Floor"
196
+ g.data('similar points', @dataset )
197
+ g.minimum_value = 0
198
+ g.y_axis_label = "Barometric Pressure"
199
+ g.write("test/output/line_similar_high_end_values_with_floor.png")
200
+ end
201
+
202
+ def test_many_lines_graph_small
203
+ g = Gruff::Line.new(400)
204
+ g.title = "Many Values Line Test 400px"
205
+ g.labels = {
206
+ 0 => '5/6',
207
+ 10 => '5/15',
208
+ 20 => '5/24',
209
+ 30 => '5/30',
210
+ 40 => '6/4',
211
+ 50 => '6/16'
212
+ }
213
+ %w{jimmy jane philip arthur julie bert}.each do |student_name|
214
+ g.data(student_name, (0..50).collect { |i| rand 100 })
215
+ end
216
+
217
+ # Default theme
218
+ g.write("test/output/line_many_lines_small.png")
219
+ end
220
+
221
+ def test_graph_tiny
222
+ g = Gruff::Line.new(300)
223
+ g.title = "Tiny Test 300px"
224
+ g.labels = {
225
+ 0 => '5/6',
226
+ 10 => '5/15',
227
+ 20 => '5/24',
228
+ 30 => '5/30',
229
+ 40 => '6/4',
230
+ 50 => '6/16'
231
+ }
232
+ %w{jimmy jane philip arthur julie bert}.each do |student_name|
233
+ g.data(student_name, (0..50).collect { |i| rand 100 })
234
+ end
235
+
236
+ # Default theme
237
+ g.write("test/output/line_tiny.png")
238
+ end
239
+
240
+ def test_no_data
241
+ g = Gruff::Line.new(400)
242
+ g.title = "No Data"
243
+ # Default theme
244
+ g.write("test/output/line_no_data.png")
245
+
246
+ g = Gruff::Line.new(400)
247
+ g.title = "No Data Title"
248
+ g.no_data_message = 'There is no data'
249
+ g.write("test/output/line_no_data_msg.png")
250
+ end
251
+
252
+
253
+ def test_all_zeros
254
+ g = Gruff::Line.new(400)
255
+ g.title = "All Zeros"
256
+
257
+ g.data(:gus, [0,0,0,0])
258
+
259
+ # Default theme
260
+ g.write("test/output/line_no_data_other.png")
261
+ end
262
+
263
+
264
+ def test_some_nil_points
265
+ g = Gruff::Line.new
266
+ g.title = "Some Nil Points"
267
+
268
+ @datasets = [
269
+ [:data1, [1, 2, 3, nil, 3, 5, 6]],
270
+ [:data2, [5, nil, nil, nil, nil, nil, 5]],
271
+ [:data3, [4, nil, 2, 1, 0]],
272
+ [:data4, [nil, nil, 3, 1, 2]]
273
+ ]
274
+
275
+ @datasets.each do |data|
276
+ g.data(*data)
277
+ end
278
+
279
+ # Default theme
280
+ g.write("test/output/line_some_nil_points.png")
281
+ end
282
+
283
+ def test_no_title
284
+ g = Gruff::Line.new(400)
285
+ g.labels = @labels
286
+ @datasets.each do |data|
287
+ g.data(data[0], data[1])
288
+ end
289
+
290
+ g.write("test/output/line_no_title.png")
291
+ end
292
+
293
+ def test_no_line_markers
294
+ g = setup_basic_graph(400)
295
+ g.title = "No Line Markers"
296
+ g.hide_line_markers = true
297
+ g.write("test/output/line_no_line_markers.png")
298
+ end
299
+
300
+ def test_no_legend
301
+ g = setup_basic_graph(400)
302
+ g.title = "No Legend"
303
+ g.hide_legend = true
304
+ g.write("test/output/line_no_legend.png")
305
+ end
306
+
307
+ def test_nothing_but_the_graph
308
+ g = setup_basic_graph(400)
309
+ g.title = "THIS TITLE SHOULD NOT DISPLAY!!!"
310
+ g.hide_line_markers = true
311
+ g.hide_legend = true
312
+ g.hide_title = true
313
+ g.write("test/output/line_nothing_but_the_graph.png")
314
+ end
315
+
316
+ def test_baseline_larger_than_data
317
+ g = setup_basic_graph(400)
318
+ g.title = "Baseline Larger Than Data"
319
+ g.baseline_value = 150
320
+ g.write("test/output/line_large_baseline.png")
321
+ end
322
+
323
+
324
+ def test_hide_dots
325
+ g = setup_basic_graph(400)
326
+ g.title = "Hide Dots"
327
+ g.hide_dots = true
328
+ g.write("test/output/line_hide_dots.png")
329
+ end
330
+
331
+ def test_hide_lines
332
+ g = setup_basic_graph(400)
333
+ g.title = "Hide Lines"
334
+ g.hide_lines = true
335
+ g.write("test/output/line_hide_lines.png")
336
+ end
337
+
338
+ def test_wide_graph
339
+ g = setup_basic_graph('800x400')
340
+ g.title = "Wide Graph"
341
+ g.write("test/output/line_wide_graph.png")
342
+
343
+ g = setup_basic_graph('400x200')
344
+ g.title = "Wide Graph Small"
345
+ g.write("test/output/line_wide_graph_small.png")
346
+ end
347
+
348
+ def test_negative
349
+ g = setup_pos_neg(800)
350
+ g.write("test/output/line_pos_neg.png")
351
+
352
+ g = setup_pos_neg(400)
353
+ g.title = 'Pos/Neg Line Test Small'
354
+ g.write("test/output/line_pos_neg_400.png")
355
+ end
356
+
357
+ def test_all_negative
358
+ g = setup_all_neg(800)
359
+ g.write("test/output/line_all_neg.png")
360
+
361
+ g = setup_all_neg(400)
362
+ g.title = 'All Neg Line Test Small'
363
+ g.write("test/output/line_all_neg_400.png")
364
+ end
365
+
366
+ def test_many_numbers
367
+ g = Gruff::Line.new('400x170')
368
+ g.title = "Line Test, Many Numbers"
369
+
370
+ data = [
371
+ { :date => '01',
372
+ :wpm => 0,
373
+ :errors => 0,
374
+ :accuracy => 0 },
375
+ { :date => '02',
376
+ :wpm => 10,
377
+ :errors => 2,
378
+ :accuracy => 80 },
379
+ { :date => '03',
380
+ :wpm => 15,
381
+ :errors => 0,
382
+ :accuracy => 100 },
383
+ { :date => '04',
384
+ :wpm => 16,
385
+ :errors => 2,
386
+ :accuracy => 87 },
387
+ { :date => '05',
388
+ :wpm => nil,
389
+ :errors => nil,
390
+ :accuracy => nil },
391
+ { :date => '06',
392
+ :wpm => 18,
393
+ :errors => 1,
394
+ :accuracy => 94 },
395
+ { :date => '07'},
396
+ { :date => '08' },
397
+ { :date => '09',
398
+ :wpm => 21,
399
+ :errors => 1,
400
+ :accuracy => 95 },
401
+ { :date => '10'},
402
+ { :date => '11'},
403
+ { :date => '12'},
404
+ { :date => '13'},
405
+ { :date => '14'},
406
+ { :date => '15'},
407
+ { :date => '16'},
408
+ { :date => '17'},
409
+ { :date => '18'},
410
+ { :date => '19',
411
+ :wpm => 28,
412
+ :errors => 5,
413
+ :accuracy => 82 },
414
+ { :date => '20'},
415
+ { :date => '21'},
416
+ { :date => '22'},
417
+ { :date => '23'},
418
+ { :date => '24'},
419
+ { :date => '25'},
420
+ { :date => '26'},
421
+ { :date => '27',
422
+ :wpm => 37,
423
+ :errors => 3,
424
+ :accuracy => 92 },
425
+ ]
426
+
427
+ [:wpm, :errors, :accuracy].each do |field|
428
+ g.data(field.to_s, data.collect {|d| d[field] })
429
+ end
430
+
431
+ labels = Hash.new
432
+ data.each_with_index do |d, i|
433
+ labels[i] = d[:date]
434
+ end
435
+ g.labels = labels
436
+
437
+ g.write('test/output/line_many_numbers.png')
438
+ end
439
+
440
+ def test_no_hide_line_no_labels
441
+ g = Gruff::Line.new
442
+ g.title = "No Hide Line No Labels"
443
+ @datasets.each do |data|
444
+ g.data(data[0], data[1])
445
+ end
446
+ g.hide_line_markers = false
447
+ g.write('test/output/line_no_hide.png')
448
+ end
449
+
450
+
451
+ def test_jruby_error
452
+ g = Gruff::Line.new
453
+ g.theme = {
454
+ :colors => ['#7F0099', '#2F85ED', '#2FED09','#EC962F'],
455
+ :marker_color => '#aaa',
456
+ :background_colors => ['#E8E8E8','#B9FD6C']
457
+ }
458
+ g.hide_title = true
459
+
460
+ g.legend_font_size = 12
461
+ g.marker_font_size = 16
462
+ g.hide_dots = false
463
+ g.label_max_decimals = 1
464
+
465
+ g.write('test/output/line_jruby_error.png')
466
+ end
467
+
468
+ private
469
+
470
+ def bmi(params={})
471
+ g = basic_graph()
472
+
473
+ g.y_axis_label = 'BMI'
474
+
475
+ bmis = [24.3, 23.9, 23.7, 23.7, 23.6, 23.9, 23.6, 23.7, 23.4, 23.4, 23.4, 22.9]
476
+
477
+ g.data( 'BMI', bmis )
478
+ g.hide_legend = true
479
+ return g
480
+ end
481
+
482
+ # TODO Reset data after each theme
483
+ def line_graph_with_themes(size=nil)
484
+ g = Gruff::Line.new(size)
485
+ g.title = "Multi-Line Graph Test #{size}"
486
+ g.labels = @labels
487
+ g.baseline_value = 90
488
+ @datasets.each do |data|
489
+ g.data(data[0], data[1])
490
+ end
491
+ # Default theme
492
+ g.write("test/output/line_theme_keynote_#{size}.png")
493
+
494
+ g = Gruff::Line.new(size)
495
+ g.title = "Multi-Line Graph Test #{size}"
496
+ g.labels = @labels
497
+ g.baseline_value = 90
498
+ g.theme_37signals
499
+ @datasets.each do |data|
500
+ g.data(data[0], data[1])
501
+ end
502
+ g.write("test/output/line_theme_37signals_#{size}.png")
503
+
504
+ g = Gruff::Line.new(size)
505
+ g.title = "Multi-Line Graph Test #{size}"
506
+ g.labels = @labels
507
+ g.baseline_value = 90
508
+ g.theme_rails_keynote
509
+ @datasets.each do |data|
510
+ g.data(data[0], data[1])
511
+ end
512
+ g.write("test/output/line_theme_rails_keynote_#{size}.png")
513
+
514
+ g = Gruff::Line.new(size)
515
+ g.title = "Multi-Line Graph Test #{size}"
516
+ g.labels = @labels
517
+ g.baseline_value = 90
518
+ g.theme_odeo
519
+ @datasets.each do |data|
520
+ g.data(data[0], data[1])
521
+ end
522
+ g.write("test/output/line_theme_odeo_#{size}.png")
523
+ end
524
+
525
+ def setup_pos_neg(size=800)
526
+ g = Gruff::Line.new(size)
527
+ g.title = "Pos/Neg Line Graph Test"
528
+ g.labels = {
529
+ 0 => '5/6',
530
+ 1 => '5/15',
531
+ 2 => '5/24',
532
+ 3 => '5/30',
533
+ }
534
+ g.data(:apples, [-1, 0, 4, -4])
535
+ g.data(:peaches, [10, 8, 6, 3])
536
+ return g
537
+ end
538
+
539
+
540
+ def setup_all_neg(size=800)
541
+ g = Gruff::Line.new(size)
542
+ g.title = "All Neg Line Graph Test"
543
+ g.labels = {
544
+ 0 => '5/6',
545
+ 1 => '5/15',
546
+ 2 => '5/24',
547
+ 3 => '5/30',
548
+ }
549
+ g.data(:apples, [-1, -5, -20, -4])
550
+ g.data(:peaches, [-10, -8, -6, -3])
551
+ g
552
+ end
553
+
554
+ end