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