diff mbox series

[32/41] oeqa/core/tests: Add tests for the reported test result status

Message ID 20261115084845.701136-32-richard.purdie@linuxfoundation.org
State New
Headers show
Series [01/41] oeqa/loader: Drop code for pre python 3.5 | expand

Commit Message

Richard Purdie Nov. 15, 2026, 8:48 a.m. UTC
Check the status OETestResult reports for each kind of test outcome,
including setUpClass and setUpModule errors and skips, ahead of
reworking how results are tracked.

AI-Generated: Uses Claude Opus 5.5
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/lib/oeqa/core/tests/cases/results.py     | 49 +++++++++++++++++++
 .../oeqa/core/tests/cases/resultsmodule.py    | 15 ++++++
 meta/lib/oeqa/core/tests/test_runner.py       | 13 +++++
 3 files changed, 77 insertions(+)
 create mode 100644 meta/lib/oeqa/core/tests/cases/results.py
 create mode 100644 meta/lib/oeqa/core/tests/cases/resultsmodule.py
diff mbox series

Patch

diff --git a/meta/lib/oeqa/core/tests/cases/results.py b/meta/lib/oeqa/core/tests/cases/results.py
new file mode 100644
index 00000000000..363f3cd85fb
--- /dev/null
+++ b/meta/lib/oeqa/core/tests/cases/results.py
@@ -0,0 +1,49 @@ 
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import unittest
+
+from oeqa.core.case import OETestCase
+
+class ResultsTest(OETestCase):
+
+    def testPass(self):
+        pass
+
+    def testFail(self):
+        self.fail("Failed on purpose")
+
+    def testError(self):
+        raise Exception("Error on purpose")
+
+    def testSkip(self):
+        self.skipTest("Skipped on purpose")
+
+    @unittest.expectedFailure
+    def testExpectedFailure(self):
+        self.fail("Failed on purpose")
+
+    @unittest.expectedFailure
+    def testUnexpectedSuccess(self):
+        pass
+
+class ResultsClassErrorTest(OETestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        raise Exception("Error on purpose")
+
+    def testClassError(self):
+        pass
+
+class ResultsClassSkipTest(OETestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        raise unittest.SkipTest("Skipped on purpose")
+
+    def testClassSkip(self):
+        pass
diff --git a/meta/lib/oeqa/core/tests/cases/resultsmodule.py b/meta/lib/oeqa/core/tests/cases/resultsmodule.py
new file mode 100644
index 00000000000..7579e86b934
--- /dev/null
+++ b/meta/lib/oeqa/core/tests/cases/resultsmodule.py
@@ -0,0 +1,15 @@ 
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.core.case import OETestCase
+
+def setUpModule():
+    raise Exception("Error on purpose")
+
+class ResultsModuleTest(OETestCase):
+
+    def testModuleError(self):
+        pass
diff --git a/meta/lib/oeqa/core/tests/test_runner.py b/meta/lib/oeqa/core/tests/test_runner.py
index ce7be7b14e3..a9aac5ddf66 100755
--- a/meta/lib/oeqa/core/tests/test_runner.py
+++ b/meta/lib/oeqa/core/tests/test_runner.py
@@ -43,6 +43,19 @@  class TestResultStatus(TestBase):
         return {case_id: result._getTestResultDetails(case)[0]
                 for case_id, case in tc._registry['cases'].items()}
 
+    def test_result_status(self):
+        self.assertEqual(self._statuses(['results', 'resultsmodule']), {
+            'results.ResultsTest.testPass': 'PASSED',
+            'results.ResultsTest.testFail': 'FAILED',
+            'results.ResultsTest.testError': 'ERROR',
+            'results.ResultsTest.testSkip': 'SKIPPED',
+            'results.ResultsTest.testExpectedFailure': 'EXPECTEDFAIL',
+            'results.ResultsTest.testUnexpectedSuccess': 'PASSED',
+            'results.ResultsClassErrorTest.testClassError': 'ERROR',
+            'results.ResultsClassSkipTest.testClassSkip': 'SKIPPED',
+            'resultsmodule.ResultsModuleTest.testModuleError': 'ERROR',
+        })
+
     def test_subtest_status(self):
         self.assertEqual(self._statuses(['subtest']), {
             'subtest.SubTestTest.testSubTestFail': 'FAILED',