2
# -*- coding: utf-8 -*-
10
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
11
sys.path.insert(0, ROOT)
13
from test.test_base import TestBase
14
import pygooglechart as gc
17
class TestDataTypes(TestBase):
19
def test_simple_data(self):
20
s = gc.SimpleData([range(0, 62), [0, 1, 60, 61]])
21
self.assertEquals(repr(s),
22
'chd=s:ABCDEFGHIJKLMNOPQRSTUVWXYZ'
23
'abcdefghijklmnopqrstuvwxyz0123456789,AB89')
25
def test_text_data(self):
26
s = gc.TextData([[0, 1, 99.9]])
27
self.assertEquals(repr(s), 'chd=t:0.0,1.0,99.9')
29
def test_ext_data(self):
30
s = gc.ExtendedData([[0, 1, 4095]])
31
self.assertEquals(repr(s), 'chd=e:AAAB..')
34
class TestScaling(TestBase):
36
def test_simple_scale(self):
37
sv = gc.SimpleData.scale_value
39
self.raise_warnings(False) # We know some of these give warnings
40
self.assertEquals(sv(-10, [0, 1]), 0)
41
self.assertEquals(sv(0, [0, 1]), 0)
42
self.assertEquals(sv(.5, [0, 1]), 31)
43
self.assertEquals(sv(30, [0, 1]), 61)
44
self.assertEquals(sv(2222, [0, 10000]), 14)
47
self.raise_warnings(True)
48
self.assertRaises(UserWarning, sv, -10, [0, 1])
49
self.assertRaises(UserWarning, sv, 30, [0, 1])
51
def test_text_scale(self):
52
sv = gc.TextData.scale_value
54
self.raise_warnings(False)
55
self.assertEquals(sv(-10, [0, 1]), 0)
56
self.assertEquals(sv(0, [0, 1]), 0)
57
self.assertEquals(sv(.5, [0, 1]), 50)
58
self.assertEquals(sv(30, [0, 1]), 100)
59
self.assertEquals(sv(2222, [0, 10000]), 22.22)
61
self.raise_warnings(True)
62
self.assertRaises(UserWarning, sv, -10, [0, 1])
63
self.assertRaises(UserWarning, sv, 30, [0, 1])
65
def test_ext_scale(self):
66
sv = gc.ExtendedData.scale_value
68
self.raise_warnings(False)
69
self.assertEquals(sv(-10, [0, 1]), 0)
70
self.assertEquals(sv(0, [0, 1]), 0)
71
self.assertEquals(sv(.5, [0, 1]), 2048)
72
self.assertEquals(sv(30, [0, 1]), 4095)
73
self.assertEquals(sv(2222, [0, 10000]), 910)
75
self.raise_warnings(True)
76
self.assertRaises(UserWarning, sv, -10, [0, 1])
77
self.assertRaises(UserWarning, sv, 30, [0, 1])
80
class TestTitleStyle(TestBase):
82
def test_title_style(self):
84
chart = gc.SimpleLineChart(300, 100)
85
chart.set_title_style()
86
self.assertEquals(chart.title_colour, None)
87
self.assertEquals(chart.title_font_size, None)
89
chart = gc.SimpleLineChart(300, 100)
90
chart.set_title_style(font_size=30)
91
self.assertEquals(chart.title_colour, '333333')
92
self.assertEquals(chart.title_font_size, 30)
94
chart = gc.SimpleLineChart(300, 100)
95
chart.set_title_style(colour='123456')
96
self.assertEquals(chart.title_colour, '123456')
97
self.assertEquals(chart.title_font_size, 13.5)
99
chart = gc.SimpleLineChart(300, 100)
100
chart.set_title_style(font_size=100, colour='123456')
101
self.assertEquals(chart.title_colour, '123456')
102
self.assertEquals(chart.title_font_size, 100)
105
class TestLineChart(TestBase):
107
def test_none_data(self):
108
chart = gc.SimpleLineChart(300, 100)
109
chart.add_data([1, 2, 3, None, 5])
110
print chart.get_url()
111
self.assertChartURL(chart.get_url(), \
112
'?cht=lc&chs=300x100&chd=e:AAMzZm__zM')
115
class TestQRChart(TestBase):
117
def assertQRImage(self, chart, text):
121
print 'PyQrCodec not installed. Can not test QR code image'
124
chart.download(self.temp_image)
125
status, string = PyQrcodec.decode(self.temp_image)
126
self.assertTrue(status)
127
self.assertEquals(text, string)
129
def test_simple(self):
131
chart = gc.QRChart(100, 150)
133
self.assertChartURL(chart.get_url(), \
134
'?cht=qr&chs=100x150&chl=Hello%20World')
136
def test_encoding(self):
137
chart = gc.QRChart(100, 100)
138
chart.add_data('Hello World')
139
self.assertChartURL(chart.get_url(), \
140
'?cht=qr&chs=100x100&chl=Hello%20World')
142
def test_no_data(self):
143
chart = gc.QRChart(100, 100)
144
self.assertRaises(gc.NoDataGivenException, chart.get_url)
146
def test_validate_image(self):
148
chart = gc.QRChart(100, 100)
150
chart.set_ec('H', 0) # PyQrcodec seems to only work on higher EC
151
self.assertQRImage(chart, text)
153
def test_validate_utf8(self):
154
text = 'こんにちは世界' # Hello world in Japanese UTF-8
155
chart = gc.QRChart(100, 100)
158
self.assertQRImage(chart, text)
160
class TestGrammar(TestBase):
162
types = ('Venn', 'GroupedHorizontalBar', 'GoogleOMeter', 'Scatter',
163
'StackedVerticalBar', 'Map', 'StackedHorizontalBar', 'SimpleLine',
164
'SparkLine', 'GroupedVerticalBar', 'SplineRadar', 'XYLine', 'Radar',
167
def test_chart_types(self):
168
ret = gc.ChartGrammar.get_possible_chart_types()
169
diff = set(ret).symmetric_difference(set(TestGrammar.types))
170
self.assert_(not diff)
172
def test_google_chart(self):
174
'type': 'GoogleOMeter',
178
'x_range': [ 0, 10 ],
183
grammar = gc.ChartGrammar()
184
chart = grammar.parse(g)
185
# print chart.get_url()
186
# chart.download('meh.png')
189
if __name__ == "__main__":