From 384ae85d20704111cd1e07a99a5aca7bd11c6af6 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Mon, 11 Nov 2013 12:25:33 +0400 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D0=BC=D0=B0=D0=BA=D1=80=D0=BE=D1=81=D1=8B?= =?UTF-8?q?=20=D0=B2=20=D0=B8=D0=BD=D0=BA=D0=BB=D1=83=D0=B4=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TouchinBuild/Core/ContentProviderBase.py | 7 +++ .../TouchinBuild/Core/FileContentProvider.py | 7 ++- .../TouchinBuild/Core/SettingsProviderBase.py | 6 +++ .../Tests/Common/SettingsProviderStub.py | 16 +++++++ scripts/TouchinBuild/Tests/Common/__init__.py | 1 + .../Tests/ManualTests/macros_include_test.py | 47 +++++++++++++++++++ .../Tests/UnitTests/Macro/test_macro.py | 14 ++++++ scripts/TouchinBuild/run_manual_tests.py | 4 +- scripts/TouchinBuild/taskRunner.py | 28 +++++++---- .../CmdArgsOverriderSettingsProvider.py | 4 +- .../FromFileSettingsProvider.py | 5 +- 11 files changed, 123 insertions(+), 16 deletions(-) create mode 100644 scripts/TouchinBuild/Core/ContentProviderBase.py create mode 100644 scripts/TouchinBuild/Core/SettingsProviderBase.py create mode 100644 scripts/TouchinBuild/Tests/Common/SettingsProviderStub.py create mode 100644 scripts/TouchinBuild/Tests/Common/__init__.py create mode 100644 scripts/TouchinBuild/Tests/ManualTests/macros_include_test.py diff --git a/scripts/TouchinBuild/Core/ContentProviderBase.py b/scripts/TouchinBuild/Core/ContentProviderBase.py new file mode 100644 index 0000000..2765745 --- /dev/null +++ b/scripts/TouchinBuild/Core/ContentProviderBase.py @@ -0,0 +1,7 @@ +class ContentProviderBase: + def __init__(self): + pass + + def fetchContent(self, key): + pass + diff --git a/scripts/TouchinBuild/Core/FileContentProvider.py b/scripts/TouchinBuild/Core/FileContentProvider.py index 415343f..5158ec1 100644 --- a/scripts/TouchinBuild/Core/FileContentProvider.py +++ b/scripts/TouchinBuild/Core/FileContentProvider.py @@ -1,6 +1,9 @@ -class FileContentProvider: +from Core.ContentProviderBase import ContentProviderBase + + +class FileContentProvider(ContentProviderBase): def __init__(self): - pass + ContentProviderBase.__init__(self) def fetchContent(self, path): f = open(path) diff --git a/scripts/TouchinBuild/Core/SettingsProviderBase.py b/scripts/TouchinBuild/Core/SettingsProviderBase.py new file mode 100644 index 0000000..a5c0cc9 --- /dev/null +++ b/scripts/TouchinBuild/Core/SettingsProviderBase.py @@ -0,0 +1,6 @@ +class SettingsProviderBase: + def __init__(self): + pass + + def fetchSettings(self): + pass \ No newline at end of file diff --git a/scripts/TouchinBuild/Tests/Common/SettingsProviderStub.py b/scripts/TouchinBuild/Tests/Common/SettingsProviderStub.py new file mode 100644 index 0000000..3b0cc32 --- /dev/null +++ b/scripts/TouchinBuild/Tests/Common/SettingsProviderStub.py @@ -0,0 +1,16 @@ +from Core.SettingsProviderBase import SettingsProviderBase +from parsers.SettingsParser.SettingsParser import SettingsParser + + +class SettingsProviderStub(SettingsProviderBase): + def __init__(self, settingsText): + assert settingsText is not None + + SettingsProviderBase.__init__(self) + self.settingsText = settingsText + + def fetchSettings(self): + parser = SettingsParser() + parser.parse(self.settingsText) + + return parser.settings \ No newline at end of file diff --git a/scripts/TouchinBuild/Tests/Common/__init__.py b/scripts/TouchinBuild/Tests/Common/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/TouchinBuild/Tests/Common/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/TouchinBuild/Tests/ManualTests/macros_include_test.py b/scripts/TouchinBuild/Tests/ManualTests/macros_include_test.py new file mode 100644 index 0000000..ca8a6b3 --- /dev/null +++ b/scripts/TouchinBuild/Tests/ManualTests/macros_include_test.py @@ -0,0 +1,47 @@ +from Core.ContentProviderBase import ContentProviderBase +from Tests.Common.SettingsProviderStub import SettingsProviderStub +from taskRunner import TaskRunner + +settingsText = """ +build_tool = '/Applications/Xamarin\ Studio.app/Contents/MacOS/mdtool' +version = '0.0.0' +configs = 'config1, config2' +steps = 'main_steps' + +config1.sub_steps = 'sub_steps1' +config2.sub_steps = 'sub_steps2' +""" + +stepsFileContent = """ + +""" + +subSteps1Content = """ +sh echo One +""" + +subSteps2Content = """ +sh echo Two +""" + +class ContentProviderMock(ContentProviderBase): + def __init__(self): + ContentProviderBase.__init__(self) + + def fetchContent(self, key): + if key == 'sub_steps1': + return subSteps1Content + elif key == 'sub_steps2': + return subSteps2Content + elif key == 'main_steps': + return stepsFileContent + else: + raise Exception(key) + + +settingsProvider = SettingsProviderStub(settingsText) +contentProvider = ContentProviderMock() + +taskRunner = TaskRunner(settingsProvider, contentProvider) + +taskRunner.run() diff --git a/scripts/TouchinBuild/Tests/UnitTests/Macro/test_macro.py b/scripts/TouchinBuild/Tests/UnitTests/Macro/test_macro.py index dd5c378..c58bbd9 100644 --- a/scripts/TouchinBuild/Tests/UnitTests/Macro/test_macro.py +++ b/scripts/TouchinBuild/Tests/UnitTests/Macro/test_macro.py @@ -15,6 +15,20 @@ class TestMacro(unittest.TestCase): self.assertTrue('@my_macro' in symbols) self.assertTrue('@macro_with_numbers123' in symbols) + def test_parseMacroInsideInclude(self): + line = "" + symbols = self.macroParser.getSymbols(line) + + self.assertTrue('@path_to_file' in symbols) + + def test_parseMacroInsideIncludeWithDirSeparator(self): + line = "" + symbols = self.macroParser.getSymbols(line) + + self.assertTrue('@parent_folder' in symbols) + self.assertTrue('@folder' in symbols) + self.assertTrue('@file_name' in symbols) + def test_getName(self): line = '{@macro_name}' name = self.macroParser.getMacroName(line) diff --git a/scripts/TouchinBuild/run_manual_tests.py b/scripts/TouchinBuild/run_manual_tests.py index 3e21544..e3aaf88 100644 --- a/scripts/TouchinBuild/run_manual_tests.py +++ b/scripts/TouchinBuild/run_manual_tests.py @@ -6,7 +6,7 @@ baseDir = os.path.join(scriptDir, os.pardir, os.pardir) os.chdir(baseDir) -import Tests.ManualTests.csproj_test +#import Tests.ManualTests.csproj_test #import ManualTests.info_plist_test #import ManualTests.copy_test #import ManualTests.create_backup_test @@ -20,3 +20,5 @@ import Tests.ManualTests.csproj_test #import ManualTests.clean_test #import Tests.ManualTests.testflight_test #import Tests.ManualTests.install_profile + +import Tests.ManualTests.macros_include_test \ No newline at end of file diff --git a/scripts/TouchinBuild/taskRunner.py b/scripts/TouchinBuild/taskRunner.py index bf6fdf8..8650cfe 100755 --- a/scripts/TouchinBuild/taskRunner.py +++ b/scripts/TouchinBuild/taskRunner.py @@ -25,10 +25,12 @@ from Core.StepsRunner import StepsRunner class TaskRunner: - def __init__(self, settingsProvider): + def __init__(self, settingsProvider, fileContentProvider): assert settingsProvider is not None + assert fileContentProvider is not None self.settingsProvider = settingsProvider + self.fileContentProvider = fileContentProvider self.configsProvider = BuildConfigProvider() lineStripper = Stripper() @@ -39,12 +41,14 @@ class TaskRunner: macroResolver = MacroResolver(macroProcessor, self.valueProvider) includeProcessor = IncludeProcessor() - self.fileContentProvider = FileContentProvider() textInclude = TextInclude(includeProcessor, self.fileContentProvider) + # последовательность важна! + # Сначала резолвим макросы, потом делаем включение файлов + # Это позволяет использовать макросы в include выражениях self.textPreprocessor = TextConveyorPreprocessor() - self.textPreprocessor.addProcessor(textInclude) self.textPreprocessor.addProcessor(macroResolver) + self.textPreprocessor.addProcessor(textInclude) self.linePreprocessor = TextConveyorPreprocessor() self.linePreprocessor.addProcessor(commentRemover) @@ -72,12 +76,16 @@ class TaskRunner: return content -parser = argparse.ArgumentParser() -overrideArgs = parser.parse_known_args()[1] +if __name__ == "__main__": -# TODO: перенести в корень комапановки -fromFileSettingsProvider = FromFileSettingsProvider() -overrideWithCmdSetProvider = CmdArgsOverriderSettingsProvider(fromFileSettingsProvider, overrideArgs) + parser = argparse.ArgumentParser() + overrideArgs = parser.parse_known_args()[1] -runner = TaskRunner(overrideWithCmdSetProvider) -runner.run() + # TODO: перенести в корень комапановки + fromFileSettingsProvider = FromFileSettingsProvider() + overrideWithCmdSetProvider = CmdArgsOverriderSettingsProvider(fromFileSettingsProvider, overrideArgs) + + fContentProvider = FileContentProvider() + + runner = TaskRunner(overrideWithCmdSetProvider, fContentProvider) + runner.run() \ No newline at end of file diff --git a/scripts/TouchinBuild/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py b/scripts/TouchinBuild/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py index a7623a7..47ecb6c 100644 --- a/scripts/TouchinBuild/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py +++ b/scripts/TouchinBuild/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py @@ -1,8 +1,10 @@ +from Core.SettingsProviderBase import SettingsProviderBase from parsers.SettingsParser.SettingsParser import SettingsParser -class CmdArgsOverriderSettingsProvider: +class CmdArgsOverriderSettingsProvider(SettingsProviderBase): def __init__(self, settingsProvider, settingLines): + SettingsProviderBase.__init__(self) assert settingsProvider is not None self.inner = settingsProvider diff --git a/scripts/TouchinBuild/utils/SettingsProvider/FromFileSettingsProvider.py b/scripts/TouchinBuild/utils/SettingsProvider/FromFileSettingsProvider.py index 3fb9d6e..6e9e614 100644 --- a/scripts/TouchinBuild/utils/SettingsProvider/FromFileSettingsProvider.py +++ b/scripts/TouchinBuild/utils/SettingsProvider/FromFileSettingsProvider.py @@ -1,9 +1,10 @@ +from Core.SettingsProviderBase import SettingsProviderBase from parsers.SettingsParser.SettingsParser import SettingsParser -class FromFileSettingsProvider: +class FromFileSettingsProvider(SettingsProviderBase): def __init__(self): - pass + SettingsProviderBase.__init__(self) def fetchSettings(self): settingsFile = open('scripts/settings.txt') From 3b268e953de1c07303db42bdd8e62106156d4893 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Mon, 11 Nov 2013 12:30:41 +0400 Subject: [PATCH 2/2] =?UTF-8?q?=D0=BF=D0=BE=D1=84=D0=B8=D0=BA=D1=81=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=84=D0=B0=D0=B9=D0=BB=20=D1=81=20=D0=BD=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/settings.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/settings.txt b/scripts/settings.txt index 95820b2..61cfbdd 100644 --- a/scripts/settings.txt +++ b/scripts/settings.txt @@ -4,6 +4,7 @@ version = '0.0.0' configs = 'appstore, staging' # ios platform settings +ios.sln_config = 'Release|iPhone' ios.steps = 'scripts/IosSteps.txt' ios.tf_api_token = '0e6925075d4fc10fed0e7bbf43fa6894_NjQ0OTI2MjAxMi0wOS0yNSAxMTo0MDozNi40OTY5MjU' ios.tf_team_token = 'c5c3cf7a6dae2bea4382dfbd181a2075_Mjc4ODkwMjAxMy0wOS0yOSAxNDowOTo1OC40Mzg5MTY' @@ -13,7 +14,6 @@ ios.tf_team_token = 'c5c3cf7a6dae2bea4382dfbd181a2075_Mjc4ODkwMjAxMy0wOS0yOSAxND # config settings ios.appstore.app_name = 'CoolApp' -ios.appstore.sln_config = 'Release|iPhone' ios.appstore.author = 'Rustam' ios.staging.app_name = 'CoolApp staging'