<div dir="ltr">Okay, the implementation makes sense and I see that it works.<div><br></div><div>However, isn't the whole issue stemming from the fact that the currently existing get_overall_result() function calls max() on self.children, and self.children (the result objects) are IntEnum enums which are ordered in ascending order, starting with PASS, then SKIP, then BLOCK, then FAIL, then ERROR? If we just swap PASS and SKIP, doesn't that make the existing logic (using the max() function call) work correctly?</div><div><br></div><div>I.e. re-order this class:<br><br>class Result(IntEnum):<br>    """The possible states that a setup, a teardown or a test case may end up in."""<br><br>    #:<br>    PASS = auto()<br>    #:<br>    SKIP = auto()<br>    #:<br>    BLOCK = auto()<br>    #:<br>    FAIL = auto()<br>    #:<br>    ERROR = auto()</div><div><br></div><div><br></div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Fri, Mar 13, 2026 at 2:22 PM Dean Marx <<a href="mailto:dmarx@iol.unh.edu">dmarx@iol.unh.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Update overall result of test suites such that<br>
when some cases skip and at least one passes,<br>
the result is a pass instead of a skip. Only<br>
when all cases skip is the result a skip.<br>
<br>
Bugzilla ID: 1899<br>
<br>
Signed-off-by: Dean Marx <<a href="mailto:dmarx@iol.unh.edu" target="_blank">dmarx@iol.unh.edu</a>><br>
Tested-by: Andrew Bailey <<a href="mailto:abailey@iol.unh.edu" target="_blank">abailey@iol.unh.edu</a>><br>
Reviewed-by: Andrew Bailey <<a href="mailto:abailey@iol.unh.edu" target="_blank">abailey@iol.unh.edu</a>><br>
---<br>
 dts/framework/test_result.py | 29 +++++++++++++++++------------<br>
 1 file changed, 17 insertions(+), 12 deletions(-)<br>
<br>
diff --git a/dts/framework/test_result.py b/dts/framework/test_result.py<br>
index c6bddc55a9..e05663f90e 100644<br>
--- a/dts/framework/test_result.py<br>
+++ b/dts/framework/test_result.py<br>
@@ -187,18 +187,23 @@ def serialize_model(self) -> dict[str, Any]:<br>
<br>
     def get_overall_result(self) -> ResultLeaf:<br>
         """The overall result of the underlying results."""<br>
-<br>
-        def extract_result(value: ResultNode | ResultLeaf) -> ResultLeaf:<br>
-            match value:<br>
-                case ResultNode():<br>
-                    return value.get_overall_result()<br>
-                case ResultLeaf():<br>
-                    return value<br>
-<br>
-        return max(<br>
-            (extract_result(child) for child in self.children),<br>
-            default=ResultLeaf(result=Result.PASS),<br>
-        )<br>
+        results = [<br>
+            child.get_overall_result() if isinstance(child, ResultNode) else child<br>
+            for child in self.children<br>
+        ]<br>
+        max_result = max(results, default=ResultLeaf(result=Result.PASS))<br>
+<br>
+        if max_result.result != Result.SKIP:<br>
+            return max_result<br>
+<br>
+        if any(<br>
+            r.result == Result.PASS<br>
+            for child, r in zip(self.children, results)<br>
+            if not (isinstance(child, ResultNode) and child.label in self.__ignore_steps)<br>
+        ):<br>
+            return ResultLeaf(result=Result.PASS)<br>
+<br>
+        return max_result<br>
<br>
     def make_summary(self) -> Counter[Result]:<br>
         """Make the summary of the underlying results while ignoring special nodes."""<br>
-- <br>
2.52.0<br>
<br>
</blockquote></div>