'''
Unit test for setup of nemo bdy namelist
Will be testing the reading of the file and expected settings
@author: Mr. Srikanth Nagella
'''
import unittest
from pynemo.nemo_bdy_setup import * 

import os
class Test(unittest.TestCase):


    def testReadingOfNonExistingFile(self):
        self.assertRaises(IOError,Setup,'emptynamelist.bdy')
  
    def testReadingEmptyFile(self):
        #create an empty file and load it
        fo = open("test.bdy","wb")
        fo.close()
        setup = Setup('test.bdy')   
        #test settings after reading empty file   
        self.assertEqual(setup.settings,{} ,"There are some default settings after reading empty file")
        #delete empty file
        os.remove('test.bdy')

    def testAmbigiousEntriesInFile(self):
        #create an ambigious entry in file
        fo = open('test.bdy','wb')
        fo.write("! Ambigious Entry\n")
        fo.write("ambigious = true")
        fo.close()
        
        #test
        self.assertRaises(ValueError,Setup,'test.bdy')
        
        #delete file
        os.remove('test.bdy')
        
    def testEntryWithoutSpaceOnEitherSideOfEquals(self):
        #create an  entry in file
        fo = open('test.bdy','wb')
        fo.write("! Ambigious Entry\n")
        fo.write("ln_nonambigious=true")
        fo.close()
        
        #test
        setup = Setup('test.bdy')
        self.assertEqual(setup.settings,{'nonambigious':True},"Didn't recognize valid setting")
        
        #delete file
        os.remove('test.bdy')                

    def testEntryDifferentTypeEntries(self):
        #create an  entry in file
        fo = open('test.bdy','wb')
        fo.write("! Ambigious Entry\n")
        fo.write("ln_nonambigious=false !Comment testing false logical value\n")
        fo.write("rn_floatval=10.9\n")
        fo.write("nn_floatval2 = 20.9\n")
        fo.write("!Comments in middle of file\n")
        fo.write("cn_stringval='coordinates.nc'\n")
        fo.write("sn_stringval2 = 'gregorian'\n")        
        fo.close()
                
        #test
        setup = Setup('test.bdy')
        print(setup.settings)
        self.assertEqual(setup.settings['nonambigious'],False,"Didn't recognize logical setting")
        self.assertEqual(setup.settings['floatval'],10.9,"Didn't recognize rn value in setting")
        self.assertEqual(setup.settings['floatval2'],20.9,"Didn't recongnize nn value in setting")
        self.assertEqual(setup.settings['stringval'],'coordinates.nc',"Didn't recognize cn string value in setting")
        self.assertEqual(setup.settings['stringval2'],'gregorian',"Didn't recognize sn string value in setting")
        
        #delete file
        os.remove('test.bdy')
        
if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()