#!/hive/groups/encode/dcc/bin/python
import sys
import unittest
from ucscgenomics import track, ra, soft, cv

curdir = sys.path[0]
inputdir = '/test_cv_input/'
outputdir = '/test_cv_output/'

class CellLineValidationCheck(unittest.TestCase):

	def testMissingKey(self):
		"""A missing required key"""
		cvfile = cv.CvFile(curdir + inputdir + 'CellLine/MissingKey.ra')
		self.assertRaises(cv.MissingKeyError, cvfile['GM12878'].validate, cvfile)
		
	def testBlankKey(self):
		"""A blank required key"""
		cvfile = cv.CvFile(curdir + inputdir + 'CellLine/BlankKey.ra')
		self.assertRaises(cv.BlankKeyError, cvfile['GM12878'].validate, cvfile)
	
	def testExtraKey(self):
		"""An extraneous key"""
		cvfile = cv.CvFile(curdir + inputdir + 'CellLine/ExtraKey.ra')
		self.assertRaises(cv.ExtraKeyError, cvfile['GM12878'].validate, cvfile)
		
	def testNonmatchKey(self):
		"""A nonmatching relational key"""
		cvfile = cv.CvFile(curdir + inputdir + 'CellLine/NonmatchKey.ra')
		self.assertRaises(cv.NonmatchKeyError, cvfile['GM12878'].validate, cvfile)
		
	def testValidStanza(self):
		"""A valid stanza"""
		cvfile = cv.CvFile(curdir + inputdir + 'CellLine/ValidStanza.ra')
		cvfile['GM12878'].validate(cvfile)
		
		
class AntibodyValidationCheck(unittest.TestCase):

	def testMissingKey(self):
		"""A missing required key"""
		cvfile = cv.CvFile(curdir + inputdir + 'Antibody/MissingKey.ra')
		self.assertRaises(cv.MissingKeyError, cvfile['AP-2alpha'].validate, cvfile)
		
	def testBlankKey(self):
		"""A blank required key"""
		cvfile = cv.CvFile(curdir + inputdir + 'Antibody/BlankKey.ra')
		self.assertRaises(cv.BlankKeyError, cvfile['AP-2alpha'].validate, cvfile)
	
	def testExtraKey(self):
		"""An extraneous key"""
		cvfile = cv.CvFile(curdir + inputdir + 'Antibody/ExtraKey.ra')
		self.assertRaises(cv.ExtraKeyError, cvfile['AP-2alpha'].validate, cvfile)
		
	def testNonmatchKey(self):
		"""A nonmatching relational key"""
		cvfile = cv.CvFile(curdir + inputdir + 'Antibody/NonmatchKey.ra')
		self.assertRaises(cv.NonmatchKeyError, cvfile['AP-2alpha'].validate, cvfile)
		
	def testValidStanza(self):
		"""A valid stanza"""
		cvfile = cv.CvFile(curdir + inputdir + 'Antibody/ValidStanza.ra')
		cvfile['AP-2alpha'].validate(cvfile)
		
		
class MouseValidationCheck(unittest.TestCase):

	def testMissingKey(self):
		"""A missing required key"""
		cvfile = cv.CvFile(curdir + inputdir + 'Mouse/MissingKey.ra')
		self.assertRaises(cv.MissingKeyError, cvfile['3134'].validate, cvfile)
		
	def testBlankKey(self):
		"""A blank required key"""
		cvfile = cv.CvFile(curdir + inputdir + 'Mouse/BlankKey.ra')
		self.assertRaises(cv.BlankKeyError, cvfile['3134'].validate, cvfile)
	
	def testExtraKey(self):
		"""An extraneous key"""
		cvfile = cv.CvFile(curdir + inputdir + 'Mouse/ExtraKey.ra')
		self.assertRaises(cv.ExtraKeyError, cvfile['3134'].validate, cvfile)
		
	def testNonmatchKey(self):
		"""A nonmatching relational key"""
		cvfile = cv.CvFile(curdir + inputdir + 'Mouse/NonmatchKey.ra')
		self.assertRaises(cv.NonmatchKeyError, cvfile['3134'].validate, cvfile)
		
	def testValidStanza(self):
		"""A valid stanza"""
		cvfile = cv.CvFile(curdir + inputdir + 'Mouse/ValidStanza.ra')
		cvfile['3134'].validate(cvfile)
		
if __name__ == '__main__':
    unittest.main()
