source: inundation/coordinate_transforms/test_geo_reference.py @ 3236

Last change on this file since 3236 was 3134, checked in by duncan, 19 years ago

small fixes

File size: 12.8 KB
Line 
1#!/usr/bin/env python
2#
3
4import unittest
5import tempfile
6import os
7
8from geo_reference import *
9from Numeric import allclose,array
10
11class geo_referenceTestCase(unittest.TestCase):
12    def setUp(self):
13        pass
14       
15    def tearDown(self):
16        pass
17
18   
19   
20    def test_get_origin(self):
21        g = Geo_reference(56,1.9,1.9)
22        (z,x,y) = g.get_origin()
23
24        self.failUnless(z == g.get_zone(), ' failed')
25        self.failUnless(x == g.get_xllcorner(), ' failed')
26        self.failUnless(y == g.get_yllcorner(), ' failed') 
27       
28    def test_read_write_NetCDF(self):
29        from Scientific.IO.NetCDF import NetCDFFile
30        g = Geo_reference(56,1.9,1.9)
31        file_name = tempfile.mktemp(".geo_referenceTest")
32       
33        out_file = NetCDFFile(file_name, 'w')
34        g.write_NetCDF(out_file)
35        out_file.close()
36       
37        in_file = NetCDFFile(file_name, 'r')
38        new_g = Geo_reference(NetCDFObject=in_file)
39        in_file.close()
40        os.remove(file_name)
41
42        self.failUnless(g == new_g, 'test_read_write_NetCDF failed') 
43       
44    def test_read_write_ASCII(self):
45        from Scientific.IO.NetCDF import NetCDFFile
46        g = Geo_reference(56,1.9,1.9)
47        file_name = tempfile.mktemp(".geo_referenceTest")
48        fd = open(file_name,'w')
49        g.write_ASCII(fd)
50        fd.close()
51       
52        fd = open(file_name,'r')
53        new_g = Geo_reference(ASCIIFile=fd)
54        fd.close()
55        os.remove(file_name)
56
57        self.failUnless(g == new_g, 'test_read_write_ASCII failed') 
58   
59    def test_read_write_ASCII2(self):
60        from Scientific.IO.NetCDF import NetCDFFile
61        g = Geo_reference(56,1.9,1.9)
62        file_name = tempfile.mktemp(".geo_referenceTest")
63        fd = open(file_name,'w')
64        g.write_ASCII(fd)
65        fd.close()       
66        fd = open(file_name,'r')
67        line = fd.readline()
68        new_g = Geo_reference(ASCIIFile=fd, read_title=line)
69        fd.close()
70        os.remove(file_name)
71
72        self.failUnless(g == new_g, 'test_read_write_ASCII failed')
73       
74    def test_read_write_ASCII3(self):
75        from Scientific.IO.NetCDF import NetCDFFile
76        g = Geo_reference(56,1.9,1.9)
77        file_name = tempfile.mktemp(".geo_referenceTest")
78        fd = open(file_name,'w')
79        g.write_ASCII(fd)
80        fd.close()       
81        fd = open(file_name,'r')
82        line = fd.readline()
83        line = "fail !!"
84        try:
85            new_g = Geo_reference(ASCIIFile=fd, read_title=line)
86            fd.close()
87            os.remove(file_name)
88        except TitleError:
89            fd.close()
90            os.remove(file_name)
91        else:
92            self.failUnless(0 ==1,
93                        'bad text file did not raise error!')
94           
95    def test_change_points_geo_ref(self):
96        x = 433.0
97        y = 3.0
98        g = Geo_reference(56,x,y)
99        lofl = [[3.0,311.0], [677.0,6.0]]
100        new_lofl = g.change_points_geo_ref(lofl)
101        #print "lofl",lofl
102        #print "new_lofl",new_lofl
103
104        self.failUnless(type(new_lofl) == types.ListType, ' failed')
105        self.failUnless(type(new_lofl) == type(lofl), ' failed')
106        for point,new_point in map(None,lofl,new_lofl):
107            self.failUnless(point[0]-x==new_point[0], ' failed')
108            self.failUnless(point[1]-y==new_point[1], ' failed')
109         
110       
111    def test_change_points_geo_ref2(self):
112        x = 3.0
113        y = 543.0
114        g = Geo_reference(56,x,y)
115        lofl = [[3.0,388.0]]
116        new_lofl = g.change_points_geo_ref(lofl)
117        #print "lofl",lofl
118        #print "new_lofl",new_lofl
119
120        self.failUnless(type(new_lofl) == types.ListType, ' failed')
121        self.failUnless(type(new_lofl) == type(lofl), ' failed')
122        for point,new_point in map(None,lofl,new_lofl):
123            self.failUnless(point[0]-x==new_point[0], ' failed')
124            self.failUnless(point[1]-y==new_point[1], ' failed')
125       
126    def test_change_points_geo_ref3(self):
127        x = 3.0
128        y = 443.0
129        g = Geo_reference(56,x,y)
130        lofl = [3.0,345.0]
131        new_lofl = g.change_points_geo_ref(lofl)
132        #print "lofl",lofl
133        #print "new_lofl",new_lofl
134
135        self.failUnless(type(new_lofl) == types.ListType, ' failed')
136        self.failUnless(type(new_lofl) == type(lofl), ' failed')
137        for point,new_point in map(None,[lofl],new_lofl):
138            self.failUnless(point[0]-x==new_point[0], ' failed')
139            self.failUnless(point[1]-y==new_point[1], ' failed')
140       
141   
142    def test_change_points_geo_ref4(self):
143        x = 3.0
144        y = 443.0
145        g = Geo_reference(56,x,y)
146        lofl = array([[3.0,323.0], [6.0,645.0]])
147        new_lofl = g.change_points_geo_ref(lofl)
148        #print "4 lofl",lofl
149        #print "4 new_lofl",new_lofl
150
151        self.failUnless(type(new_lofl) == ArrayType, ' failed')
152        self.failUnless(type(new_lofl) == type(lofl), ' failed')
153        lofl[:,0] -= x
154        lofl[:,1] -= y
155        assert allclose(lofl,new_lofl)
156       
157    def test_change_points_geo_ref5(self):
158        x = 103.0
159        y = 3.0
160        g = Geo_reference(56,x,y)
161        lofl = array([[3.0,323.0]])
162
163       
164        #print "5 lofl before",lofl         
165        new_lofl = g.change_points_geo_ref(lofl.copy())
166        #print "5 lofl",lofl
167        #print "5 new_lofl",new_lofl
168
169        self.failUnless(type(new_lofl) == ArrayType, ' failed')
170        self.failUnless(type(new_lofl) == type(lofl), ' failed')
171
172
173        for point,new_point in map(None,lofl,new_lofl):
174            self.failUnless(point[0]-x==new_point[0], ' failed')
175            self.failUnless(point[1]-y==new_point[1], ' failed')
176       
177    def test_change_points_geo_ref6(self):
178        x = 53.0
179        y = 3.0
180        g = Geo_reference(56,x,y)
181        lofl = array([355.0,3.0])
182        new_lofl = g.change_points_geo_ref(lofl.copy())       
183        #print "lofl",lofl
184        #print "new_lofl",new_lofl
185
186        self.failUnless(type(new_lofl) == ArrayType, ' failed')
187        self.failUnless(type(new_lofl) == type(lofl), ' failed')
188        for point,new_point in map(None,[lofl],new_lofl):
189            self.failUnless(point[0]-x==new_point[0], ' failed')
190            self.failUnless(point[1]-y==new_point[1], ' failed')
191     
192    def test_change_points_geo_ref7(self):
193        x = 23.0
194        y = 3.0
195        point_x = 9.0
196        point_y = -60.0
197        g = Geo_reference(56,x,y)
198        points_geo_ref = Geo_reference(56,point_x,point_y)
199        lofl = [[3.0,30.0], [67.0,6.0]]
200        new_lofl = g.change_points_geo_ref(lofl,points_geo_ref=points_geo_ref)
201        #print "lofl",lofl
202        #print "new_lofl",new_lofl
203
204        self.failUnless(type(new_lofl) == types.ListType, ' failed')
205        self.failUnless(type(new_lofl) == type(lofl), ' failed')
206        for point,new_point in map(None,lofl,new_lofl):
207            self.failUnless(point[0]+point_x-x==new_point[0], ' failed')
208            self.failUnless(point[1]+point_y-y==new_point[1], ' failed')
209     
210
211    def test_get_absolute(self):
212        x = 7.0
213        y = 3.0
214       
215        g = Geo_reference(56,x,y)
216        lofl = [[3.0,34.0], [64.0,6.0]]
217        new_lofl = g.get_absolute(lofl)
218        #print "lofl",lofl
219        #print "new_lofl",new_lofl
220
221        self.failUnless(type(new_lofl) == types.ListType, ' failed')
222        self.failUnless(type(new_lofl) == type(lofl), ' failed')
223        for point,new_point in map(None,lofl,new_lofl):
224            self.failUnless(point[0]+x==new_point[0], ' failed')
225            self.failUnless(point[1]+y==new_point[1], ' failed')
226
227           
228        g = Geo_reference()
229        lofl = [[3.0,34.0], [64.0,6.0]]
230        new_lofl = g.get_absolute(lofl)
231        #print "lofl",lofl
232        #print "new_lofl",new_lofl
233
234        self.failUnless(type(new_lofl) == types.ListType, ' failed')
235        self.failUnless(type(new_lofl) == type(lofl), ' failed')
236        for point,new_point in map(None,lofl,new_lofl):
237            self.failUnless(point[0]==new_point[0], ' failed')
238            self.failUnless(point[1]==new_point[1], ' failed')
239           
240    def test_is_absolute(self):
241       
242        g = Geo_reference(34,0,0)
243        points = [[3.0,34.0], [64.0,6.0]]
244
245        assert g.is_absolute()
246
247        g = Geo_reference(34,7,-6)
248        assert not g.is_absolute()       
249
250                       
251    def test___cmp__(self):
252        g = Geo_reference(56,1.9,1.9,)
253        new_g = Geo_reference(56,1.9,1.9)
254     
255        self.failUnless(g == new_g, 'test___cmp__ failed')   
256
257
258    def test_reconcile(self):
259        g1 = Geo_reference(56,2,5)
260        g2 = Geo_reference(50,4,5)
261        g3 = Geo_reference(50,66,6)       
262        g_default = Geo_reference()               
263
264
265        g2.reconcile_zones(g3)
266        assert g2.get_zone() == g3.get_zone()
267
268        g_default.reconcile_zones(g3)
269        assert g_default.get_zone() == g3.get_zone()
270
271        g_default = Geo_reference()               
272        g3.reconcile_zones(g_default)
273        assert g_default.get_zone() == g3.get_zone()               
274
275        try:
276            g1.reconcile_zones(g2)
277        except:
278            pass
279        else:
280            msg = 'Should have raised an exception'
281            raise msg
282 
283    def test_bad_ASCII_title(self):     
284 # create an .xya file
285        point_file = tempfile.mktemp(".xya")
286        fd = open(point_file,'w')
287        fd.write("# hey! \n")
288        fd.close()
289       
290        fd = open(point_file,'r')
291        #
292        #new_g = Geo_reference(ASCIIFile=fd)
293        try:
294            new_g = Geo_reference(ASCIIFile=fd)
295            fd.close()
296            os.remove(point_file)
297        except TitleError:
298            fd.close()
299            os.remove(point_file)
300        else:
301            self.failUnless(0 ==1,
302                        'bad text file did not raise error!')
303            os.remove(point_file)
304
305    def test_read_write_ASCII_test_and_fail(self):
306        from Scientific.IO.NetCDF import NetCDFFile
307
308        # This is to test a fail
309        g = Geo_reference(56,1.9,1.9)
310        file_name = tempfile.mktemp(".geo_referenceTest")
311        fd = open(file_name,'w')
312        g.write_ASCII(fd)
313        fd.close()       
314        fd = open(file_name,'r')
315        line = fd.readline()
316        line = " #Geo"
317        try:
318            new_g = Geo_reference(ASCIIFile=fd, read_title=line)
319            fd.close()
320            os.remove(file_name)
321        except TitleError:
322            fd.close()
323            os.remove(file_name)
324        else:
325            self.failUnless(0 ==1,
326                        'bad text file did not raise error!')
327
328        # this tests a pass
329        g = Geo_reference(56,1.9,1.9)
330        file_name = tempfile.mktemp(".geo_referenceTest")
331        fd = open(file_name,'w')
332        g.write_ASCII(fd)
333        fd.close()
334       
335        fd = open(file_name,'r')
336        line = fd.readline()
337        line = "#geo_yeah"
338        new_g = Geo_reference(ASCIIFile=fd, read_title=line)
339        fd.close()
340        os.remove(file_name)
341
342        self.failUnless(g == new_g, 'test_read_write_ASCII failed')
343       
344        # this tests a pass
345        g = Geo_reference(56,1.9,1.9)
346        file_name = tempfile.mktemp(".geo_referenceTest")
347        fd = open(file_name,'w')
348        g.write_ASCII(fd)
349        fd.close()
350       
351        fd = open(file_name,'r')
352        line = fd.readline()
353        line = "#geo crap"
354        new_g = Geo_reference(ASCIIFile=fd, read_title=line)
355        fd.close()
356        os.remove(file_name)
357
358        self.failUnless(g == new_g, 'test_read_write_ASCII failed')
359       
360    def xxtest_good_title(self):     
361 # create an .xya file
362        point_file = tempfile.mktemp(".xya")
363        fd = open(point_file,'w')
364        fd.write("#Geo crap \n 56\n ")
365        fd.close()
366       
367        fd = open(point_file,'r')
368        #
369        #new_g = Geo_reference(ASCIIFile=fd)
370        try:
371            new_g = Geo_reference(ASCIIFile=fd)
372            fd.close()
373            os.remove(point_file)
374        except TitleError:
375            fd.close()
376            os.remove(point_file)
377        else:
378            self.failUnless(0 ==1,
379                        'bad text file did not raise error!')
380            os.remove(point_file)
381
382    def test_error_message_ShapeError(self):
383       
384        new_g = Geo_reference()
385        try:
386            new_g.get_absolute((8.9, 7.8, 9.0)) 
387        except ShapeError:
388            pass
389        else:
390            self.failUnless(0 ==1,
391                        'bad shape did not raise error!')
392            os.remove(point_file)
393           
394        new_g = Geo_reference()
395        try:
396            new_g.get_absolute(((8.9, 7.8, 9.0))) 
397        except ShapeError:
398            pass
399        else:
400            self.failUnless(0 ==1,
401                        'bad shape did not raise error!')
402            os.remove(point_file)
403       
404#-------------------------------------------------------------
405if __name__ == "__main__":
406
407    suite = unittest.makeSuite(geo_referenceTestCase,'test')
408    runner = unittest.TextTestRunner() #verbosity=2)
409    runner.run(suite)
410   
Note: See TracBrowser for help on using the repository browser.