import os
import unittest
import shutil
import json
import globals
import epicsCommandParsers.epicsEnvSetParser
import cdCommandsParser
import random


class TestParsing(unittest.TestCase):
    '''Test the various parsing algorithms'''
        
    def test_ParsingEnvSet(self):
        '''Test the parsing of various flavors of EPICS env set'''
        self.assertTrue(epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet("IOC","sioc-li20-pm20")') == ('IOC', 'sioc-li20-pm20'), epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet("IOC","sioc-li20-pm20")'))
        self.assertTrue(epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet IOC_SUFF "PM20"') == ('IOC_SUFF', 'PM20'), epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet IOC_SUFF "PM20"'))
        self.assertTrue(epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet ID 695') == ('ID', '695'), epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet ID 695'))
        self.assertTrue(epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet ("EPICS_CA_MAX_ARRAY_BYTES",   "30000")') == ('EPICS_CA_MAX_ARRAY_BYTES', '30000'), epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet ("EPICS_CA_MAX_ARRAY_BYTES",   "30000")'))
        self.assertTrue(epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet      ("EPICS_CA_MAX_ARRAY_BYTES",   "30000")') == ('EPICS_CA_MAX_ARRAY_BYTES', '30000'), epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet      ("EPICS_CA_MAX_ARRAY_BYTES",   "30000")'))
        self.assertTrue(epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet("ENGINEER"      , "Ernest Williams")') == ('ENGINEER', 'Ernest Williams'), epicsCommandParsers.epicsEnvSetParser.parseSingleEnvPathsLine('epicsEnvSet("ENGINEER"      , "Ernest Williams")'))



    def test_ParsingCDCommands(self):
        '''Test the post push processing of cdCommands files'''
        tempFilePath = os.path.join('/tmp', "cdcommands_tmp_multifacility" + str(int(random.random()*1000000)))
        while os.path.exists(tempFilePath):
            stderr.write("Generating a new name for the temporary file\n")
            tempFilePath = os.path.join('/tmp', "cdcommands_tmp_multifacility" + str(int(random.random()*1000000)))
        
        shutil.copy('sampleCDCommands.txt', tempFilePath)
        replaceMap = {}
        replaceMap['TOP'] = '/abddef';
        cdCommandsParser.parseAndReplaceCDCommandsFile(tempFilePath, replaceMap)

        lines = []
        with open(tempFilePath, 'r') as f:
            for line in f.readlines():
                lines.append(line.strip())
            
        self.assertTrue('top = "/abddef"' in lines)
        self.assertTrue('putenv("TOP=/abddef")' in lines)

        os.remove(tempFilePath)
