pylibfdt: Support boolean properties

Boolean properties are unusual in that their presense or absence
indicates the value of the property. This makes them a little painful to
support using the existing getprop() support.

Add new methods to deal with booleans specifically.

Signed-off-by: Simon Glass <sjg@chromium.org>
Message-ID: <20230912182716.248253-1-sjg@chromium.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Simon Glass 2023-09-12 12:27:13 -06:00 committed by David Gibson
parent d774337275
commit 52157f13ef
3 changed files with 89 additions and 0 deletions

View file

@ -496,6 +496,39 @@ class PyLibfdtBasicTests(unittest.TestCase):
self.assertEqual(TEST_STRING_3,
self.fdt.getprop(node, prop).as_str())
def testHasProp(self):
"""Test that we can check if a node has a property"""
node = 0
self.assertFalse(self.fdt2.hasprop(node, 'missing'))
self.assertTrue(self.fdt2.hasprop(node, 'prop-bool'))
# Test a property with a non-empty value
self.assertTrue(self.fdt2.hasprop(node, 'prop-uint64'))
def testSetPropBool(self):
"""Test that we can update and create boolean properties"""
node = 0
prop = 'prop-bool'
# Make some space and then try setting a new boolean property
self.fdt.resize(self.fdt.totalsize() + 50)
self.fdt.hasprop(node, 'missing')
self.fdt.setprop_bool(node, 'missing', True)
self.assertTrue(self.fdt.hasprop(node, 'missing'))
# Trying toggling an existing boolean property. Do each operation twice
# to make sure that the behaviour is correct when setting the property
# to the same value.
self.assertTrue(self.fdt2.hasprop(node, prop))
self.fdt2.setprop_bool(node, prop, False)
self.assertFalse(self.fdt2.hasprop(node, prop))
self.fdt2.setprop_bool(node, prop, False)
self.assertFalse(self.fdt2.hasprop(node, prop))
self.fdt2.setprop_bool(node, prop, True)
self.assertTrue(self.fdt2.hasprop(node, prop))
self.fdt2.setprop_bool(node, prop, True)
self.assertTrue(self.fdt2.hasprop(node, prop))
def testSetName(self):
"""Test that we can update a node name"""
node = self.fdt.path_offset('/subnode@1')

View file

@ -12,4 +12,5 @@
prop-uint32-array = <0x1>, <0x98765432>, <0xdeadbeef>;
prop-int64-array = /bits/ 64 <0x100000000 0xfffffffffffffffe>;
prop-uint64-array = /bits/ 64 <0x100000000 0x1>;
prop-bool;
};