From 9d93d6ff49d01ed600c4b080a4ba9f86deffbdff Mon Sep 17 00:00:00 2001 From: rzaitov Date: Tue, 12 Nov 2013 20:40:04 +0400 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=D0=B0=20InsideSet?= =?UTF-8?q?ArrayParser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tests/UnitTests/InsideParsers/__init__.py | 1 + .../test_insideSetArrayParser.py | 46 +++++++++++++++++++ .../InsideParser/InsideSetArrayParser.py | 21 +++++++-- 3 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 scripts/TouchinBuild/Tests/UnitTests/InsideParsers/__init__.py create mode 100644 scripts/TouchinBuild/Tests/UnitTests/InsideParsers/test_insideSetArrayParser.py diff --git a/scripts/TouchinBuild/Tests/UnitTests/InsideParsers/__init__.py b/scripts/TouchinBuild/Tests/UnitTests/InsideParsers/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/TouchinBuild/Tests/UnitTests/InsideParsers/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/TouchinBuild/Tests/UnitTests/InsideParsers/test_insideSetArrayParser.py b/scripts/TouchinBuild/Tests/UnitTests/InsideParsers/test_insideSetArrayParser.py new file mode 100644 index 0000000..224d8e2 --- /dev/null +++ b/scripts/TouchinBuild/Tests/UnitTests/InsideParsers/test_insideSetArrayParser.py @@ -0,0 +1,46 @@ +import unittest +from Tests.UnitTests.LineParserTestCaseBase import LineParserTestCaseBase +from parsers.InsideParser.InsideSetArrayParser import InsideSetArrayParser + + +class TestInsideSetArrayParser(LineParserTestCaseBase): + _validSingleValueTest = "inside 'my.txt' set KEY with values 'value1'" + _validMultiValueTest = "inside 'my.txt' set KEY with values 'value1:value2:value3'" + + def setUp(self): + self.textParser = InsideSetArrayParser('txt') + + def test_isValid(self): + self.isValidText(TestInsideSetArrayParser._validSingleValueTest) + self.isValidText(TestInsideSetArrayParser._validMultiValueTest) + self.isValidText("inside 'my.txt' set KEY with values 'value1:value2:value3'") + + def test_isNotValid(self): + self.isNotValidText("inside 'my.sln' set KEY with values 'value1'") + self.isNotValidText("inside 'my.sln' set KEY with values 'value1:value2'") + self.isNotValidText("inside 'my.txt' set KEY with values 'value1' ") + self.isNotValidText("inside 'my.txt' set KEY with values 'value1' bla bla") + + + def test_parse(self): + self.checkParse(TestInsideSetArrayParser._validSingleValueTest, 'my.txt', 'KEY', 'value1') + self.checkParse(TestInsideSetArrayParser._validMultiValueTest, 'my.txt', 'KEY', 'value1:value2:value3') + + def test_values(self): + self.checkValues(TestInsideSetArrayParser._validSingleValueTest, ['value1']) + self.checkValues(TestInsideSetArrayParser._validMultiValueTest, ['value1', 'value2', 'value3']) + + def checkParse(self, line, filePath, key, value): + result = self.textParser.parseLine(line) + + self.assertEqual(filePath, result[0]) + self.assertEqual(key, result[1]) + self.assertEqual(value, result[2]) + + def checkValues(self, text, expectedValues): + self.textParser.parseLine(text) + + self.assertEqual(len(expectedValues), len(self.textParser.values)) + + for v in self.textParser.values: + self.assertTrue(v in expectedValues) \ No newline at end of file diff --git a/scripts/TouchinBuild/parsers/InsideParser/InsideSetArrayParser.py b/scripts/TouchinBuild/parsers/InsideParser/InsideSetArrayParser.py index 44cf234..d0de972 100644 --- a/scripts/TouchinBuild/parsers/InsideParser/InsideSetArrayParser.py +++ b/scripts/TouchinBuild/parsers/InsideParser/InsideSetArrayParser.py @@ -6,25 +6,36 @@ class InsideSetArrayParser(InsideParserBase): def __init__(self, fileExt): InsideParserBase.__init__(self, fileExt) + self.values = None + def parseLine(self, line): match = self.fetchMatchFor(line) filePath = match.group('file') key = match.group('key') - value = match.group('value') + valuesStr = match.group('values') - return filePath, key, value + self.values = self.parseValues(valuesStr) + + return filePath, key, valuesStr def getMatchInfo(self, line): assert line is not None keyRegexp = r'(?P[a-zA-Z]+)' - valueRegexp = r"'(?P[^']+)'$" + valueRegexp = r"'(?P[^']+)'$" regexpSource = self.startsWith('inside') + self.filePathRegexp + self.keywordToken('set') + keyRegexp + \ - self.keywordToken('to') + valueRegexp + self.keywordToken('with') + self.than('values') + valueRegexp regexp = re.compile(regexpSource, re.UNICODE) match = regexp.match(line) - return match, regexpSource \ No newline at end of file + return match, regexpSource + + def parseValues(self, valuesStr): + assert valuesStr is not None + assert len(valuesStr) > 0 + + values = valuesStr.split(':') + return values \ No newline at end of file