Skip to content

Commit

Permalink
CliParser: Save case insentitively in section dict
Browse files Browse the repository at this point in the history
  • Loading branch information
sils committed Feb 9, 2015
1 parent 6467f6f commit d01620f
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 29 deletions.
9 changes: 6 additions & 3 deletions coalib/parsing/CliParser.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,13 @@ def _update_sections(self, section_name, key, value, origin):
if section_name == "" or section_name is None:
section_name = "default"

if not section_name in self.sections:
self.sections[section_name] = Section(section_name)
if not section_name.lower() in self.sections:
self.sections[section_name.lower()] = Section(section_name)

self.sections[section_name].append(Setting(key, str(value), origin, from_cli=True))
self.sections[section_name.lower()].append(Setting(key,
str(value),
origin,
from_cli=True))

def parse(self, arg_list=sys.argv[1:], origin=os.getcwd()):
"""
Expand Down
81 changes: 55 additions & 26 deletions coalib/tests/parsing/CliParserTest.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,36 +26,65 @@ def test_raises(self):

def test_parse(self):
# regular parse
parsed_sections = self.uut.parse(['-t', 'ignored1', 'ignored2',
'-t', 'taken',
'-S', 'section1.key1,section2.key2=value1,value2',
'section2.key2=only_this_value',
'invalid.=shouldnt_be_shown',
'.=not_either',
'.key=only_in_default',
'default_key1,default_key2=single_value',
'default_key3=first_value,second_value'])
expected_dict = {'default': {("test", "taken"), ("key", "only_in_default"), ("default_key1", "single_value"),
("default_key2", "single_value"), ("default_key3", "first_value,second_value")},
'section1': {("key1", "value1,value2")},
'section2': {("key2", "only_this_value")}
}
parsed_sections = self.uut.parse(
[
'-t', 'ignored1', 'ignored2',
'-t', 'taken',
'-S', 'section1.key1,section2.key2=value1,value2',
'section2.key2=only_this_value',
'SECTION2.key2a=k2a',
'invalid.=shouldnt_be_shown',
'.=not_either',
'.key=only_in_default',
'default_key1,default_key2=single_value',
'default_key3=first_value,second_value'
]
)
expected_dict = {
'default': {
("test", "taken"),
("key", "only_in_default"),
("default_key1", "single_value"),
("default_key2", "single_value"),
("default_key3", "first_value,second_value")
},
'section1': {
("key1", "value1,value2")
},
'section2': {
("key2", "only_this_value"),
("key2a", "k2a")
}
}
self.assertEqual(parsed_sections["default"].name, "Default")
self.assertEqual(self.dict_from_sections(parsed_sections), expected_dict)
self.assertEqual(self.dict_from_sections(self.uut.export_to_settings()), expected_dict)
self.assertEqual(self.dict_from_sections(parsed_sections),
expected_dict)
self.assertEqual(self.dict_from_sections(self.uut.export_to_settings()),
expected_dict)

# additional parse
add_parsed_sections = self.uut.parse(['-S', 'additional.key=value'])
add_expected_dict = {'default': {("test", "taken"),
("key", "only_in_default"),
("default_key1", "single_value"),
("default_key2", "single_value"),
("default_key3", "first_value,second_value")},
'section1': {("key1", "value1,value2")},
'section2': {("key2", "only_this_value")},
'additional': {("key", "value")}
}
self.assertEqual(self.dict_from_sections(add_parsed_sections), add_expected_dict)
add_expected_dict = {
'default': {
("test", "taken"),
("key", "only_in_default"),
("default_key1", "single_value"),
("default_key2", "single_value"),
("default_key3", "first_value,second_value")
},
'section1': {
("key1", "value1,value2")
},
'section2': {
("key2", "only_this_value"),
("key2a", "k2a")
},
'additional': {
("key", "value")
}
}
self.assertEqual(self.dict_from_sections(add_parsed_sections),
add_expected_dict)

# reparse
new_parsed_sections = self.uut.reparse(['-S', 'new_key=value'])
Expand Down

0 comments on commit d01620f

Please sign in to comment.