| #!/usr/bin/env python |
| ''' |
| Created on 26-Dec-2012 |
| |
| @author: Anil Kumar (anilkumar.s@paxterrasolutions.com) |
| |
| |
| TestON is free software: you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation, either version 2 of the License, or |
| (at your option) any later version. |
| |
| TestON is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with TestON. If not, see <http://www.gnu.org/licenses/>. |
| |
| |
| ''' |
| import re |
| import sys |
| class TestParser: |
| def __init__(self,testFile): |
| try : |
| testFileHandler = open(testFile, 'r') |
| except IOError: |
| print "No such file "+testFile |
| sys.exit(0) |
| |
| testFileList = testFileHandler.readlines() |
| self.testscript = testFileList |
| self.caseCode = {} |
| self.caseBlock = '' |
| self.statementsList = [] |
| index = 0 |
| self.statementsList = [] |
| #initialSpaces = len(line) -len(line.lstrip()) |
| while index < len(testFileList): |
| testFileList[index] = re.sub("^\s{8}|^\s{4}", "", testFileList[index]) |
| # Skip multiline comments |
| if re.match('^(\'\'\')|^(\"\"\")',testFileList[index],0) : |
| index = index + 1 |
| try : |
| while not re.match('^\s*(\'\'\')|^\s*(\"\"\")',testFileList[index],0) : |
| index = index + 1 |
| except IndexError,e: |
| print '' |
| |
| |
| # skip empty lines and single line comments |
| elif not re.match('#|^\s*$',testFileList[index],0): |
| self.statementsList.append(testFileList[index]) |
| index = index + 1 |
| |
| def case_code(self): |
| index = 0 |
| statementsList = self.statementsList |
| while index < len(statementsList): |
| #print statementsList[index] |
| m= re.match('def\s+CASE(\d+)',statementsList[index],0) |
| self.caseBlock = [] |
| if m: |
| #print m.group(1) |
| index = index + 1 |
| try : |
| while not re.match('\s*def\s+CASE(\d+)',statementsList[index],0) : |
| self.caseBlock.append(statementsList[index]) |
| if index < len(statementsList)-1: |
| index = index + 1 |
| else : |
| break |
| index = index - 1 |
| except IndexError,e: |
| #print 'IndexError' |
| print '' |
| |
| self.caseCode [str(m.group(1))] = self.caseBlock |
| #print "Case CODE "+self.caseCode [str(m.group(1))] |
| index = index + 1 |
| |
| return self.caseCode |
| |
| def step_code(self,caseStatements): |
| index = 0 |
| step = 0 |
| stepCode = {} |
| step_flag = False |
| while index < len(caseStatements): |
| m= re.match('main\.step',caseStatements[index],0) |
| stepBlock = '' |
| if m: |
| step_flag = True |
| if step == 0 : |
| i = 0 |
| block = '' |
| while i < index : |
| block += caseStatements[i] |
| i = i + 1 |
| stepCode[step] = block |
| step = step + 1 |
| stepBlock= stepBlock + caseStatements[index] |
| index = index + 1 |
| try : |
| while not re.match('main\.step',caseStatements[index],0) : |
| stepBlock= stepBlock + caseStatements[index] |
| if index < len(caseStatements)-1: |
| index = index + 1 |
| else : |
| break |
| index = index - 1 |
| except IndexError,e: |
| #print 'IndexError' |
| print '' |
| stepCode[step] = stepBlock |
| step = step + 1 |
| index = index + 1 |
| # If there is no step defined !! |
| if not step_flag : |
| stepCode[step] = "".join(caseStatements) |
| return stepCode |
| |
| def getStepCode(self): |
| case_step_code = {} |
| case_block = self.case_code() |
| |
| for case in case_block : |
| case_step_code[case] = {} |
| step_block = self.step_code(case_block[case]) |
| for step in step_block : |
| case_step_code[case][step] = step_block[step] |
| return case_step_code |