| #!/usr/bin/env python3 |
| |
| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| import unittest |
| from unittest.mock import patch |
| from pathlib import Path |
| |
| import unittest_coverage |
| |
| |
| class AnyStringWith(str): |
| |
| def __eq__(self, other): |
| return self in other |
| |
| |
| class TestUnit(unittest.TestCase): |
| |
| @patch("unittest_coverage.BAZEL", "<bazel>") |
| @patch("unittest_coverage.DEVICE_LIBS_QUERY", "<device libs query>") |
| @patch("unittest_coverage.run") |
| def test_handle_libs(self, mock_run): |
| device_libs_all = ["//foo/a", "//foo/b", "//foo/c", "//foo/d"] |
| device_libs_incompat = ["//foo/b", "//foo/c"] |
| device_libs = ["//foo/a", "//foo/d"] |
| mock_run.side_effect = (device_libs_incompat, ) |
| |
| self.assertEqual(unittest_coverage.handle_libs(device_libs_all), |
| device_libs) |
| |
| mock_run.assert_called_once_with( |
| "<bazel>", "cquery", "<device libs query>", "--output=starlark", |
| AnyStringWith("IncompatiblePlatformProvider")) |
| |
| @patch("unittest_coverage.LLD_HOST", "<lld_host>") |
| @patch("unittest_coverage.run") |
| def test_handle_objs(self, mock_run): |
| merged_library = Path("/foo/merged.so") |
| obj_files = ["//foo/a.o", "//foo/mock_a.o", "//foo/d.o"] |
| |
| unittest_coverage.handle_objs(merged_library, obj_files) |
| |
| mock_run.assert_called_once_with("<lld_host>", "--shared", "-o", |
| str(merged_library), "//foo/a.o", |
| "//foo/d.o") |
| |
| def test_handle_test_targets(self): |
| test_targets = ["//foo", "//bar"] |
| |
| res = unittest_coverage.handle_test_targets(test_targets) |
| self.assertTrue(set(res) > set(test_targets)) |
| self.assertTrue(len([test for test in res if "unittest" in test]) > 0) |
| |
| def test_handle_test_log_dirs(self): |
| test_log_dirs = [Path("/testlogs/foo"), Path("/testlogs/bar")] |
| profiles = [ |
| Path("/testlogs/foo/coverage.dat"), |
| Path("/testlogs/bar/coverage.dat") |
| ] |
| self.assertEqual(unittest_coverage.handle_test_log_dirs(test_log_dirs), |
| profiles) |
| |
| def test_params(self): |
| self.assertEqual(unittest_coverage.PARAMS.bazel_test_type, |
| AnyStringWith("cc_test")) |
| self.assertEqual(unittest_coverage.PARAMS.config, |
| "ot_coverage_off_target") |
| self.assertEqual(unittest_coverage.PARAMS.libs_fn, |
| unittest_coverage.handle_libs) |
| self.assertEqual(unittest_coverage.PARAMS.objs_fn, |
| unittest_coverage.handle_objs) |
| self.assertEqual(unittest_coverage.PARAMS.test_targets_fn, |
| unittest_coverage.handle_test_targets) |
| self.assertEqual(unittest_coverage.PARAMS.test_log_dirs_fn, |
| unittest_coverage.handle_test_log_dirs) |
| self.assertEqual(unittest_coverage.PARAMS.report_title, |
| AnyStringWith("Unit Test")) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |