00001 import os
00002 import sys
00003 import shutil
00004 from __main__ import default
00005 from tasks import *
00006 from taskinit import *
00007 import unittest
00008
00009 import listing
00010 from numpy import array
00011
00012 import asap as sd
00013 from sdflagmanager import sdflagmanager
00014 from sdstat import sdstat
00015
00016 class sdflagmanager_test(unittest.TestCase):
00017 """
00018 Basic unit tests for task sdflagmanager.
00019
00020 The list of tests:
00021 test00 --- testing the mode 'list'
00022 test01 --- testing the mode 'save'
00023 test02 --- testing the mode 'restore'
00024 test03 --- testing the mode 'delete'
00025 test04 --- testing the mode 'rename'
00026 """
00027
00028 datapath=os.environ.get('CASAPATH').split()[0] + '/data/regression/unittest/sdflagmanager/'
00029
00030 infile = 'OrionS_rawACSmod_cal2123.asap'
00031 vdir = infile+'.flagversions'
00032 vdatafileprefix = vdir+'/flags.'
00033 vlistfile = vdir+'/FLAG_VERSION_LIST'
00034
00035 def setUp(self):
00036 if os.path.exists(self.infile):
00037 shutil.rmtree(self.infile)
00038 shutil.copytree(self.datapath+self.infile, self.infile)
00039 if os.path.exists(self.vdir):
00040 shutil.rmtree(self.vdir)
00041
00042 default(sdflagmanager)
00043
00044 def tearDown(self):
00045 if os.path.exists(self.infile):
00046 shutil.rmtree(self.infile)
00047 if os.path.exists(self.vdir):
00048 shutil.rmtree(self.vdir)
00049
00050 def test00(self):
00051 """Test 0: list"""
00052 infile = self.infile
00053 mode = "list"
00054 result = sdflagmanager(infile=infile,mode=mode)
00055 self.assertEqual(result, None, msg="The task returned '"+str(result)+"' instead of None")
00056
00057 items = []
00058 for line in open(self.vlistfile, 'r'):
00059 items.append(line.split(' : '))
00060 self.assertEqual(len(items), 0, msg="The FLAG_VERSION_LIST must be empty.")
00061
00062 def test01(self):
00063 """Test 1: save"""
00064 versionname = "v1"
00065 comment = "first_version"
00066 result = sdflagmanager(infile=self.infile,mode="save",versionname=versionname,comment=comment,merge="replace")
00067 self.assertEqual(result, None, msg="The task returned '"+str(result)+"' instead of None")
00068
00069 vdatafile = self.vdatafileprefix+versionname
00070 self.assertTrue(os.path.exists(vdatafile))
00071
00072 items = []
00073 for line in open(self.vlistfile, 'r'):
00074 items.append(line.strip().split(' : '))
00075 self.assertEqual(len(items), 1, msg="The FLAG_VERSION_LIST must contain just 1 version.")
00076
00077 res = (items[0][0] == versionname) and (items[0][1] == comment)
00078 self.assertEqual(res, True, msg="The version name is not saved correctly.")
00079
00080
00081 def test02(self):
00082 """Test 2: restore"""
00083 versionname = "v1"
00084 comment = "first_version"
00085 result = sdflagmanager(infile=self.infile,mode="save",versionname=versionname,comment=comment,merge="replace")
00086 self.assertEqual(result, None, msg="The task returned '"+str(result)+"' instead of None")
00087
00088 scan = sd.scantable(filename=self.infile, average=False)
00089 scan.flag(row=2)
00090 scan.flag_row(rows=[3])
00091 scan.save(self.infile, overwrite=True)
00092 del scan
00093
00094 result = sdflagmanager(infile=self.infile,mode="restore",versionname=versionname,merge="replace")
00095 self.assertEqual(result, None, msg="The task returned '"+str(result)+"' instead of None")
00096
00097 scan = sd.scantable(filename=self.infile, average=False)
00098 mask = scan.get_mask(2)
00099 res = True
00100 for i in range(len(mask)):
00101 if not mask[i]:
00102 res = False
00103 break
00104 self.assertTrue(res)
00105 self.assertFalse(scan._getflagrow(3))
00106 del scan
00107
00108
00109 def test03(self):
00110 """Test 3: delete"""
00111 versionnames = ["v1", "v2"]
00112 comments = ["first_version", "second_version"]
00113 for i in range(len(versionnames)):
00114 result = sdflagmanager(infile=self.infile,mode="save",versionname=versionnames[i],comment=comments[i],merge="replace")
00115
00116 delvername = "v1"
00117 result = sdflagmanager(infile=self.infile,mode="delete",versionname=delvername)
00118 self.assertEqual(result, None, msg="The task returned '"+str(result)+"' instead of None")
00119
00120 delvdatafile = self.vdatafileprefix+delvername
00121 self.assertFalse(os.path.exists(delvdatafile))
00122
00123 items = []
00124 for line in open(self.vlistfile, 'r'):
00125 items.append(line.strip().split(' : '))
00126 self.assertEqual(len(items), 1, msg="The FLAG_VERSION_LIST must contain just 1 version.")
00127
00128 res = (items[0][0] == versionnames[1]) and (items[0][1] == comments[1])
00129 self.assertEqual(res, True, msg="The version name is not deleted correctly.")
00130
00131
00132 def test04(self):
00133 """Test 4: rename"""
00134 oldname = "v1"
00135 oldcomment = "first_version"
00136 result = sdflagmanager(infile=self.infile,mode="save",versionname=oldname,comment=oldcomment,merge="replace")
00137 self.assertEqual(result, None, msg="The task returned '"+str(result)+"' instead of None")
00138
00139 newname = "renamed_v1"
00140 newcomment = "renamed_first_version"
00141 result = sdflagmanager(infile=self.infile,mode="rename",oldname=oldname,versionname=newname,comment=newcomment)
00142 self.assertEqual(result, None, msg="The task returned '"+str(result)+"' instead of None")
00143
00144 vdatafile = self.vdatafileprefix+newname
00145 self.assertTrue(os.path.exists(vdatafile))
00146
00147 items = []
00148 for line in open(self.vlistfile, 'r'):
00149 items.append(line.strip().split(' : '))
00150 self.assertEqual(len(items), 1, msg="The FLAG_VERSION_LIST must contain just 1 version.")
00151
00152 res = (items[0][0] == newname) and (items[0][1] == newcomment)
00153 self.assertEqual(res, True, msg="The version name is not renamed correctly.")
00154
00155
00156
00157 def _compareBLparam(self,out,reference):
00158
00159
00160
00161 self.assertTrue(os.path.exists(out))
00162 self.assertTrue(os.path.exists(reference),
00163 msg="Reference file doesn't exist: "+reference)
00164 self.assertTrue(listing.compare(out,reference),
00165 'New and reference files are different. %s != %s. '
00166 %(out,reference))
00167
00168
00169
00170
00171
00172 def suite():
00173 return [sdflagmanager_test]