xref: /aosp_15_r20/external/toolchain-utils/llvm_tools/bb_add_test.py (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1#!/usr/bin/env python3
2# Copyright 2024 The ChromiumOS Authors
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Tests for bb_add.py."""
7
8from typing import Iterable
9import unittest
10
11import bb_add
12import cros_cls
13import llvm_next
14
15
16_ARBITRARY_BOTS = ["chromeos/cq/amd64-generic-cq"]
17
18
19class Test(unittest.TestCase):
20    """Tests for bb_add.py."""
21
22    def set_llvm_next_cls(self, cls: Iterable[cros_cls.ChangeListURL]):
23        old_cls = llvm_next.LLVM_NEXT_TESTING_CLS
24        llvm_next.LLVM_NEXT_TESTING_CLS = cls
25
26        def restore_cls():
27            llvm_next.LLVM_NEXT_TESTING_CLS = old_cls
28
29        self.addCleanup(restore_cls)
30
31    def test_generate_bb_add_raises_if_no_llvm_next_cls(self):
32        self.set_llvm_next_cls(())
33        with self.assertRaisesRegex(
34            ValueError, "^llvm-next testing requested.*"
35        ):
36            bb_add.generate_bb_add_command(
37                use_llvm_next=True,
38                disable_werror=False,
39                extra_cls=(),
40                bots=_ARBITRARY_BOTS,
41            )
42
43    def test_generate_bb_add_adds_llvm_next_cls(self):
44        self.set_llvm_next_cls((cros_cls.ChangeListURL(123, 1),))
45        cmd = bb_add.generate_bb_add_command(
46            use_llvm_next=True,
47            disable_werror=False,
48            extra_cls=(),
49            bots=_ARBITRARY_BOTS,
50        )
51        self.assertEqual(
52            cmd, ["bb", "add", "-cl", "crrev.com/c/123/1"] + _ARBITRARY_BOTS
53        )
54
55    def test_generate_bb_add_adds_disable_werror_cl(self):
56        self.set_llvm_next_cls((cros_cls.ChangeListURL(123, 1),))
57        cmd = bb_add.generate_bb_add_command(
58            use_llvm_next=False,
59            disable_werror=True,
60            extra_cls=(),
61            bots=_ARBITRARY_BOTS,
62        )
63        self.assertEqual(
64            cmd,
65            [
66                "bb",
67                "add",
68                "-cl",
69                llvm_next.DISABLE_WERROR_CL.crrev_url_without_http(),
70            ]
71            + _ARBITRARY_BOTS,
72        )
73
74    def test_generate_bb_add_adds_extra_cls(self):
75        self.set_llvm_next_cls((cros_cls.ChangeListURL(123, 1),))
76        cmd = bb_add.generate_bb_add_command(
77            use_llvm_next=False,
78            disable_werror=False,
79            extra_cls=(
80                cros_cls.ChangeListURL(123, 1),
81                cros_cls.ChangeListURL(126),
82            ),
83            bots=_ARBITRARY_BOTS,
84        )
85        self.assertEqual(
86            cmd,
87            [
88                "bb",
89                "add",
90                "-cl",
91                "crrev.com/c/123/1",
92                "-cl",
93                "crrev.com/c/126",
94            ]
95            + _ARBITRARY_BOTS,
96        )
97
98
99if __name__ == "__main__":
100    unittest.main()
101