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