добавил корректную обработку пустных строк и строк-комментариев

This commit is contained in:
rzaitov 2013-10-31 18:20:46 +04:00
parent 3e8b59bbf4
commit 5dc42a9245
2 changed files with 73 additions and 3 deletions

View File

@ -22,4 +22,64 @@ class TestSettingsParser(unittest.TestCase):
self.parser.getSettingsDictByPath(['another', 'two'])
len2 = len(self.parser.settings)
self.assertEqual(2, len2)
self.assertEqual(2, len2)
def test_processLine(self):
line1 = "x.y.name1 = 'value1'"
line2 = "x.y.name2 = 'value2'"
line3 = "x.z.name1 = 'value3'"
line4 = "x.z.name2 = 'value4'"
line5 = "a.y.name1 = 'value5'"
line6 = "a.y.name2 = 'value6'"
line7 = "a.z.name1 = 'value7'"
line8 = "a.z.name2 = 'value8'"
self.parser.processLine(line1)
self.parser.processLine(line2)
self.parser.processLine(line3)
self.parser.processLine(line4)
self.parser.processLine(line5)
self.parser.processLine(line6)
self.parser.processLine(line7)
self.parser.processLine(line8)
self.assertEqual('value1', self.parser.settings['x']['y']['name1'])
self.assertEqual('value2', self.parser.settings['x']['y']['name2'])
self.assertEqual('value3', self.parser.settings['x']['z']['name1'])
self.assertEqual('value4', self.parser.settings['x']['z']['name2'])
self.assertEqual('value5', self.parser.settings['a']['y']['name1'])
self.assertEqual('value6', self.parser.settings['a']['y']['name2'])
self.assertEqual('value7', self.parser.settings['a']['z']['name1'])
self.assertEqual('value8', self.parser.settings['a']['z']['name2'])
def test_emptyLinesAndComments(self):
class PartialSettingsParser(SettingsParser):
def __init__(self):
self.processLineCall = 0
def processLine(self, line):
self.processLineCall += 1
self.parser = PartialSettingsParser()
content = """
valid.line.with.setting = 'some value'
# this is comment
another.valid.line = 'another value'
"""
self.parser.parse(content)
self.assertEqual(2, self.parser.processLineCall)

View File

@ -10,12 +10,22 @@ class SettingsParser:
lines = content.splitlines()
for line in lines:
self.processLine(line)
stripped = line.strip(' \t\n\r')
print (line, stripped)
if len(stripped) == 0:
continue
if stripped.startswith("#"):
continue
self.processLine(stripped)
def processLine(self, line):
parser = SettingsLineParser()
result = parser.parseLine(line)
setting = parser.parseLine(line)
self.mergeSetting(setting)
def mergeSetting(self, setting):
value = setting['value']