| #!/usr/bin/env python |
| ''' |
| Created on 26-Dec-2012 |
| Modified 2015 by ON.Lab |
| |
| Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>, |
| the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>, |
| or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg> |
| |
| 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: |
| 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 ): |
| m = re.match( 'def\s+CASE(\d+)', statementsList[ index ], 0 ) |
| self.caseBlock = [] |
| if m: |
| 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: |
| print '' |
| self.caseCode[ str( m.group( 1 ) ) ] = self.caseBlock |
| 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: |
| 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 |