dtoc: Update fdt tests to increase code coverage
At present only some of the fdt functionality is tested. Add more tests to
cover the rest of it. Also turn on test coverage, which is now 100% with
a small exclusion for a Python 3 feature.
Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/tools/dtoc/fdt_util.py b/tools/dtoc/fdt_util.py
index 2d09649..88fc318 100644
--- a/tools/dtoc/fdt_util.py
+++ b/tools/dtoc/fdt_util.py
@@ -13,6 +13,14 @@
import command
import tools
+VERSION3 = sys.version_info > (3, 0)
+
+def get_plain_bytes(val):
+ """Handle Python 3 strings"""
+ if isinstance(val, bytes):
+ val = val.decode('utf-8')
+ return val.encode('raw_unicode_escape')
+
def fdt32_to_cpu(val):
"""Convert a device tree cell to an integer
@@ -22,10 +30,9 @@
Return:
A native-endian integer value
"""
- if sys.version_info > (3, 0):
- if isinstance(val, bytes):
- val = val.decode('utf-8')
- val = val.encode('raw_unicode_escape')
+ if VERSION3:
+ # This code is not reached in Python 2
+ val = get_plain_bytes(val) # pragma: no cover
return struct.unpack('>I', val)[0]
def fdt_cells_to_cpu(val, cells):
@@ -86,10 +93,10 @@
prop = node.props.get(propname)
if not prop:
return default
- value = fdt32_to_cpu(prop.value)
- if type(value) == type(list):
- raise ValueError("Node '%s' property '%' has list value: expecting"
+ if isinstance(prop.value, list):
+ raise ValueError("Node '%s' property '%s' has list value: expecting "
"a single integer" % (node.name, propname))
+ value = fdt32_to_cpu(prop.value)
return value
def GetString(node, propname, default=None):
@@ -97,8 +104,8 @@
if not prop:
return default
value = prop.value
- if type(value) == type(list):
- raise ValueError("Node '%s' property '%' has list value: expecting"
+ if isinstance(value, list):
+ raise ValueError("Node '%s' property '%s' has list value: expecting "
"a single string" % (node.name, propname))
return value