source: TI05-delivery/ows_framework/trunk/ows_server/ows_server/tests/test_extract.py @ 2596

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI05-delivery/ows_framework/trunk/ows_server/ows_server/tests/test_extract.py@2596
Revision 2596, 3.8 KB checked in by spascoe, 12 years ago (diff)

Improved tests.

Line 
1"""
2Test CSML subsetToGridSeries against cdms equivilent.
3
4"""
5
6import csml, cdms
7import os
8import tempfile
9
10from unittest import TestCase
11import Numeric as N
12
13here = os.path.dirname(os.path.abspath(__file__))
14data_csml = os.path.join(here, 'data', 'test.csml')
15
16def extract_csml(file, field, **sel):
17    d = csml.parser.Dataset()
18    d.parse(file)
19   
20    # Find feature by name
21    for id in d.getFeatureList():
22        f = d.getFeature(id)
23        if f.name.CONTENT == field:
24            break
25    else:
26        raise ValueError, 'No feature found with name %s' % field
27
28    # Extract to a temporary file
29    (fd, tmp) = tempfile.mkstemp('test_csml_', '.nc'); os.close(fd)
30    try:
31        f.subsetToGridSeries(outputdir=os.path.dirname(tmp),
32                             ncname=os.path.basename(tmp),
33                             **sel)
34
35        # Open temporary file
36        d2 = cdms.open(tmp)
37        var = d2(field, squeeze=1)
38    finally:
39        os.remove(tmp)
40       
41    return var
42
43class TestExtractAll(TestCase):
44
45    def _checkBorder(self, var):
46        """
47        The border of the variable should be filled with axis values.
48
49        """
50        lat5 = var.getLatitude().getValue()[5]
51        lon5 = var.getLongitude().getValue()[5]
52        self.assertEquals(var[0,5], lat5)
53        self.assertEquals(var[5,0], lon5)
54
55        lat30 = var.getLatitude().getValue()[30]
56        lon30 = var.getLongitude().getValue()[30]
57        self.assertEquals(var[0,30], lat30)
58        self.assertEquals(var[30,0], lon30)
59   
60    def test1(self):
61        var = extract_csml(data_csml, 'cross_0_360p',
62                            time='1980-01-01T00:00:00.0')
63       
64        self.assertEquals(var.shape, (36,36))
65        self._checkBorder(var)
66
67    def test2(self):
68        var = extract_csml(data_csml, 'cross_0_360m',
69                            time='1980-01-01T00:00:00.0')
70        self.assertEquals(var.shape, (36,36))
71        self._checkBorder(var)
72
73    def test3(self):
74        var = extract_csml(data_csml, 'cross_m180_180m',
75                            time='1980-01-01T00:00:00.0')
76        self.assertEquals(var.shape, (36,36))
77        self._checkBorder(var)
78
79    def test4(self):
80        var = extract_csml(data_csml, 'cross_m180_180p',
81                            time='1980-01-01T00:00:00.0')
82        self.assertEquals(var.shape, (36,36))
83        self._checkBorder(var)
84
85
86class TestLatOrder(TestCase):
87    """
88    Test how the latitude ordering of the data and the order of the
89    latitude extraction parameter affects the results.
90
91    """
92
93    def testLatOrder1(self):
94        var = extract_csml(data_csml, 'cross_0_360p',
95                            time='1980-01-01T00:00:00.0',
96                            latitude=(0, 90),
97                            longitude=(0,180))
98        self.assertEquals(var.shape, (18,18))
99        #assert N.trace(var[:,-1::-1]) == 180
100
101    def testLatOrder2(self):
102        var = extract_csml(data_csml, 'cross_0_360m',
103                            time='1980-01-01T00:00:00.0',
104                            latitude=(0, 90),
105                            longitude=(0,180))
106        self.assertEquals(var.shape, (18,18))
107        #assert N.trace(var[:,-1::-1]) == 180
108
109    def testLatOrder3(self):
110        var = extract_csml(data_csml, 'cross_m180_180m',
111                            time='1980-01-01T00:00:00.0',
112                            latitude=(0, 90),
113                            longitude=(-180,0))
114        self.assertEquals(var.shape, (18,18))
115        #assert N.trace(var[:,-1::-1]) == 180
116
117    def testLatOrder4(self):
118        var = extract_csml(data_csml, 'cross_m180_180p',
119                            time='1980-01-01T00:00:00.0',
120                            latitude=(0, 90),
121                            longitude=(-180,0))
122        self.assertEquals(var.shape, (18,18))
123        #assert N.trace(var[:,-1::-1]) == 180
124
Note: See TracBrowser for help on using the repository browser.