ruby-googlechart 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestBarStyle < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::BarStyle }
6
+ end
7
+
8
+ should 'not display bar style parameter by default' do
9
+ assert_no_match(/\bchbh=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display with custom bar width' do
13
+ assert_match(/\bchbh=10\b/, @klass.new(:width => 10).to_url)
14
+ end
15
+
16
+ should 'display with custom bar width and spacing' do
17
+ assert_match(/\bchbh=8,6\b/, @klass.new(:width => 8, :spacing => 6).to_url)
18
+ end
19
+
20
+ should 'display with custom bar width, spacing and group spacing' do
21
+ assert_match(/\bchbh=10,4,12\b/, @klass.new(:width => 10, :spacing => [4,12]).to_url)
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestColor < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Color }
6
+ end
7
+
8
+ should 'not display color parameter by default' do
9
+ assert_no_match(/\bchco=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display single color parameter' do
13
+ assert_match(/\bchco=ff0000\b/, @klass.new(:color => 'ff0000').to_url)
14
+ end
15
+
16
+ should 'display multiple color parameters' do
17
+ assert_match(/\bchco=ff0000,00ff00,0000ff\b/, @klass.new(:color => %w[ff0000 00ff00 0000ff]).to_url)
18
+ end
19
+
20
+ should 'convert 3-digit colors to 6-digit colors'
21
+ end
@@ -0,0 +1,142 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestData < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Data }
6
+ end
7
+
8
+ should 'use simple encoding by default' do
9
+ assert_match(/\bchd=s:AB89\b/, @klass.new(:data => [0, 1, 60, 61]).to_url)
10
+ end
11
+
12
+ should 'raise an ArgumentError if data set is empty' do
13
+ assert_raise(ArgumentError, /1 non-nil value/) { @klass.new(:data => []) }
14
+ end
15
+
16
+ should 'raise an ArgumentError if data set contains only nils' do
17
+ assert_raise(ArgumentError, /1 non-nil value/) { @klass.new(:data => [nil, nil]) }
18
+ end
19
+
20
+ should 'not raise an ArgumentError if only one of many data sets contains only nils' do
21
+ assert_nothing_raised(ArgumentError) { @klass.new(:data => [[nil, nil], [nil, 1]]) }
22
+ end
23
+
24
+ should 'auto-scale between 0 and maximum value among all data sets' do
25
+ assert_match(/\bchd=s:67,89\b/, @klass.new(:data => [[58, 59], [60, 61]]).to_url)
26
+ end
27
+
28
+ should 'be able to auto-scale data sets with nils' do
29
+ assert_match(/\bchd=s:A_9\b/, @klass.new(:data => [0, nil, 100]).to_url)
30
+ end
31
+
32
+ should 'be able to auto-scale data sets with one empty set' do
33
+ assert_match(/\bchd=s:__,A9\b/, @klass.new(:data => [[nil, nil], [0, 100]]).to_url)
34
+ end
35
+
36
+ should 'encode data with high-pass filter when auto-scaling' do
37
+ assert_match(/\bchd=s:AAB89\b/, @klass.new(:data => [-1, 0, 1, 60, 61]).to_url)
38
+ end
39
+
40
+ should 'encode data with band-pass filter when manual-scaling' do
41
+ assert_match(/\bchd=s:AB899\b/, @klass.new(:data => [-5, -1, 99, 100, 102], :scale => -3..100).to_url)
42
+ end
43
+
44
+ context 'simple encoding' do
45
+ setup { @chart = @klass.new(:encoding => :simple) }
46
+
47
+ should 'encode dataset with auto-scaling' do
48
+ @chart.data = [0, 15, 10]
49
+ assert_match(/\bchd=s:A9o\b/, @chart.to_url)
50
+ end
51
+
52
+ should 'encode dataset with manual scaling' do
53
+ @chart.data = [0, 15, 10]
54
+ @chart.scale = 0..20
55
+ assert_match(/\bchd=s:Ate\b/, @chart.to_url)
56
+ end
57
+
58
+ should 'encode multiple datasets' do
59
+ @chart.data = [[9, 15], [24, 7]]
60
+ @chart.scale = 0..61
61
+ assert_match(/\bchd=s:JP,YH\b/, @chart.to_url)
62
+ end
63
+
64
+ should 'encode floating point data' do
65
+ @chart.data = [50.5, 33.4]
66
+ @chart.scale = 0..61
67
+ assert_match(/\bchd=s:yh\b/, @chart.to_url)
68
+ end
69
+
70
+ should 'encode missing data' do
71
+ @chart.data = [50, nil, 33]
72
+ @chart.scale = 0..61
73
+ assert_match(/\bchd=s:y_h\b/, @chart.to_url)
74
+ end
75
+ end
76
+
77
+ context 'extended encoding' do
78
+ setup { @chart = @klass.new(:encoding => :extended) }
79
+
80
+ should 'encode dataset with auto-scaling' do
81
+ @chart.data = [0, 15, 10]
82
+ assert_match(/\bchd=e:AA\.\.qq\b/, @chart.to_url)
83
+ end
84
+
85
+ should 'encode dataset with manual scaling' do
86
+ @chart.data = [15, 10, 0]
87
+ @chart.scale = 0..20
88
+ assert_match(/\bchd=e:v\.f\.AA\b/, @chart.to_url)
89
+ end
90
+
91
+ should 'encode multiple datasets' do
92
+ @chart.data = [[2281, 3233], [591, 1543]]
93
+ @chart.scale = 0..4095
94
+ assert_match(/\bchd=e:jpyh,JPYH\b/, @chart.to_url)
95
+ end
96
+
97
+ should 'encode floating point data' do
98
+ @chart.data = [2281.49, 3233.50]
99
+ @chart.scale = 0..4095
100
+ assert_match(/\bchd=e:jpyh\b/, @chart.to_url)
101
+ end
102
+
103
+ should 'encode missing data' do
104
+ @chart.data = [2281, nil, 3233]
105
+ @chart.scale = 0..4095
106
+ assert_match(/\bchd=e:jp__yh\b/, @chart.to_url)
107
+ end
108
+ end
109
+
110
+ context 'text encoding' do
111
+ setup { @chart = @klass.new(:encoding => :text) }
112
+
113
+ should 'encode dataset with auto-scaling' do
114
+ @chart.data = [0, 15, 10]
115
+ assert_match(/\bchd=t:0,100,66.7\b/, @chart.to_url)
116
+ end
117
+
118
+ should 'encode dataset with manual scaling' do
119
+ @chart.data = [0, 15, 10]
120
+ @chart.scale = 0..20
121
+ assert_match(/\bchd=t:0,75,50\b/, @chart.to_url)
122
+ end
123
+
124
+ should 'encode multiple datasets' do
125
+ @chart.data = [[6, 14], [5, 23]]
126
+ @chart.scale = 0..100
127
+ assert_match(/\bchd=t:6,14\|5,23\b/, @chart.to_url)
128
+ end
129
+
130
+ should 'rounds floating point data to the nearest tenth' do
131
+ @chart.data = [5.95, 14.01, 5.23]
132
+ @chart.scale = 0..100
133
+ assert_match(/\bchd=t:6,14,5.2\b/, @chart.to_url)
134
+ end
135
+
136
+ should 'encode missing data' do
137
+ @chart.data = [6, nil, 14]
138
+ @chart.scale = 0..100
139
+ assert_match(/\bchd=t:6,-1,14\b/, @chart.to_url)
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestGridLine < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::GridLine }
6
+ end
7
+
8
+ should 'not display grid lines by default' do
9
+ assert_no_match(/\bchg=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display vertical grid lines' do
13
+ assert_match(/\bchg=5,0\b/, @klass.new(:grid => {:x => 5}).to_url)
14
+ end
15
+
16
+ should 'display horizontal grid lines' do
17
+ assert_match(/\bchg=0,5\b/, @klass.new(:grid => {:y => 5}).to_url)
18
+ end
19
+
20
+ should 'display horizontal and vertical grid lines' do
21
+ assert_match(/\bchg=6,14\b/, @klass.new(:grid => {:x => 6, :y => 14}).to_url)
22
+ end
23
+
24
+ should 'display solid grid lines' do
25
+ assert_match(/\bchg=8,16,1,0\b/, @klass.new(:grid => {:x => 8, :y => 16, :style => :solid}).to_url)
26
+ end
27
+
28
+ should 'display dashed grid lines' do
29
+ assert_match(/\bchg=8,16,3,2\b/, @klass.new(:grid => {:x => 8, :y => 16, :style => :dash}).to_url)
30
+ end
31
+
32
+ should 'display dotted grid lines' do
33
+ assert_match(/\bchg=8,16,1,2\b/, @klass.new(:grid => {:x => 8, :y => 16, :style => :dot}).to_url)
34
+ end
35
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestLegend < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Legend }
6
+ end
7
+
8
+ should 'not display legend by default' do
9
+ assert_no_match(/\bchdl=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display legend for single dataset' do
13
+ assert_match(/\bchdl=Foo\b/, @klass.new(:legend => 'Foo').to_url)
14
+ end
15
+
16
+ should 'display legend for multiple datasets' do
17
+ assert_match(/\bchdl=Foo\|Bar\|Baz\b/, @klass.new(:legend => %w[Foo Bar Baz]).to_url)
18
+ end
19
+
20
+ should 'escape legend text for url' do
21
+ assert_match(/\bchdl=Foo\+Bar%7CBaz\b/, @klass.new(:legend => 'Foo Bar|Baz').to_url)
22
+ end
23
+
24
+ should 'convert non-String legend keys to Strings' do
25
+ assert_match(/\bchdl=foo\|\|1\b/, @klass.new(:legend => ['foo', nil, 1]).to_url)
26
+ end
27
+ end
@@ -0,0 +1,51 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestLineChart < Test::Unit::TestCase
4
+ should 'have a default chart type' do
5
+ assert_match(/\bcht=lc\b/, GoogleChart::LineChart.new.to_url)
6
+ end
7
+
8
+ should 'support xy chart type' do
9
+ assert_match(/\bcht=lxy\b/, GoogleChart::LineChart.new(:type => :xy).to_url)
10
+ end
11
+
12
+ should 'support sparkline chart type' do
13
+ assert_match(/\bcht=ls\b/, GoogleChart::LineChart.new(:type => :sparkline).to_url)
14
+ end
15
+
16
+ should 'support line as chart type' do
17
+ assert_match(/\bcht=lc\b/, GoogleChart::LineChart.new(:type => :line).to_url)
18
+ end
19
+
20
+ should 'include Axis module' do
21
+ assert GoogleChart::Axis === GoogleChart::LineChart.new
22
+ end
23
+
24
+ should 'include Color module' do
25
+ assert GoogleChart::Color === GoogleChart::LineChart.new
26
+ end
27
+
28
+ should 'include Data module' do
29
+ assert GoogleChart::Data === GoogleChart::LineChart.new
30
+ end
31
+
32
+ should 'include GridLine module' do
33
+ assert GoogleChart::GridLine === GoogleChart::LineChart.new
34
+ end
35
+
36
+ should 'include Legend module' do
37
+ assert GoogleChart::Legend === GoogleChart::LineChart.new
38
+ end
39
+
40
+ should 'include LineStyle module' do
41
+ assert GoogleChart::LineStyle === GoogleChart::LineChart.new
42
+ end
43
+
44
+ should 'include RangeMarker module' do
45
+ assert GoogleChart::RangeMarker === GoogleChart::LineChart.new
46
+ end
47
+
48
+ should 'include Title module' do
49
+ assert GoogleChart::Title === GoogleChart::LineChart.new
50
+ end
51
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestLineStyle < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::LineStyle }
6
+ end
7
+
8
+ should 'not include line styles by default' do
9
+ assert_no_match(/\bchls=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'support solid lines' do
13
+ assert_match(/\bchls=1,1,0\b/, @klass.new(:style => :solid).to_url)
14
+ end
15
+
16
+ should 'support dashed lines' do
17
+ assert_match(/\bchls=1,3,2\b/, @klass.new(:style => :dash).to_url)
18
+ end
19
+
20
+ should 'support dotted lines' do
21
+ assert_match(/\bchls=1,1,2\b/, @klass.new(:style => :dot).to_url)
22
+ end
23
+
24
+ should 'support multiple line styles' do
25
+ assert_match(/\bchls=1,3,2\|1,1,2\|1,1,0\b/, @klass.new(:style => [:dash, :dot, :solid]).to_url)
26
+ end
27
+
28
+ should 'support custom line width' do
29
+ assert_match(/\bchls=2,2,0\b/, @klass.new(:width => 2).to_url)
30
+ end
31
+
32
+ should 'support named line style with custom width' do
33
+ assert_match(/\bchls=2,6,4\b/, @klass.new(:style => :dash, :width => 2).to_url)
34
+ end
35
+
36
+ should 'support multiple line styles and multiple custom widths' do
37
+ assert_match(/\bchls=2,2,4\|3,9,6\b/, @klass.new(:style => [:dot, :dash], :width => [2, 3]).to_url)
38
+ end
39
+
40
+ should 'use default line width if there are more styles than widths' do
41
+ assert_match(/\bchls=2,2,4\|1,3,2\|1,1,0\b/, @klass.new(:style => [:dot, :dash, :solid], :width => 2).to_url)
42
+ end
43
+
44
+ should 'use default line style if there are more widths than styles' do
45
+ assert_match(/\bchls=2,2,4\|3,3,0\|2,2,0\b/, @klass.new(:style => :dot, :width => [2, 3, 2]).to_url)
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestRangeMarker < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::RangeMarker }
6
+ end
7
+
8
+ should 'not have range markers by default' do
9
+ assert_no_match(/\bchm=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display horizontal range markers' do
13
+ assert_match(/\bchm=r,000000cc,x,0.45,0.55\b/, @klass.new(:ranges => [:h, 0.45, 0.55]).to_url)
14
+ end
15
+
16
+ should 'display vertical range markers' do
17
+ assert_match(/\bchm=R,000000cc,x,0.45,0.55\b/, @klass.new(:ranges => [:v, 0.45, 0.55]).to_url)
18
+ end
19
+
20
+ should 'display multiple range markers' do
21
+ assert_match(/\bchm=r,000000cc,x,0.1,0.2\|R,000000cc,x,0.3,0.4\b/, @klass.new(:ranges => [[:h, 0.1, 0.2], [:v, 0.3, 0.4]]).to_url)
22
+ end
23
+
24
+ should 'display range markers with custom colors' do
25
+ assert_match(/\bchm=r,abcdef,x,0.4,0.6\b/, @klass.new(:ranges => [:h, 'abcdef', 0.4, 0.6]).to_url)
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestTitle < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Title }
6
+ end
7
+
8
+ should 'not have a title by default' do
9
+ assert_no_match(/\bchtt=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'url-encode title' do
13
+ assert_match(/\bchtt=foo\+bar\b/, @klass.new(:title => 'foo bar').to_url)
14
+ end
15
+ end
@@ -0,0 +1,103 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestGoogleChart < Test::Unit::TestCase
4
+ context '#Line' do
5
+ context 'with hash parameters' do
6
+ setup do
7
+ @url = GoogleChart.Line(:size => '1000x300', :data => [[35, 41], [50, 33]], :scale => 0..61)
8
+ end
9
+
10
+ should 'return Google Chart URL' do
11
+ assert_match(%r{\Ahttp://chart\.apis\.google\.com/chart\?}, @url)
12
+ end
13
+
14
+ should 'include chart type parameter' do
15
+ assert_match(/\bcht=lc\b/, @url)
16
+ end
17
+
18
+ should 'include chart size parameter' do
19
+ assert_match(/\bchs=1000x300\b/, @url)
20
+ end
21
+
22
+ should 'include chart data parameter' do
23
+ assert_match(/\bchd=s:jp,yh\b/, @url)
24
+ end
25
+ end
26
+
27
+ context 'with block parameters' do
28
+ setup do
29
+ @url = GoogleChart.Line do |c|
30
+ c.size = '800x375'
31
+ c.data = [[35, 41], [50, 33]]
32
+ c.scale = 0..61
33
+ end
34
+ end
35
+
36
+ should 'return Google Chart URL' do
37
+ assert_match(%r{\Ahttp://chart\.apis\.google\.com/chart\?}, @url)
38
+ end
39
+
40
+ should 'include chart type parameter' do
41
+ assert_match(/\bcht=lc\b/, @url)
42
+ end
43
+
44
+ should 'include chart size parameter' do
45
+ assert_match(/\bchs=800x375\b/, @url)
46
+ end
47
+
48
+ should 'include chart data parameter' do
49
+ assert_match(/\bchd=s:jp,yh\b/, @url)
50
+ end
51
+ end
52
+ end
53
+
54
+ context '#Bar' do
55
+ context 'with hash parameters' do
56
+ setup do
57
+ @url = GoogleChart.Bar(:size => '1000x300', :data => [[35, 41], [50, 33]], :scale => 0..61)
58
+ end
59
+
60
+ should 'return Google Chart URL' do
61
+ assert_match(%r{\Ahttp://chart\.apis\.google\.com/chart\?}, @url)
62
+ end
63
+
64
+ should 'include chart type parameter' do
65
+ assert_match(/\bcht=bvg\b/, @url)
66
+ end
67
+
68
+ should 'include chart size parameter' do
69
+ assert_match(/\bchs=1000x300\b/, @url)
70
+ end
71
+
72
+ should 'include chart data parameter' do
73
+ assert_match(/\bchd=s:jp,yh\b/, @url)
74
+ end
75
+ end
76
+
77
+ context 'with block parameters' do
78
+ setup do
79
+ @url = GoogleChart.Bar do |c|
80
+ c.size = '800x375'
81
+ c.data = [[35, 41], [50, 33]]
82
+ c.scale = 0..61
83
+ end
84
+ end
85
+
86
+ should 'return Google Chart URL' do
87
+ assert_match(%r{\Ahttp://chart\.apis\.google\.com/chart\?}, @url)
88
+ end
89
+
90
+ should 'include chart type parameter' do
91
+ assert_match(/\bcht=bvg\b/, @url)
92
+ end
93
+
94
+ should 'include chart size parameter' do
95
+ assert_match(/\bchs=800x375\b/, @url)
96
+ end
97
+
98
+ should 'include chart data parameter' do
99
+ assert_match(/\bchd=s:jp,yh\b/, @url)
100
+ end
101
+ end
102
+ end
103
+ end