Модифицировал parser чтобы он мог парсить не только csproj комманды

This commit is contained in:
Rustam Zaitov 2013-10-09 23:28:03 +04:00
parent 0d68a36fc8
commit 29237ad40d
18 changed files with 51 additions and 49 deletions

View File

@ -1,31 +1,31 @@
# -*- coding: utf-8 -*-
import unittest
from UnitTests.CsprojParser.ValueProvider import ValueProvider
from parser.CsprojParser.CsprojLineParser import CsprojLineParser
from UnitTests.ProjectParser.ValueProvider import ValueProvider
from parser.ProjectParser.ProjectLineParser import ProjectLineParser
class TestCsprojParser(unittest.TestCase):
def setUp(self):
value_provider = ValueProvider()
self.parser = CsprojLineParser(value_provider)
self.parser = ProjectLineParser(value_provider, 'csproj')
def test_parseAppStatement(self):
statement = "app:SomeAppName"
app_name = self.parser._CsprojLineParser__parseAppStatement(statement)
app_name = self.parser._ProjectLineParser__parseAppStatement(statement)
self.assertEqual(app_name, 'SomeAppName')
def test_parseKeyValueStatement(self):
statement = r"key:myKey 'my value -bla bla'"
setting = self.parser._CsprojLineParser__parseKeyValueStatement(statement)
setting = self.parser._ProjectLineParser__parseKeyValueStatement(statement)
self.assertEqual(setting.key, 'myKey')
self.assertEqual(setting.value, 'my value -bla bla')
def test_parseAttributeStatement(self):
statement = r"rel_path '../some_dir/some_file.txt'"
setting = self.parser._CsprojLineParser__parseAttributeStatement(statement)
setting = self.parser._ProjectLineParser__parseAttributeStatement(statement)
self.assertEqual(setting.attribute_name, 'rel_path')
self.assertEqual(setting.attribute_value, r'../some_dir/some_file.txt')
@ -34,7 +34,7 @@ class TestCsprojParser(unittest.TestCase):
statement = r"csproj app:coolApp key:CodesignKey 'iPhone Developer: Рустам Заитов (CTL85FZX6K)'"
setting = self.parser.parse(statement)
self.assertEqual(setting.appName, 'coolApp')
self.assertEqual(setting.projectName, 'coolApp')
self.assertEqual(setting.key, 'CodesignKey')
self.assertEqual(setting.value, 'iPhone Developer: Рустам Заитов (CTL85FZX6K)')
@ -42,6 +42,6 @@ class TestCsprojParser(unittest.TestCase):
statement = r"csproj app:coolApp rel_path '../parent_dir/some_file.extension'"
setting = self.parser.parse(statement)
self.assertEqual(setting.appName, 'coolApp')
self.assertEqual(setting.projectName, 'coolApp')
self.assertEqual(setting.attribute_name, 'rel_path')
self.assertEqual(setting.attribute_value, '../parent_dir/some_file.extension')

View File

@ -1,6 +1,6 @@
import unittest
from UnitTests.CsprojParser.ValueProvider import ValueProvider
from parser.CsprojParser.CsprojParser import CsprojParser
from UnitTests.ProjectParser.ValueProvider import ValueProvider
from parser.ProjectParser.ProjectParser import ProjectParser
class TestCase(unittest.TestCase):
@ -19,7 +19,7 @@ class TestCase(unittest.TestCase):
self.__value_provider = ValueProvider()
def __do_parse(self):
self.__parser = CsprojParser(self.__lineCollection, self.__value_provider)
self.__parser = ProjectParser(self.__lineCollection, self.__value_provider)
self.__parser.parse()
def test_projectCount(self):
@ -35,8 +35,8 @@ class TestCase(unittest.TestCase):
first = self.__parser.projects_dict['first']
second = self.__parser.projects_dict['second']
self.assertEqual(first.appName, 'first')
self.assertEqual(second.appName, 'second')
self.assertEqual(first.projectName, 'first')
self.assertEqual(second.projectName, 'second')
setting_dict = {
'key1': 'value1',

View File

@ -1,11 +1,11 @@
import unittest
from parser.CsprojParser.Csproj import Csproj
from parser.CsprojParser.CsprojSetting.AttribureSetting import AttributeSetting
from parser.ProjectParser.Project import Project
from parser.ProjectParser.ProjectSetting.AttribureSetting import AttributeSetting
class TestCase(unittest.TestCase):
def setUp(self):
self.csproj = Csproj('appName')
self.csproj = Project('appName')
def test_apply(self):
attr_value = 'parent_dir/child_dir'

View File

@ -1,11 +1,11 @@
import unittest
from parser.CsprojParser.Csproj import Csproj
from parser.CsprojParser.CsprojSetting.KeyValueSetting import KeyValueSetting
from parser.ProjectParser.Project import Project
from parser.ProjectParser.ProjectSetting.KeyValueSetting import KeyValueSetting
class TestCase(unittest.TestCase):
def setUp(self):
self.csproj = Csproj('appName')
self.csproj = Project('appName')
def test_apply(self):

View File

@ -1,5 +1,5 @@
import commands.build_command as bcmd
from parser.CsprojParser.CsprojParser import CsprojParser
from parser.ProjectParser.ProjectParser import ProjectParser
import utils.csproj.patcher as csproj
class PatchCsproj(bcmd.BuildCommand):
@ -29,7 +29,7 @@ class PatchCsproj(bcmd.BuildCommand):
def __fillPatchSettings(self, line_collection):
assert line_collection is not None
self._parser = CsprojParser(line_collection, self._value_provider)
self._parser = ProjectParser(line_collection, self._value_provider)
self._parser.parse()
def execute(self):

View File

@ -1,7 +0,0 @@
class Csproj:
def __init__(self, appName):
self.appName = appName
self.settings = {}
def __str__(self):
return 'app Name: {0} settings: {1}'.format(self.appName, self.settings)

View File

@ -0,0 +1,7 @@
class Project:
def __init__(self, projectName):
self.projectName = projectName
self.settings = {}
def __str__(self):
return 'app Name: {0} settings: {1}'.format(self.projectName, self.settings)

View File

@ -1,38 +1,39 @@
from parser.CsprojParser.CsprojSetting.AttribureSetting import AttributeSetting
from parser.CsprojParser.CsprojSetting.KeyValueSetting import KeyValueSetting
from parser.ProjectParser.ProjectSetting.AttribureSetting import AttributeSetting
from parser.ProjectParser.ProjectSetting.KeyValueSetting import KeyValueSetting
import re
class CsprojLineParser:
def __init__(self, value_provider):
class ProjectLineParser:
def __init__(self, value_provider, command_token):
assert value_provider is not None
self._value_provider = value_provider
self._command_token = command_token
def parse(self, line):
ws = ' '
csproj_regexp = "^(?P<cmd_name>csproj)"
cmd_name_regexp = "^(?P<cmd_name>{0})".format(self._command_token)
app_regexp = r"(?P<app>app:\S+)"
setting_regexp = r"(?P<setting>\S+ '[^']+')$"
source = csproj_regexp + ws + app_regexp + ws + setting_regexp
source = cmd_name_regexp + ws + app_regexp + ws + setting_regexp
regexp = re.compile(source, re.UNICODE)
match = regexp.search(line)
self.__guardMatch(match, line)
cmd_name = match.group('cmd_name')
self.__parseCsprojStatement(cmd_name)
self.__parseProjectStatement(cmd_name)
app_statement = match.group('app')
appName = self.__parseAppStatement(app_statement)
project_name = self.__parseAppStatement(app_statement)
setting_statement = match.group('setting')
setting = self.__parseSettingStatement(setting_statement)
setting.appName = appName
setting.projectName = project_name
return setting
def __parseCsprojStatement(self, statement):
def __parseProjectStatement(self, statement):
pass
def __parseAppStatement(self, statement):

View File

@ -1,8 +1,8 @@
from parser.CsprojParser.Csproj import Csproj
from parser.CsprojParser.CsprojLineParser import CsprojLineParser
from parser.ProjectParser.Project import Project
from parser.ProjectParser.ProjectLineParser import ProjectLineParser
class CsprojParser:
class ProjectParser:
def __init__(self, line_collection, value_provider):
assert line_collection is not None
assert value_provider is not None
@ -18,19 +18,19 @@ class CsprojParser:
settings.append(self.__parse_line(line))
for s in settings:
csproj = self.__fetchProject(s.appName)
s.apply(csproj)
project = self.__fetchProject(s.projectName)
s.apply(project)
def __fetchProject(self, project_name):
assert project_name is not None
csproj = self.projects_dict.get(project_name, Csproj(project_name))
self.projects_dict[project_name] = csproj
project = self.projects_dict.get(project_name, Project(project_name))
self.projects_dict[project_name] = project
return csproj
return project
def __parse_line(self, line):
line_parser = CsprojLineParser(self._value_provider)
line_parser = ProjectLineParser(self._value_provider, 'csproj')
setting = line_parser.parse(line)
return setting

View File

@ -1,4 +1,4 @@
from parser.CsprojParser.CsprojSetting.CsprojSettingBase import CsprojSettingBase
from parser.ProjectParser.ProjectSetting.CsprojSettingBase import CsprojSettingBase
class AttributeSetting(CsprojSettingBase):

View File

@ -1,4 +1,4 @@
from parser.CsprojParser.CsprojSetting.CsprojSettingBase import CsprojSettingBase
from parser.ProjectParser.ProjectSetting.CsprojSettingBase import CsprojSettingBase
class KeyValueSetting(CsprojSettingBase):

View File

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