Merge branch 'BS-30'

This commit is contained in:
rzaitov 2013-11-11 12:31:31 +04:00
commit 5293ab0aab
12 changed files with 124 additions and 17 deletions

View File

@ -0,0 +1,7 @@
class ContentProviderBase:
def __init__(self):
pass
def fetchContent(self, key):
pass

View File

@ -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)

View File

@ -0,0 +1,6 @@
class SettingsProviderBase:
def __init__(self):
pass
def fetchSettings(self):
pass

View File

@ -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

View File

@ -0,0 +1 @@
__author__ = 'rzaitov'

View File

@ -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 = """
<include '{@sub_steps}'>
"""
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()

View File

@ -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 = "<include '{@path_to_file}'>"
symbols = self.macroParser.getSymbols(line)
self.assertTrue('@path_to_file' in symbols)
def test_parseMacroInsideIncludeWithDirSeparator(self):
line = "<include '{@parent_folder}/{@folder}/{@file_name}'>"
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)

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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')

View File

@ -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'