source: qesdi/geoplot/trunk/lib/geoplot/tests/unit/test_plot_base_old.py @ 5636

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

Fixed a problem with imshow drawing a grid when there was no data to draw. Also fixed some of the tests.

Line 
1#/urs/bin/env python
2"""
3test_plot_base.py
4"""
5
6import cdms2 as cdms
7import nose
8
9import matplotlib
10
11import geoplot.plot_base
12import geoplot
13from geoplot.plot_base import PlotBase
14from geoplot.map_factory import MapFactory
15from geoplot.grid_factory import GridFactory
16
17import geoplot.tests.test_utils as test_utils
18       
19from geoplot.config import getConfig
20config = getConfig()
21       
22arguments = {'format':'jpg', 'width': 400, 'height': 601, 
23             'xLimits': (-13.0, 3.0), 'yLimits': (49.0, 60.0), 'dpi': 92,
24             'cmap':'hot', 'drawColourBar': False,
25             'colourBarLabel': "temperature change", 
26             'colourBarPosition': 'horizontal', 'colourBarMin': 1.0,
27             'colourBarMax': 10.0, 'drawLogo': False, 'drawCoast': False,
28             'drawRivers': False, 'plotTitle': " some plot", 'dataType':'national',
29             'resolution':'h', 'cdmsVar':cdms.createVariable(range(10)),
30             'drawMetadata':False, 'projection':'national',
31             'metadataList': [('Name one', 'value 1'), ('Name two', 'value 2')],
32             'fontSize': "large", 'units': "degrees", 
33             'outputCMYK':True, 'addShapefile':'some/shape/file/'}
34
35argumentTypes = {'format':str, 'width': int, 'height':int, 
36                 'xLimits': tuple, 'yLimits': tuple, 'dpi': int,
37                 'cmap': str, 'drawMetadata':bool, 'projection':str,
38                 'dataType':str, 'resolution':str, 'cdmsVar':cdms.tvariable.TransientVariable,
39                 'drawColourBar': bool,
40                 'colourBarLabel': str, 'colourBarPosition': str,
41                 'colourBarMin': float, 'colourBarMax': float,
42                 'drawLogo': bool, 'drawCoast': bool, 'drawRivers': bool, 
43                 'plotTitle': str, 'metadataList': list, 'fontSize': str,
44                 'units': str, 'outputCMYK':bool,
45                 'addShapefile':str}
46
47dynamicDefaultArgs = ['colourBarLabel', 'colourBarPosition', 'cmap']
48
49DEFAULTS_SECTION = 'PlotBaseDefaults'
50
51accessableClasses = ['ColourBar',  'PlotArea',   'MetadataBox', 'PlotWriter',  'MapFactory', 'GridFactory']
52
53
54class Test_PlotBase(object):
55
56    def setUp(self):
57        self.cdmsVar = cdms.createVariable([1,2,3,4])
58       
59        self.validConstructorKWArgs = []
60        for klass in accessableClasses:
61            self.validConstructorKWArgs.extend(config['Defaults'][klass].keys())
62       
63
64    def tearDown(self):
65        pass
66   
67    def constructUsingDefaults(self):
68        self.pb = PlotBase()
69       
70    def constructUsingArguments(self):
71        self.pb = PlotBase(**arguments)
72   
73    def test_001_checkDefaultArguments(self):
74       
75        self.constructUsingDefaults()
76       
77        #for each of the keys form the valid constructor keys dictionary
78        for klass in accessableClasses:
79            for key, default in config['Defaults'][klass].items():
80           
81                currentValue = getattr(self.pb, key)
82                print "Testing key:", key
83               
84                #if they key is in the config defaults section then it should match
85                #the current attribute, otherwise it will be none
86                nose.tools.assert_equals(currentValue, default)
87
88    def test_002_checkInitialiserSetsProperties(self):
89        """
90        Checks that the arguments provided can be retrieved via the objects
91        properties.
92        """
93        self.constructUsingArguments()
94
95        #for each of the keys in the dictionary used as the arguments
96        for key in arguments.keys():
97            print "Testing key", key
98            argumentValue = arguments[key]
99            propertyValue = getattr(self.pb, key)
100            nose.tools.assert_equals(argumentValue, propertyValue)
101       
102    def test_003_checkPropertiesCanBeSet(self):
103        """
104        Chekcs that the properties can be set and then read back
105        """
106        self.constructUsingDefaults()
107       
108        #set each of the proerties using the arguments dictionary
109        for key in self.validConstructorKWArgs:
110            newValue = arguments[key]
111            setattr(self.pb, key, newValue)
112            propertyValue = getattr(self.pb, key)
113            nose.tools.assert_equals(propertyValue, newValue)
114   
115    def test_004_checkPropertieTypes(self):
116        """
117        Chekcs that the properties return the correct type
118        """
119        self.constructUsingArguments()
120       
121       
122       
123        for key in self.validConstructorKWArgs:
124            print "Testing key", key
125            propertyValue = getattr(self.pb, key)
126            propertyType = propertyValue.__class__
127            expectedType = argumentTypes[key]
128            print propertyValue, propertyType, expectedType
129            nose.tools.assert_equals(propertyType, expectedType)
130           
131    def test_005_testMapSet(self):
132        """
133        chack that the map and grid are created
134        """
135        self.constructUsingArguments()
136       
137        mapFactory = getattr(self.pb, '_mapFactory')
138        gridFactory = getattr(self.pb, '_gridFactory')
139       
140        nose.tools.assert_true(mapFactory.__class__ == MapFactory)
141        nose.tools.assert_true(gridFactory.__class__ == GridFactory)
142       
143        #test the map attributes match
144        nose.tools.assert_equal(mapFactory.xLimits , self.pb.xLimits)
145        nose.tools.assert_equal(mapFactory.yLimits , self.pb.yLimits)
146        nose.tools.assert_equal(mapFactory.drawCoast , self.pb.drawCoast)
147        nose.tools.assert_equal(mapFactory.drawRivers , self.pb.drawRivers)
148       
149        #test the grid attributes
150        nose.tools.assert_true(gridFactory.cdmsVar is self.pb.cdmsVar)   
151           
152    def test_006_testDefaultColourbarOrientation(self):
153        pbLattudeGreater = PlotBase(xLimits=[1,10], yLimits=[2,8])
154        pbLongitudeGreater = PlotBase(xLimits=[50,60], yLimits=[2,30])
155        pbLattudeGreater._setDynamicArgs()
156        pbLongitudeGreater._setDynamicArgs()
157        nose.tools.assert_equal(pbLattudeGreater.colourBarPosition , 'horizontal')
158        nose.tools.assert_equal(pbLongitudeGreater.colourBarPosition , 'vertical')
159       
160    def test_007_testDefautColourBarLabel(self):
161        pb = PlotBase(units='feet')
162        pb._setDynamicArgs()
163        nose.tools.assert_equal(pb.units, 'feet')
164        nose.tools.assert_equal(pb.colourBarLabel , pb.units)
165       
166    def test_008_testPlotsColourBar(self):
167        self.constructUsingArguments()
168        nose.tools.assert_equal(self.pb._colourBar.__class__ ,
169                               geoplot.colour_bar.ColourBar)
170        nose.tools.assert_equal(self.pb.colourBarLabel ,
171                                self.pb._colourBar.colourBarLabel)
172        nose.tools.assert_equal(self.pb.colourBarPosition ,
173                                self.pb._colourBar.colourBarPosition)
174        nose.tools.assert_equal( (self.pb.colourBarMin, self.pb.colourBarMax) ,
175                                 (self.pb._colourBar.colourBarMin,self.pb._colourBar.colourBarMax)
176                                 )
177       
178    def test_009_testPlotsMetadata(self):
179        self.constructUsingArguments()
180       
181        nose.tools.assert_equal(self.pb._metadataBox.__class__ ,
182                               geoplot.metadata_box.MetadataBox)
183        nose.tools.assert_equal(self.pb.metadataList ,
184                                self.pb._metadataBox.metadataList)
185
186    def test_010_testPlotsPlotArea(self):
187        self.constructUsingArguments()
188       
189        nose.tools.assert_equal(self.pb._plotArea.__class__ ,
190                               geoplot.plotarea.PlotArea)
191        nose.tools.assert_equal(self.pb.width,
192                                self.pb._plotArea.width)
193        nose.tools.assert_equal(self.pb.height,
194                                self.pb._plotArea.height)
195        nose.tools.assert_equal(self.pb.dpi,
196                                self.pb._plotArea.dpi)
197        nose.tools.assert_equal(self.pb.fontSize,
198                                self.pb._plotArea.fontSize)
199        nose.tools.assert_equal(self.pb.plotTitle,
200                                self.pb._plotArea.plotTitle)
201               
202    def test_011_testPlotWriterAttribute(self):
203        self.constructUsingArguments()
204       
205        nose.tools.assert_equal(self.pb._plotWriter.__class__ ,
206                               geoplot.plot_writer.PlotWriter)
207        nose.tools.assert_equal(self.pb.format,
208                                self.pb._plotWriter.format)
209        nose.tools.assert_equal(self.pb.outputCMYK,
210                                self.pb._plotWriter.outputCMYK)
211       
212if __name__ == '__main__':
213
214    import geoplot.log_util
215    geoplot.log_util.setGeoplotHandlerToStdOut()
216
217    nose.runmodule()
Note: See TracBrowser for help on using the repository browser.