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

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

Moved QESDI tree from DCIP repository
 http://proj.badc.rl.ac.uk/svn/dcip/qesdi@3900.

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