edtlib: test "last modified" semantic for included property specs

Make sure the property specs answered by the Binding.prop2specs API
do not all claim (PropertySpec.path) they were last modified
by the top-level binding.

Signed-off-by: Christophe Dufaza <chris@openmarl.org>
This commit is contained in:
Christophe Dufaza 2023-11-15 05:23:20 +01:00 committed by Carles Cufí
parent 8181bb513e
commit 70eaa61cb0
4 changed files with 47 additions and 0 deletions

View file

@ -0,0 +1,7 @@
# SPDX-License-Identifier: BSD-3-Clause
properties:
x:
type: int
y:
type: int

View file

@ -0,0 +1,7 @@
# SPDX-License-Identifier: BSD-3-Clause
include: base.yaml
properties:
x:
required: true

View file

@ -0,0 +1,21 @@
# SPDX-License-Identifier: BSD-3-Clause
description: |
Top-level binding file for testing included property spec paths.
base.yaml: specifies properties "x" and "y"
modified.yaml: includes base.yaml, modifies property "x"
top.yaml (this file): includes modified.yaml, specifies property "p"
From the top-level binding, we expect:
- "x" was last modified in modified.yaml
- "y" was last modified in base.yaml
- "p" was last modified in top.yaml
compatible: top-level
include: modified.yaml
properties:
p:
type: int

View file

@ -365,6 +365,18 @@ def test_include_filters():
assert set(child.prop2specs.keys()) == {'child-prop-1', 'child-prop-2',
'x', 'z'} # root level 'y' is blocked
def test_include_paths():
'''Test "last modified" semantic for included bindings paths.'''
fname2path = {'base.yaml': 'test-bindings-include/base.yaml',
'modified.yaml': 'test-bindings-include/modified.yaml'}
with from_here():
top = edtlib.Binding('test-bindings-include/top.yaml', fname2path)
assert 'modified.yaml' == os.path.basename(top.prop2specs["x"].path)
assert 'base.yaml' == os.path.basename(top.prop2specs["y"].path)
assert 'top.yaml' == os.path.basename(top.prop2specs["p"].path)
def test_bus():
'''Test 'bus:' and 'on-bus:' in bindings'''