Changeset 167

Show
Ignore:
Timestamp:
03/16/09 15:10:05 (3 years ago)
Author:
lgs
Message:

Add tests for vertical stacked bar charts. See #27

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/tests/stackedbar.py

    r166 r167  
    5959 
    6060 
    61 class VerticalBarTests(unittest.TestCase): 
     61class StackedVerticalBarTests(unittest.TestCase): 
    6262 
    6363    def test_updateChart(self): 
     
    6767            ('dataset2', ([0, 2], [1, 3], [2, 1], [3, 5], [4, 2.5])), 
    6868            ) 
    69         ch = pycha.bar.VerticalBarChart(surface) 
     69        ch = pycha.stackedbar.StackedVerticalBarChart(surface) 
    7070        ch.addDataset(dataset) 
    7171        ch._updateXY() 
     
    7777        self.assertEqual(ch.minyval, 0) 
    7878        self.assertEqual(ch.maxyval, 5) 
    79         self.assertEqual(ch.yrange, 5) 
    80         self.assertAlmostEqual(ch.yscale, 0.20, 4) 
    81         self.assertEqual(ch.minxdelta, 1) 
    82         self.assertAlmostEqual(ch.barWidthForSet, 0.075, 4) 
     79        self.assertEqual(ch.yrange, 10) 
     80        self.assertAlmostEqual(ch.yscale, 0.10, 4) 
     81        self.assertEqual(ch.minxdelta, 1) 
     82        self.assertAlmostEqual(ch.barWidth, 0.150, 4) 
    8383        self.assertAlmostEqual(ch.barMargin, 0.025, 4) 
    8484 
    8585        R = pycha.bar.Rect 
    8686        bars = ( 
    87             R(0.025, 0.400, 0.075, 0.600, 0, 3, 'dataset1'), 
    88             R(0.225, 0.200, 0.075, 0.800, 1, 4, 'dataset1'), 
    89             R(0.425, 0.600, 0.075, 0.400, 2, 2, 'dataset1'), 
    90             R(0.625, 0.000, 0.075, 1.000, 3, 5, 'dataset1'), 
    91             R(0.825, 0.300, 0.075, 0.700, 4, 3.5, 'dataset1'), 
    92  
    93             R(0.100, 0.600, 0.075, 0.400, 0, 2, 'dataset2'), 
    94             R(0.300, 0.400, 0.075, 0.600, 1, 3, 'dataset2'), 
    95             R(0.500, 0.800, 0.075, 0.200, 2, 1, 'dataset2'), 
    96             R(0.700, 0.000, 0.075, 1.000, 3, 5, 'dataset2'), 
    97             R(0.900, 0.500, 0.075, 0.500, 4, 2.5, 'dataset2'), 
     87            R(0.025, 0.700, 0.150, 0.300, 0, 3, 'dataset1'), 
     88            R(0.225, 0.600, 0.150, 0.400, 1, 4, 'dataset1'), 
     89            R(0.425, 0.800, 0.150, 0.200, 2, 2, 'dataset1'), 
     90            R(0.625, 0.500, 0.150, 0.500, 3, 5, 'dataset1'), 
     91            R(0.825, 0.650, 0.150, 0.350, 4, 3.5, 'dataset1'), 
     92 
     93            R(0.025, 0.500, 0.150, 0.200, 0, 2, 'dataset2'), 
     94            R(0.225, 0.300, 0.150, 0.300, 1, 3, 'dataset2'), 
     95            R(0.425, 0.700, 0.150, 0.100, 2, 1, 'dataset2'), 
     96            R(0.625, 0.000, 0.150, 0.500, 3, 5, 'dataset2'), 
     97            R(0.825, 0.400, 0.150, 0.250, 4, 2.5, 'dataset2'), 
    9898            ) 
    9999 
     
    108108            self.assertEqual(b1.name, b2.name) 
    109109 
     110    def test_updateTicks(self): 
     111        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 500, 500) 
     112        dataset = ( 
     113            ('dataset1', ([0, 1], [1, 1], [2, 3])), 
     114            ('dataset2', ([0, 2], [1, 0], [3, 4])), 
     115            ) 
     116        ch = pycha.stackedbar.StackedVerticalBarChart(surface) 
     117        ch.addDataset(dataset) 
     118        ch._updateXY() 
     119        ch._updateChart() 
     120        ch._updateTicks() 
     121        xticks = [(0.125, 0), (0.375, 1), (0.625, 2)] 
     122        for i in range(len(xticks)): 
     123            self.assertAlmostEqual(ch.xticks[i][0], xticks[i][0], 4) 
     124            self.assertAlmostEqual(ch.xticks[i][1], xticks[i][1], 4) 
     125 
     126        yticks = [ 
     127            (1.0, 0.0), (0.9, 0.7), (0.8, 1.4), (0.7, 2.1), (0.6, 2.8), 
     128            (0.5, 3.5), (0.4, 4.2), (0.3, 4.9), 
     129            ] 
     130        for i in range(len(yticks)): 
     131            self.assertAlmostEqual(ch.yticks[i][0], yticks[i][0], 4) 
     132            self.assertAlmostEqual(ch.yticks[i][1], yticks[i][1], 4) 
     133 
     134 
     135class HorizontalBarTests(unittest.TestCase): 
     136 
     137    def test_updateChart(self): 
     138        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 500, 500) 
     139        dataset = ( 
     140            ('dataset1', ([0, 1], [1, 1], [2, 3])), 
     141            ('dataset2', ([0, 2], [1, 0], [3, 4])), 
     142            ) 
     143        ch = pycha.bar.HorizontalBarChart(surface) 
     144        ch.addDataset(dataset) 
     145        ch._updateXY() 
     146        ch._updateChart() 
     147        self.assertEqual(ch.xrange, 3) 
     148        self.assertAlmostEqual(ch.xscale, 0.25, 4) 
     149        self.assertAlmostEqual(ch.yscale, 0.25, 4) 
     150        self.assertEqual(ch.minxdelta, 1) 
     151        self.assertAlmostEqual(ch.barWidthForSet, 0.09375, 4) 
     152        self.assertAlmostEqual(ch.barMargin, 0.03125, 4) 
     153 
     154        bars = ( 
     155            pycha.bar.Rect(0, 0.03125, 0.25, 0.09375, 0, 1, 'dataset1'), 
     156            pycha.bar.Rect(0, 0.28125, 0.25, 0.09375, 1, 1, 'dataset1'), 
     157            pycha.bar.Rect(0, 0.53125, 0.75, 0.09375, 2, 3, 'dataset1'), 
     158 
     159            pycha.bar.Rect(0, 0.125, 0.5, 0.09375, 0, 2, 'dataset2'), 
     160            pycha.bar.Rect(0, 0.375, 0.0, 0.09375, 1, 0, 'dataset2'), 
     161            pycha.bar.Rect(0, 0.875, 1.0, 0.09375, 3, 4, 'dataset2'), 
     162            ) 
     163 
     164        for i, bar in enumerate(bars): 
     165            b1, b2 = ch.bars[i], bar 
     166            self.assertAlmostEqual(b1.x, b2.x, 4) 
     167            self.assertAlmostEqual(b1.y, b2.y, 4) 
     168            self.assertAlmostEqual(b1.w, b2.w, 4) 
     169            self.assertAlmostEqual(b1.h, b2.h, 4) 
     170            self.assertEqual(b1.xval, b2.xval) 
     171            self.assertEqual(b1.yval, b2.yval) 
     172            self.assertEqual(b1.name, b2.name) 
     173 
    110174    def test_updateChartWithNegatives(self): 
    111175        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 500, 500) 
     
    113177            ('dataset1', ([0, -3], [1, -1], [2, 3], [3, 5])), 
    114178            ) 
    115         ch = pycha.bar.VerticalBarChart(surface) 
     179 
     180        ch = pycha.bar.HorizontalBarChart(surface) 
    116181        ch.addDataset(dataset) 
    117182        ch._updateXY() 
     
    132197        R = pycha.bar.Rect 
    133198        bars = ( 
    134             R(0.03125, 0.625, 0.1875, 0.375, 0, -3, 'dataset1'), 
    135             R(0.28125, 0.625, 0.1875, 0.125, 1, -1, 'dataset1'), 
    136             R(0.53125, 0.250, 0.1875, 0.375, 2, 3, 'dataset1'), 
    137             R(0.78125, 0.000, 0.1875, 0.625, 3, 5, 'dataset1'), 
     199            R(0.000, 0.03125, 0.375, 0.1875, 0, -3, 'dataset1'), 
     200            R(0.250, 0.28125, 0.125, 0.1875, 1, -1, 'dataset1'), 
     201            R(0.375, 0.53125, 0.375, 0.1875, 2, 3, 'dataset1'), 
     202            R(0.375, 0.78125, 0.625, 0.1875, 3, 5, 'dataset1'), 
    138203            ) 
    139204 
     
    154219            ('dataset2', ([0, 2], [1, 0], [3, 4])), 
    155220            ) 
    156         ch = pycha.bar.VerticalBarChart(surface) 
    157         ch.addDataset(dataset) 
    158         ch._updateXY() 
    159         ch._updateChart() 
    160         ch._updateTicks() 
    161         xticks = [(0.125, 0), (0.375, 1), (0.625, 2)] 
    162         for i in range(len(xticks)): 
    163             self.assertAlmostEqual(ch.xticks[i][0], xticks[i][0], 4) 
    164             self.assertAlmostEqual(ch.xticks[i][1], xticks[i][1], 4) 
    165  
    166         yticks = [ 
    167             (1.0, 0.0), (0.9, 0.4), (0.8, 0.8), (0.7, 1.2), (0.6, 1.6), 
    168             (0.5, 2.0), (0.4, 2.4), (0.3, 2.8), (0.2, 3.2), (0.1, 3.6), 
    169             (0.0, 4.0) 
    170             ] 
    171         for i in range(len(yticks)): 
    172             self.assertAlmostEqual(ch.yticks[i][0], yticks[i][0], 4) 
    173             self.assertAlmostEqual(ch.yticks[i][1], yticks[i][1], 4) 
    174  
    175     def test_udpateTicksWithNegatives(self): 
    176         surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 500, 500) 
    177         dataset = ( 
    178             ('dataset1', ([0, -2], [1, 1], [2, 3])), 
    179             ) 
    180         ch = pycha.bar.VerticalBarChart(surface) 
    181         ch.addDataset(dataset) 
    182         ch._updateXY() 
    183         ch._updateChart() 
    184         ch._updateTicks() 
    185         xticks = [(0.1667, 0), (0.5000, 1), (0.8333, 2)] 
    186         for i in range(len(xticks)): 
    187             self.assertAlmostEqual(ch.xticks[i][0], xticks[i][0], 4) 
    188             self.assertAlmostEqual(ch.xticks[i][1], xticks[i][1], 4) 
    189  
    190         yticks = [ 
    191             (1.0, -2.0), (0.9, -1.5), (0.8, -1.0), (0.7, -0.5), (0.6, 0.0), 
    192             (0.5, 0.5), (0.4, 1.0), (0.3, 1.5), (0.2, 2.0), (0.1, 2.5), 
    193             (0.0, 3.0) 
    194             ] 
    195         for i in range(len(yticks)): 
    196             self.assertAlmostEqual(ch.yticks[i][0], yticks[i][0], 4) 
    197             self.assertAlmostEqual(ch.yticks[i][1], yticks[i][1], 4) 
    198  
    199     def test_shadowRectangle(self): 
    200         ch = pycha.bar.VerticalBarChart(None) 
    201         shadow = ch._getShadowRectangle(10, 20, 400, 300) 
    202         self.assertEqual(shadow, (8, 18, 404, 302)) 
    203  
    204  
    205 class HorizontalBarTests(unittest.TestCase): 
    206  
    207     def test_updateChart(self): 
    208         surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 500, 500) 
    209         dataset = ( 
    210             ('dataset1', ([0, 1], [1, 1], [2, 3])), 
    211             ('dataset2', ([0, 2], [1, 0], [3, 4])), 
    212             ) 
    213         ch = pycha.bar.HorizontalBarChart(surface) 
    214         ch.addDataset(dataset) 
    215         ch._updateXY() 
    216         ch._updateChart() 
    217         self.assertEqual(ch.xrange, 3) 
    218         self.assertAlmostEqual(ch.xscale, 0.25, 4) 
    219         self.assertAlmostEqual(ch.yscale, 0.25, 4) 
    220         self.assertEqual(ch.minxdelta, 1) 
    221         self.assertAlmostEqual(ch.barWidthForSet, 0.09375, 4) 
    222         self.assertAlmostEqual(ch.barMargin, 0.03125, 4) 
    223  
    224         bars = ( 
    225             pycha.bar.Rect(0, 0.03125, 0.25, 0.09375, 0, 1, 'dataset1'), 
    226             pycha.bar.Rect(0, 0.28125, 0.25, 0.09375, 1, 1, 'dataset1'), 
    227             pycha.bar.Rect(0, 0.53125, 0.75, 0.09375, 2, 3, 'dataset1'), 
    228  
    229             pycha.bar.Rect(0, 0.125, 0.5, 0.09375, 0, 2, 'dataset2'), 
    230             pycha.bar.Rect(0, 0.375, 0.0, 0.09375, 1, 0, 'dataset2'), 
    231             pycha.bar.Rect(0, 0.875, 1.0, 0.09375, 3, 4, 'dataset2'), 
    232             ) 
    233  
    234         for i, bar in enumerate(bars): 
    235             b1, b2 = ch.bars[i], bar 
    236             self.assertAlmostEqual(b1.x, b2.x, 4) 
    237             self.assertAlmostEqual(b1.y, b2.y, 4) 
    238             self.assertAlmostEqual(b1.w, b2.w, 4) 
    239             self.assertAlmostEqual(b1.h, b2.h, 4) 
    240             self.assertEqual(b1.xval, b2.xval) 
    241             self.assertEqual(b1.yval, b2.yval) 
    242             self.assertEqual(b1.name, b2.name) 
    243  
    244     def test_updateChartWithNegatives(self): 
    245         surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 500, 500) 
    246         dataset = ( 
    247             ('dataset1', ([0, -3], [1, -1], [2, 3], [3, 5])), 
    248             ) 
    249  
    250         ch = pycha.bar.HorizontalBarChart(surface) 
    251         ch.addDataset(dataset) 
    252         ch._updateXY() 
    253         ch._updateChart() 
    254         self.assertEqual(ch.minxval, 0) 
    255         self.assertEqual(ch.maxxval, 3) 
    256         self.assertEqual(ch.xrange, 3) 
    257         self.assertAlmostEqual(ch.xscale, 0.25, 4) 
    258         self.assertEqual(ch.minyval, -3) 
    259         self.assertEqual(ch.maxyval, 5) 
    260         self.assertEqual(ch.yrange, 8) 
    261         self.assertAlmostEqual(ch.yscale, 0.125, 4) 
    262         self.assertAlmostEqual(ch.area.origin, 0.375) 
    263         self.assertEqual(ch.minxdelta, 1) 
    264         self.assertAlmostEqual(ch.barWidthForSet, 0.1875, 4) 
    265         self.assertAlmostEqual(ch.barMargin, 0.03125, 4) 
    266  
    267         R = pycha.bar.Rect 
    268         bars = ( 
    269             R(0.000, 0.03125, 0.375, 0.1875, 0, -3, 'dataset1'), 
    270             R(0.250, 0.28125, 0.125, 0.1875, 1, -1, 'dataset1'), 
    271             R(0.375, 0.53125, 0.375, 0.1875, 2, 3, 'dataset1'), 
    272             R(0.375, 0.78125, 0.625, 0.1875, 3, 5, 'dataset1'), 
    273             ) 
    274  
    275         for i, bar in enumerate(bars): 
    276             b1, b2 = ch.bars[i], bar 
    277             self.assertAlmostEqual(b1.x, b2.x, 4) 
    278             self.assertAlmostEqual(b1.y, b2.y, 4) 
    279             self.assertAlmostEqual(b1.w, b2.w, 4) 
    280             self.assertAlmostEqual(b1.h, b2.h, 4) 
    281             self.assertEqual(b1.xval, b2.xval) 
    282             self.assertEqual(b1.yval, b2.yval) 
    283             self.assertEqual(b1.name, b2.name) 
    284  
    285     def test_updateTicks(self): 
    286         surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 500, 500) 
    287         dataset = ( 
    288             ('dataset1', ([0, 1], [1, 1], [2, 3])), 
    289             ('dataset2', ([0, 2], [1, 0], [3, 4])), 
    290             ) 
    291221        ch = pycha.bar.HorizontalBarChart(surface) 
    292222        ch.addDataset(dataset) 
     
    298228            (0.0, 0.0), (0.1, 0.4), (0.2, 0.8), (0.3, 1.2), (0.4, 1.6), 
    299229            (0.5, 2.0), (0.6, 2.4), (0.7, 2.8), (0.8, 3.2), (0.9, 3.6), 
    300             (1.0, 4.0) 
     230            (1.0, 4.0), 
    301231            ] 
    302232        for i in range(len(xticks)): 
     
    322252            (0.0, -2.0), (0.1, -1.5), (0.2, -1.0), (0.3, -0.5), (0.4, 0.0), 
    323253            (0.5, 0.5), (0.6, 1.0), (0.7, 1.5), (0.8, 2.0), (0.9, 2.5), 
    324             (1.0, 3.0) 
     254            (1.0, 3.0), 
    325255            ] 
    326256        for i in range(len(xticks)): 
     
    342272    return unittest.TestSuite(( 
    343273        unittest.makeSuite(StackedBarTests), 
    344         unittest.makeSuite(VerticalBarTests), 
     274        unittest.makeSuite(StackedVerticalBarTests), 
    345275        unittest.makeSuite(HorizontalBarTests), 
    346276    )) 
     
    348278if __name__ == '__main__': 
    349279    unittest.main(defaultTest='test_suite') 
    350