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

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/qesdi/geoplot/trunk/lib/geoplot/tests/unit/test_metadata_box.py@5636
Revision 5636, 4.9 KB checked in by pnorton, 12 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_metadata_box.py
4"""
5
6import nose
7
8from matplotlib.patches import Rectangle
9
10import geoplot.metadata_box
11
12from geoplot.metadata_box import MetadataBox
13from geoplot.plot_font import PlotFont
14
15import geoplot.tests.test_config as testConfig
16#testConfig._conf = None
17config = testConfig.getConfig()
18
19
20FONTS_SECTION = 'Fonts'
21
22
23class Test_MetadataBox(object):
24
25    def setUp(self):
26        self.oldConfig = geoplot.metadata_box.config
27        geoplot.metadata_box.config = config
28        self.metadataList = [("label", "value"), ("label 2", "value 2"), ("label 3", "value 3")]
29        self.mdb = MetadataBox(self.metadataList)
30
31    def tearDown(self):
32        geoplot.metadata_box.config = self.oldConfig
33
34    def test_001_checkInitialisation(self):
35        assert(self.mdb.metadataList == self.metadataList)
36
37    def test_002_raisesExceptionWhenListWrongType(self):
38        nose.tools.assert_raises(ValueError, setattr, self.mdb, 'metadataList', {"key":"value"})
39        nose.tools.assert_raises(ValueError, setattr, self.mdb, 'metadataList', [{"key":"value"}])
40
41    def test_002_raisesExceptionWhenTuplesAreTheWrongLength(self):
42        newMetadata  = [("Dataset", "MOHC Probabilistic Land"),
43                        ("Variable", "Mean Temperature"),
44                        ("Emissions Scenario", "Medium (A1B)"),
45                        ("Time Slice", "2040-2079", "Extra item"),
46                        ("Temporal Av. Period", "Spring"),
47                        ("Percentile", "10th")]
48
49        nose.tools.assert_raises(ValueError, setattr, self.mdb, 'metadataList', newMetadata)
50
51    def test_003_checkDataFont(self):
52        dataFont = config[FONTS_SECTION]['Metadata']
53        assert(self.mdb.dataFont.getDict('small')  == dataFont.getDict('small'))
54        assert(self.mdb.dataFont.getDict('medium') == dataFont.getDict('medium'))
55        assert(self.mdb.dataFont.getDict('large')  == dataFont.getDict('large'))
56
57    def test_004_checkTitleFont(self):
58        titleFont = config[FONTS_SECTION]['MetadataTitle']
59        assert(self.mdb.titleFont.getDict('small')  == titleFont.getDict('small'))
60        assert(self.mdb.titleFont.getDict('medium') == titleFont.getDict('medium'))
61        assert(self.mdb.titleFont.getDict('large')  == titleFont.getDict('large'))
62
63    def test_005_checkTitleString(self):
64        assert(self.mdb.title == config[geoplot.metadata_box.PLOT_SECTION]['metadataBoxTitle'])
65
66    def test_006_checkFrameColour(self):
67        assert(self.mdb.frameColour == config[geoplot.metadata_box.PLOT_SECTION]['metadataFrameColour'])
68
69    def test_007_drawMetadataFrame(self):
70        axes = MockAxes()
71        self.mdb._drawFrame(axes)
72        assert(len(axes.patchList) == 2)
73        assert(len(axes.textList) == 0)
74
75        assert(axes.patchList[0].get_width() == 1)
76        assert(axes.patchList[0].get_height() == 1)
77        assert(axes.patchList[0].fill == False)
78        assert(axes.patchList[0].get_linewidth() == 2)
79        assert(axes.patchList[0].get_edgecolor() == self.mdb.frameColour)
80
81        assert(axes.patchList[1].get_width() == 1)
82        assert(axes.patchList[1].get_height() == geoplot.metadata_box.FRAME_HEADING_HEIGHT)
83        assert(axes.patchList[1].fill == True)
84        assert(axes.patchList[1].get_linewidth() == 0)
85        assert(axes.patchList[1].get_facecolor() == self.mdb.frameColour)
86
87    def test_008_drawMetadata(self):
88        axes = MockAxes()
89        self.mdb._drawMetadata(axes, 'small', 900)
90
91        assert(len(axes.patchList) == 0)
92        assert(len(axes.textList) == 3)
93        print len(axes.textList)
94        print axes.textList[2]
95
96        #check the heading
97        assert(axes.textList[0]['string'] == self.mdb.title)
98        assert(axes.textList[0]['fontDict'] == self.mdb.titleFont.getDict('small'))
99        assert(axes.textList[0]['verticalalignment'] == 'top')
100        assert(axes.textList[0]['horizontalalignment'] == 'left')
101
102        #check the first 5
103        assert(axes.textList[1]['string'] == "label: value\nlabel 2: value 2\nlabel 3: value 3")
104        assert(axes.textList[1]['fontDict'] == self.mdb.dataFont.getDict('small'))
105
106        #check the second 5
107        assert(axes.textList[2]['string'] == "")
108        assert(axes.textList[2]['fontDict'] == self.mdb.dataFont.getDict('small'))
109
110
111class MockAxes(object):
112
113    def __init__(self):
114        self.patchList = []
115        self.textList = []
116
117    def text(self, x, y, string, fontDict, horizontalalignment=None
118             ,verticalalignment=None, weight=None):
119        self.textList.append({'x':x, 'y':y, 'string':string,
120                              'fontDict':fontDict, 'weight':weight,
121                              'horizontalalignment':horizontalalignment,
122                              'verticalalignment':verticalalignment})
123
124    def add_patch(self, rect):
125        self.patchList.append(rect)
126
127if __name__ == '__main__':
128
129    import geoplot.log_util
130
131    geoplot.log_util.setGeoplotHandlerToStdOut()
132
133
134    nose.runmodule()
Note: See TracBrowser for help on using the repository browser.