Реализовал CopyLineParser

This commit is contained in:
Rustam Zaitov 2013-10-28 00:59:43 +04:00
parent 0587ffc139
commit f3b2908815
3 changed files with 68 additions and 6 deletions

View File

@ -0,0 +1,23 @@
import unittest
from parser.CopyParser.CopyLineParser import CopyLineParser
class TestCopyParser(unittest.TestCase):
def setUp(self):
self.__parser = CopyLineParser()
def test_validSrcDst(self):
cpArgs = self.__parser.parseLine("copy 'File1' to 'File2'")
self.assertEqual('File1', cpArgs.source)
self.assertEqual('File2', cpArgs.target)
def test_withFolder(self):
cpArgs = self.__parser.parseLine("copy 'dir1/dir2/src.txt' to 'dir3/dir4/dst.txt'")
self.assertEqual('dir1/dir2/src.txt', cpArgs.source)
self.assertEqual('dir3/dir4/dst.txt', cpArgs.target)
def test_withWiteSpace(self):
cpArgs = self.__parser.parseLine("copy 'dir1 with ws/dir2 with ws/s r c.txt' to 'dir3 with ws/dir4/d s t.txt'")
self.assertEqual('dir1 with ws/dir2 with ws/s r c.txt', cpArgs.source)
self.assertEqual('dir3 with ws/dir4/d s t.txt', cpArgs.target)

View File

@ -3,15 +3,15 @@ __author__ = 'rzaitov'
class CopyArguments():
def __init__(self):
self.__source = None
self.__target = None
self.source = None
self.target = None
def setArguments(self, source, target):
self.__source = source
self.__target = target
self.source = source
self.target = target
def isValid(self):
result = self.__source is not None
result &= self.__target is not None
result = self.source is not None
result &= self.target is not None
return result

View File

@ -0,0 +1,39 @@
from parser.CopyParser.CopyArguments import CopyArguments
from parser.LineParser import LineParser
import re
class CopyLineParser(LineParser):
def __init__(self):
self.__copyArguments = CopyArguments()
def parseLine(self, line):
assert line is not None
srcFileNameRegexp = r"'(?P<src>[^']+)'"
dstFileNameRegexp = r"'(?P<dst>[^']+)'$"
regexpSource = self.startsWithKeywordToken('copy') + srcFileNameRegexp + self.keywordToken('to') + dstFileNameRegexp
regexp = re.compile(regexpSource, re.UNICODE)
match = regexp.match(line)
self._guardMatch(match, line, regexpSource)
src = match.group('src')
dst = match.group('dst')
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
isValid = line.startswith("copy");
return isValid