xref: /aosp_15_r20/external/angle/scripts/angle_presubmit_utils_unittest.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*8975f5c5SAndroid Build Coastguard Worker# Copyright 2020 The Chromium Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker"""
6*8975f5c5SAndroid Build Coastguard Workerangle_presubmit_utils_unittest.py: Top-level unittest script for ANGLE presubmit checks.
7*8975f5c5SAndroid Build Coastguard Worker"""
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Workerimport importlib.machinery
10*8975f5c5SAndroid Build Coastguard Workerimport os
11*8975f5c5SAndroid Build Coastguard Workerimport pathlib
12*8975f5c5SAndroid Build Coastguard Workerimport sys
13*8975f5c5SAndroid Build Coastguard Workerimport tempfile
14*8975f5c5SAndroid Build Coastguard Workerimport unittest
15*8975f5c5SAndroid Build Coastguard Workerfrom angle_presubmit_utils import *
16*8975f5c5SAndroid Build Coastguard Worker
17*8975f5c5SAndroid Build Coastguard Workerdef SetCWDToAngleFolder():
18*8975f5c5SAndroid Build Coastguard Worker    angle_folder = "angle"
19*8975f5c5SAndroid Build Coastguard Worker    cwd = os.path.dirname(os.path.abspath(__file__))
20*8975f5c5SAndroid Build Coastguard Worker    cwd = cwd.split(angle_folder)[0] + angle_folder
21*8975f5c5SAndroid Build Coastguard Worker    os.chdir(cwd)
22*8975f5c5SAndroid Build Coastguard Worker
23*8975f5c5SAndroid Build Coastguard Worker
24*8975f5c5SAndroid Build Coastguard WorkerSetCWDToAngleFolder()
25*8975f5c5SAndroid Build Coastguard Worker
26*8975f5c5SAndroid Build Coastguard Workerloader = importlib.machinery.SourceFileLoader('PRESUBMIT', 'PRESUBMIT.py')
27*8975f5c5SAndroid Build Coastguard WorkerPRESUBMIT = loader.load_module()
28*8975f5c5SAndroid Build Coastguard Worker
29*8975f5c5SAndroid Build Coastguard Worker
30*8975f5c5SAndroid Build Coastguard Workerclass CommitMessageFormattingCheckTest(unittest.TestCase):
31*8975f5c5SAndroid Build Coastguard Worker
32*8975f5c5SAndroid Build Coastguard Worker    def __init__(self, *args, **kwargs):
33*8975f5c5SAndroid Build Coastguard Worker        super(CommitMessageFormattingCheckTest, self).__init__(*args, **kwargs)
34*8975f5c5SAndroid Build Coastguard Worker        self.output_api = OutputAPI_mock()
35*8975f5c5SAndroid Build Coastguard Worker
36*8975f5c5SAndroid Build Coastguard Worker    def run_check_commit_message_formatting(self, commit_msg):
37*8975f5c5SAndroid Build Coastguard Worker        input_api = InputAPI_mock(commit_msg)
38*8975f5c5SAndroid Build Coastguard Worker        return PRESUBMIT._CheckCommitMessageFormatting(input_api, self.output_api)
39*8975f5c5SAndroid Build Coastguard Worker
40*8975f5c5SAndroid Build Coastguard Worker    def test_correct_commit_message(self):
41*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
42*8975f5c5SAndroid Build Coastguard Worker
43*8975f5c5SAndroid Build Coastguard Workerb
44*8975f5c5SAndroid Build Coastguard Worker
45*8975f5c5SAndroid Build Coastguard WorkerBug: angleproject:4662
46*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I966c79d96175da9eee92ef6da20db50d488137b2
47*8975f5c5SAndroid Build Coastguard Worker"""
48*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
49*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
50*8975f5c5SAndroid Build Coastguard Worker
51*8975f5c5SAndroid Build Coastguard Worker    def test_missing_description_body_and_description_summary(self):
52*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """Change-Id: I966c79d96175da9eee92ef6da20db50d488137b2"""
53*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
54*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
55*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
56*8975f5c5SAndroid Build Coastguard Worker            errors[0],
57*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError(
58*8975f5c5SAndroid Build Coastguard Worker                "Commit 1:Please ensure that your" +
59*8975f5c5SAndroid Build Coastguard Worker                " description summary and description body are not blank."))
60*8975f5c5SAndroid Build Coastguard Worker
61*8975f5c5SAndroid Build Coastguard Worker    def test_missing_description_body(self):
62*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """
63*8975f5c5SAndroid Build Coastguard Worker        a
64*8975f5c5SAndroid Build Coastguard Worker
65*8975f5c5SAndroid Build Coastguard Workerb: d
66*8975f5c5SAndroid Build Coastguard Workerc: e
67*8975f5c5SAndroid Build Coastguard Worker"""
68*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
69*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
70*8975f5c5SAndroid Build Coastguard Worker
71*8975f5c5SAndroid Build Coastguard Worker    def test_missing_tag_paragraph(self):
72*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
73*8975f5c5SAndroid Build Coastguard Worker
74*8975f5c5SAndroid Build Coastguard Workerbd
75*8975f5c5SAndroid Build Coastguard Workerefgh"""
76*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
77*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
78*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
79*8975f5c5SAndroid Build Coastguard Worker            errors[0],
80*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError(
81*8975f5c5SAndroid Build Coastguard Worker                "Commit 1:Please ensure that there are tags (e.g., Bug:, Test:) in your description."
82*8975f5c5SAndroid Build Coastguard Worker            ))
83*8975f5c5SAndroid Build Coastguard Worker
84*8975f5c5SAndroid Build Coastguard Worker    def test_missing_tag_paragraph_and_description_body(self):
85*8975f5c5SAndroid Build Coastguard Worker        commit_msg = "a"
86*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
87*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
88*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
89*8975f5c5SAndroid Build Coastguard Worker            errors[0],
90*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError(
91*8975f5c5SAndroid Build Coastguard Worker                "Commit 1:Please ensure that there are tags (e.g., Bug:, Test:) in your description."
92*8975f5c5SAndroid Build Coastguard Worker            ))
93*8975f5c5SAndroid Build Coastguard Worker
94*8975f5c5SAndroid Build Coastguard Worker    def test_missing_blank_line_between_description_summary_and_description_body(self):
95*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
96*8975f5c5SAndroid Build Coastguard Workerb
97*8975f5c5SAndroid Build Coastguard Worker
98*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I925cdb45779a9cdebe4e14f9e81e4211ade37c12"""
99*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
100*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
101*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(errors[0], self.output_api.PresubmitError(
102*8975f5c5SAndroid Build Coastguard Worker          "Commit 1:Please ensure the summary is only 1 line and there is 1 blank line" + \
103*8975f5c5SAndroid Build Coastguard Worker          " between the summary and description body."))
104*8975f5c5SAndroid Build Coastguard Worker
105*8975f5c5SAndroid Build Coastguard Worker    def test_missing_blank_line_between_description_body_and_tags_paragraph(self):
106*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
107*8975f5c5SAndroid Build Coastguard Worker
108*8975f5c5SAndroid Build Coastguard Workerb
109*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I925cdb45779a9cdebe4e14f9e81e4211ade37c12"""
110*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
111*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
112*8975f5c5SAndroid Build Coastguard Worker
113*8975f5c5SAndroid Build Coastguard Worker    def test_multiple_blank_lines_before_and_after_commit_message(self):
114*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """
115*8975f5c5SAndroid Build Coastguard Worker
116*8975f5c5SAndroid Build Coastguard Worker
117*8975f5c5SAndroid Build Coastguard Worker                a
118*8975f5c5SAndroid Build Coastguard Worker
119*8975f5c5SAndroid Build Coastguard Worker                  b
120*8975f5c5SAndroid Build Coastguard Worker
121*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I925cdb45779a9cdebe4e14f9e81e4211ade37c12
122*8975f5c5SAndroid Build Coastguard Worker"""
123*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
124*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
125*8975f5c5SAndroid Build Coastguard Worker
126*8975f5c5SAndroid Build Coastguard Worker    def test_newlines_within_description_body(self):
127*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
128*8975f5c5SAndroid Build Coastguard Worker
129*8975f5c5SAndroid Build Coastguard Workerb
130*8975f5c5SAndroid Build Coastguard Worker
131*8975f5c5SAndroid Build Coastguard Workerd
132*8975f5c5SAndroid Build Coastguard Worker
133*8975f5c5SAndroid Build Coastguard Workere
134*8975f5c5SAndroid Build Coastguard Worker
135*8975f5c5SAndroid Build Coastguard Workerfor
136*8975f5c5SAndroid Build Coastguard Worker
137*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
138*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
139*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
140*8975f5c5SAndroid Build Coastguard Worker
141*8975f5c5SAndroid Build Coastguard Worker    # Summary description in warning threshold(at 65 characters)
142*8975f5c5SAndroid Build Coastguard Worker    def test_summmary_description_in_warning_thresholds(self):
143*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
144*8975f5c5SAndroid Build Coastguard Worker
145*8975f5c5SAndroid Build Coastguard Workerb
146*8975f5c5SAndroid Build Coastguard Worker
147*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I925cdb45779a9cdebe4e14f9e81e4211ade37c12
148*8975f5c5SAndroid Build Coastguard Worker"""
149*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
150*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
151*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
152*8975f5c5SAndroid Build Coastguard Worker            errors[0],
153*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitPromptWarning(
154*8975f5c5SAndroid Build Coastguard Worker                "Commit 1:Your description summary should be on one line of 64 or less characters."
155*8975f5c5SAndroid Build Coastguard Worker            ))
156*8975f5c5SAndroid Build Coastguard Worker
157*8975f5c5SAndroid Build Coastguard Worker    # Summary description in error threshold(at 71 characters)
158*8975f5c5SAndroid Build Coastguard Worker    def test_summary_description_in_error_threshold(self):
159*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
160*8975f5c5SAndroid Build Coastguard Worker
161*8975f5c5SAndroid Build Coastguard Workerb
162*8975f5c5SAndroid Build Coastguard Worker
163*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I925cdb45779a9cdebe4e14f9e81e4211ade37c12"""
164*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
165*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
166*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
167*8975f5c5SAndroid Build Coastguard Worker            errors[0],
168*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError(
169*8975f5c5SAndroid Build Coastguard Worker                "Commit 1:Please ensure that your description summary is on one line of 64 or less characters."
170*8975f5c5SAndroid Build Coastguard Worker            ))
171*8975f5c5SAndroid Build Coastguard Worker
172*8975f5c5SAndroid Build Coastguard Worker    def test_description_body_exceeds_line_count_limit(self):
173*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
174*8975f5c5SAndroid Build Coastguard Worker
175*8975f5c5SAndroid Build Coastguard Workerbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
176*8975f5c5SAndroid Build Coastguard Worker
177*8975f5c5SAndroid Build Coastguard Worker
178*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
179*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
180*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 2)
181*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
182*8975f5c5SAndroid Build Coastguard Worker            errors[0],
183*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError(
184*8975f5c5SAndroid Build Coastguard Worker                "Commit 1:Please ensure that there exists only 1 blank line between tags and description body."
185*8975f5c5SAndroid Build Coastguard Worker            ))
186*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
187*8975f5c5SAndroid Build Coastguard Worker            errors[1],
188*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError("""Commit 1:Line 3 is too long.
189*8975f5c5SAndroid Build Coastguard Worker"bbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
190*8975f5c5SAndroid Build Coastguard WorkerPlease wrap it to 72 characters. Lines without spaces or lines starting with 4 spaces are exempt."""
191*8975f5c5SAndroid Build Coastguard Worker                                          ))
192*8975f5c5SAndroid Build Coastguard Worker
193*8975f5c5SAndroid Build Coastguard Worker    def test_description_body_exceeds_line_count_limit_but_with_4_spaces_prefix(self):
194*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
195*8975f5c5SAndroid Build Coastguard Worker
196*8975f5c5SAndroid Build Coastguard Workercc
197*8975f5c5SAndroid Build Coastguard Worker
198*8975f5c5SAndroid Build Coastguard Workerdddd
199*8975f5c5SAndroid Build Coastguard Worker
200*8975f5c5SAndroid Build Coastguard Worker    bbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
201*8975f5c5SAndroid Build Coastguard Worker
202*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
203*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
204*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
205*8975f5c5SAndroid Build Coastguard Worker
206*8975f5c5SAndroid Build Coastguard Worker    def test_description_body_exceeds_line_count_limit_but_without_space(self):
207*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
208*8975f5c5SAndroid Build Coastguard Worker
209*8975f5c5SAndroid Build Coastguard Workercc
210*8975f5c5SAndroid Build Coastguard Worker
211*8975f5c5SAndroid Build Coastguard Workerdddd
212*8975f5c5SAndroid Build Coastguard Worker
213*8975f5c5SAndroid Build Coastguard Workerbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
214*8975f5c5SAndroid Build Coastguard Worker
215*8975f5c5SAndroid Build Coastguard Workera: d"""
216*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
217*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
218*8975f5c5SAndroid Build Coastguard Worker
219*8975f5c5SAndroid Build Coastguard Worker    def test_description_body_exceeds_line_count_limit_but_in_quote(self):
220*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
221*8975f5c5SAndroid Build Coastguard Worker
222*8975f5c5SAndroid Build Coastguard Workercc
223*8975f5c5SAndroid Build Coastguard Worker
224*8975f5c5SAndroid Build Coastguard Workerdddd
225*8975f5c5SAndroid Build Coastguard Worker
226*8975f5c5SAndroid Build Coastguard Worker> bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
227*8975f5c5SAndroid Build Coastguard Worker
228*8975f5c5SAndroid Build Coastguard Workera: d"""
229*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
230*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
231*8975f5c5SAndroid Build Coastguard Worker
232*8975f5c5SAndroid Build Coastguard Worker    def test_tabs_in_commit_message(self):
233*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """																a
234*8975f5c5SAndroid Build Coastguard Worker
235*8975f5c5SAndroid Build Coastguard Workerbbbbbbbbbbbbbbbbbbbb
236*8975f5c5SAndroid Build Coastguard Worker
237*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
238*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
239*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
240*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
241*8975f5c5SAndroid Build Coastguard Worker            errors[0],
242*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError("Commit 1:Tabs are not allowed in commit message."))
243*8975f5c5SAndroid Build Coastguard Worker
244*8975f5c5SAndroid Build Coastguard Worker    def test_allowlist_revert(self):
245*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """Revert "sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssa
246*8975f5c5SAndroid Build Coastguard Worker
247*8975f5c5SAndroid Build Coastguard Workerbbbbbbbbbbbbbbbbbbbb
248*8975f5c5SAndroid Build Coastguard Worker
249*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
250*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
251*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
252*8975f5c5SAndroid Build Coastguard Worker
253*8975f5c5SAndroid Build Coastguard Worker    def test_allowlist_roll(self):
254*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """Roll sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadd
255*8975f5c5SAndroid Build Coastguard Worker
256*8975f5c5SAndroid Build Coastguard Workerbbbbbbbbbbbbbbbbbbbb
257*8975f5c5SAndroid Build Coastguard Worker
258*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
259*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
260*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
261*8975f5c5SAndroid Build Coastguard Worker
262*8975f5c5SAndroid Build Coastguard Worker    def test_allowlist_reland(self):
263*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """Reland sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadd
264*8975f5c5SAndroid Build Coastguard Worker
265*8975f5c5SAndroid Build Coastguard Workerbbbbbbbbbbbbbbbbbbbb
266*8975f5c5SAndroid Build Coastguard Worker
267*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
268*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
269*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
270*8975f5c5SAndroid Build Coastguard Worker
271*8975f5c5SAndroid Build Coastguard Worker    def test_allowlist_reland2(self):
272*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """Reland: sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadd
273*8975f5c5SAndroid Build Coastguard Worker
274*8975f5c5SAndroid Build Coastguard Workerbbbbbbbbbbbbbbbbbbbb
275*8975f5c5SAndroid Build Coastguard Worker
276*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
277*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
278*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
279*8975f5c5SAndroid Build Coastguard Worker
280*8975f5c5SAndroid Build Coastguard Worker    def test_multiple_commits_with_errors_in_multiple_commits(self):
281*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
282*8975f5c5SAndroid Build Coastguard Worker
283*8975f5c5SAndroid Build Coastguard Workerbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
284*8975f5c5SAndroid Build Coastguard Worker
285*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b
286*8975f5c5SAndroid Build Coastguard Worker
287*8975f5c5SAndroid Build Coastguard Workera
288*8975f5c5SAndroid Build Coastguard Worker
289*8975f5c5SAndroid Build Coastguard Workercccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccc
290*8975f5c5SAndroid Build Coastguard Worker
291*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
292*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
293*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 2)
294*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
295*8975f5c5SAndroid Build Coastguard Worker            errors[0],
296*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError("""Commit 2:Line 3 is too long.
297*8975f5c5SAndroid Build Coastguard Worker"bbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
298*8975f5c5SAndroid Build Coastguard WorkerPlease wrap it to 72 characters. Lines without spaces or lines starting with 4 spaces are exempt."""
299*8975f5c5SAndroid Build Coastguard Worker                                          ))
300*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
301*8975f5c5SAndroid Build Coastguard Worker            errors[1],
302*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError("""Commit 1:Line 4 is too long.
303*8975f5c5SAndroid Build Coastguard Worker"cccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccc"
304*8975f5c5SAndroid Build Coastguard WorkerPlease wrap it to 72 characters. Lines without spaces or lines starting with 4 spaces are exempt."""
305*8975f5c5SAndroid Build Coastguard Worker                                          ))
306*8975f5c5SAndroid Build Coastguard Worker
307*8975f5c5SAndroid Build Coastguard Worker    def test_multiple_commits_with_error_in_one_commit(self):
308*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """a
309*8975f5c5SAndroid Build Coastguard Worker
310*8975f5c5SAndroid Build Coastguard Workerbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
311*8975f5c5SAndroid Build Coastguard Worker
312*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b
313*8975f5c5SAndroid Build Coastguard Worker
314*8975f5c5SAndroid Build Coastguard WorkerRoll sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadd
315*8975f5c5SAndroid Build Coastguard Worker
316*8975f5c5SAndroid Build Coastguard Workerbbbbbbbbbbbbbbbbbbbb
317*8975f5c5SAndroid Build Coastguard Worker
318*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
319*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
320*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
321*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
322*8975f5c5SAndroid Build Coastguard Worker            errors[0],
323*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError("""Commit 2:Line 3 is too long.
324*8975f5c5SAndroid Build Coastguard Worker"bbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
325*8975f5c5SAndroid Build Coastguard WorkerPlease wrap it to 72 characters. Lines without spaces or lines starting with 4 spaces are exempt."""
326*8975f5c5SAndroid Build Coastguard Worker                                          ))
327*8975f5c5SAndroid Build Coastguard Worker
328*8975f5c5SAndroid Build Coastguard Worker    def test_multiple_commits_with_no_error(self):
329*8975f5c5SAndroid Build Coastguard Worker        commit_msg = """Reland sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadd
330*8975f5c5SAndroid Build Coastguard Worker
331*8975f5c5SAndroid Build Coastguard Workerbbbbbbbbbbbbbbbbbbbb
332*8975f5c5SAndroid Build Coastguard Worker
333*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b
334*8975f5c5SAndroid Build Coastguard Worker
335*8975f5c5SAndroid Build Coastguard WorkerRoll sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadd
336*8975f5c5SAndroid Build Coastguard Worker
337*8975f5c5SAndroid Build Coastguard Workerbbbbbbbbbbbbbbbbbbbb
338*8975f5c5SAndroid Build Coastguard Worker
339*8975f5c5SAndroid Build Coastguard WorkerChange-Id: I443c36aaa8956c20da1abddf7aea613659e2cd5b"""
340*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_check_commit_message_formatting(commit_msg)
341*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
342*8975f5c5SAndroid Build Coastguard Worker
343*8975f5c5SAndroid Build Coastguard Worker
344*8975f5c5SAndroid Build Coastguard Workerclass GClientFileExistenceCheck(unittest.TestCase):
345*8975f5c5SAndroid Build Coastguard Worker
346*8975f5c5SAndroid Build Coastguard Worker    def __init__(self, *args, **kwargs):
347*8975f5c5SAndroid Build Coastguard Worker        super(GClientFileExistenceCheck, self).__init__(*args, **kwargs)
348*8975f5c5SAndroid Build Coastguard Worker        self.output_api = OutputAPI_mock()
349*8975f5c5SAndroid Build Coastguard Worker
350*8975f5c5SAndroid Build Coastguard Worker    def run_gclient_presubmit(self, cwd, search_limit):
351*8975f5c5SAndroid Build Coastguard Worker        input_api = InputAPI_mock('')
352*8975f5c5SAndroid Build Coastguard Worker        input_api.cwd = cwd
353*8975f5c5SAndroid Build Coastguard Worker        return PRESUBMIT._CheckGClientExists(input_api, self.output_api,
354*8975f5c5SAndroid Build Coastguard Worker                                             pathlib.Path(search_limit))
355*8975f5c5SAndroid Build Coastguard Worker
356*8975f5c5SAndroid Build Coastguard Worker    def test_gclient_in_cwd(self):
357*8975f5c5SAndroid Build Coastguard Worker        with tempfile.TemporaryDirectory() as cwd:
358*8975f5c5SAndroid Build Coastguard Worker            pathlib.Path(cwd).joinpath('.gclient').touch()
359*8975f5c5SAndroid Build Coastguard Worker            errors = self.run_gclient_presubmit(cwd, cwd)
360*8975f5c5SAndroid Build Coastguard Worker            self.assertEqual(len(errors), 0)
361*8975f5c5SAndroid Build Coastguard Worker
362*8975f5c5SAndroid Build Coastguard Worker    def test_missing_gclient(self):
363*8975f5c5SAndroid Build Coastguard Worker        with tempfile.TemporaryDirectory() as cwd:
364*8975f5c5SAndroid Build Coastguard Worker            errors = self.run_gclient_presubmit(cwd, cwd)
365*8975f5c5SAndroid Build Coastguard Worker            self.assertEqual(len(errors), 1)
366*8975f5c5SAndroid Build Coastguard Worker            self.assertEqual(errors[0], self.output_api.PresubmitError('Missing .gclient file.'))
367*8975f5c5SAndroid Build Coastguard Worker
368*8975f5c5SAndroid Build Coastguard Worker    def test_gclient_in_parent(self):
369*8975f5c5SAndroid Build Coastguard Worker        with tempfile.TemporaryDirectory() as cwd:
370*8975f5c5SAndroid Build Coastguard Worker            cwd = pathlib.Path(cwd)
371*8975f5c5SAndroid Build Coastguard Worker            cwd.joinpath('.gclient').touch()
372*8975f5c5SAndroid Build Coastguard Worker            inner = cwd.joinpath('inner')
373*8975f5c5SAndroid Build Coastguard Worker            inner.mkdir()
374*8975f5c5SAndroid Build Coastguard Worker            errors = self.run_gclient_presubmit(str(inner), str(cwd))
375*8975f5c5SAndroid Build Coastguard Worker            self.assertEqual(len(errors), 0)
376*8975f5c5SAndroid Build Coastguard Worker
377*8975f5c5SAndroid Build Coastguard Worker
378*8975f5c5SAndroid Build Coastguard Workerclass CheckShaderVersionInShaderLangHeaderTest(unittest.TestCase):
379*8975f5c5SAndroid Build Coastguard Worker
380*8975f5c5SAndroid Build Coastguard Worker    def __init__(self, *args, **kwargs):
381*8975f5c5SAndroid Build Coastguard Worker        super(CheckShaderVersionInShaderLangHeaderTest, self).__init__(*args, **kwargs)
382*8975f5c5SAndroid Build Coastguard Worker        self.output_api = OutputAPI_mock()
383*8975f5c5SAndroid Build Coastguard Worker
384*8975f5c5SAndroid Build Coastguard Worker    def run_shader_version_check_presubmit(self, commit_msg, diffs):
385*8975f5c5SAndroid Build Coastguard Worker        affected_files = [AffectedFile_mock(diff) for diff in diffs]
386*8975f5c5SAndroid Build Coastguard Worker        input_api = InputAPI_mock(commit_msg, affected_files)
387*8975f5c5SAndroid Build Coastguard Worker        return PRESUBMIT._CheckShaderVersionInShaderLangHeader(input_api, self.output_api)
388*8975f5c5SAndroid Build Coastguard Worker
389*8975f5c5SAndroid Build Coastguard Worker    def test_headers_not_changed(self):
390*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_shader_version_check_presubmit('', [])
391*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
392*8975f5c5SAndroid Build Coastguard Worker
393*8975f5c5SAndroid Build Coastguard Worker    def test_shader_lang_changed_with_version_change(self):
394*8975f5c5SAndroid Build Coastguard Worker        shader_lang_diff = """-#define ANGLE_SH_VERSION 100
395*8975f5c5SAndroid Build Coastguard Worker+#define ANGLE_SH_VERSION 101
396*8975f5c5SAndroid Build Coastguard Worker"""
397*8975f5c5SAndroid Build Coastguard Worker
398*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_shader_version_check_presubmit('', [shader_lang_diff])
399*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
400*8975f5c5SAndroid Build Coastguard Worker
401*8975f5c5SAndroid Build Coastguard Worker    def test_both_changed_with_version_change(self):
402*8975f5c5SAndroid Build Coastguard Worker        shader_lang_diff = """-#define ANGLE_SH_VERSION 100
403*8975f5c5SAndroid Build Coastguard Worker+#define ANGLE_SH_VERSION 101
404*8975f5c5SAndroid Build Coastguard Worker"""
405*8975f5c5SAndroid Build Coastguard Worker        shader_vars_diff = """-any change"""
406*8975f5c5SAndroid Build Coastguard Worker
407*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_shader_version_check_presubmit('', [shader_lang_diff, shader_vars_diff])
408*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
409*8975f5c5SAndroid Build Coastguard Worker
410*8975f5c5SAndroid Build Coastguard Worker    def test_shader_lang_changed_with_no_version_change(self):
411*8975f5c5SAndroid Build Coastguard Worker        shader_lang_diff = """+some change"""
412*8975f5c5SAndroid Build Coastguard Worker
413*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_shader_version_check_presubmit('', [shader_lang_diff])
414*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
415*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
416*8975f5c5SAndroid Build Coastguard Worker            errors[0],
417*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError(
418*8975f5c5SAndroid Build Coastguard Worker                'ANGLE_SH_VERSION should be incremented when ShaderLang.h or ShaderVars.h change.')
419*8975f5c5SAndroid Build Coastguard Worker        )
420*8975f5c5SAndroid Build Coastguard Worker
421*8975f5c5SAndroid Build Coastguard Worker    def test_shader_lang_changed_with_no_version_change(self):
422*8975f5c5SAndroid Build Coastguard Worker        shader_lang_diff = """+some change
423*8975f5c5SAndroid Build Coastguard Worker #define ANGLE_SH_VERSION 100
424*8975f5c5SAndroid Build Coastguard Worker-other changes"""
425*8975f5c5SAndroid Build Coastguard Worker
426*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_shader_version_check_presubmit('', [shader_lang_diff])
427*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
428*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
429*8975f5c5SAndroid Build Coastguard Worker            errors[0],
430*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError(
431*8975f5c5SAndroid Build Coastguard Worker                'ANGLE_SH_VERSION should be incremented when ShaderLang.h or ShaderVars.h change.')
432*8975f5c5SAndroid Build Coastguard Worker        )
433*8975f5c5SAndroid Build Coastguard Worker
434*8975f5c5SAndroid Build Coastguard Worker    def test_shader_lang_changed_with_version_cosmetic_change(self):
435*8975f5c5SAndroid Build Coastguard Worker        shader_lang_diff = """-#define ANGLE_SH_VERSION 100
436*8975f5c5SAndroid Build Coastguard Worker+#define ANGLE_SH_VERSION 100 // cosmetic change
437*8975f5c5SAndroid Build Coastguard Worker"""
438*8975f5c5SAndroid Build Coastguard Worker
439*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_shader_version_check_presubmit('', [shader_lang_diff])
440*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
441*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
442*8975f5c5SAndroid Build Coastguard Worker            errors[0],
443*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError(
444*8975f5c5SAndroid Build Coastguard Worker                'ANGLE_SH_VERSION should be incremented when ShaderLang.h or ShaderVars.h change.')
445*8975f5c5SAndroid Build Coastguard Worker        )
446*8975f5c5SAndroid Build Coastguard Worker
447*8975f5c5SAndroid Build Coastguard Worker    def test_shader_lang_changed_with_version_decrement(self):
448*8975f5c5SAndroid Build Coastguard Worker        shader_lang_diff = """-#define ANGLE_SH_VERSION 100
449*8975f5c5SAndroid Build Coastguard Worker+#define ANGLE_SH_VERSION 99
450*8975f5c5SAndroid Build Coastguard Worker"""
451*8975f5c5SAndroid Build Coastguard Worker
452*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_shader_version_check_presubmit('', [shader_lang_diff])
453*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 1)
454*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(
455*8975f5c5SAndroid Build Coastguard Worker            errors[0],
456*8975f5c5SAndroid Build Coastguard Worker            self.output_api.PresubmitError(
457*8975f5c5SAndroid Build Coastguard Worker                'ANGLE_SH_VERSION should be incremented when ShaderLang.h or ShaderVars.h change.')
458*8975f5c5SAndroid Build Coastguard Worker        )
459*8975f5c5SAndroid Build Coastguard Worker
460*8975f5c5SAndroid Build Coastguard Worker    def test_shader_lang_changed_in_revert(self):
461*8975f5c5SAndroid Build Coastguard Worker        shader_lang_diff = """-#define ANGLE_SH_VERSION 100
462*8975f5c5SAndroid Build Coastguard Worker+#define ANGLE_SH_VERSION 99
463*8975f5c5SAndroid Build Coastguard Worker"""
464*8975f5c5SAndroid Build Coastguard Worker
465*8975f5c5SAndroid Build Coastguard Worker        errors = self.run_shader_version_check_presubmit('Revert some change', [shader_lang_diff])
466*8975f5c5SAndroid Build Coastguard Worker        self.assertEqual(len(errors), 0)
467*8975f5c5SAndroid Build Coastguard Worker
468*8975f5c5SAndroid Build Coastguard Worker
469*8975f5c5SAndroid Build Coastguard Workerif __name__ == '__main__':
470*8975f5c5SAndroid Build Coastguard Worker    unittest.main()
471