source: qesdi/geoplot/trunk/lib/geoplot/tests/unit/test_contour_plot_base.py @ 5605

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/qesdi/geoplot/trunk/lib/geoplot/tests/unit/test_contour_plot_base.py@5605
Revision 5605, 5.2 KB checked in by pnorton, 11 years ago (diff)

First attempt at adding the contour plot. I've tried to re-use existing components where possible. There is still a lot of duplication between the contour plot base and plot base classes.

Line 
1"""
2Tests for the ContourPlotBase class.
3"""
4__test__=True
5
6import unittest
7import nose.tools as nt
8import nose
9import logging
10import cdms2 as cdms
11
12from geoplot.contour_plot_base import ContourPlotBase
13
14from geoplot.config import getConfig
15config = getConfig()
16
17log = logging.getLogger(__name__)
18
19
20var = cdms.createVariable(range(10))
21
22#example values that aren't the defaults
23testValues ={'_colourBar':{'colourBarMin':1, 'colourBarMax':4, 'cmap':'copper', 'colourBarLabel':'some_label', 'colourBarPosition':'vertical'},
24             '_plotArea':{'width':1200, 'height':1200,'dpi':80, 'fontSize':'large', 'plotTitle':'a plot','drawColourBar':False, 'drawLogo':False,'drawMetadata':False},
25             '_metadataBox':{'metadataList':[('list','of'),('some','items')]},
26             '_plotWriter':{'format':'png','outputCMYK':True},
27             '_mapFactory':{'projection':'latlon','xLimits':( -11.0,  2.8),'yLimits':(  49.0, 60.0), 'drawCoast' :False, 'drawRivers':False, 'addShapefile':False, 'resolution':'c'},
28             '_gridFactory':{'dataType':'national','cdmsVar':var},
29             }
30
31class TestContourPlotBase(unittest.TestCase):
32
33    def setUp(self):
34        pass
35   
36    def tearDown(self):
37        pass
38   
39    def test_001_createsInternalObjectsFromDefaults(self):
40        base = ContourPlotBase()
41
42        for att in testValues.keys():
43           
44            #check the object has been created
45            obj = getattr(base, att)
46            name = obj.__class__.__name__
47           
48            assert obj != None
49                       
50            #check you can get the default from the base object
51            for k, v in config['Defaults'][name].items():
52                assert getattr(base, k) == v
53           
54    def test_002_dynamicAttributeReading(self):
55       
56        base = ContourPlotBase()
57       
58        #first set the values on the private attributes directly
59        for attribute, testVals in testValues.items():
60            obj = getattr(base, attribute)
61            for att, val in testVals.items():
62                setattr(obj,att,val)
63               
64        #now try and read the values back via the 'base' object directly
65        for attribute, testVals in testValues.items():
66           
67            for att, val in testVals.items():
68                nt.assert_equal(getattr(base, att), val) 
69   
70    def test_003_cantDynamicallySetOtherAtts(self):
71       
72        #quick check that the dynamic attributes are only those
73        #mentioned in the config file
74       
75        base = ContourPlotBase()
76
77        original = base._colourBar.draw
78        base.draw = "this shouldn't overwrite the function"
79       
80        assert base.draw == "this shouldn't overwrite the function"
81        assert base._colourBar.draw == original
82
83
84    def test_004_dynamicAttributeSetting(self):
85       
86        base = ContourPlotBase()
87       
88        #set the values using the base directly
89        for attribute, testVals in testValues.items():
90           
91            for att, val in testVals.items():
92                setattr(base, att, val)
93               
94        #now try and read the values back via private objects
95        for attribute, testVals in testValues.items():
96           
97            obj = getattr(base, attribute)
98           
99            for att, val in testVals.items():
100               
101                nt.assert_equal(getattr(obj, att), val)         
102
103    def test_005_creationWithKwargs(self):
104       
105        kwargs = {}
106       
107        for att, testVals in testValues.items():
108            kwargs.update(testVals)
109       
110        base = ContourPlotBase(**kwargs)
111       
112        for key, value in kwargs.items():
113            assert getattr(base, key) == value
114   
115    def test_006_dynamicColourBarPosition(self):
116        a = (1.0, 10.0); b = (2.0, 10.0)
117        base = ContourPlotBase(xLimits=a, yLimits=b)
118        assert base.colourBarPosition == None
119        base._setColourBarPosition()
120        nt.assert_equal(base.colourBarPosition, 'horizontal')
121       
122        base = ContourPlotBase(xLimits=b, yLimits=a)
123        assert base.colourBarPosition == None
124        base._setColourBarPosition()
125        nt.assert_equal(base.colourBarPosition, 'vertical')
126   
127        #check no change if already set
128        base = ContourPlotBase(xLimits=b, yLimits=a, colourBarPosition='horizontal')
129        assert base.colourBarPosition == 'horizontal'
130        base._setColourBarPosition()
131        nt.assert_equal(base.colourBarPosition, 'horizontal')   
132
133    def test_007_dynamicColourBarLabel(self):
134       
135        base = ContourPlotBase(units='some unit')
136        assert base.colourBarLabel == None
137        base._setColourBarLabel()
138        nt.assert_equal(base.colourBarLabel, 'some unit')
139       
140        #check no change if already set
141        base = ContourPlotBase(colourBarLabel='some label', units='some unit')
142        assert base.colourBarLabel == 'some label'
143        base._setColourBarLabel()
144        nt.assert_equal(base.colourBarLabel, 'some label')   
145   
146def suite():
147    suite = unittest.TestSuite()
148    #suite.addTest(unittest.makeSuite(TestContourPlotBase))
149   
150    suite.addTest(TestContourPlotBase("test_003_cantDynamicallySetOtherAtts"))
151   
152    return suite
153
154if __name__ == "__main__":
155    nose.runmodule()
156   
157#    nose.run(suite=suite())
Note: See TracBrowser for help on using the repository browser.