dtlib: allow dangling aliases with DT(..., force=True)

As a first step towards being more forgiving on invalid inputs, allow
string-valued aliases properties that do not point to valid nodes when
the user requests permissiveness.

Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
This commit is contained in:
Martí Bolívar 2021-05-06 16:25:33 -07:00 committed by Christopher Friedt
commit 15db98a400
2 changed files with 24 additions and 5 deletions

View file

@ -1684,8 +1684,15 @@ class DT:
_err("/aliases: alias property name '{}' should include "
"only characters from [0-9a-z-]".format(prop.name))
# Property.to_path() already checks that the node exists
# Property.to_path() checks that the node exists, has
# the right type, etc. Swallow errors for invalid
# aliases with self._force.
try:
alias2node[prop.name] = prop.to_path()
except DTError:
if self._force:
continue
raise
self.alias2node = alias2node

View file

@ -24,13 +24,15 @@ from devicetree import dtlib
# - to run a particular test function or functions, use
# '-k test_function_pattern_goes_here'
def parse(dts, include_path=()):
'''Parse a DTS string 'dts', using the given include path.'''
def parse(dts, include_path=(), **kwargs):
'''Parse a DTS string 'dts', using the given include path.
Any kwargs are passed on to DT().'''
fd, path = tempfile.mkstemp(prefix='pytest-', suffix='.dts')
try:
os.write(fd, dts.encode('utf-8'))
return dtlib.DT(path, include_path)
return dtlib.DT(path, include_path, **kwargs)
finally:
os.close(fd)
os.unlink(path)
@ -2250,3 +2252,13 @@ l1: l2: &foo {
/ {
};
""")
def test_dangling_alias():
dt = parse('''
/dts-v1/;
/ {
aliases { foo = "/missing"; };
};
''', force=True)
assert dt.get_node('/aliases').props['foo'].to_string() == '/missing'