gruff 0.4.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (584) hide show
  1. data/.gitignore +7 -0
  2. data/.travis.yml +14 -0
  3. data/Gemfile +10 -0
  4. data/History.txt +193 -0
  5. data/MIT-LICENSE +22 -0
  6. data/Manifest.txt +81 -0
  7. data/README.md +139 -0
  8. data/RELEASE.md +92 -0
  9. data/Rakefile +218 -0
  10. data/assets/bubble.png +0 -0
  11. data/assets/city_scene/background/0000.png +0 -0
  12. data/assets/city_scene/background/0600.png +0 -0
  13. data/assets/city_scene/background/2000.png +0 -0
  14. data/assets/city_scene/clouds/cloudy.png +0 -0
  15. data/assets/city_scene/clouds/partly_cloudy.png +0 -0
  16. data/assets/city_scene/clouds/stormy.png +0 -0
  17. data/assets/city_scene/grass/default.png +0 -0
  18. data/assets/city_scene/haze/true.png +0 -0
  19. data/assets/city_scene/number_sample/1.png +0 -0
  20. data/assets/city_scene/number_sample/2.png +0 -0
  21. data/assets/city_scene/number_sample/default.png +0 -0
  22. data/assets/city_scene/sky/0000.png +0 -0
  23. data/assets/city_scene/sky/0200.png +0 -0
  24. data/assets/city_scene/sky/0400.png +0 -0
  25. data/assets/city_scene/sky/0600.png +0 -0
  26. data/assets/city_scene/sky/0800.png +0 -0
  27. data/assets/city_scene/sky/1000.png +0 -0
  28. data/assets/city_scene/sky/1200.png +0 -0
  29. data/assets/city_scene/sky/1400.png +0 -0
  30. data/assets/city_scene/sky/1500.png +0 -0
  31. data/assets/city_scene/sky/1700.png +0 -0
  32. data/assets/city_scene/sky/2000.png +0 -0
  33. data/assets/pc306715.jpg +0 -0
  34. data/assets/plastik/blue.png +0 -0
  35. data/assets/plastik/green.png +0 -0
  36. data/assets/plastik/red.png +0 -0
  37. data/gruff.gemspec +36 -0
  38. data/init.rb +2 -0
  39. data/lib/gruff.rb +32 -0
  40. data/lib/gruff/accumulator_bar.rb +18 -0
  41. data/lib/gruff/area.rb +51 -0
  42. data/lib/gruff/bar.rb +108 -0
  43. data/lib/gruff/bar_conversion.rb +46 -0
  44. data/lib/gruff/base.rb +1169 -0
  45. data/lib/gruff/bezier.rb +46 -0
  46. data/lib/gruff/bullet.rb +111 -0
  47. data/lib/gruff/deprecated.rb +39 -0
  48. data/lib/gruff/dot.rb +125 -0
  49. data/lib/gruff/line.rb +242 -0
  50. data/lib/gruff/mini/bar.rb +37 -0
  51. data/lib/gruff/mini/legend.rb +109 -0
  52. data/lib/gruff/mini/pie.rb +36 -0
  53. data/lib/gruff/mini/side_bar.rb +35 -0
  54. data/lib/gruff/net.rb +138 -0
  55. data/lib/gruff/photo_bar.rb +100 -0
  56. data/lib/gruff/pie.rb +124 -0
  57. data/lib/gruff/scatter.rb +264 -0
  58. data/lib/gruff/scene.rb +209 -0
  59. data/lib/gruff/side_bar.rb +138 -0
  60. data/lib/gruff/side_stacked_bar.rb +97 -0
  61. data/lib/gruff/spider.rb +131 -0
  62. data/lib/gruff/stacked_area.rb +67 -0
  63. data/lib/gruff/stacked_bar.rb +57 -0
  64. data/lib/gruff/stacked_mixin.rb +23 -0
  65. data/lib/gruff/themes.rb +102 -0
  66. data/lib/gruff/version.rb +3 -0
  67. data/rails_generators/gruff/gruff_generator.rb +63 -0
  68. data/rails_generators/gruff/templates/controller.rb +32 -0
  69. data/rails_generators/gruff/templates/functional_test.rb +24 -0
  70. data/test/gruff_test_case.rb +155 -0
  71. data/test/image_compare.rb +58 -0
  72. data/test/output/accum_bar.png +0 -0
  73. data/test/output/area_keynote.png +0 -0
  74. data/test/output/area_keynote_small.png +0 -0
  75. data/test/output/area_many.png +0 -0
  76. data/test/output/area_many_areas_small.png +0 -0
  77. data/test/output/area_tiny.png +0 -0
  78. data/test/output/area_wide.png +0 -0
  79. data/test/output/bar2_wrapped_legend_16_400.png +0 -0
  80. data/test/output/bar2_wrapped_legend_16_800.png +0 -0
  81. data/test/output/bar2_wrapped_legend_30_400.png +0 -0
  82. data/test/output/bar2_wrapped_legend_30_800.png +0 -0
  83. data/test/output/bar2_wrapped_legend_4_400.png +0 -0
  84. data/test/output/bar2_wrapped_legend_4_800.png +0 -0
  85. data/test/output/bar2_wrapped_legend__400.png +0 -0
  86. data/test/output/bar2_wrapped_legend__800.png +0 -0
  87. data/test/output/bar_background_gradient_bottom_top.png +0 -0
  88. data/test/output/bar_background_gradient_left_right.png +0 -0
  89. data/test/output/bar_background_gradient_right_left.png +0 -0
  90. data/test/output/bar_background_gradient_top_bottom.png +0 -0
  91. data/test/output/bar_background_gradient_topleft_bottomright.png +0 -0
  92. data/test/output/bar_background_gradient_topright_bottomleft.png +0 -0
  93. data/test/output/bar_formatted_numbers.png +0 -0
  94. data/test/output/bar_keynote.png +0 -0
  95. data/test/output/bar_keynote_small.png +0 -0
  96. data/test/output/bar_long_legend_text.png +0 -0
  97. data/test/output/bar_manual_colors.png +0 -0
  98. data/test/output/bar_marker_shadow.png +0 -0
  99. data/test/output/bar_nearly_zero_max_10.png +0 -0
  100. data/test/output/bar_no_legend.png +0 -0
  101. data/test/output/bar_no_line_markers.png +0 -0
  102. data/test/output/bar_no_title.png +0 -0
  103. data/test/output/bar_no_title_or_legend.png +0 -0
  104. data/test/output/bar_odeo.png +0 -0
  105. data/test/output/bar_one_value.png +0 -0
  106. data/test/output/bar_pos_neg.png +0 -0
  107. data/test/output/bar_rails_keynote.png +0 -0
  108. data/test/output/bar_set_absolute_trunc.png +0 -0
  109. data/test/output/bar_set_label_stagger_height.png +0 -0
  110. data/test/output/bar_set_legend_box_size_lg.png +0 -0
  111. data/test/output/bar_set_legend_box_size_sm.png +0 -0
  112. data/test/output/bar_set_marker.png +0 -0
  113. data/test/output/bar_set_trailing_dots_trunc.png +0 -0
  114. data/test/output/bar_spacing_full.png +0 -0
  115. data/test/output/bar_spacing_half.png +0 -0
  116. data/test/output/bar_spacing_none.png +0 -0
  117. data/test/output/bar_tall_graph.png +0 -0
  118. data/test/output/bar_tall_graph_small.png +0 -0
  119. data/test/output/bar_themed.png +0 -0
  120. data/test/output/bar_title_margin.png +0 -0
  121. data/test/output/bar_value_labels.png +0 -0
  122. data/test/output/bar_wide_graph.png +0 -0
  123. data/test/output/bar_wide_graph_small.png +0 -0
  124. data/test/output/bar_wrapped_legend_16_400.png +0 -0
  125. data/test/output/bar_wrapped_legend_16_800.png +0 -0
  126. data/test/output/bar_wrapped_legend_30_400.png +0 -0
  127. data/test/output/bar_wrapped_legend_30_800.png +0 -0
  128. data/test/output/bar_wrapped_legend_4_400.png +0 -0
  129. data/test/output/bar_wrapped_legend_4_800.png +0 -0
  130. data/test/output/bar_wrapped_legend__400.png +0 -0
  131. data/test/output/bar_wrapped_legend__800.png +0 -0
  132. data/test/output/bar_x_y_labels.png +0 -0
  133. data/test/output/bar_y_increment_1.png +0 -0
  134. data/test/output/bar_y_increment_2.0.png +0 -0
  135. data/test/output/bar_y_increment_20.png +0 -0
  136. data/test/output/bar_y_increment_5.png +0 -0
  137. data/test/output/bar_zero_marker_count.png +0 -0
  138. data/test/output/bar_zero_spacing.png +0 -0
  139. data/test/output/bezier.png +0 -0
  140. data/test/output/bezier_2.png +0 -0
  141. data/test/output/bezier_3.png +0 -0
  142. data/test/output/bullet_greyscale.png +0 -0
  143. data/test/output/bullet_no_options.png +0 -0
  144. data/test/output/dot.png +0 -0
  145. data/test/output/dot_manual_colors.png +0 -0
  146. data/test/output/dot_nearly_zero_max_10.png +0 -0
  147. data/test/output/dot_no_legend.png +0 -0
  148. data/test/output/dot_no_line_markers.png +0 -0
  149. data/test/output/dot_no_title.png +0 -0
  150. data/test/output/dot_no_title_or_legend.png +0 -0
  151. data/test/output/dot_one_value.png +0 -0
  152. data/test/output/dot_pos_neg.png +0 -0
  153. data/test/output/dot_set_legend_box_size_lg.png +0 -0
  154. data/test/output/dot_set_legend_box_size_sm.png +0 -0
  155. data/test/output/dot_set_marker.png +0 -0
  156. data/test/output/dot_small.png +0 -0
  157. data/test/output/dot_tall_graph.png +0 -0
  158. data/test/output/dot_tall_graph_small.png +0 -0
  159. data/test/output/dot_themed.png +0 -0
  160. data/test/output/dot_wide_graph.png +0 -0
  161. data/test/output/dot_wide_graph_small.png +0 -0
  162. data/test/output/dot_x_y_labels.png +0 -0
  163. data/test/output/dot_y_increment_1.png +0 -0
  164. data/test/output/dot_y_increment_2.0.png +0 -0
  165. data/test/output/dot_y_increment_20.png +0 -0
  166. data/test/output/dot_y_increment_5.png +0 -0
  167. data/test/output/enhancements-1.png +0 -0
  168. data/test/output/enhancements.png +0 -0
  169. data/test/output/line_all_neg.png +0 -0
  170. data/test/output/line_all_neg_400.png +0 -0
  171. data/test/output/line_all_neg_no_max.png +0 -0
  172. data/test/output/line_baseline.png +0 -0
  173. data/test/output/line_hang_value.png +0 -0
  174. data/test/output/line_hide_dots.png +0 -0
  175. data/test/output/line_hide_lines.png +0 -0
  176. data/test/output/line_jruby_error.png +0 -0
  177. data/test/output/line_large.png +0 -0
  178. data/test/output/line_large_baseline.png +0 -0
  179. data/test/output/line_legend_at_bottom.png +0 -0
  180. data/test/output/line_many.png +0 -0
  181. data/test/output/line_many_lines_small.png +0 -0
  182. data/test/output/line_many_numbers.png +0 -0
  183. data/test/output/line_marker_label_accuracy.png +0 -0
  184. data/test/output/line_more_sets_than_colors.png +0 -0
  185. data/test/output/line_no_data.png +0 -0
  186. data/test/output/line_no_data_msg.png +0 -0
  187. data/test/output/line_no_data_other.png +0 -0
  188. data/test/output/line_no_hide.png +0 -0
  189. data/test/output/line_no_legend.png +0 -0
  190. data/test/output/line_no_line_markers.png +0 -0
  191. data/test/output/line_no_title.png +0 -0
  192. data/test/output/line_nothing_but_the_graph.png +0 -0
  193. data/test/output/line_one_value.png +0 -0
  194. data/test/output/line_one_value_array.png +0 -0
  195. data/test/output/line_pos_neg.png +0 -0
  196. data/test/output/line_pos_neg_400.png +0 -0
  197. data/test/output/line_similar_high_end_values.png +0 -0
  198. data/test/output/line_similar_high_end_values_with_floor.png +0 -0
  199. data/test/output/line_small_small_zero.png +0 -0
  200. data/test/output/line_small_values.png +0 -0
  201. data/test/output/line_small_values_small.png +0 -0
  202. data/test/output/line_small_zero.png +0 -0
  203. data/test/output/line_some_nil_points.png +0 -0
  204. data/test/output/line_theme_37signals_.png +0 -0
  205. data/test/output/line_theme_37signals_400.png +0 -0
  206. data/test/output/line_theme_keynote_.png +0 -0
  207. data/test/output/line_theme_keynote_400.png +0 -0
  208. data/test/output/line_theme_odeo_.png +0 -0
  209. data/test/output/line_theme_odeo_400.png +0 -0
  210. data/test/output/line_theme_rails_keynote_.png +0 -0
  211. data/test/output/line_theme_rails_keynote_400.png +0 -0
  212. data/test/output/line_tiny.png +0 -0
  213. data/test/output/line_transparent.png +0 -0
  214. data/test/output/line_very_small.png +0 -0
  215. data/test/output/line_wide_graph.png +0 -0
  216. data/test/output/line_wide_graph_small.png +0 -0
  217. data/test/output/line_xy.png +0 -0
  218. data/test/output/line_xy_pairs.png +0 -0
  219. data/test/output/line_y_axis_increment.png +0 -0
  220. data/test/output/mini_bar.png +0 -0
  221. data/test/output/mini_pie.png +0 -0
  222. data/test/output/mini_pie_right_legend.png +0 -0
  223. data/test/output/mini_side_bar.png +0 -0
  224. data/test/output/mini_side_bar_multi_color.png +0 -0
  225. data/test/output/net_dots_tiny.png +0 -0
  226. data/test/output/net_large.png +0 -0
  227. data/test/output/net_many.png +0 -0
  228. data/test/output/net_many_nets_small.png +0 -0
  229. data/test/output/net_no_data.png +0 -0
  230. data/test/output/net_no_data_msg.png +0 -0
  231. data/test/output/net_no_data_other.png +0 -0
  232. data/test/output/net_no_legend.png +0 -0
  233. data/test/output/net_no_net_markers.png +0 -0
  234. data/test/output/net_no_title.png +0 -0
  235. data/test/output/net_nothing_but_the_graph.png +0 -0
  236. data/test/output/net_similar_high_end_values.png +0 -0
  237. data/test/output/net_small.png +0 -0
  238. data/test/output/net_small_small.png +0 -0
  239. data/test/output/net_small_small_zero.png +0 -0
  240. data/test/output/net_small_zero.png +0 -0
  241. data/test/output/net_wide_graph.png +0 -0
  242. data/test/output/net_wide_graph_small.png +0 -0
  243. data/test/output/pie_equal.png +0 -0
  244. data/test/output/pie_grey.png +0 -0
  245. data/test/output/pie_keynote.png +0 -0
  246. data/test/output/pie_keynote_small.png +0 -0
  247. data/test/output/pie_legend.png +0 -0
  248. data/test/output/pie_legend_small.png +0 -0
  249. data/test/output/pie_nearly_equal.png +0 -0
  250. data/test/output/pie_one_val.png +0 -0
  251. data/test/output/pie_pastel.png +0 -0
  252. data/test/output/pie_simple.png +0 -0
  253. data/test/output/pie_wide.png +0 -0
  254. data/test/output/pie_wrapped_legend_16_400.png +0 -0
  255. data/test/output/pie_wrapped_legend_16_800.png +0 -0
  256. data/test/output/pie_wrapped_legend_30_400.png +0 -0
  257. data/test/output/pie_wrapped_legend_30_800.png +0 -0
  258. data/test/output/pie_wrapped_legend_4_400.png +0 -0
  259. data/test/output/pie_wrapped_legend_4_800.png +0 -0
  260. data/test/output/pie_wrapped_legend__400.png +0 -0
  261. data/test/output/pie_wrapped_legend__800.png +0 -0
  262. data/test/output/pie_zero.png +0 -0
  263. data/test/output/scatter_all_neg.png +0 -0
  264. data/test/output/scatter_all_neg_400.png +0 -0
  265. data/test/output/scatter_basic.png +0 -0
  266. data/test/output/scatter_many.png +0 -0
  267. data/test/output/scatter_no_data.png +0 -0
  268. data/test/output/scatter_no_data_msg.png +0 -0
  269. data/test/output/scatter_no_data_other.png +0 -0
  270. data/test/output/scatter_no_hide.png +0 -0
  271. data/test/output/scatter_no_labels.png +0 -0
  272. data/test/output/scatter_no_legend.png +0 -0
  273. data/test/output/scatter_no_line_markers.png +0 -0
  274. data/test/output/scatter_no_title.png +0 -0
  275. data/test/output/scatter_nothing_but_the_graph.png +0 -0
  276. data/test/output/scatter_pos_neg.png +0 -0
  277. data/test/output/scatter_pos_neg_400.png +0 -0
  278. data/test/output/scatter_wide_graph.png +0 -0
  279. data/test/output/scatter_wide_graph_small.png +0 -0
  280. data/test/output/scene_hazy_night.png +0 -0
  281. data/test/output/scene_not_hazy_day.png +0 -0
  282. data/test/output/scene_partly_cloudy_day.png +0 -0
  283. data/test/output/scene_stormy_day.png +0 -0
  284. data/test/output/scene_stormy_night.png +0 -0
  285. data/test/output/side_bar.png +0 -0
  286. data/test/output/side_bar_data_range.png +0 -0
  287. data/test/output/side_bar_labels.png +0 -0
  288. data/test/output/side_bar_spacing_full.png +0 -0
  289. data/test/output/side_bar_spacing_half.png +0 -0
  290. data/test/output/side_bar_spacing_none.png +0 -0
  291. data/test/output/side_stacked_bar_keynote.png +0 -0
  292. data/test/output/side_stacked_bar_keynote_small.png +0 -0
  293. data/test/output/side_stacked_bar_labels.png +0 -0
  294. data/test/output/side_stacked_bar_long_label.png +0 -0
  295. data/test/output/side_stacked_bar_wide.png +0 -0
  296. data/test/output/spider_37signals.png +0 -0
  297. data/test/output/spider_equal.png +0 -0
  298. data/test/output/spider_keynote.png +0 -0
  299. data/test/output/spider_legend.png +0 -0
  300. data/test/output/spider_legend_small.png +0 -0
  301. data/test/output/spider_lots_of_data.png +0 -0
  302. data/test/output/spider_lots_of_data_normal_names.png +0 -0
  303. data/test/output/spider_nearly_equal.png +0 -0
  304. data/test/output/spider_no_axes.png +0 -0
  305. data/test/output/spider_no_background.png +0 -0
  306. data/test/output/spider_no_print.png +0 -0
  307. data/test/output/spider_overlay_1.png +0 -0
  308. data/test/output/spider_overlay_2.png +0 -0
  309. data/test/output/spider_rotation.png +0 -0
  310. data/test/output/spider_small.png +0 -0
  311. data/test/output/spider_wide.png +0 -0
  312. data/test/output/spider_zero.png +0 -0
  313. data/test/output/stacked_area_keynote.png +0 -0
  314. data/test/output/stacked_area_keynote_small.png +0 -0
  315. data/test/output/stacked_bar_keynote.png +0 -0
  316. data/test/output/stacked_bar_keynote_small.png +0 -0
  317. data/test/output_java/accum_bar.png +0 -0
  318. data/test/output_java/area_keynote.png +0 -0
  319. data/test/output_java/area_keynote_small.png +0 -0
  320. data/test/output_java/area_many.png +0 -0
  321. data/test/output_java/area_many_areas_small.png +0 -0
  322. data/test/output_java/area_tiny.png +0 -0
  323. data/test/output_java/area_wide.png +0 -0
  324. data/test/output_java/bar2_wrapped_legend_16_400.png +0 -0
  325. data/test/output_java/bar2_wrapped_legend_16_800.png +0 -0
  326. data/test/output_java/bar2_wrapped_legend_30_400.png +0 -0
  327. data/test/output_java/bar2_wrapped_legend_30_800.png +0 -0
  328. data/test/output_java/bar2_wrapped_legend_4_400.png +0 -0
  329. data/test/output_java/bar2_wrapped_legend_4_800.png +0 -0
  330. data/test/output_java/bar2_wrapped_legend__400.png +0 -0
  331. data/test/output_java/bar2_wrapped_legend__800.png +0 -0
  332. data/test/output_java/bar_background_gradient_bottom_top.png +0 -0
  333. data/test/output_java/bar_background_gradient_left_right.png +0 -0
  334. data/test/output_java/bar_background_gradient_right_left.png +0 -0
  335. data/test/output_java/bar_background_gradient_top_bottom.png +0 -0
  336. data/test/output_java/bar_background_gradient_topleft_bottomright.png +0 -0
  337. data/test/output_java/bar_background_gradient_topright_bottomleft.png +0 -0
  338. data/test/output_java/bar_formatted_numbers.png +0 -0
  339. data/test/output_java/bar_keynote.png +0 -0
  340. data/test/output_java/bar_keynote_small.png +0 -0
  341. data/test/output_java/bar_long_legend_text.png +0 -0
  342. data/test/output_java/bar_manual_colors.png +0 -0
  343. data/test/output_java/bar_marker_shadow.png +0 -0
  344. data/test/output_java/bar_nearly_zero_max_10.png +0 -0
  345. data/test/output_java/bar_no_legend.png +0 -0
  346. data/test/output_java/bar_no_line_markers.png +0 -0
  347. data/test/output_java/bar_no_title.png +0 -0
  348. data/test/output_java/bar_no_title_or_legend.png +0 -0
  349. data/test/output_java/bar_odeo.png +0 -0
  350. data/test/output_java/bar_one_value.png +0 -0
  351. data/test/output_java/bar_pos_neg.png +0 -0
  352. data/test/output_java/bar_rails_keynote.png +0 -0
  353. data/test/output_java/bar_set_absolute_trunc.png +0 -0
  354. data/test/output_java/bar_set_label_stagger_height.png +0 -0
  355. data/test/output_java/bar_set_legend_box_size_lg.png +0 -0
  356. data/test/output_java/bar_set_legend_box_size_sm.png +0 -0
  357. data/test/output_java/bar_set_marker.png +0 -0
  358. data/test/output_java/bar_set_trailing_dots_trunc.png +0 -0
  359. data/test/output_java/bar_spacing_full.png +0 -0
  360. data/test/output_java/bar_spacing_half.png +0 -0
  361. data/test/output_java/bar_spacing_none.png +0 -0
  362. data/test/output_java/bar_tall_graph.png +0 -0
  363. data/test/output_java/bar_tall_graph_small.png +0 -0
  364. data/test/output_java/bar_themed.png +0 -0
  365. data/test/output_java/bar_title_margin.png +0 -0
  366. data/test/output_java/bar_value_labels.png +0 -0
  367. data/test/output_java/bar_wide_graph.png +0 -0
  368. data/test/output_java/bar_wide_graph_small.png +0 -0
  369. data/test/output_java/bar_wrapped_legend_16_400.png +0 -0
  370. data/test/output_java/bar_wrapped_legend_16_800.png +0 -0
  371. data/test/output_java/bar_wrapped_legend_30_400.png +0 -0
  372. data/test/output_java/bar_wrapped_legend_30_800.png +0 -0
  373. data/test/output_java/bar_wrapped_legend_4_400.png +0 -0
  374. data/test/output_java/bar_wrapped_legend_4_800.png +0 -0
  375. data/test/output_java/bar_wrapped_legend__400.png +0 -0
  376. data/test/output_java/bar_wrapped_legend__800.png +0 -0
  377. data/test/output_java/bar_x_y_labels.png +0 -0
  378. data/test/output_java/bar_y_increment_1.png +0 -0
  379. data/test/output_java/bar_y_increment_2.0.png +0 -0
  380. data/test/output_java/bar_y_increment_20.png +0 -0
  381. data/test/output_java/bar_y_increment_5.png +0 -0
  382. data/test/output_java/bar_zero_marker_count.png +0 -0
  383. data/test/output_java/bar_zero_spacing.png +0 -0
  384. data/test/output_java/bezier.png +0 -0
  385. data/test/output_java/bezier_2.png +0 -0
  386. data/test/output_java/bezier_3.png +0 -0
  387. data/test/output_java/bullet_greyscale.png +0 -0
  388. data/test/output_java/bullet_no_options.png +0 -0
  389. data/test/output_java/dot.png +0 -0
  390. data/test/output_java/dot_manual_colors.png +0 -0
  391. data/test/output_java/dot_nearly_zero_max_10.png +0 -0
  392. data/test/output_java/dot_no_legend.png +0 -0
  393. data/test/output_java/dot_no_line_markers.png +0 -0
  394. data/test/output_java/dot_no_title.png +0 -0
  395. data/test/output_java/dot_no_title_or_legend.png +0 -0
  396. data/test/output_java/dot_one_value.png +0 -0
  397. data/test/output_java/dot_pos_neg.png +0 -0
  398. data/test/output_java/dot_set_legend_box_size_lg.png +0 -0
  399. data/test/output_java/dot_set_legend_box_size_sm.png +0 -0
  400. data/test/output_java/dot_set_marker.png +0 -0
  401. data/test/output_java/dot_small.png +0 -0
  402. data/test/output_java/dot_tall_graph.png +0 -0
  403. data/test/output_java/dot_tall_graph_small.png +0 -0
  404. data/test/output_java/dot_themed.png +0 -0
  405. data/test/output_java/dot_wide_graph.png +0 -0
  406. data/test/output_java/dot_wide_graph_small.png +0 -0
  407. data/test/output_java/dot_x_y_labels.png +0 -0
  408. data/test/output_java/dot_y_increment_1.png +0 -0
  409. data/test/output_java/dot_y_increment_2.0.png +0 -0
  410. data/test/output_java/dot_y_increment_20.png +0 -0
  411. data/test/output_java/dot_y_increment_5.png +0 -0
  412. data/test/output_java/enhancements-1.png +0 -0
  413. data/test/output_java/enhancements.png +0 -0
  414. data/test/output_java/line_all_neg.png +0 -0
  415. data/test/output_java/line_all_neg_400.png +0 -0
  416. data/test/output_java/line_all_neg_no_max.png +0 -0
  417. data/test/output_java/line_baseline.png +0 -0
  418. data/test/output_java/line_hang_value.png +0 -0
  419. data/test/output_java/line_hide_dots.png +0 -0
  420. data/test/output_java/line_hide_lines.png +0 -0
  421. data/test/output_java/line_jruby_error.png +0 -0
  422. data/test/output_java/line_large.png +0 -0
  423. data/test/output_java/line_large_baseline.png +0 -0
  424. data/test/output_java/line_legend_at_bottom.png +0 -0
  425. data/test/output_java/line_many.png +0 -0
  426. data/test/output_java/line_many_lines_small.png +0 -0
  427. data/test/output_java/line_many_numbers.png +0 -0
  428. data/test/output_java/line_marker_label_accuracy.png +0 -0
  429. data/test/output_java/line_more_sets_than_colors.png +0 -0
  430. data/test/output_java/line_no_data.png +0 -0
  431. data/test/output_java/line_no_data_msg.png +0 -0
  432. data/test/output_java/line_no_data_other.png +0 -0
  433. data/test/output_java/line_no_hide.png +0 -0
  434. data/test/output_java/line_no_legend.png +0 -0
  435. data/test/output_java/line_no_line_markers.png +0 -0
  436. data/test/output_java/line_no_title.png +0 -0
  437. data/test/output_java/line_nothing_but_the_graph.png +0 -0
  438. data/test/output_java/line_one_value.png +0 -0
  439. data/test/output_java/line_one_value_array.png +0 -0
  440. data/test/output_java/line_pos_neg.png +0 -0
  441. data/test/output_java/line_pos_neg_400.png +0 -0
  442. data/test/output_java/line_similar_high_end_values.png +0 -0
  443. data/test/output_java/line_similar_high_end_values_with_floor.png +0 -0
  444. data/test/output_java/line_small_small_zero.png +0 -0
  445. data/test/output_java/line_small_values.png +0 -0
  446. data/test/output_java/line_small_values_small.png +0 -0
  447. data/test/output_java/line_small_zero.png +0 -0
  448. data/test/output_java/line_some_nil_points.png +0 -0
  449. data/test/output_java/line_theme_37signals_.png +0 -0
  450. data/test/output_java/line_theme_37signals_400.png +0 -0
  451. data/test/output_java/line_theme_keynote_.png +0 -0
  452. data/test/output_java/line_theme_keynote_400.png +0 -0
  453. data/test/output_java/line_theme_odeo_.png +0 -0
  454. data/test/output_java/line_theme_odeo_400.png +0 -0
  455. data/test/output_java/line_theme_rails_keynote_.png +0 -0
  456. data/test/output_java/line_theme_rails_keynote_400.png +0 -0
  457. data/test/output_java/line_tiny.png +0 -0
  458. data/test/output_java/line_transparent.png +0 -0
  459. data/test/output_java/line_very_small.png +0 -0
  460. data/test/output_java/line_wide_graph.png +0 -0
  461. data/test/output_java/line_wide_graph_small.png +0 -0
  462. data/test/output_java/line_xy.png +0 -0
  463. data/test/output_java/line_xy_pairs.png +0 -0
  464. data/test/output_java/line_y_axis_increment.png +0 -0
  465. data/test/output_java/mini_bar.png +0 -0
  466. data/test/output_java/mini_pie.png +0 -0
  467. data/test/output_java/mini_pie_right_legend.png +0 -0
  468. data/test/output_java/mini_side_bar.png +0 -0
  469. data/test/output_java/mini_side_bar_multi_color.png +0 -0
  470. data/test/output_java/net_dots_tiny.png +0 -0
  471. data/test/output_java/net_large.png +0 -0
  472. data/test/output_java/net_many.png +0 -0
  473. data/test/output_java/net_many_nets_small.png +0 -0
  474. data/test/output_java/net_no_data.png +0 -0
  475. data/test/output_java/net_no_data_msg.png +0 -0
  476. data/test/output_java/net_no_data_other.png +0 -0
  477. data/test/output_java/net_no_legend.png +0 -0
  478. data/test/output_java/net_no_net_markers.png +0 -0
  479. data/test/output_java/net_no_title.png +0 -0
  480. data/test/output_java/net_nothing_but_the_graph.png +0 -0
  481. data/test/output_java/net_similar_high_end_values.png +0 -0
  482. data/test/output_java/net_small.png +0 -0
  483. data/test/output_java/net_small_small.png +0 -0
  484. data/test/output_java/net_small_small_zero.png +0 -0
  485. data/test/output_java/net_small_zero.png +0 -0
  486. data/test/output_java/net_wide_graph.png +0 -0
  487. data/test/output_java/net_wide_graph_small.png +0 -0
  488. data/test/output_java/pie_equal.png +0 -0
  489. data/test/output_java/pie_grey.png +0 -0
  490. data/test/output_java/pie_keynote.png +0 -0
  491. data/test/output_java/pie_keynote_small.png +0 -0
  492. data/test/output_java/pie_legend.png +0 -0
  493. data/test/output_java/pie_legend_small.png +0 -0
  494. data/test/output_java/pie_nearly_equal.png +0 -0
  495. data/test/output_java/pie_one_val.png +0 -0
  496. data/test/output_java/pie_pastel.png +0 -0
  497. data/test/output_java/pie_simple.png +0 -0
  498. data/test/output_java/pie_wide.png +0 -0
  499. data/test/output_java/pie_wrapped_legend_16_400.png +0 -0
  500. data/test/output_java/pie_wrapped_legend_16_800.png +0 -0
  501. data/test/output_java/pie_wrapped_legend_30_400.png +0 -0
  502. data/test/output_java/pie_wrapped_legend_30_800.png +0 -0
  503. data/test/output_java/pie_wrapped_legend_4_400.png +0 -0
  504. data/test/output_java/pie_wrapped_legend_4_800.png +0 -0
  505. data/test/output_java/pie_wrapped_legend__400.png +0 -0
  506. data/test/output_java/pie_wrapped_legend__800.png +0 -0
  507. data/test/output_java/pie_zero.png +0 -0
  508. data/test/output_java/scatter_all_neg.png +0 -0
  509. data/test/output_java/scatter_all_neg_400.png +0 -0
  510. data/test/output_java/scatter_basic.png +0 -0
  511. data/test/output_java/scatter_many.png +0 -0
  512. data/test/output_java/scatter_no_data.png +0 -0
  513. data/test/output_java/scatter_no_data_msg.png +0 -0
  514. data/test/output_java/scatter_no_data_other.png +0 -0
  515. data/test/output_java/scatter_no_hide.png +0 -0
  516. data/test/output_java/scatter_no_labels.png +0 -0
  517. data/test/output_java/scatter_no_legend.png +0 -0
  518. data/test/output_java/scatter_no_line_markers.png +0 -0
  519. data/test/output_java/scatter_no_title.png +0 -0
  520. data/test/output_java/scatter_nothing_but_the_graph.png +0 -0
  521. data/test/output_java/scatter_pos_neg.png +0 -0
  522. data/test/output_java/scatter_pos_neg_400.png +0 -0
  523. data/test/output_java/scatter_wide_graph.png +0 -0
  524. data/test/output_java/scatter_wide_graph_small.png +0 -0
  525. data/test/output_java/scene_hazy_night.png +0 -0
  526. data/test/output_java/scene_not_hazy_day.png +0 -0
  527. data/test/output_java/scene_partly_cloudy_day.png +0 -0
  528. data/test/output_java/scene_stormy_day.png +0 -0
  529. data/test/output_java/scene_stormy_night.png +0 -0
  530. data/test/output_java/side_bar.png +0 -0
  531. data/test/output_java/side_bar_data_range.png +0 -0
  532. data/test/output_java/side_bar_labels.png +0 -0
  533. data/test/output_java/side_bar_spacing_full.png +0 -0
  534. data/test/output_java/side_bar_spacing_half.png +0 -0
  535. data/test/output_java/side_bar_spacing_none.png +0 -0
  536. data/test/output_java/side_stacked_bar_keynote.png +0 -0
  537. data/test/output_java/side_stacked_bar_keynote_small.png +0 -0
  538. data/test/output_java/side_stacked_bar_labels.png +0 -0
  539. data/test/output_java/side_stacked_bar_long_label.png +0 -0
  540. data/test/output_java/side_stacked_bar_wide.png +0 -0
  541. data/test/output_java/spider_37signals.png +0 -0
  542. data/test/output_java/spider_equal.png +0 -0
  543. data/test/output_java/spider_keynote.png +0 -0
  544. data/test/output_java/spider_legend.png +0 -0
  545. data/test/output_java/spider_legend_small.png +0 -0
  546. data/test/output_java/spider_lots_of_data.png +0 -0
  547. data/test/output_java/spider_lots_of_data_normal_names.png +0 -0
  548. data/test/output_java/spider_nearly_equal.png +0 -0
  549. data/test/output_java/spider_no_axes.png +0 -0
  550. data/test/output_java/spider_no_background.png +0 -0
  551. data/test/output_java/spider_no_print.png +0 -0
  552. data/test/output_java/spider_overlay_1.png +0 -0
  553. data/test/output_java/spider_overlay_2.png +0 -0
  554. data/test/output_java/spider_rotation.png +0 -0
  555. data/test/output_java/spider_small.png +0 -0
  556. data/test/output_java/spider_wide.png +0 -0
  557. data/test/output_java/spider_zero.png +0 -0
  558. data/test/output_java/stacked_area_keynote.png +0 -0
  559. data/test/output_java/stacked_area_keynote_small.png +0 -0
  560. data/test/output_java/stacked_bar_keynote.png +0 -0
  561. data/test/output_java/stacked_bar_keynote_small.png +0 -0
  562. data/test/test_accumulator_bar.rb +51 -0
  563. data/test/test_area.rb +134 -0
  564. data/test/test_bar.rb +505 -0
  565. data/test/test_base.rb +8 -0
  566. data/test/test_bezier.rb +33 -0
  567. data/test/test_bullet.rb +26 -0
  568. data/test/test_dot.rb +263 -0
  569. data/test/test_legend.rb +68 -0
  570. data/test/test_line.rb +626 -0
  571. data/test/test_mini_bar.rb +33 -0
  572. data/test/test_mini_pie.rb +25 -0
  573. data/test/test_mini_side_bar.rb +36 -0
  574. data/test/test_net.rb +231 -0
  575. data/test/test_photo.rb +41 -0
  576. data/test/test_pie.rb +154 -0
  577. data/test/test_scatter.rb +233 -0
  578. data/test/test_scene.rb +100 -0
  579. data/test/test_side_bar.rb +56 -0
  580. data/test/test_sidestacked_bar.rb +105 -0
  581. data/test/test_spider.rb +226 -0
  582. data/test/test_stacked_area.rb +52 -0
  583. data/test/test_stacked_bar.rb +52 -0
  584. metadata +1176 -0
@@ -0,0 +1,51 @@
1
+ require File.dirname(__FILE__) + '/gruff_test_case'
2
+
3
+ class TestGruffAccumulatorBar < GruffTestCase
4
+
5
+ # TODO Delete old output files once when starting tests
6
+
7
+ def setup
8
+ super
9
+ @datasets = [
10
+ (1..20).to_a.map { rand(10) }
11
+ ]
12
+ end
13
+
14
+ def test_accumulator
15
+ g = Gruff::AccumulatorBar.new 500
16
+ g.title = 'Your Savings'
17
+ g.hide_legend = true
18
+
19
+ # g.font = File.expand_path(File.dirname(__FILE__) + "/../assets/fonts/ATMA____.TTF")
20
+
21
+ g.marker_font_size = 18
22
+
23
+ g.theme = {
24
+ :colors => ['#aedaa9', '#12a702'],
25
+ :marker_color => '#dddddd',
26
+ :font_color => 'black',
27
+ :background_colors => 'white'
28
+ # :background_image => File.expand_path(File.dirname(__FILE__) + "/../assets/backgrounds/43things.png")
29
+ }
30
+
31
+ # Attempt at negative numbers
32
+ # g.data 'Savings', (1..20).to_a.map { rand(10) * (rand(2) > 0 ? 1 : -1) }
33
+ g.data 'Savings', (1..12).to_a.map { rand(100) }
34
+ g.labels = (0..11).to_a.inject({}) {|memo, index| {index => '12-26'}.merge(memo)}
35
+
36
+ g.maximum_value = 1000
37
+ g.minimum_value = 0
38
+
39
+ g.write('test/output/accum_bar.png')
40
+ end
41
+
42
+ def test_too_many_args
43
+ assert_raise(Gruff::IncorrectNumberOfDatasetsException) {
44
+ g = Gruff::AccumulatorBar.new
45
+ g.data 'First', [1,1,1]
46
+ g.data 'Too Many', [1,1,1]
47
+ g.write('test/output/_SHOULD_NOT_ACTUALLY_BE_WRITTEN.png')
48
+ }
49
+ end
50
+
51
+ end
@@ -0,0 +1,134 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/gruff_test_case"
4
+
5
+ class TestGruffArea < GruffTestCase
6
+
7
+ def setup
8
+ super
9
+ @datasets = [
10
+ [:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]],
11
+ [:Charles, [80, 54, 67, 54, 68, 70, 90, 95]],
12
+ [:Julie, [22, 29, 35, 38, 36, 40, 46, 57]],
13
+ [:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
14
+ [:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
15
+ ["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
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_area_graph
30
+ g = Gruff::Area.new
31
+ g.title = "Visual Multi-Area Graph Test"
32
+ g.labels = {
33
+ 0 => '5/6',
34
+ 2 => '5/15',
35
+ 4 => '5/24',
36
+ 6 => '5/30',
37
+ }
38
+ @datasets.each do |data|
39
+ g.data(data[0], data[1])
40
+ end
41
+
42
+ # Default theme
43
+ g.write("test/output/area_keynote.png")
44
+ end
45
+
46
+ def test_resize
47
+ g = Gruff::Area.new(400)
48
+ g.title = "Small Size Multi-Area Graph Test"
49
+ g.labels = {
50
+ 0 => '5/6',
51
+ 2 => '5/15',
52
+ 4 => '5/24',
53
+ 6 => '5/30',
54
+ }
55
+ @datasets.each do |data|
56
+ g.data(data[0], data[1])
57
+ end
58
+
59
+ # Default theme
60
+ g.write("test/output/area_keynote_small.png")
61
+ end
62
+
63
+ def test_many_datapoints
64
+ g = Gruff::Area.new
65
+ g.title = "Many Multi-Area Graph Test"
66
+ g.labels = {
67
+ 0 => 'June',
68
+ 10 => 'July',
69
+ 30 => 'August',
70
+ 50 => 'September',
71
+ }
72
+ g.data('many points', (0..50).collect {|i| rand(100) })
73
+
74
+ # Default theme
75
+ g.write("test/output/area_many.png")
76
+ end
77
+
78
+ def test_many_areas_graph_small
79
+ g = Gruff::Area.new(400)
80
+ g.title = "Many Values Area Test 400px"
81
+ g.labels = {
82
+ 0 => '5/6',
83
+ 10 => '5/15',
84
+ 20 => '5/24',
85
+ 30 => '5/30',
86
+ 40 => '6/4',
87
+ 50 => '6/16'
88
+ }
89
+ %w{jimmy jane philip arthur julie bert}.each do |student_name|
90
+ g.data(student_name, (0..50).collect { |i| rand 100 })
91
+ end
92
+
93
+ # Default theme
94
+ g.write("test/output/area_many_areas_small.png")
95
+ end
96
+
97
+ def test_area_graph_tiny
98
+ g = Gruff::Area.new(300)
99
+ g.title = "Area Test 300px"
100
+ g.labels = {
101
+ 0 => '5/6',
102
+ 10 => '5/15',
103
+ 20 => '5/24',
104
+ 30 => '5/30',
105
+ 40 => '6/4',
106
+ 50 => '6/16'
107
+ }
108
+ %w{jimmy jane philip arthur julie bert}.each do |student_name|
109
+ g.data(student_name, (0..50).collect { |i| rand 100 })
110
+ end
111
+
112
+ # Default theme
113
+ g.write("test/output/area_tiny.png")
114
+ end
115
+
116
+ def test_wide
117
+ g = setup_basic_graph('800x400')
118
+ g.title = "Area Wide"
119
+ g.write("test/output/area_wide.png")
120
+ end
121
+
122
+ protected
123
+
124
+ def setup_basic_graph(size=800)
125
+ g = Gruff::Area.new(size)
126
+ g.title = "My Graph Title"
127
+ g.labels = @sample_labels
128
+ @datasets.each do |data|
129
+ g.data(data[0], data[1])
130
+ end
131
+ return g
132
+ end
133
+
134
+ end
@@ -0,0 +1,505 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + '/gruff_test_case'
4
+
5
+ class TestGruffBar < GruffTestCase
6
+
7
+ # TODO Delete old output files once when starting tests
8
+
9
+ def setup
10
+ super
11
+ @datasets = [
12
+ [:Jimmy, [25, 36, 86, 39]],
13
+ [:Charles, [80, 54, 67, 54]],
14
+ [:Julie, [22, 29, 35, 38]],
15
+ #[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
16
+ #[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
17
+ #["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
18
+ ]
19
+ end
20
+
21
+ def test_bar_graph
22
+ g = setup_basic_graph
23
+ g.title = 'Bar Chart'
24
+ g.write('test/output/bar_keynote.png')
25
+
26
+ g = setup_basic_graph
27
+ g.title = 'Visual Multi-Line Bar Graph Test'
28
+ g.theme = Gruff::Themes::RAILS_KEYNOTE
29
+ g.write('test/output/bar_rails_keynote.png')
30
+
31
+ g = setup_basic_graph
32
+ g.title = 'Visual Multi-Line Bar Graph Test'
33
+ g.theme = Gruff::Themes::ODEO
34
+ g.write('test/output/bar_odeo.png')
35
+ end
36
+
37
+ def test_title_margin
38
+ g = setup_basic_graph
39
+ g.title = 'Bar Graph with Title Margin = 100'
40
+ g.title_margin = 100
41
+ g.write('test/output/bar_title_margin.png')
42
+ end
43
+
44
+ def test_thousand_separators
45
+ g = Gruff::Bar.new(600)
46
+ g.title = 'Formatted numbers'
47
+ g.marker_count = 8
48
+ g.data('data', [4025, 1024, 50257, 703672, 1580456])
49
+ g.write('test/output/bar_formatted_numbers.png')
50
+ end
51
+
52
+ def test_bar_graph_set_colors
53
+ g = Gruff::Bar.new
54
+ g.title = 'Bar Graph With Manual Colors'
55
+ g.legend_margin = 50
56
+ g.labels = {
57
+ 0 => '5/6',
58
+ 1 => '5/15',
59
+ 2 => '5/24',
60
+ 3 => '5/30',
61
+ }
62
+ g.data(:Art, [0, 5, 8, 15], '#990000')
63
+ g.data(:Philosophy, [10, 3, 2, 8], '#009900')
64
+ g.data(:Science, [2, 15, 8, 11], '#990099')
65
+
66
+ g.minimum_value = 0
67
+
68
+ g.write('test/output/bar_manual_colors.png')
69
+ end
70
+
71
+ def test_bar_graph_small
72
+ g = Gruff::Bar.new(400)
73
+ g.title = 'Visual Multi-Line Bar Graph Test'
74
+ g.labels = {
75
+ 0 => '5/6',
76
+ 1 => '5/15',
77
+ 2 => '5/24',
78
+ 3 => '5/30',
79
+ }
80
+ @datasets.each do |data|
81
+ g.data(data[0], data[1])
82
+ end
83
+
84
+ g.write('test/output/bar_keynote_small.png')
85
+ end
86
+
87
+ # Somewhat worthless test. Should an error be thrown?
88
+ # def test_nil_font
89
+ # g = setup_basic_graph 400
90
+ # g.title = "Nil Font"
91
+ # g.font = nil
92
+ # g.write "test/output/bar_nil_font.png"
93
+ # end
94
+
95
+
96
+ def test_no_line_markers
97
+ g = setup_basic_graph(400)
98
+ g.title = 'No Line Markers'
99
+ g.hide_line_markers = true
100
+ g.write('test/output/bar_no_line_markers.png')
101
+ end
102
+
103
+ def test_no_legend
104
+ g = setup_basic_graph(400)
105
+ g.title = 'No Legend'
106
+ g.hide_legend = true
107
+ g.write('test/output/bar_no_legend.png')
108
+ end
109
+
110
+ def test_no_title
111
+ g = setup_basic_graph(400)
112
+ g.title = 'No Title'
113
+ g.hide_title = true
114
+ g.write('test/output/bar_no_title.png')
115
+ end
116
+
117
+ def test_no_title_or_legend
118
+ g = setup_basic_graph(400)
119
+ g.title = 'No Title or Legend'
120
+ g.hide_legend = true
121
+ g.hide_title = true
122
+ g.write('test/output/bar_no_title_or_legend.png')
123
+ end
124
+
125
+ def test_set_marker_count
126
+ g = setup_basic_graph(400)
127
+ g.title = 'Set marker'
128
+ g.marker_count = 10
129
+ g.write('test/output/bar_set_marker.png')
130
+ end
131
+
132
+ def test_set_legend_box_size
133
+ g = setup_basic_graph(400)
134
+ g.title = 'Set Small Legend Box Size'
135
+ g.legend_box_size = 10.0
136
+ g.write('test/output/bar_set_legend_box_size_sm.png')
137
+
138
+ g = setup_basic_graph(400)
139
+ g.title = 'Set Large Legend Box Size'
140
+ g.legend_box_size = 50.0
141
+ g.write('test/output/bar_set_legend_box_size_lg.png')
142
+ end
143
+
144
+ def test_x_y_labels
145
+ g = setup_basic_graph(400)
146
+ g.title = 'X Y Labels'
147
+ g.x_axis_label = 'Score (%)'
148
+ g.y_axis_label = 'Students'
149
+ g.write('test/output/bar_x_y_labels.png')
150
+ end
151
+
152
+ def test_wide_graph
153
+ g = setup_basic_graph('800x400')
154
+ g.title = 'Wide Graph'
155
+ g.write('test/output/bar_wide_graph.png')
156
+
157
+ g = setup_basic_graph('400x200')
158
+ g.title = 'Wide Graph Small'
159
+ g.write('test/output/bar_wide_graph_small.png')
160
+ end
161
+
162
+
163
+ def test_tall_graph
164
+ g = setup_basic_graph('400x600')
165
+ g.title = 'Tall Graph'
166
+ g.write('test/output/bar_tall_graph.png')
167
+
168
+ g = setup_basic_graph('200x400')
169
+ g.title = 'Tall Graph Small'
170
+ g.write('test/output/bar_tall_graph_small.png')
171
+ end
172
+
173
+
174
+ def test_one_value
175
+ g = Gruff::Bar.new
176
+ g.title = 'One Value Graph Test'
177
+ g.labels = {
178
+ 0 => '1',
179
+ 1 => '2'
180
+ }
181
+ g.data('one', [1, 1])
182
+
183
+ g.write('test/output/bar_one_value.png')
184
+ end
185
+
186
+
187
+ def test_negative
188
+ g = Gruff::Bar.new
189
+ g.title = 'Pos/Neg Bar Graph Test'
190
+ g.labels = {
191
+ 0 => '5/6',
192
+ 1 => '5/15',
193
+ 2 => '5/24',
194
+ 3 => '5/30',
195
+ }
196
+ g.data(:apples, [-1, 0, 4, -4])
197
+ g.data(:peaches, [10, 8, 6, 3])
198
+
199
+ g.write('test/output/bar_pos_neg.png')
200
+ end
201
+
202
+
203
+ def test_nearly_zero
204
+ g = Gruff::Bar.new
205
+ g.title = 'Nearly Zero Graph'
206
+ g.labels = {
207
+ 0 => '5/6',
208
+ 1 => '5/15',
209
+ 2 => '5/24',
210
+ 3 => '5/30',
211
+ }
212
+ g.data(:apples, [1, 2, 3, 4])
213
+ g.data(:peaches, [4, 3, 2, 1])
214
+ g.minimum_value = 0
215
+ g.maximum_value = 10
216
+ g.write('test/output/bar_nearly_zero_max_10.png')
217
+ end
218
+
219
+ def test_y_axis_increment
220
+ generate_with_y_axis_increment 2.0
221
+ generate_with_y_axis_increment 1
222
+ generate_with_y_axis_increment 5
223
+ generate_with_y_axis_increment 20
224
+ end
225
+
226
+ def generate_with_y_axis_increment(increment)
227
+ g = Gruff::Bar.new
228
+ g.title = "Y Axis Set to #{increment}"
229
+ g.labels = {
230
+ 0 => '5/6',
231
+ 1 => '5/15',
232
+ 2 => '5/24',
233
+ 3 => '5/30',
234
+ }
235
+ g.y_axis_increment = increment
236
+ g.data(:apples, [1, 0.2, 0.5, 0.7])
237
+ g.data(:peaches, [2.5, 2.3, 2, 6.1])
238
+ g.write("test/output/bar_y_increment_#{increment}.png")
239
+ end
240
+
241
+ def test_custom_spacing
242
+ g = Gruff::Bar.new
243
+ g.spacing_factor = 0
244
+ g.title = 'Zero spacing graff'
245
+ g.labels = {
246
+ 0 => '5/6',
247
+ 1 => '5/15',
248
+ 2 => '5/24',
249
+ 3 => '5/30',
250
+ }
251
+
252
+ g.data(:apples, [1, 5, 8, 4])
253
+ g.data(:peaches, [4, 1, 2, 10])
254
+ g.minimum_value = 0
255
+ g.maximum_value = 10
256
+ g.write('test/output/bar_zero_spacing.png')
257
+ end
258
+
259
+ def test_spacing_factor_does_not_accept_values_lt_0_and_gt_1
260
+ g = Gruff::Bar.new
261
+
262
+ assert_raise ArgumentError do
263
+ g.spacing_factor = 1.01
264
+ end
265
+
266
+ assert_raise ArgumentError do
267
+ g.spacing_factor = -0.01
268
+ end
269
+ end
270
+
271
+ def test_custom_theme
272
+ g = Gruff::Bar.new
273
+ g.title = 'Custom Theme'
274
+ g.font = File.expand_path('CREABBRG.TTF', ENV['MAGICK_FONT_PATH'])
275
+ g.title_font_size = 60
276
+ g.legend_font_size = 32
277
+ g.marker_font_size = 32
278
+ g.theme = {
279
+ :colors => %w(#efd250 #666699 #e5573f #9595e2),
280
+ :marker_color => 'white',
281
+ :font_color => 'blue',
282
+ :background_image => 'assets/pc306715.jpg'
283
+ }
284
+ g.labels = {
285
+ 0 => '5/6',
286
+ 1 => '5/15',
287
+ 2 => '5/24',
288
+ 3 => '5/30',
289
+ }
290
+ g.data(:vancouver, [1, 2, 3, 4])
291
+ g.data(:seattle, [2, 4, 6, 8])
292
+ g.data(:portland, [3, 1, 7, 3])
293
+ g.data(:victoria, [4, 3, 5, 7])
294
+ g.minimum_value = 0
295
+ g.write('test/output/bar_themed.png')
296
+ end
297
+
298
+ def test_background_gradient_top_bottom
299
+ g = Gruff::Bar.new
300
+ g.title = 'Background gradient top to bottom'
301
+ g.theme = {
302
+ :background_colors => %w(#ff0000 #00ff00),
303
+ :background_direction => :top_bottom,
304
+ }
305
+ g.labels = @labels
306
+ @datasets.each do |name, values|
307
+ g.data(name, values)
308
+ end
309
+ g.minimum_value = 0
310
+ write_test_file(g, 'bar_background_gradient_top_bottom.png')
311
+ end
312
+
313
+ def test_background_gradient_bottom_top
314
+ g = Gruff::Bar.new
315
+ g.title = 'Background gradient top to bottom'
316
+ g.theme = {
317
+ :background_colors => %w(#ff0000 #00ff00),
318
+ :background_direction => :bottom_top,
319
+ }
320
+ g.labels = @labels
321
+ @datasets.each do |name, values|
322
+ g.data(name, values)
323
+ end
324
+ g.minimum_value = 0
325
+ write_test_file(g, 'bar_background_gradient_bottom_top.png')
326
+ end
327
+
328
+ def test_background_gradient_left_right
329
+ g = Gruff::Bar.new
330
+ g.title = 'Background gradient left to right'
331
+ g.theme = {
332
+ :background_colors => %w(#ff0000 #00ff00),
333
+ :background_direction => :left_right,
334
+ }
335
+ g.labels = @labels
336
+ @datasets.each do |name, values|
337
+ g.data(name, values)
338
+ end
339
+ g.minimum_value = 0
340
+ write_test_file(g, 'bar_background_gradient_left_right.png')
341
+ end
342
+
343
+ def test_background_gradient_right_left
344
+ g = Gruff::Bar.new
345
+ g.title = 'Background gradient right to left'
346
+ g.theme = {
347
+ :background_colors => %w(#ff0000 #00ff00),
348
+ :background_direction => :right_left,
349
+ }
350
+ g.labels = @labels
351
+ @datasets.each do |name, values|
352
+ g.data(name, values)
353
+ end
354
+ g.minimum_value = 0
355
+ write_test_file(g, 'bar_background_gradient_right_left.png')
356
+ end
357
+
358
+ def test_background_gradient_topleft_bottomright
359
+ g = Gruff::Bar.new
360
+ g.title = 'Background gradient top left to bottom right'
361
+ g.theme = {
362
+ :background_colors => %w(#ff0000 #00ff00),
363
+ :background_direction => :topleft_bottomright,
364
+ }
365
+ g.labels = @labels
366
+ @datasets.each do |name, values|
367
+ g.data(name, values)
368
+ end
369
+ g.minimum_value = 0
370
+ write_test_file(g, 'bar_background_gradient_topleft_bottomright.png')
371
+ end
372
+
373
+ def test_background_gradient_topright_bottomleft
374
+ g = Gruff::Bar.new
375
+ g.title = 'Background gradient top right to bottom left'
376
+ g.title_font_size = 30
377
+ g.theme = {
378
+ :background_colors => %w(#ff0000 #00ff00),
379
+ :background_direction => :topright_bottomleft,
380
+ }
381
+ g.labels = @labels
382
+ @datasets.each do |name, values|
383
+ g.data(name, values)
384
+ end
385
+ g.minimum_value = 0
386
+ write_test_file(g, 'bar_background_gradient_topright_bottomleft.png')
387
+ end
388
+
389
+ def test_legend_should_not_overlap
390
+ g = Gruff::Bar.new(400)
391
+ g.theme_37signals()
392
+ g.title = 'My Graph'
393
+ g.data('Apples Oranges Watermelon Apples Oranges', [1, 2, 3, 4, 4, 3])
394
+ g.data('Oranges', [4, 8, 7, 9, 8, 9])
395
+ g.data('Watermelon', [2, 3, 1, 5, 6, 8])
396
+ g.data('Peaches', [9, 9, 10, 8, 7, 9])
397
+ g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
398
+ g.write('test/output/bar_long_legend_text.png')
399
+ end
400
+
401
+ def test_july_enhancements
402
+ g = Gruff::Bar.new(600)
403
+ g.hide_legend = true
404
+ g.title = 'Full speed ahead'
405
+ g.labels = (0..10).inject({}) { |memo, i| memo.merge({i => (i*10).to_s}) }
406
+ g.data(:apples, (0..9).map { rand(20)/10.0 })
407
+ g.y_axis_increment = 1.0
408
+ g.x_axis_label = 'Score (%)'
409
+ g.y_axis_label = 'Students'
410
+ write_test_file g, 'enhancements.png'
411
+ end
412
+
413
+ def test_bar_spacing
414
+ g = setup_basic_graph
415
+ g.bar_spacing = 0
416
+ g.title = '100% spacing between bars'
417
+ g.write('test/output/bar_spacing_full.png')
418
+
419
+ g = setup_basic_graph
420
+ g.bar_spacing = 0.5
421
+ g.title = '50% spacing between bars'
422
+ g.write('test/output/bar_spacing_half.png')
423
+
424
+ g = setup_basic_graph
425
+ g.bar_spacing = 1
426
+ g.title = '0% spacing between bars'
427
+ g.write('test/output/bar_spacing_none.png')
428
+ end
429
+
430
+ def test_set_label_stagger_height
431
+ g = setup_long_labelled_graph
432
+ g.title = 'Staggered labels'
433
+ g.label_stagger_height = 30
434
+ g.write('test/output/bar_set_label_stagger_height.png')
435
+ end
436
+
437
+ def test_set_label_max_size_and_label_truncation_style
438
+ # Absolute trunc
439
+ g = setup_long_labelled_graph
440
+ g.title = 'Absolute truncation (13 chars)'
441
+ g.label_max_size = 13
442
+ g.label_truncation_style = :absolute
443
+ g.write('test/output/bar_set_absolute_trunc.png')
444
+
445
+ # Trailing Dots trunc
446
+ g = setup_long_labelled_graph
447
+ g.title = 'Trailing dots truncation (6 chars inc dots)'
448
+ g.label_max_size = 6
449
+ g.label_truncation_style = :trailing_dots
450
+ g.write('test/output/bar_set_trailing_dots_trunc.png')
451
+ end
452
+
453
+ def test_bar_value_labels
454
+ g = setup_basic_graph
455
+ g.show_labels_for_bar_values = true
456
+ g.write('test/output/bar_value_labels.png')
457
+ end
458
+
459
+ def test_zero_marker_count
460
+ g = setup_basic_graph
461
+ g.marker_count = 0
462
+ g.write('test/output/bar_zero_marker_count.png')
463
+ end
464
+
465
+ def test_zero_marker_shadow
466
+ g = setup_basic_graph
467
+ g.title = 'Bar Chart with Marker Shadow'
468
+ g.marker_shadow_color = '#888888'
469
+ g.write('test/output/bar_marker_shadow.png')
470
+ end
471
+
472
+ protected
473
+
474
+ def setup_basic_graph(size=800)
475
+ g = Gruff::Bar.new(size)
476
+ g.title = 'My Bar Graph'
477
+ g.labels = {
478
+ 0 => '5/6',
479
+ 1 => '5/15',
480
+ 2 => '5/24',
481
+ 3 => '5/30',
482
+ }
483
+ @datasets.each do |data|
484
+ g.data(data[0], data[1])
485
+ end
486
+ g
487
+ end
488
+
489
+ def setup_long_labelled_graph(size=500)
490
+ g = Gruff::Bar.new(size)
491
+ g.title = 'A Graph for All Seasons'
492
+ g.labels = {
493
+ 0 => 'January was a cold one',
494
+ 1 => 'February is little better',
495
+ 2 => 'March will bring me hares',
496
+ 3 => 'April and I\'m a fool'
497
+ }
498
+
499
+ @datasets.each do |data|
500
+ g.data(data[0], data[1])
501
+ end
502
+ g
503
+ end
504
+ end
505
+