new file mode 100644
@@ -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
new file mode 100644
@@ -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
@@ -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',
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