CMake: pro2cmake.py: Use properties
Make use of @property to make code a bit nicer. Change-Id: Iff0bfed57874cf13b7e5f85acde2660a397933d7 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
parent
328de7aab9
commit
194022d3a6
@ -206,7 +206,7 @@ class RemoveOperation(Operation):
|
|||||||
return '-({})'.format(self._dump())
|
return '-({})'.format(self._dump())
|
||||||
|
|
||||||
|
|
||||||
class Scope:
|
class Scope(object):
|
||||||
def __init__(self, *,
|
def __init__(self, *,
|
||||||
parent_scope: typing.Optional[Scope],
|
parent_scope: typing.Optional[Scope],
|
||||||
file: typing.Optional[str] = None, condition: str = '',
|
file: typing.Optional[str] = None, condition: str = '',
|
||||||
@ -249,12 +249,15 @@ class Scope:
|
|||||||
else:
|
else:
|
||||||
self._operations[key] = other._operations[key]
|
self._operations[key] = other._operations[key]
|
||||||
|
|
||||||
|
@property
|
||||||
def parent(self) -> typing.Optional[Scope]:
|
def parent(self) -> typing.Optional[Scope]:
|
||||||
return self._parent
|
return self._parent
|
||||||
|
|
||||||
|
@property
|
||||||
def basedir(self) -> str:
|
def basedir(self) -> str:
|
||||||
return self._basedir
|
return self._basedir
|
||||||
|
|
||||||
|
@property
|
||||||
def currentdir(self) -> str:
|
def currentdir(self) -> str:
|
||||||
return self._currentdir
|
return self._currentdir
|
||||||
|
|
||||||
@ -276,8 +279,8 @@ class Scope:
|
|||||||
if key in ('HEADERS', 'SOURCES', 'INCLUDEPATH', 'RESOURCES',) \
|
if key in ('HEADERS', 'SOURCES', 'INCLUDEPATH', 'RESOURCES',) \
|
||||||
or key.endswith('_HEADERS') \
|
or key.endswith('_HEADERS') \
|
||||||
or key.endswith('_SOURCES'):
|
or key.endswith('_SOURCES'):
|
||||||
value = [map_to_file(v, scope.basedir(),
|
value = [map_to_file(v, scope.basedir,
|
||||||
scope.currentdir()) for v in value]
|
scope.currentdir) for v in value]
|
||||||
|
|
||||||
if operation == '=':
|
if operation == '=':
|
||||||
scope._append_operation(key, SetOperation(value))
|
scope._append_operation(key, SetOperation(value))
|
||||||
@ -298,12 +301,12 @@ class Scope:
|
|||||||
if condition:
|
if condition:
|
||||||
Scope.FromDict(scope, file,
|
Scope.FromDict(scope, file,
|
||||||
statement.get('statements'), condition,
|
statement.get('statements'), condition,
|
||||||
scope.basedir())
|
scope.basedir)
|
||||||
|
|
||||||
else_statements = statement.get('else_statements')
|
else_statements = statement.get('else_statements')
|
||||||
if else_statements:
|
if else_statements:
|
||||||
Scope.FromDict(scope, file, else_statements,
|
Scope.FromDict(scope, file, else_statements,
|
||||||
'NOT ' + condition, scope.basedir())
|
'NOT ' + condition, scope.basedir)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
loaded = statement.get('loaded')
|
loaded = statement.get('loaded')
|
||||||
@ -321,8 +324,8 @@ class Scope:
|
|||||||
scope._append_operation('_INCLUDED',
|
scope._append_operation('_INCLUDED',
|
||||||
UniqueAddOperation(
|
UniqueAddOperation(
|
||||||
map_to_file(included,
|
map_to_file(included,
|
||||||
scope.basedir(),
|
scope.basedir,
|
||||||
scope.currentdir())))
|
scope.currentdir)))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
return scope
|
return scope
|
||||||
@ -333,26 +336,32 @@ class Scope:
|
|||||||
else:
|
else:
|
||||||
self._operations[key] = [op, ]
|
self._operations[key] = [op, ]
|
||||||
|
|
||||||
|
@property
|
||||||
def file(self) -> str:
|
def file(self) -> str:
|
||||||
return self._file or ''
|
return self._file or ''
|
||||||
|
|
||||||
|
@property
|
||||||
def cMakeListsFile(self) -> str:
|
def cMakeListsFile(self) -> str:
|
||||||
assert self.basedir()
|
assert self.basedir
|
||||||
return os.path.join(self.basedir(), 'CMakeLists.txt')
|
return os.path.join(self.basedir, 'CMakeLists.txt')
|
||||||
|
|
||||||
|
@property
|
||||||
def condition(self) -> str:
|
def condition(self) -> str:
|
||||||
return self._condition
|
return self._condition
|
||||||
|
|
||||||
def set_total_condition(self, condition: str) -> None:
|
@property
|
||||||
self._total_condition = condition
|
|
||||||
|
|
||||||
def total_condition(self) -> typing.Optional[str]:
|
def total_condition(self) -> typing.Optional[str]:
|
||||||
return self._total_condition
|
return self._total_condition
|
||||||
|
|
||||||
|
@total_condition.setter
|
||||||
|
def total_condition(self, condition: str) -> None:
|
||||||
|
self._total_condition = condition
|
||||||
|
|
||||||
def _add_child(self, scope: 'Scope') -> None:
|
def _add_child(self, scope: 'Scope') -> None:
|
||||||
scope._parent = self
|
scope._parent = self
|
||||||
self._children.append(scope)
|
self._children.append(scope)
|
||||||
|
|
||||||
|
@property
|
||||||
def children(self) -> typing.List['Scope']:
|
def children(self) -> typing.List['Scope']:
|
||||||
return self._children
|
return self._children
|
||||||
|
|
||||||
@ -374,9 +383,11 @@ class Scope:
|
|||||||
for c in self._children:
|
for c in self._children:
|
||||||
c.dump(indent=indent + 1)
|
c.dump(indent=indent + 1)
|
||||||
|
|
||||||
|
@property
|
||||||
def keys(self):
|
def keys(self):
|
||||||
return self._operations.keys()
|
return self._operations.keys()
|
||||||
|
|
||||||
|
@property
|
||||||
def visited_keys(self):
|
def visited_keys(self):
|
||||||
return self._visited_keys
|
return self._visited_keys
|
||||||
|
|
||||||
@ -395,17 +406,20 @@ class Scope:
|
|||||||
assert len(v) == 1
|
assert len(v) == 1
|
||||||
return v[0]
|
return v[0]
|
||||||
|
|
||||||
def getTemplate(self) -> str:
|
@property
|
||||||
|
def TEMPLATE(self) -> str:
|
||||||
return self.getString('TEMPLATE', 'app')
|
return self.getString('TEMPLATE', 'app')
|
||||||
|
|
||||||
def _rawTemplate(self) -> str:
|
def _rawTemplate(self) -> str:
|
||||||
return self.getString('TEMPLATE')
|
return self.getString('TEMPLATE')
|
||||||
|
|
||||||
def getTarget(self) -> str:
|
@property
|
||||||
|
def TARGET(self) -> str:
|
||||||
return self.getString('TARGET') \
|
return self.getString('TARGET') \
|
||||||
or os.path.splitext(os.path.basename(self.file()))[0]
|
or os.path.splitext(os.path.basename(self.file))[0]
|
||||||
|
|
||||||
def getIncludes(self) -> typing.List[str]:
|
@property
|
||||||
|
def _INCLUDED(self) -> typing.List[str]:
|
||||||
return self.get('_INCLUDED', [])
|
return self.get('_INCLUDED', [])
|
||||||
|
|
||||||
|
|
||||||
@ -569,10 +583,10 @@ def map_condition(condition: str) -> str:
|
|||||||
|
|
||||||
def handle_subdir(scope: Scope, cm_fh: typing.IO[str], *,
|
def handle_subdir(scope: Scope, cm_fh: typing.IO[str], *,
|
||||||
indent: int = 0) -> None:
|
indent: int = 0) -> None:
|
||||||
assert scope.getTemplate() == 'subdirs'
|
assert scope.TEMPLATE == 'subdirs'
|
||||||
ind = ' ' * indent
|
ind = ' ' * indent
|
||||||
for sd in scope.get('SUBDIRS', []):
|
for sd in scope.get('SUBDIRS', []):
|
||||||
full_sd = os.path.join(scope.basedir(), sd)
|
full_sd = os.path.join(scope.basedir, sd)
|
||||||
if os.path.isdir(full_sd):
|
if os.path.isdir(full_sd):
|
||||||
cm_fh.write('{}add_subdirectory({})\n'.format(ind, sd))
|
cm_fh.write('{}add_subdirectory({})\n'.format(ind, sd))
|
||||||
elif os.path.isfile(full_sd):
|
elif os.path.isfile(full_sd):
|
||||||
@ -580,7 +594,7 @@ def handle_subdir(scope: Scope, cm_fh: typing.IO[str], *,
|
|||||||
subdir_scope \
|
subdir_scope \
|
||||||
= Scope.FromDict(scope, full_sd,
|
= Scope.FromDict(scope, full_sd,
|
||||||
subdir_result.asDict().get('statements'),
|
subdir_result.asDict().get('statements'),
|
||||||
'', scope.basedir())
|
'', scope.basedir)
|
||||||
|
|
||||||
cmakeify_scope(subdir_scope, cm_fh, indent=indent + 1)
|
cmakeify_scope(subdir_scope, cm_fh, indent=indent + 1)
|
||||||
elif sd.startswith('-'):
|
elif sd.startswith('-'):
|
||||||
@ -590,7 +604,7 @@ def handle_subdir(scope: Scope, cm_fh: typing.IO[str], *,
|
|||||||
print(' XXXX: SUBDIR {} in {}: Not found.'.format(sd, scope))
|
print(' XXXX: SUBDIR {} in {}: Not found.'.format(sd, scope))
|
||||||
|
|
||||||
for c in scope.children():
|
for c in scope.children():
|
||||||
cond = c.condition()
|
cond = c.condition
|
||||||
if cond == 'else':
|
if cond == 'else':
|
||||||
cm_fh.write('\n{}else()\n'.format(ind))
|
cm_fh.write('\n{}else()\n'.format(ind))
|
||||||
elif cond:
|
elif cond:
|
||||||
@ -670,7 +684,7 @@ def write_sources_section(cm_fh: typing.IO[str], scope: Scope, *,
|
|||||||
|
|
||||||
vpath = scope.get('VPATH')
|
vpath = scope.get('VPATH')
|
||||||
|
|
||||||
sources = [map_source_to_cmake(s, scope.basedir(), vpath) for s in sources]
|
sources = [map_source_to_cmake(s, scope.basedir, vpath) for s in sources]
|
||||||
if sources:
|
if sources:
|
||||||
cm_fh.write('{} SOURCES\n'.format(ind))
|
cm_fh.write('{} SOURCES\n'.format(ind))
|
||||||
for l in sort_sources(sources):
|
for l in sort_sources(sources):
|
||||||
@ -715,7 +729,7 @@ def write_sources_section(cm_fh: typing.IO[str], scope: Scope, *,
|
|||||||
cm_fh.write('{} {}\n'.format(ind, d))
|
cm_fh.write('{} {}\n'.format(ind, d))
|
||||||
is_framework = False
|
is_framework = False
|
||||||
|
|
||||||
return set(scope.keys()) - scope.visited_keys()
|
return set(scope.keys) - scope.visited_keys
|
||||||
|
|
||||||
|
|
||||||
def is_simple_condition(condition: str) -> bool:
|
def is_simple_condition(condition: str) -> bool:
|
||||||
@ -878,11 +892,11 @@ def simplify_condition(condition: str) -> str:
|
|||||||
|
|
||||||
def recursive_evaluate_scope(scope: Scope, parent_condition: str = '',
|
def recursive_evaluate_scope(scope: Scope, parent_condition: str = '',
|
||||||
previous_condition: str = '') -> str:
|
previous_condition: str = '') -> str:
|
||||||
current_condition = scope.condition()
|
current_condition = scope.condition
|
||||||
total_condition = current_condition
|
total_condition = current_condition
|
||||||
if total_condition == 'else':
|
if total_condition == 'else':
|
||||||
assert previous_condition, \
|
assert previous_condition, \
|
||||||
"Else branch without previous condition in: %s" % scope.file()
|
"Else branch without previous condition in: %s" % scope.file
|
||||||
if previous_condition.startswith('NOT '):
|
if previous_condition.startswith('NOT '):
|
||||||
total_condition = previous_condition[4:]
|
total_condition = previous_condition[4:]
|
||||||
elif is_simple_condition(previous_condition):
|
elif is_simple_condition(previous_condition):
|
||||||
@ -907,10 +921,10 @@ def recursive_evaluate_scope(scope: Scope, parent_condition: str = '',
|
|||||||
total_condition = '({}) AND ({})'.format(parent_condition,
|
total_condition = '({}) AND ({})'.format(parent_condition,
|
||||||
total_condition)
|
total_condition)
|
||||||
|
|
||||||
scope.set_total_condition(simplify_condition(total_condition))
|
scope.total_condition = simplify_condition(total_condition)
|
||||||
|
|
||||||
prev_condition = ''
|
prev_condition = ''
|
||||||
for c in scope.children():
|
for c in scope.children:
|
||||||
prev_condition = recursive_evaluate_scope(c, total_condition,
|
prev_condition = recursive_evaluate_scope(c, total_condition,
|
||||||
prev_condition)
|
prev_condition)
|
||||||
|
|
||||||
@ -930,7 +944,7 @@ def write_extend_target(cm_fh: typing.IO[str], target: str,
|
|||||||
|
|
||||||
extend_scope = '\n{}extend_target({} CONDITION {}\n' \
|
extend_scope = '\n{}extend_target({} CONDITION {}\n' \
|
||||||
'{}{})\n'.format(spaces(indent), target,
|
'{}{})\n'.format(spaces(indent), target,
|
||||||
scope.total_condition(),
|
scope.total_condition,
|
||||||
extend_qt_string, ignored_keys_report)
|
extend_qt_string, ignored_keys_report)
|
||||||
|
|
||||||
if not extend_qt_string:
|
if not extend_qt_string:
|
||||||
@ -948,7 +962,7 @@ def write_extend_target(cm_fh: typing.IO[str], target: str,
|
|||||||
|
|
||||||
def flatten_scopes(scope: Scope) -> typing.List[Scope]:
|
def flatten_scopes(scope: Scope) -> typing.List[Scope]:
|
||||||
result = [scope] # type: typing.List[Scope]
|
result = [scope] # type: typing.List[Scope]
|
||||||
for c in scope.children():
|
for c in scope.children:
|
||||||
result += flatten_scopes(c)
|
result += flatten_scopes(c)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@ -959,7 +973,7 @@ def merge_scopes(scopes: typing.List[Scope]) -> typing.List[Scope]:
|
|||||||
# Merge scopes with their parents:
|
# Merge scopes with their parents:
|
||||||
known_scopes = {} # type: typing.Mapping[str, Scope]
|
known_scopes = {} # type: typing.Mapping[str, Scope]
|
||||||
for scope in scopes:
|
for scope in scopes:
|
||||||
total_condition = scope.total_condition()
|
total_condition = scope.total_condition
|
||||||
if total_condition == 'OFF':
|
if total_condition == 'OFF':
|
||||||
# ignore this scope entirely!
|
# ignore this scope entirely!
|
||||||
pass
|
pass
|
||||||
@ -989,7 +1003,7 @@ def write_main_part(cm_fh: typing.IO[str], name: str, typename: str,
|
|||||||
print("xxxxxx {} scopes, {} after merging!".format(total_scopes, len(scopes)))
|
print("xxxxxx {} scopes, {} after merging!".format(total_scopes, len(scopes)))
|
||||||
|
|
||||||
assert len(scopes)
|
assert len(scopes)
|
||||||
assert scopes[0].total_condition() == 'ON'
|
assert scopes[0].total_condition == 'ON'
|
||||||
|
|
||||||
# Now write out the scopes:
|
# Now write out the scopes:
|
||||||
write_header(cm_fh, name, typename, indent=indent)
|
write_header(cm_fh, name, typename, indent=indent)
|
||||||
@ -1019,7 +1033,7 @@ def write_main_part(cm_fh: typing.IO[str], name: str, typename: str,
|
|||||||
|
|
||||||
def write_module(cm_fh: typing.IO[str], scope: Scope, *,
|
def write_module(cm_fh: typing.IO[str], scope: Scope, *,
|
||||||
indent: int = 0) -> None:
|
indent: int = 0) -> None:
|
||||||
module_name = scope.getTarget()
|
module_name = scope.TARGET
|
||||||
assert module_name.startswith('Qt')
|
assert module_name.startswith('Qt')
|
||||||
|
|
||||||
extra = []
|
extra = []
|
||||||
@ -1034,14 +1048,14 @@ def write_module(cm_fh: typing.IO[str], scope: Scope, *,
|
|||||||
|
|
||||||
if 'qt_tracepoints' in scope.get('CONFIG'):
|
if 'qt_tracepoints' in scope.get('CONFIG'):
|
||||||
tracepoints = map_to_file(scope.getString('TRACEPOINT_PROVIDER'),
|
tracepoints = map_to_file(scope.getString('TRACEPOINT_PROVIDER'),
|
||||||
scope.basedir(), scope.currentdir())
|
scope.basedir, scope.currentdir)
|
||||||
cm_fh.write('\n\n{}qt_create_tracepoints({} {})\n'
|
cm_fh.write('\n\n{}qt_create_tracepoints({} {})\n'
|
||||||
.format(spaces(indent), module_name[2:], tracepoints))
|
.format(spaces(indent), module_name[2:], tracepoints))
|
||||||
|
|
||||||
|
|
||||||
def write_tool(cm_fh: typing.IO[str], scope: Scope, *,
|
def write_tool(cm_fh: typing.IO[str], scope: Scope, *,
|
||||||
indent: int = 0) -> None:
|
indent: int = 0) -> None:
|
||||||
tool_name = scope.getTarget()
|
tool_name = scope.TARGET
|
||||||
|
|
||||||
write_main_part(cm_fh, tool_name, 'Tool', 'add_qt_tool', scope,
|
write_main_part(cm_fh, tool_name, 'Tool', 'add_qt_tool', scope,
|
||||||
indent=indent, known_libraries={'Qt::Core', })
|
indent=indent, known_libraries={'Qt::Core', })
|
||||||
@ -1049,7 +1063,7 @@ def write_tool(cm_fh: typing.IO[str], scope: Scope, *,
|
|||||||
|
|
||||||
def write_test(cm_fh: typing.IO[str], scope: Scope, *,
|
def write_test(cm_fh: typing.IO[str], scope: Scope, *,
|
||||||
indent: int = 0) -> None:
|
indent: int = 0) -> None:
|
||||||
test_name = scope.getTarget()
|
test_name = scope.TARGET
|
||||||
assert test_name
|
assert test_name
|
||||||
|
|
||||||
write_main_part(cm_fh, test_name, 'Test', 'add_qt_test', scope,
|
write_main_part(cm_fh, test_name, 'Test', 'add_qt_test', scope,
|
||||||
@ -1058,7 +1072,7 @@ def write_test(cm_fh: typing.IO[str], scope: Scope, *,
|
|||||||
|
|
||||||
def write_binary(cm_fh: typing.IO[str], scope: Scope,
|
def write_binary(cm_fh: typing.IO[str], scope: Scope,
|
||||||
gui: bool = False, *, indent: int = 0) -> None:
|
gui: bool = False, *, indent: int = 0) -> None:
|
||||||
binary_name = scope.getTarget()
|
binary_name = scope.TARGET
|
||||||
assert binary_name
|
assert binary_name
|
||||||
|
|
||||||
extra = ['GUI', ] if gui else []
|
extra = ['GUI', ] if gui else []
|
||||||
@ -1068,7 +1082,7 @@ def write_binary(cm_fh: typing.IO[str], scope: Scope,
|
|||||||
|
|
||||||
|
|
||||||
def write_plugin(cm_fh, scope, *, indent: int = 0):
|
def write_plugin(cm_fh, scope, *, indent: int = 0):
|
||||||
plugin_name = scope.getTarget()
|
plugin_name = scope.TARGET
|
||||||
assert plugin_name
|
assert plugin_name
|
||||||
|
|
||||||
write_main_part(cm_fh, plugin_name, 'Plugin', 'add_qt_plugin', scope,
|
write_main_part(cm_fh, plugin_name, 'Plugin', 'add_qt_plugin', scope,
|
||||||
@ -1077,9 +1091,9 @@ def write_plugin(cm_fh, scope, *, indent: int = 0):
|
|||||||
|
|
||||||
def handle_app_or_lib(scope: Scope, cm_fh: typing.IO[str], *,
|
def handle_app_or_lib(scope: Scope, cm_fh: typing.IO[str], *,
|
||||||
indent: int = 0) -> None:
|
indent: int = 0) -> None:
|
||||||
assert scope.getTemplate() in ('app', 'lib')
|
assert scope.TEMPLATE in ('app', 'lib')
|
||||||
|
|
||||||
is_lib = scope.getTemplate() == 'lib'
|
is_lib = scope.TEMPLATE == 'lib'
|
||||||
is_plugin = any('qt_plugin' == s for s in scope.get('_LOADED', []))
|
is_plugin = any('qt_plugin' == s for s in scope.get('_LOADED', []))
|
||||||
|
|
||||||
if is_lib or 'qt_module' in scope.get('_LOADED', []):
|
if is_lib or 'qt_module' in scope.get('_LOADED', []):
|
||||||
@ -1100,36 +1114,36 @@ def handle_app_or_lib(scope: Scope, cm_fh: typing.IO[str], *,
|
|||||||
if docs:
|
if docs:
|
||||||
cm_fh.write("\n{}add_qt_docs({})\n"
|
cm_fh.write("\n{}add_qt_docs({})\n"
|
||||||
.format(spaces(indent),
|
.format(spaces(indent),
|
||||||
map_to_file(docs, scope.basedir(),
|
map_to_file(docs, scope.basedir,
|
||||||
scope.currentdir())))
|
scope.currentdir)))
|
||||||
|
|
||||||
|
|
||||||
def cmakeify_scope(scope: Scope, cm_fh: typing.IO[str], *,
|
def cmakeify_scope(scope: Scope, cm_fh: typing.IO[str], *,
|
||||||
indent: int = 0) -> None:
|
indent: int = 0) -> None:
|
||||||
template = scope.getTemplate()
|
template = scope.TEMPLATE
|
||||||
if template == 'subdirs':
|
if template == 'subdirs':
|
||||||
handle_subdir(scope, cm_fh, indent=indent)
|
handle_subdir(scope, cm_fh, indent=indent)
|
||||||
elif template in ('app', 'lib'):
|
elif template in ('app', 'lib'):
|
||||||
handle_app_or_lib(scope, cm_fh, indent=indent)
|
handle_app_or_lib(scope, cm_fh, indent=indent)
|
||||||
else:
|
else:
|
||||||
print(' XXXX: {}: Template type {} not yet supported.'
|
print(' XXXX: {}: Template type {} not yet supported.'
|
||||||
.format(scope.file(), template))
|
.format(scope.file, template))
|
||||||
|
|
||||||
|
|
||||||
def generate_cmakelists(scope: Scope) -> None:
|
def generate_cmakelists(scope: Scope) -> None:
|
||||||
with open(scope.cMakeListsFile(), 'w') as cm_fh:
|
with open(scope.cMakeListsFile, 'w') as cm_fh:
|
||||||
assert scope.file()
|
assert scope.file
|
||||||
cm_fh.write('# Generated from {}.\n\n'
|
cm_fh.write('# Generated from {}.\n\n'
|
||||||
.format(os.path.basename(scope.file())))
|
.format(os.path.basename(scope.file)))
|
||||||
cmakeify_scope(scope, cm_fh)
|
cmakeify_scope(scope, cm_fh)
|
||||||
|
|
||||||
|
|
||||||
def do_include(scope: Scope, *, debug: bool = False) -> None:
|
def do_include(scope: Scope, *, debug: bool = False) -> None:
|
||||||
for c in scope.children():
|
for c in scope.children:
|
||||||
do_include(c)
|
do_include(c)
|
||||||
|
|
||||||
for i in scope.getIncludes():
|
for i in scope._INCLUDED:
|
||||||
dir = scope.basedir()
|
dir = scope.basedir
|
||||||
include_file = i
|
include_file = i
|
||||||
if not include_file:
|
if not include_file:
|
||||||
continue
|
continue
|
||||||
|
@ -48,7 +48,7 @@ def _new_scope(*, parent_scope=None, condition='', **kwargs) -> Scope:
|
|||||||
|
|
||||||
def _evaluate_scopes(scopes: ScopeList) -> ScopeList:
|
def _evaluate_scopes(scopes: ScopeList) -> ScopeList:
|
||||||
for s in scopes:
|
for s in scopes:
|
||||||
if not s.parent():
|
if not s.parent:
|
||||||
recursive_evaluate_scope(s)
|
recursive_evaluate_scope(s)
|
||||||
return scopes
|
return scopes
|
||||||
|
|
||||||
@ -73,13 +73,13 @@ def test_evaluate_child_scope():
|
|||||||
input_scope = scope
|
input_scope = scope
|
||||||
recursive_evaluate_scope(scope)
|
recursive_evaluate_scope(scope)
|
||||||
|
|
||||||
assert scope.total_condition() == 'QT_FEATURE_foo'
|
assert scope.total_condition == 'QT_FEATURE_foo'
|
||||||
assert len(scope.children()) == 1
|
assert len(scope.children) == 1
|
||||||
assert scope.getString('test1') == 'bar'
|
assert scope.getString('test1') == 'bar'
|
||||||
assert scope.getString('test2', 'not found') == 'not found'
|
assert scope.getString('test2', 'not found') == 'not found'
|
||||||
|
|
||||||
child = scope.children()[0]
|
child = scope.children[0]
|
||||||
assert child.total_condition() == 'QT_FEATURE_bar AND QT_FEATURE_foo'
|
assert child.total_condition == 'QT_FEATURE_bar AND QT_FEATURE_foo'
|
||||||
assert child.getString('test1', 'not found') == 'not found'
|
assert child.getString('test1', 'not found') == 'not found'
|
||||||
assert child.getString('test2') == 'bar'
|
assert child.getString('test2') == 'bar'
|
||||||
|
|
||||||
@ -92,20 +92,20 @@ def test_evaluate_two_child_scopes():
|
|||||||
input_scope = scope
|
input_scope = scope
|
||||||
recursive_evaluate_scope(scope)
|
recursive_evaluate_scope(scope)
|
||||||
|
|
||||||
assert scope.total_condition() == 'QT_FEATURE_foo'
|
assert scope.total_condition == 'QT_FEATURE_foo'
|
||||||
assert len(scope.children()) == 2
|
assert len(scope.children) == 2
|
||||||
assert scope.getString('test1') == 'bar'
|
assert scope.getString('test1') == 'bar'
|
||||||
assert scope.getString('test2', 'not found') == 'not found'
|
assert scope.getString('test2', 'not found') == 'not found'
|
||||||
assert scope.getString('test3', 'not found') == 'not found'
|
assert scope.getString('test3', 'not found') == 'not found'
|
||||||
|
|
||||||
child1 = scope.children()[0]
|
child1 = scope.children[0]
|
||||||
assert child1.total_condition() == 'QT_FEATURE_bar AND QT_FEATURE_foo'
|
assert child1.total_condition == 'QT_FEATURE_bar AND QT_FEATURE_foo'
|
||||||
assert child1.getString('test1', 'not found') == 'not found'
|
assert child1.getString('test1', 'not found') == 'not found'
|
||||||
assert child1.getString('test2') == 'bar'
|
assert child1.getString('test2') == 'bar'
|
||||||
assert child1.getString('test3', 'not found') == 'not found'
|
assert child1.getString('test3', 'not found') == 'not found'
|
||||||
|
|
||||||
child2 = scope.children()[1]
|
child2 = scope.children[1]
|
||||||
assert child2.total_condition() == 'QT_FEATURE_buz AND QT_FEATURE_foo'
|
assert child2.total_condition == 'QT_FEATURE_buz AND QT_FEATURE_foo'
|
||||||
assert child2.getString('test1', 'not found') == 'not found'
|
assert child2.getString('test1', 'not found') == 'not found'
|
||||||
assert child2.getString('test2') == ''
|
assert child2.getString('test2') == ''
|
||||||
assert child2.getString('test3', 'not found') == 'buz'
|
assert child2.getString('test3', 'not found') == 'buz'
|
||||||
@ -119,20 +119,20 @@ def test_evaluate_else_child_scopes():
|
|||||||
input_scope = scope
|
input_scope = scope
|
||||||
recursive_evaluate_scope(scope)
|
recursive_evaluate_scope(scope)
|
||||||
|
|
||||||
assert scope.total_condition() == 'QT_FEATURE_foo'
|
assert scope.total_condition == 'QT_FEATURE_foo'
|
||||||
assert len(scope.children()) == 2
|
assert len(scope.children) == 2
|
||||||
assert scope.getString('test1') == 'bar'
|
assert scope.getString('test1') == 'bar'
|
||||||
assert scope.getString('test2', 'not found') == 'not found'
|
assert scope.getString('test2', 'not found') == 'not found'
|
||||||
assert scope.getString('test3', 'not found') == 'not found'
|
assert scope.getString('test3', 'not found') == 'not found'
|
||||||
|
|
||||||
child1 = scope.children()[0]
|
child1 = scope.children[0]
|
||||||
assert child1.total_condition() == 'QT_FEATURE_bar AND QT_FEATURE_foo'
|
assert child1.total_condition == 'QT_FEATURE_bar AND QT_FEATURE_foo'
|
||||||
assert child1.getString('test1', 'not found') == 'not found'
|
assert child1.getString('test1', 'not found') == 'not found'
|
||||||
assert child1.getString('test2') == 'bar'
|
assert child1.getString('test2') == 'bar'
|
||||||
assert child1.getString('test3', 'not found') == 'not found'
|
assert child1.getString('test3', 'not found') == 'not found'
|
||||||
|
|
||||||
child2 = scope.children()[1]
|
child2 = scope.children[1]
|
||||||
assert child2.total_condition() == 'QT_FEATURE_foo AND NOT QT_FEATURE_bar'
|
assert child2.total_condition == 'QT_FEATURE_foo AND NOT QT_FEATURE_bar'
|
||||||
assert child2.getString('test1', 'not found') == 'not found'
|
assert child2.getString('test1', 'not found') == 'not found'
|
||||||
assert child2.getString('test2') == ''
|
assert child2.getString('test2') == ''
|
||||||
assert child2.getString('test3', 'not found') == 'buz'
|
assert child2.getString('test3', 'not found') == 'buz'
|
||||||
@ -195,7 +195,7 @@ def test_merge_two_scopes_with_same_condition():
|
|||||||
|
|
||||||
assert len(result) == 1
|
assert len(result) == 1
|
||||||
r0 = result[0]
|
r0 = result[0]
|
||||||
assert r0.total_condition() == 'QT_FEATURE_bar'
|
assert r0.total_condition == 'QT_FEATURE_bar'
|
||||||
assert r0.getString('test') == 'foo'
|
assert r0.getString('test') == 'foo'
|
||||||
assert r0.getString('test2') == 'bar'
|
assert r0.getString('test2') == 'bar'
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ def test_merge_three_scopes_two_with_same_condition():
|
|||||||
|
|
||||||
assert len(result) == 2
|
assert len(result) == 2
|
||||||
r0 = result[0]
|
r0 = result[0]
|
||||||
assert r0.total_condition() == 'QT_FEATURE_bar'
|
assert r0.total_condition == 'QT_FEATURE_bar'
|
||||||
assert r0.getString('test') == 'foo'
|
assert r0.getString('test') == 'foo'
|
||||||
assert r0.getString('test2') == 'bar'
|
assert r0.getString('test2') == 'bar'
|
||||||
|
|
||||||
@ -259,8 +259,8 @@ def test_merge_parent_child_scopes_with_same_conditions():
|
|||||||
|
|
||||||
assert len(result) == 1
|
assert len(result) == 1
|
||||||
r0 = result[0]
|
r0 = result[0]
|
||||||
assert r0.parent() == None
|
assert r0.parent == None
|
||||||
assert r0.total_condition() == 'FOO AND bar'
|
assert r0.total_condition == 'FOO AND bar'
|
||||||
assert r0.getString('test1') == 'parent'
|
assert r0.getString('test1') == 'parent'
|
||||||
assert r0.getString('test2') == 'child'
|
assert r0.getString('test2') == 'child'
|
||||||
|
|
||||||
@ -275,8 +275,8 @@ def test_merge_parent_child_scopes_with_on_child_condition():
|
|||||||
|
|
||||||
assert len(result) == 1
|
assert len(result) == 1
|
||||||
r0 = result[0]
|
r0 = result[0]
|
||||||
assert r0.parent() == None
|
assert r0.parent == None
|
||||||
assert r0.total_condition() == 'FOO AND bar'
|
assert r0.total_condition == 'FOO AND bar'
|
||||||
assert r0.getString('test1') == 'parent'
|
assert r0.getString('test1') == 'parent'
|
||||||
assert r0.getString('test2') == 'child'
|
assert r0.getString('test2') == 'child'
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user