gruff 0.3.7 → 0.4.0

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