diff --git a/.gitignore b/.gitignore index 36a62c6..217ce48 100644 --- a/.gitignore +++ b/.gitignore @@ -168,7 +168,6 @@ Generated_Code #added for RIA/Silverlight projects # Backup & report files from converting an old project file to a newer # Visual Studio version. Backup files are not needed, because we have git ;-) _UpgradeReport_Files/ -Backup*/ UpgradeLog*.XML diff --git a/scripts/UnitTests/BackupParser/__init__.py b/scripts/UnitTests/BackupParser/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/UnitTests/BackupParser/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/UnitTests/BackupParser/test_createBackupParser.py b/scripts/UnitTests/BackupParser/test_createBackupParser.py new file mode 100644 index 0000000..8b5b199 --- /dev/null +++ b/scripts/UnitTests/BackupParser/test_createBackupParser.py @@ -0,0 +1,13 @@ +import unittest +from parser.BackupParser.CreateBackupParser import CreateBackupParser + + +class TestCreateBackupParser(unittest.TestCase): + def setUp(self): + self.__parser = CreateBackupParser() + + def test_validInput(self): + line = "create backup for 'SomeFolder'" + createBackupArgs = self.__parser.parseLine(line) + + self.assertEqual('SomeFolder', createBackupArgs.folderName) \ No newline at end of file diff --git a/scripts/parser/BackupParser/CreateBackupArguments.py b/scripts/parser/BackupParser/CreateBackupArguments.py new file mode 100644 index 0000000..0a43b19 --- /dev/null +++ b/scripts/parser/BackupParser/CreateBackupArguments.py @@ -0,0 +1,3 @@ +class CreateBackupArguments: + def __init__(self): + self.folderName = None diff --git a/scripts/parser/BackupParser/CreateBackupParser.py b/scripts/parser/BackupParser/CreateBackupParser.py new file mode 100644 index 0000000..2e897f6 --- /dev/null +++ b/scripts/parser/BackupParser/CreateBackupParser.py @@ -0,0 +1,29 @@ +from parser.BackupParser.CreateBackupArguments import CreateBackupArguments +from parser.LineParser import LineParser +import re + +class CreateBackupParser(LineParser): + def __init__(self): + self.__createBackupArguments = CreateBackupArguments() + + def parseLine(self, line): + assert line is not None + + folderNameRegexp = r"'(?P[^']+)'$" + + regexpSource = self.startsWithKeywordToken('create backup for') + folderNameRegexp + regexp = re.compile(regexpSource, re.UNICODE) + + match = regexp.match(line) + self._guardMatch(match, line, regexpSource) + + folderName = match.group('folder') + self.__createBackupArguments.folderName = folderName + + return self.__createBackupArguments + + def isValidLine(self, line): + assert line is not None + + isValid = line.startswith('create backup') + return isValid diff --git a/scripts/parser/BackupParser/__init__.py b/scripts/parser/BackupParser/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/parser/BackupParser/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/parser/CopyParser/CopyLineParser.py b/scripts/parser/CopyParser/CopyLineParser.py index 6e9c81e..6166b2f 100644 --- a/scripts/parser/CopyParser/CopyLineParser.py +++ b/scripts/parser/CopyParser/CopyLineParser.py @@ -24,14 +24,6 @@ class CopyLineParser(LineParser): self.__copyArguments.setArguments(src, dst) return self.__copyArguments - def keywordToken(self, keyword): - assert keyword is not None - return r'\s+' + keyword + r'\s+' - - def startsWithKeywordToken(self, keyword): - assert keyword is not None - return r'^' + keyword + r'\s+' - def isValidLine(self, line): assert line is not None diff --git a/scripts/parser/LineParser.py b/scripts/parser/LineParser.py index 3a077bc..014c94c 100644 --- a/scripts/parser/LineParser.py +++ b/scripts/parser/LineParser.py @@ -7,9 +7,17 @@ class LineParser: assert line is not None return False + def keywordToken(self, keyword): + assert keyword is not None + return r'\s+' + keyword + r'\s+' + + def startsWithKeywordToken(self, keyword): + assert keyword is not None + return r'^' + keyword + r'\s+' + def _guardMatch(self, match_object, source, regexpSource = None): if match_object is None: - msg = 'Recognition exception: {0} for {1}'.format(source, regexpSource) + msg = 'Recognition exception: "{0}" for "{1}"'.format(source, regexpSource) raise Exception(msg)