diff --git a/scripts/TouchinBuild/Tests/UnitTests/SettingsParser/test_SettingsLineParser.py b/scripts/TouchinBuild/Tests/UnitTests/SettingsParser/test_SettingsLineParser.py index da2be49..00fb89a 100644 --- a/scripts/TouchinBuild/Tests/UnitTests/SettingsParser/test_SettingsLineParser.py +++ b/scripts/TouchinBuild/Tests/UnitTests/SettingsParser/test_SettingsLineParser.py @@ -7,9 +7,27 @@ class TestSettingsLineParser(unittest.TestCase): def setUp(self): self.parser = SettingsLineParser() - def test_getPathAndValue(self): - line = "abc.123.some_name = 'crazy value ±~ ../ 123'" + def test_whiteSpaces(self): + self.checkPathAndValue("abc.123.some_name = 'crazy value ±~ ../ 123'", 'abc.123.some_name', 'crazy value ±~ ../ 123') + self.checkPathAndValue("a.b.c = 'value'", 'a.b.c', 'value') + self.checkPathAndValue("a.b.c= 'value'", 'a.b.c', 'value') + self.checkPathAndValue("a.b.c ='value'", 'a.b.c', 'value') + self.checkPathAndValue("a.b.c='value'", 'a.b.c', 'value') + + def test_valueWithoutComma(self): + self.checkPathAndValue("a.b.c = value", 'a.b.c', 'value') + self.checkPathAndValue("a.b.c = some value", 'a.b.c', 'some value') + self.checkPathAndValue("a.b.c = some value ", 'a.b.c', 'some value') + + def test_valueWithEscapeComma(self): + self.checkPathAndValue("a.b.c = '\"value\"' ", 'a.b.c', '"value"') + self.checkPathAndValue('a.b.c = "\'value\'" ', 'a.b.c', "'value'") + + self.checkPathAndValue('a.b.c = ""value"" ', 'a.b.c', 'value') + self.checkPathAndValue("a.b.c = ''value'' ", 'a.b.c', 'value') + + def checkPathAndValue(self, line, expectedPath, expectedValue): result = self.parser.splitToPathAndValue(line) - self.assertEqual('abc.123.some_name', result[0]) - self.assertEqual('crazy value ±~ ../ 123', result[1]) + self.assertEqual(expectedPath, result[0]) + self.assertEqual(expectedValue, result[1]) diff --git a/scripts/TouchinBuild/Tests/UnitTests/SettingsParser/test_SettingsParser.py b/scripts/TouchinBuild/Tests/UnitTests/SettingsParser/test_SettingsParser.py index 6888f29..d2727de 100644 --- a/scripts/TouchinBuild/Tests/UnitTests/SettingsParser/test_SettingsParser.py +++ b/scripts/TouchinBuild/Tests/UnitTests/SettingsParser/test_SettingsParser.py @@ -8,7 +8,7 @@ from parsers.SettingsParser.SettingsParser import SettingsParser class TestSettingsParser(unittest.TestCase): def setUp(self): self.preprocessor = NullPreprocessor() - self.parser = SettingsParser(self.preprocessor) + self.parser = SettingsParser(self.preprocessor, None) def test_processLine(self): line1 = "x.y.name1 = 'value1'" @@ -44,7 +44,7 @@ class TestSettingsParser(unittest.TestCase): class PartialSettingsParser(SettingsParser): def __init__(self, textPreprocessor): - SettingsParser.__init__(self, textPreprocessor) + SettingsParser.__init__(self, textPreprocessor, None) self.processLineCall = 0 def processLine(self, line): diff --git a/scripts/TouchinBuild/parsers/SettingsParser/SettingsLineParser.py b/scripts/TouchinBuild/parsers/SettingsParser/SettingsLineParser.py index e7e6ca2..755d4be 100644 --- a/scripts/TouchinBuild/parsers/SettingsParser/SettingsLineParser.py +++ b/scripts/TouchinBuild/parsers/SettingsParser/SettingsLineParser.py @@ -27,17 +27,35 @@ class SettingsLineParser(LineParser): return result def splitToPathAndValue(self, line): + # some.path = some_value + result = line.split('=') - propPathRegexp = r"^(?P[\w.]+)" - valueRegexp = "'(?P.*)'" + propPath = self.getPropertyPath(result[0]) + value = self.getValue(result[1]) - regexpSource = propPathRegexp + r'\s*=\s*' + valueRegexp - regexp = re.compile(regexpSource, re.UNICODE) + return propPath, value - match = regexp.match(line) - self._guardMatch(match, line, regexpSource) + def getPropertyPath(self, rawPropertyPath): + assert rawPropertyPath is not None + stripped = rawPropertyPath.strip() + + propPathRegexp = r"^(?P[\w.]+)$" + regexp = re.compile(propPathRegexp, re.UNICODE) + + match = regexp.match(stripped) + self._guardMatch(match, stripped, propPathRegexp) propPath = match.group('prop_path') - value = match.group('value') + return propPath - return propPath, value \ No newline at end of file + def getValue(self, rawValue): + assert rawValue is not None + stripped = rawValue.strip() + + old = stripped + stripped = stripped.strip("'") + + if old == stripped: + stripped = stripped.strip('"') + + return stripped \ No newline at end of file diff --git a/scripts/settings.txt b/scripts/settings.txt index 277d2b8..8edf250 100644 --- a/scripts/settings.txt +++ b/scripts/settings.txt @@ -1,10 +1,10 @@ # global settings -build_tool = '/Applications/Xamarin\ Studio.app/Contents/MacOS/mdtool' -version = '0.0.0' # комментарий в тойже строке +build_tool='/Applications/Xamarin\ Studio.app/Contents/MacOS/mdtool' +version=0.0.0 # комментарий в тойже строке configs = 'appstore, staging' # ios platform settings -ios.sln_config = 'Release|iPhone' +ios.sln_config = Release|iPhone ios.steps = 'scripts/IosSteps.txt' ios.setup_steps = 'IosSetupSteps.txt' ios.assembly_name = 'CoolApp'