blob: 67e65dc11f0d8ee84486bf86dcf047e1edb69ba5 [file] [log] [blame]
#!/usr/bin/python2.4
#
# Copyright 2008 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Unittest for Graphy and Google Chart API backend."""
import warnings
from graphy import graphy_test
from graphy import pie_chart
from graphy.backends import google_chart_api
from graphy.backends.google_chart_api import base_encoder_test
# Extend BaseChartTest so that we pick up & repeat all the line tests which
# Pie Charts should continue to satisfy
class PieChartTest(base_encoder_test.BaseChartTest):
def tearDown(self):
warnings.resetwarnings()
super(PieChartTest, self).tearDown()
def GetChart(self, *args, **kwargs):
return google_chart_api.PieChart(*args, **kwargs)
def AddToChart(self, chart, points, color=None, label=None):
return chart.AddSegment(points[0], color=color, label=label)
def testCanRemoveDefaultFormatters(self):
# Override this test, as pie charts don't have default formatters.
pass
def testChartType(self):
self.chart.display.is3d = False
self.assertEqual(self.Param('cht'), 'p')
self.chart.display.is3d = True
self.assertEqual(self.Param('cht'), 'p3')
def testEmptyChart(self):
self.assertEqual(self.Param('chd'), 's:')
self.assertEqual(self.Param('chco'), '')
self.assertEqual(self.Param('chl'), '')
def testChartCreation(self):
self.chart = self.GetChart([1,2,3], ['Mouse', 'Cat', 'Dog'])
self.assertEqual(self.Param('chd'), 's:Up9')
self.assertEqual(self.Param('chl'), 'Mouse|Cat|Dog')
self.assertEqual(self.Param('cht'), 'p')
# TODO: Get 'None' labels to work and test them
def testAddSegment(self):
self.chart = self.GetChart([1,2,3], ['Mouse', 'Cat', 'Dog'])
self.chart.AddSegment(4, label='Horse')
self.assertEqual(self.Param('chd'), 's:Pfu9')
self.assertEqual(self.Param('chl'), 'Mouse|Cat|Dog|Horse')
# TODO: Remove this when AddSegments is removed
def testAddMultipleSegments(self):
warnings.filterwarnings('ignore')
self.chart.AddSegments([1,2,3],
['Mouse', 'Cat', 'Dog'],
['ff0000', '00ff00', '0000ff'])
self.assertEqual(self.Param('chd'), 's:Up9')
self.assertEqual(self.Param('chl'), 'Mouse|Cat|Dog')
self.assertEqual(self.Param('chco'), 'ff0000,00ff00,0000ff')
# skip two colors
self.chart.AddSegments([4,5,6], ['Horse', 'Moose', 'Elephant'], ['cccccc'])
self.assertEqual(self.Param('chd'), 's:KUfpz9')
self.assertEqual(self.Param('chl'), 'Mouse|Cat|Dog|Horse|Moose|Elephant')
self.assertEqual(self.Param('chco'), 'ff0000,00ff00,0000ff,cccccc')
def testMultiplePies(self):
self.chart.AddPie([1,2,3],
['Mouse', 'Cat', 'Dog'],
['ff0000', '00ff00', '0000ff'])
self.assertEqual(self.Param('chd'), 's:Up9')
self.assertEqual(self.Param('chl'), 'Mouse|Cat|Dog')
self.assertEqual(self.Param('chco'), 'ff0000,00ff00,0000ff')
self.assertEqual(self.Param('cht'), 'p')
# skip two colors
self.chart.AddPie([4,5,6], ['Horse', 'Moose', 'Elephant'], ['cccccc'])
self.assertEqual(self.Param('chd'), 's:KUf,pz9')
self.assertEqual(self.Param('chl'), 'Mouse|Cat|Dog|Horse|Moose|Elephant')
self.assertEqual(self.Param('chco'), 'ff0000,00ff00,0000ff,cccccc')
self.assertEqual(self.Param('cht'), 'pc')
def testMultiplePiesNo3d(self):
chart = self.GetChart([1,2,3], ['Mouse', 'Cat', 'Dog'])
chart.AddPie([4,5,6], ['Horse', 'Moose', 'Elephant'])
chart.display.is3d = True
warnings.filterwarnings('error')
self.assertRaises(RuntimeWarning, chart.display.Url, 320, 240)
def testAddSegmentByIndex(self):
self.chart = self.GetChart([1,2,3], ['Mouse', 'Cat', 'Dog'])
self.chart.AddSegment(4, 'Horse', pie_index=0)
self.assertEqual(self.Param('chd'), 's:Pfu9')
self.assertEqual(self.Param('chl'), 'Mouse|Cat|Dog|Horse')
self.chart.AddPie([4,5], ['Apple', 'Orange'], [])
self.chart.AddSegment(6, 'Watermelon', pie_index=1)
self.assertEqual(self.Param('chd'), 's:KUfp,pz9')
def testSetColors(self):
self.assertEqual(self.Param('chco'), '')
self.chart.AddSegment(1, label='Mouse')
self.chart.AddSegment(5, label='Moose')
self.chart.SetColors('000033', '0000ff')
self.assertEqual(self.Param('chco'), '000033,0000ff')
self.chart.AddSegment(6, label='Elephant')
self.assertEqual(self.Param('chco'), '000033,0000ff')
def testHugeSegmentSizes(self):
self.chart = self.GetChart([1000000000000000L,3000000000000000L],
['Big', 'Uber'])
self.assertEqual(self.Param('chd'), 's:U9')
self.chart.display.enhanced_encoding = True
self.assertEqual(self.Param('chd'), 'e:VV..')
def testSetSegmentSize(self):
segment1 = self.chart.AddSegment(1)
segment2 = self.chart.AddSegment(2)
self.assertEqual(self.Param('chd'), 's:f9')
segment2.size = 3
self.assertEquals(segment1.size, 1)
self.assertEquals(segment2.size, 3)
self.assertEqual(self.Param('chd'), 's:U9')
def testChartAngle(self):
self.assertTrue('chp' not in self.chart.display._Params(self.chart))
self.chart.display.angle = 3.1415
self.assertEqual(self.Param('chp'), '3.1415')
self.chart.display.angle = 0
self.assertTrue('chp' not in self.chart.display._Params(self.chart))
if __name__ == '__main__':
graphy_test.main()