Реализовал CopyLineParser
This commit is contained in:
parent
0587ffc139
commit
f3b2908815
|
|
@ -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)
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
Loading…
Reference in New Issue