Added the Gruff library to the lib/ directory of the the rails folder, and the
[selectricity] / lib / gruff-0.2.8 / test / test_line.rb
diff --git a/lib/gruff-0.2.8/test/test_line.rb b/lib/gruff-0.2.8/test/test_line.rb
new file mode 100644 (file)
index 0000000..99a3683
--- /dev/null
@@ -0,0 +1,493 @@
+#!/usr/bin/ruby
+
+require File.dirname(__FILE__) + "/gruff_test_case"
+
+class TestGruffLine < GruffTestCase
+
+  # TODO Delete old output files once when starting tests
+  
+  def test_line_graph_with_themes
+    line_graph_with_themes()
+    line_graph_with_themes(400)
+  end
+  
+  def test_one_value
+    g = Gruff::Line.new
+    g.title = "One Value"
+    g.labels = {
+      0 => '1', 
+      1 => '2'
+    }
+    g.data('one', 1)
+
+    g.write("test/output/line_one_value.png")
+  end
+
+  def test_one_value_array
+    g = Gruff::Line.new
+    g.title = "One Value in an Array"
+    g.labels = {
+      0 => '1', 
+      1 => '2'
+    }
+    g.data('one', [1])
+
+    g.write("test/output/line_one_value_array.png")
+  end
+
+
+  def test_should_not_hang_with_0_0_100
+    g = Gruff::Line.new(320)
+    g.title = "Hang Value Graph Test"
+    g.data('test', [0,0,100])
+
+    g.write("test/output/line_hang_value.png")
+  end
+
+  # TODO
+  # def test_fix_crash
+  #   g = Gruff::Line.new(370)
+  #   g.title = "Crash Test"
+  #   g.data "ichi", [5]
+  #   g.data "ni", [0]
+  #   g.data "san", [0]
+  #   g.data "shi", [0]
+  #   g.write("test/output/line_crash_fix_test.png")
+  # end
+
+  
+  def test_line_small_values    
+    @datasets = [
+      [:small, [0.1, 0.14356, 0.0, 0.5674839, 0.456]],
+      [:small2, [0.2, 0.3, 0.1, 0.05, 0.9]]
+      ]
+
+    g = Gruff::Line.new
+    g.title = "Small Values Line Graph Test"
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+    g.write("test/output/line_small.png")
+
+    g = Gruff::Line.new(400)
+    g.title = "Small Values Line Graph Test 400px"
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+    g.write("test/output/line_small_small.png")
+  end
+
+  def test_line_starts_with_zero
+    @datasets = [
+      [:first0, [0, 5, 10, 8, 18]],
+      [:normal, [1, 2, 3, 4, 5]]
+      ]
+
+    g = Gruff::Line.new
+    g.title = "Small Values Line Graph Test"
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+    g.write("test/output/line_small_zero.png")
+
+    g = Gruff::Line.new(400)
+    g.title = "Small Values Line Graph Test 400px"
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+    g.write("test/output/line_small_small_zero.png")
+  end
+
+    
+  def test_line_large_values    
+    @datasets = [
+      [:large, [100_005, 35_000, 28_000, 27_000]],
+      [:large2, [35_000, 28_000, 27_000, 100_005]],
+      [:large3, [28_000, 27_000, 100_005, 35_000]],
+      [:large4, [1_238, 39_092, 27_938, 48_876]]
+      ]
+
+    g = Gruff::Line.new
+    g.title = "Very Large Values Line Graph Test"
+    g.baseline_value = 50_000
+    g.baseline_color = 'green'
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+
+    g.write("test/output/line_large.png")
+  end
+    
+  def test_long_title
+    
+  end
+  
+  def test_add_colors
+    
+  end
+
+  def test_request_too_many_colors
+    
+  end
+
+  def test_add_data
+    
+  end
+
+  def test_many_datapoints
+    g = Gruff::Line.new
+    g.title = "Many Multi-Line Graph Test"
+    g.labels = {
+      0 => 'June', 
+      10 => 'July', 
+      30 => 'August', 
+      50 => 'September', 
+    }
+    g.data('many points', (0..50).collect {|i| rand(100) })
+    g.x_axis_label = "Months"
+
+    # Default theme
+    g.write("test/output/line_many.png")
+  end
+
+
+  def test_similar_high_end_values
+    @dataset = %w(29.43 29.459 29.498 29.53 29.548 29.589 29.619 29.66 29.689 29.849 29.878 29.74 29.769 29.79 29.808 29.828).collect {|i| i.to_f}
+
+    g = Gruff::Line.new
+    g.title = "Similar High End Values Test"
+    g.data('similar points', @dataset )
+    g.write("test/output/line_similar_high_end_values.png")
+    
+    g = Gruff::Line.new
+    g.title = "Similar High End Values With Floor"
+    g.data('similar points', @dataset )
+    g.minimum_value = 0
+    g.y_axis_label = "Barometric Pressure"
+    g.write("test/output/line_similar_high_end_values_with_floor.png")
+  end
+
+  def test_many_lines_graph_small
+    g = Gruff::Line.new(400)
+    g.title = "Many Values Line Test 400px"
+    g.labels = {
+      0 => '5/6', 
+      10 => '5/15', 
+      20 => '5/24', 
+      30 => '5/30', 
+      40 => '6/4', 
+      50 => '6/16'
+    }
+    %w{jimmy jane philip arthur julie bert}.each do |student_name|
+      g.data(student_name, (0..50).collect { |i| rand 100 })
+    end
+
+    # Default theme
+    g.write("test/output/line_many_lines_small.png")
+  end
+
+  def test_graph_tiny
+    g = Gruff::Line.new(300)
+    g.title = "Tiny Test 300px"
+    g.labels = {
+      0 => '5/6', 
+      10 => '5/15', 
+      20 => '5/24', 
+      30 => '5/30', 
+      40 => '6/4', 
+      50 => '6/16'
+    }
+    %w{jimmy jane philip arthur julie bert}.each do |student_name|
+      g.data(student_name, (0..50).collect { |i| rand 100 })
+    end
+
+    # Default theme
+    g.write("test/output/line_tiny.png")
+  end
+
+  def test_no_data
+    g = Gruff::Line.new(400)
+    g.title = "No Data"
+    # Default theme
+    g.write("test/output/line_no_data.png")
+    
+    g = Gruff::Line.new(400)
+    g.title = "No Data Title"
+    g.no_data_message = 'There is no data'
+    g.write("test/output/line_no_data_msg.png")
+  end
+
+
+  def test_all_zeros
+    g = Gruff::Line.new(400)
+    g.title = "All Zeros"
+
+    g.data(:gus, [0,0,0,0])
+
+    # Default theme
+    g.write("test/output/line_no_data_other.png")    
+  end
+
+
+  def test_some_nil_points
+    g = Gruff::Line.new
+    g.title = "Some Nil Points"
+
+    @datasets = [
+      [:data1, [1, 2, 3, nil, 3, 5, 6]],
+      [:data2, [5, nil, nil, nil, nil, nil, 5]],
+      [:data3, [4, nil, 2, 1, 0]],
+      [:data4, [nil, nil, 3, 1, 2]]
+      ]
+
+    @datasets.each do |data|
+      g.data(*data)
+    end
+
+    # Default theme
+    g.write("test/output/line_some_nil_points.png")    
+  end
+
+  def test_no_title
+    g = Gruff::Line.new(400)
+    g.labels = @labels
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+
+    g.write("test/output/line_no_title.png")
+  end
+
+  def test_no_line_markers
+    g = setup_basic_graph(400)
+    g.title = "No Line Markers"
+    g.hide_line_markers = true
+    g.write("test/output/line_no_line_markers.png")    
+  end
+
+  def test_no_legend
+    g = setup_basic_graph(400)
+    g.title = "No Legend"
+    g.hide_legend = true
+    g.write("test/output/line_no_legend.png")
+  end
+
+  def test_nothing_but_the_graph
+    g = setup_basic_graph(400)
+    g.title = "THIS TITLE SHOULD NOT DISPLAY!!!"
+    g.hide_line_markers = true
+    g.hide_legend = true
+    g.hide_title = true
+    g.write("test/output/line_nothing_but_the_graph.png")    
+  end
+
+  def test_baseline_larger_than_data
+    g = setup_basic_graph(400)
+    g.title = "Baseline Larger Than Data"
+    g.baseline_value = 150
+    g.write("test/output/line_large_baseline.png")    
+  end
+
+
+  def test_hide_dots
+    g = setup_basic_graph(400)
+    g.title = "Hide Dots"
+    g.hide_dots = true
+    g.write("test/output/line_hide_dots.png")    
+  end
+
+  def test_hide_lines
+    g = setup_basic_graph(400)
+    g.title = "Hide Lines"
+    g.hide_lines = true
+    g.write("test/output/line_hide_lines.png")    
+  end
+
+  def test_wide_graph
+    g = setup_basic_graph('800x400')
+    g.title = "Wide Graph"
+    g.write("test/output/line_wide_graph.png")    
+
+    g = setup_basic_graph('400x200')
+    g.title = "Wide Graph Small"
+    g.write("test/output/line_wide_graph_small.png")
+  end
+
+  def test_negative
+    g = setup_pos_neg(800)
+    g.write("test/output/line_pos_neg.png")
+    
+    g = setup_pos_neg(400)
+    g.title = 'Pos/Neg Line Test Small'
+    g.write("test/output/line_pos_neg_400.png")
+  end
+
+  def test_all_negative
+    g = setup_all_neg(800)
+    g.write("test/output/line_all_neg.png")
+    
+    g = setup_all_neg(400)
+    g.title = 'All Neg Line Test Small'
+    g.write("test/output/line_all_neg_400.png")
+  end
+
+  def test_many_numbers    
+    g = Gruff::Line.new('400x170')
+    g.title = "Line Test, Many Numbers"
+
+    data = [
+      { :date => '01',
+        :wpm => 0,
+        :errors => 0,
+        :accuracy => 0 },
+      { :date => '02',
+        :wpm => 10,
+        :errors => 2,
+        :accuracy => 80 },
+      { :date => '03',
+        :wpm => 15,
+        :errors => 0,
+        :accuracy => 100 },
+      { :date => '04',
+        :wpm => 16,
+        :errors => 2,
+        :accuracy => 87 },
+      { :date => '05',
+          :wpm => nil,
+          :errors => nil,
+          :accuracy => nil },
+      { :date => '06',
+        :wpm => 18,
+        :errors => 1,
+        :accuracy => 94 },
+      { :date => '07'},
+      { :date => '08' },
+      { :date => '09',
+         :wpm => 21,
+         :errors => 1,
+         :accuracy => 95 },
+      { :date => '10'},
+      { :date => '11'},
+      { :date => '12'},
+      { :date => '13'},
+      { :date => '14'},
+      { :date => '15'},
+      { :date => '16'},
+      { :date => '17'},
+      { :date => '18'},
+      { :date => '19',
+         :wpm => 28,
+         :errors => 5,
+         :accuracy => 82 },
+      { :date => '20'},
+      { :date => '21'},
+      { :date => '22'},
+      { :date => '23'},
+      { :date => '24'},
+      { :date => '25'},
+      { :date => '26'},     
+      { :date => '27',
+         :wpm => 37,
+         :errors => 3,
+         :accuracy => 92 },
+    ]
+
+    [:wpm, :errors, :accuracy].each do |field|
+      g.data(field.to_s, data.collect {|d| d[field] })
+    end
+
+    labels = Hash.new
+    data.each_with_index do |d, i|
+      labels[i] = d[:date]
+    end
+    g.labels = labels
+
+    g.write('test/output/line_many_numbers.png')
+  end
+
+  def test_no_hide_line_no_labels
+    g = Gruff::Line.new
+    g.title = "No Hide Line No Labels"
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+    g.hide_line_markers = false
+    g.write('test/output/line_no_hide.png')
+  end
+
+protected
+
+  # TODO Reset data after each theme
+  def line_graph_with_themes(size=nil)
+    g = Gruff::Line.new(size)
+    g.title = "Multi-Line Graph Test #{size}"
+    g.labels = @labels
+    g.baseline_value = 90
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+    # Default theme
+    g.write("test/output/line_theme_keynote_#{size}.png")
+  
+    g = Gruff::Line.new(size)
+    g.title = "Multi-Line Graph Test #{size}"
+    g.labels = @labels
+    g.baseline_value = 90
+    g.theme_37signals
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+    g.write("test/output/line_theme_37signals_#{size}.png")
+  
+
+    g = Gruff::Line.new(size)
+    g.title = "Multi-Line Graph Test #{size}"
+    g.labels = @labels
+    g.baseline_value = 90
+    g.theme_rails_keynote
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+    g.write("test/output/line_theme_rails_keynote_#{size}.png")
+  
+    g = Gruff::Line.new(size)
+    g.title = "Multi-Line Graph Test #{size}"
+    g.labels = @labels
+    g.baseline_value = 90
+    g.theme_odeo
+    @datasets.each do |data|
+      g.data(data[0], data[1])
+    end
+    g.write("test/output/line_theme_odeo_#{size}.png")
+  end
+
+  def setup_pos_neg(size=800)
+    g = Gruff::Line.new(size)
+    g.title = "Pos/Neg Line Graph Test"
+    g.labels = {
+      0 => '5/6', 
+      1 => '5/15', 
+      2 => '5/24', 
+      3 => '5/30', 
+    }
+    g.data(:apples, [-1, 0, 4, -4])
+    g.data(:peaches, [10, 8, 6, 3])
+    return g
+  end
+
+
+  def setup_all_neg(size=800)
+    g = Gruff::Line.new(size)
+    g.title = "All Neg Line Graph Test"
+    g.labels = {
+      0 => '5/6', 
+      1 => '5/15', 
+      2 => '5/24', 
+      3 => '5/30', 
+    }
+    g.data(:apples, [-1, -5, -20, -4])
+    g.data(:peaches, [-10, -8, -6, -3])
+    g
+  end
+  
+end

Benjamin Mako Hill || Want to submit a patch?