1*d9f75844SAndroid Build Coastguard Worker#!/usr/bin/env vpython3 2*d9f75844SAndroid Build Coastguard Worker 3*d9f75844SAndroid Build Coastguard Worker# Copyright 2017 The WebRTC project authors. All Rights Reserved. 4*d9f75844SAndroid Build Coastguard Worker# 5*d9f75844SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license 6*d9f75844SAndroid Build Coastguard Worker# that can be found in the LICENSE file in the root of the source 7*d9f75844SAndroid Build Coastguard Worker# tree. An additional intellectual property rights grant can be found 8*d9f75844SAndroid Build Coastguard Worker# in the file PATENTS. All contributing project authors may 9*d9f75844SAndroid Build Coastguard Worker# be found in the AUTHORS file in the root of the source tree. 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Workerfrom __future__ import absolute_import 12*d9f75844SAndroid Build Coastguard Workerimport os 13*d9f75844SAndroid Build Coastguard Workerimport shutil 14*d9f75844SAndroid Build Coastguard Workerimport tempfile 15*d9f75844SAndroid Build Coastguard Workerimport textwrap 16*d9f75844SAndroid Build Coastguard Workerimport unittest 17*d9f75844SAndroid Build Coastguard Worker 18*d9f75844SAndroid Build Coastguard Workerimport PRESUBMIT 19*d9f75844SAndroid Build Coastguard Worker# pylint: disable=line-too-long 20*d9f75844SAndroid Build Coastguard Workerfrom presubmit_test_mocks import MockInputApi, MockOutputApi, MockFile, MockChange 21*d9f75844SAndroid Build Coastguard Worker 22*d9f75844SAndroid Build Coastguard Worker 23*d9f75844SAndroid Build Coastguard Workerclass CheckBugEntryFieldTest(unittest.TestCase): 24*d9f75844SAndroid Build Coastguard Worker def testCommitMessageBugEntryWithNoError(self): 25*d9f75844SAndroid Build Coastguard Worker mock_input_api = MockInputApi() 26*d9f75844SAndroid Build Coastguard Worker mock_output_api = MockOutputApi() 27*d9f75844SAndroid Build Coastguard Worker mock_input_api.change = MockChange([], ['webrtc:1234']) 28*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckCommitMessageBugEntry(mock_input_api, 29*d9f75844SAndroid Build Coastguard Worker mock_output_api) 30*d9f75844SAndroid Build Coastguard Worker self.assertEqual(0, len(errors)) 31*d9f75844SAndroid Build Coastguard Worker 32*d9f75844SAndroid Build Coastguard Worker def testCommitMessageBugEntryReturnError(self): 33*d9f75844SAndroid Build Coastguard Worker mock_input_api = MockInputApi() 34*d9f75844SAndroid Build Coastguard Worker mock_output_api = MockOutputApi() 35*d9f75844SAndroid Build Coastguard Worker mock_input_api.change = MockChange([], ['webrtc:1234', 'webrtc=4321']) 36*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckCommitMessageBugEntry(mock_input_api, 37*d9f75844SAndroid Build Coastguard Worker mock_output_api) 38*d9f75844SAndroid Build Coastguard Worker self.assertEqual(1, len(errors)) 39*d9f75844SAndroid Build Coastguard Worker self.assertEqual(('Bogus Bug entry: webrtc=4321. Please specify' 40*d9f75844SAndroid Build Coastguard Worker ' the issue tracker prefix and the issue number,' 41*d9f75844SAndroid Build Coastguard Worker ' separated by a colon, e.g. webrtc:123 or' 42*d9f75844SAndroid Build Coastguard Worker ' chromium:12345.'), str(errors[0])) 43*d9f75844SAndroid Build Coastguard Worker 44*d9f75844SAndroid Build Coastguard Worker def testCommitMessageBugEntryWithoutPrefix(self): 45*d9f75844SAndroid Build Coastguard Worker mock_input_api = MockInputApi() 46*d9f75844SAndroid Build Coastguard Worker mock_output_api = MockOutputApi() 47*d9f75844SAndroid Build Coastguard Worker mock_input_api.change = MockChange([], ['1234']) 48*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckCommitMessageBugEntry(mock_input_api, 49*d9f75844SAndroid Build Coastguard Worker mock_output_api) 50*d9f75844SAndroid Build Coastguard Worker self.assertEqual(1, len(errors)) 51*d9f75844SAndroid Build Coastguard Worker self.assertEqual(('Bug entry requires issue tracker prefix, ' 52*d9f75844SAndroid Build Coastguard Worker 'e.g. webrtc:1234'), str(errors[0])) 53*d9f75844SAndroid Build Coastguard Worker 54*d9f75844SAndroid Build Coastguard Worker def testCommitMessageBugEntryIsNone(self): 55*d9f75844SAndroid Build Coastguard Worker mock_input_api = MockInputApi() 56*d9f75844SAndroid Build Coastguard Worker mock_output_api = MockOutputApi() 57*d9f75844SAndroid Build Coastguard Worker mock_input_api.change = MockChange([], ['None']) 58*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckCommitMessageBugEntry(mock_input_api, 59*d9f75844SAndroid Build Coastguard Worker mock_output_api) 60*d9f75844SAndroid Build Coastguard Worker self.assertEqual(0, len(errors)) 61*d9f75844SAndroid Build Coastguard Worker 62*d9f75844SAndroid Build Coastguard Worker def testCommitMessageBugEntrySupportInternalBugReference(self): 63*d9f75844SAndroid Build Coastguard Worker mock_input_api = MockInputApi() 64*d9f75844SAndroid Build Coastguard Worker mock_output_api = MockOutputApi() 65*d9f75844SAndroid Build Coastguard Worker mock_input_api.change.BUG = 'b/12345' 66*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckCommitMessageBugEntry(mock_input_api, 67*d9f75844SAndroid Build Coastguard Worker mock_output_api) 68*d9f75844SAndroid Build Coastguard Worker self.assertEqual(0, len(errors)) 69*d9f75844SAndroid Build Coastguard Worker mock_input_api.change.BUG = 'b/12345, webrtc:1234' 70*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckCommitMessageBugEntry(mock_input_api, 71*d9f75844SAndroid Build Coastguard Worker mock_output_api) 72*d9f75844SAndroid Build Coastguard Worker self.assertEqual(0, len(errors)) 73*d9f75844SAndroid Build Coastguard Worker 74*d9f75844SAndroid Build Coastguard Worker 75*d9f75844SAndroid Build Coastguard Workerclass CheckNewlineAtTheEndOfProtoFilesTest(unittest.TestCase): 76*d9f75844SAndroid Build Coastguard Worker def setUp(self): 77*d9f75844SAndroid Build Coastguard Worker self.tmp_dir = tempfile.mkdtemp() 78*d9f75844SAndroid Build Coastguard Worker self.proto_file_path = os.path.join(self.tmp_dir, 'foo.proto') 79*d9f75844SAndroid Build Coastguard Worker self.input_api = MockInputApi() 80*d9f75844SAndroid Build Coastguard Worker self.output_api = MockOutputApi() 81*d9f75844SAndroid Build Coastguard Worker 82*d9f75844SAndroid Build Coastguard Worker def tearDown(self): 83*d9f75844SAndroid Build Coastguard Worker shutil.rmtree(self.tmp_dir, ignore_errors=True) 84*d9f75844SAndroid Build Coastguard Worker 85*d9f75844SAndroid Build Coastguard Worker def testErrorIfProtoFileDoesNotEndWithNewline(self): 86*d9f75844SAndroid Build Coastguard Worker self._GenerateProtoWithoutNewlineAtTheEnd() 87*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [MockFile(self.proto_file_path)] 88*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckNewlineAtTheEndOfProtoFiles( 89*d9f75844SAndroid Build Coastguard Worker self.input_api, self.output_api, lambda x: True) 90*d9f75844SAndroid Build Coastguard Worker self.assertEqual(1, len(errors)) 91*d9f75844SAndroid Build Coastguard Worker self.assertEqual( 92*d9f75844SAndroid Build Coastguard Worker 'File %s must end with exactly one newline.' % self.proto_file_path, 93*d9f75844SAndroid Build Coastguard Worker str(errors[0])) 94*d9f75844SAndroid Build Coastguard Worker 95*d9f75844SAndroid Build Coastguard Worker def testNoErrorIfProtoFileEndsWithNewline(self): 96*d9f75844SAndroid Build Coastguard Worker self._GenerateProtoWithNewlineAtTheEnd() 97*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [MockFile(self.proto_file_path)] 98*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckNewlineAtTheEndOfProtoFiles( 99*d9f75844SAndroid Build Coastguard Worker self.input_api, self.output_api, lambda x: True) 100*d9f75844SAndroid Build Coastguard Worker self.assertEqual(0, len(errors)) 101*d9f75844SAndroid Build Coastguard Worker 102*d9f75844SAndroid Build Coastguard Worker def _GenerateProtoWithNewlineAtTheEnd(self): 103*d9f75844SAndroid Build Coastguard Worker with open(self.proto_file_path, 'w') as f: 104*d9f75844SAndroid Build Coastguard Worker f.write( 105*d9f75844SAndroid Build Coastguard Worker textwrap.dedent(""" 106*d9f75844SAndroid Build Coastguard Worker syntax = "proto2"; 107*d9f75844SAndroid Build Coastguard Worker option optimize_for = LITE_RUNTIME; 108*d9f75844SAndroid Build Coastguard Worker package webrtc.audioproc; 109*d9f75844SAndroid Build Coastguard Worker """)) 110*d9f75844SAndroid Build Coastguard Worker 111*d9f75844SAndroid Build Coastguard Worker def _GenerateProtoWithoutNewlineAtTheEnd(self): 112*d9f75844SAndroid Build Coastguard Worker with open(self.proto_file_path, 'w') as f: 113*d9f75844SAndroid Build Coastguard Worker f.write( 114*d9f75844SAndroid Build Coastguard Worker textwrap.dedent(""" 115*d9f75844SAndroid Build Coastguard Worker syntax = "proto2"; 116*d9f75844SAndroid Build Coastguard Worker option optimize_for = LITE_RUNTIME; 117*d9f75844SAndroid Build Coastguard Worker package webrtc.audioproc;""")) 118*d9f75844SAndroid Build Coastguard Worker 119*d9f75844SAndroid Build Coastguard Worker 120*d9f75844SAndroid Build Coastguard Workerclass CheckNoMixingSourcesTest(unittest.TestCase): 121*d9f75844SAndroid Build Coastguard Worker def setUp(self): 122*d9f75844SAndroid Build Coastguard Worker self.tmp_dir = tempfile.mkdtemp() 123*d9f75844SAndroid Build Coastguard Worker self.file_path = os.path.join(self.tmp_dir, 'BUILD.gn') 124*d9f75844SAndroid Build Coastguard Worker self.input_api = MockInputApi() 125*d9f75844SAndroid Build Coastguard Worker self.output_api = MockOutputApi() 126*d9f75844SAndroid Build Coastguard Worker 127*d9f75844SAndroid Build Coastguard Worker def tearDown(self): 128*d9f75844SAndroid Build Coastguard Worker shutil.rmtree(self.tmp_dir, ignore_errors=True) 129*d9f75844SAndroid Build Coastguard Worker 130*d9f75844SAndroid Build Coastguard Worker def testErrorIfCAndCppAreMixed(self): 131*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(1, ['foo.c', 'bar.cc', 'bar.h']) 132*d9f75844SAndroid Build Coastguard Worker 133*d9f75844SAndroid Build Coastguard Worker def testErrorIfCAndObjCAreMixed(self): 134*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(1, ['foo.c', 'bar.m', 'bar.h']) 135*d9f75844SAndroid Build Coastguard Worker 136*d9f75844SAndroid Build Coastguard Worker def testErrorIfCAndObjCppAreMixed(self): 137*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(1, ['foo.c', 'bar.mm', 'bar.h']) 138*d9f75844SAndroid Build Coastguard Worker 139*d9f75844SAndroid Build Coastguard Worker def testErrorIfCppAndObjCAreMixed(self): 140*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(1, ['foo.cc', 'bar.m', 'bar.h']) 141*d9f75844SAndroid Build Coastguard Worker 142*d9f75844SAndroid Build Coastguard Worker def testErrorIfCppAndObjCppAreMixed(self): 143*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(1, ['foo.cc', 'bar.mm', 'bar.h']) 144*d9f75844SAndroid Build Coastguard Worker 145*d9f75844SAndroid Build Coastguard Worker def testNoErrorIfOnlyC(self): 146*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(0, ['foo.c', 'bar.c', 'bar.h']) 147*d9f75844SAndroid Build Coastguard Worker 148*d9f75844SAndroid Build Coastguard Worker def testNoErrorIfOnlyCpp(self): 149*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(0, ['foo.cc', 'bar.cc', 'bar.h']) 150*d9f75844SAndroid Build Coastguard Worker 151*d9f75844SAndroid Build Coastguard Worker def testNoErrorIfOnlyObjC(self): 152*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(0, ['foo.m', 'bar.m', 'bar.h']) 153*d9f75844SAndroid Build Coastguard Worker 154*d9f75844SAndroid Build Coastguard Worker def testNoErrorIfOnlyObjCpp(self): 155*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(0, ['foo.mm', 'bar.mm', 'bar.h']) 156*d9f75844SAndroid Build Coastguard Worker 157*d9f75844SAndroid Build Coastguard Worker def testNoErrorIfObjCAndObjCppAreMixed(self): 158*d9f75844SAndroid Build Coastguard Worker self._AssertNumberOfErrorsWithSources(0, ['foo.m', 'bar.mm', 'bar.h']) 159*d9f75844SAndroid Build Coastguard Worker 160*d9f75844SAndroid Build Coastguard Worker def testNoErrorIfSourcesAreInExclusiveIfBranches(self): 161*d9f75844SAndroid Build Coastguard Worker self._GenerateBuildFile( 162*d9f75844SAndroid Build Coastguard Worker textwrap.dedent(""" 163*d9f75844SAndroid Build Coastguard Worker rtc_library("bar_foo") { 164*d9f75844SAndroid Build Coastguard Worker if (is_win) { 165*d9f75844SAndroid Build Coastguard Worker sources = [ 166*d9f75844SAndroid Build Coastguard Worker "bar.cc", 167*d9f75844SAndroid Build Coastguard Worker ], 168*d9f75844SAndroid Build Coastguard Worker } 169*d9f75844SAndroid Build Coastguard Worker if (is_ios) { 170*d9f75844SAndroid Build Coastguard Worker sources = [ 171*d9f75844SAndroid Build Coastguard Worker "bar.mm", 172*d9f75844SAndroid Build Coastguard Worker ], 173*d9f75844SAndroid Build Coastguard Worker } 174*d9f75844SAndroid Build Coastguard Worker } 175*d9f75844SAndroid Build Coastguard Worker rtc_library("foo_bar") { 176*d9f75844SAndroid Build Coastguard Worker if (is_win) { 177*d9f75844SAndroid Build Coastguard Worker sources = [ 178*d9f75844SAndroid Build Coastguard Worker "foo.cc", 179*d9f75844SAndroid Build Coastguard Worker ], 180*d9f75844SAndroid Build Coastguard Worker } 181*d9f75844SAndroid Build Coastguard Worker if (is_ios) { 182*d9f75844SAndroid Build Coastguard Worker sources = [ 183*d9f75844SAndroid Build Coastguard Worker "foo.mm", 184*d9f75844SAndroid Build Coastguard Worker ], 185*d9f75844SAndroid Build Coastguard Worker } 186*d9f75844SAndroid Build Coastguard Worker } 187*d9f75844SAndroid Build Coastguard Worker """)) 188*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [MockFile(self.file_path)] 189*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckNoMixingSources(self.input_api, 190*d9f75844SAndroid Build Coastguard Worker [MockFile(self.file_path)], 191*d9f75844SAndroid Build Coastguard Worker self.output_api) 192*d9f75844SAndroid Build Coastguard Worker self.assertEqual(0, len(errors)) 193*d9f75844SAndroid Build Coastguard Worker 194*d9f75844SAndroid Build Coastguard Worker def testErrorIfSourcesAreNotInExclusiveIfBranches(self): 195*d9f75844SAndroid Build Coastguard Worker self._GenerateBuildFile( 196*d9f75844SAndroid Build Coastguard Worker textwrap.dedent(""" 197*d9f75844SAndroid Build Coastguard Worker rtc_library("bar_foo") { 198*d9f75844SAndroid Build Coastguard Worker if (is_win) { 199*d9f75844SAndroid Build Coastguard Worker sources = [ 200*d9f75844SAndroid Build Coastguard Worker "bar.cc", 201*d9f75844SAndroid Build Coastguard Worker ], 202*d9f75844SAndroid Build Coastguard Worker } 203*d9f75844SAndroid Build Coastguard Worker if (foo_bar) { 204*d9f75844SAndroid Build Coastguard Worker sources += [ 205*d9f75844SAndroid Build Coastguard Worker "bar.mm", 206*d9f75844SAndroid Build Coastguard Worker ], 207*d9f75844SAndroid Build Coastguard Worker } 208*d9f75844SAndroid Build Coastguard Worker } 209*d9f75844SAndroid Build Coastguard Worker rtc_library("foo_bar") { 210*d9f75844SAndroid Build Coastguard Worker if (is_win) { 211*d9f75844SAndroid Build Coastguard Worker sources = [ 212*d9f75844SAndroid Build Coastguard Worker "foo.cc", 213*d9f75844SAndroid Build Coastguard Worker ], 214*d9f75844SAndroid Build Coastguard Worker } 215*d9f75844SAndroid Build Coastguard Worker if (foo_bar) { 216*d9f75844SAndroid Build Coastguard Worker sources += [ 217*d9f75844SAndroid Build Coastguard Worker "foo.mm", 218*d9f75844SAndroid Build Coastguard Worker ], 219*d9f75844SAndroid Build Coastguard Worker } 220*d9f75844SAndroid Build Coastguard Worker if (is_ios) { 221*d9f75844SAndroid Build Coastguard Worker sources = [ 222*d9f75844SAndroid Build Coastguard Worker "bar.m", 223*d9f75844SAndroid Build Coastguard Worker "bar.c", 224*d9f75844SAndroid Build Coastguard Worker ], 225*d9f75844SAndroid Build Coastguard Worker } 226*d9f75844SAndroid Build Coastguard Worker } 227*d9f75844SAndroid Build Coastguard Worker """)) 228*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [MockFile(self.file_path)] 229*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckNoMixingSources(self.input_api, 230*d9f75844SAndroid Build Coastguard Worker [MockFile(self.file_path)], 231*d9f75844SAndroid Build Coastguard Worker self.output_api) 232*d9f75844SAndroid Build Coastguard Worker self.assertEqual(1, len(errors)) 233*d9f75844SAndroid Build Coastguard Worker self.assertTrue('bar.cc' in str(errors[0])) 234*d9f75844SAndroid Build Coastguard Worker self.assertTrue('bar.mm' in str(errors[0])) 235*d9f75844SAndroid Build Coastguard Worker self.assertTrue('foo.cc' in str(errors[0])) 236*d9f75844SAndroid Build Coastguard Worker self.assertTrue('foo.mm' in str(errors[0])) 237*d9f75844SAndroid Build Coastguard Worker self.assertTrue('bar.m' in str(errors[0])) 238*d9f75844SAndroid Build Coastguard Worker self.assertTrue('bar.c' in str(errors[0])) 239*d9f75844SAndroid Build Coastguard Worker 240*d9f75844SAndroid Build Coastguard Worker def _AssertNumberOfErrorsWithSources(self, number_of_errors, sources): 241*d9f75844SAndroid Build Coastguard Worker assert len(sources) == 3, 'This function accepts a list of 3 source files' 242*d9f75844SAndroid Build Coastguard Worker self._GenerateBuildFile( 243*d9f75844SAndroid Build Coastguard Worker textwrap.dedent(""" 244*d9f75844SAndroid Build Coastguard Worker rtc_static_library("bar_foo") { 245*d9f75844SAndroid Build Coastguard Worker sources = [ 246*d9f75844SAndroid Build Coastguard Worker "%s", 247*d9f75844SAndroid Build Coastguard Worker "%s", 248*d9f75844SAndroid Build Coastguard Worker "%s", 249*d9f75844SAndroid Build Coastguard Worker ], 250*d9f75844SAndroid Build Coastguard Worker } 251*d9f75844SAndroid Build Coastguard Worker rtc_library("foo_bar") { 252*d9f75844SAndroid Build Coastguard Worker sources = [ 253*d9f75844SAndroid Build Coastguard Worker "%s", 254*d9f75844SAndroid Build Coastguard Worker "%s", 255*d9f75844SAndroid Build Coastguard Worker "%s", 256*d9f75844SAndroid Build Coastguard Worker ], 257*d9f75844SAndroid Build Coastguard Worker } 258*d9f75844SAndroid Build Coastguard Worker """ % (tuple(sources) * 2))) 259*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [MockFile(self.file_path)] 260*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckNoMixingSources(self.input_api, 261*d9f75844SAndroid Build Coastguard Worker [MockFile(self.file_path)], 262*d9f75844SAndroid Build Coastguard Worker self.output_api) 263*d9f75844SAndroid Build Coastguard Worker self.assertEqual(number_of_errors, len(errors)) 264*d9f75844SAndroid Build Coastguard Worker if number_of_errors == 1: 265*d9f75844SAndroid Build Coastguard Worker for source in sources: 266*d9f75844SAndroid Build Coastguard Worker if not source.endswith('.h'): 267*d9f75844SAndroid Build Coastguard Worker self.assertTrue(source in str(errors[0])) 268*d9f75844SAndroid Build Coastguard Worker 269*d9f75844SAndroid Build Coastguard Worker def _GenerateBuildFile(self, content): 270*d9f75844SAndroid Build Coastguard Worker with open(self.file_path, 'w') as f: 271*d9f75844SAndroid Build Coastguard Worker f.write(content) 272*d9f75844SAndroid Build Coastguard Worker 273*d9f75844SAndroid Build Coastguard Worker 274*d9f75844SAndroid Build Coastguard Workerclass CheckAssertUsageTest(unittest.TestCase): 275*d9f75844SAndroid Build Coastguard Worker def setUp(self): 276*d9f75844SAndroid Build Coastguard Worker self.input_api = MockInputApi() 277*d9f75844SAndroid Build Coastguard Worker self.output_api = MockOutputApi() 278*d9f75844SAndroid Build Coastguard Worker self._content_with_assert = ['void Foo() {', ' assert(true);', '}'] 279*d9f75844SAndroid Build Coastguard Worker self._content_without_assert = ['void Foo() {', ' RTC_CHECK(true);', '}'] 280*d9f75844SAndroid Build Coastguard Worker 281*d9f75844SAndroid Build Coastguard Worker def testDetectsAssertInCcFile(self): 282*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [ 283*d9f75844SAndroid Build Coastguard Worker MockFile('with_assert.cc', self._content_with_assert), 284*d9f75844SAndroid Build Coastguard Worker MockFile('without_assert.cc', self._content_without_assert), 285*d9f75844SAndroid Build Coastguard Worker ] 286*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckAssertUsage(self.input_api, 287*d9f75844SAndroid Build Coastguard Worker self.output_api, lambda x: True) 288*d9f75844SAndroid Build Coastguard Worker self.assertEqual(1, len(errors)) 289*d9f75844SAndroid Build Coastguard Worker self.assertEqual('with_assert.cc', errors[0].items[0]) 290*d9f75844SAndroid Build Coastguard Worker 291*d9f75844SAndroid Build Coastguard Worker def testDetectsAssertInHeaderFile(self): 292*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [ 293*d9f75844SAndroid Build Coastguard Worker MockFile('with_assert.h', self._content_with_assert), 294*d9f75844SAndroid Build Coastguard Worker MockFile('without_assert.h', self._content_without_assert), 295*d9f75844SAndroid Build Coastguard Worker ] 296*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckAssertUsage(self.input_api, 297*d9f75844SAndroid Build Coastguard Worker self.output_api, lambda x: True) 298*d9f75844SAndroid Build Coastguard Worker self.assertEqual(1, len(errors)) 299*d9f75844SAndroid Build Coastguard Worker self.assertEqual('with_assert.h', errors[0].items[0]) 300*d9f75844SAndroid Build Coastguard Worker 301*d9f75844SAndroid Build Coastguard Worker def testDetectsAssertInObjCFile(self): 302*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [ 303*d9f75844SAndroid Build Coastguard Worker MockFile('with_assert.m', self._content_with_assert), 304*d9f75844SAndroid Build Coastguard Worker MockFile('without_assert.m', self._content_without_assert), 305*d9f75844SAndroid Build Coastguard Worker ] 306*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckAssertUsage(self.input_api, 307*d9f75844SAndroid Build Coastguard Worker self.output_api, lambda x: True) 308*d9f75844SAndroid Build Coastguard Worker self.assertEqual(1, len(errors)) 309*d9f75844SAndroid Build Coastguard Worker self.assertEqual('with_assert.m', errors[0].items[0]) 310*d9f75844SAndroid Build Coastguard Worker 311*d9f75844SAndroid Build Coastguard Worker def testDetectsAssertInObjCppFile(self): 312*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [ 313*d9f75844SAndroid Build Coastguard Worker MockFile('with_assert.mm', self._content_with_assert), 314*d9f75844SAndroid Build Coastguard Worker MockFile('without_assert.mm', self._content_without_assert), 315*d9f75844SAndroid Build Coastguard Worker ] 316*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckAssertUsage(self.input_api, 317*d9f75844SAndroid Build Coastguard Worker self.output_api, lambda x: True) 318*d9f75844SAndroid Build Coastguard Worker self.assertEqual(1, len(errors)) 319*d9f75844SAndroid Build Coastguard Worker self.assertEqual('with_assert.mm', errors[0].items[0]) 320*d9f75844SAndroid Build Coastguard Worker 321*d9f75844SAndroid Build Coastguard Worker def testDoesntDetectAssertInOtherFiles(self): 322*d9f75844SAndroid Build Coastguard Worker self.input_api.files = [ 323*d9f75844SAndroid Build Coastguard Worker MockFile('with_assert.cpp', self._content_with_assert), 324*d9f75844SAndroid Build Coastguard Worker ] 325*d9f75844SAndroid Build Coastguard Worker errors = PRESUBMIT.CheckAssertUsage(self.input_api, 326*d9f75844SAndroid Build Coastguard Worker self.output_api, lambda x: True) 327*d9f75844SAndroid Build Coastguard Worker self.assertEqual(0, len(errors)) 328*d9f75844SAndroid Build Coastguard Worker 329*d9f75844SAndroid Build Coastguard Worker 330*d9f75844SAndroid Build Coastguard Workerif __name__ == '__main__': 331*d9f75844SAndroid Build Coastguard Worker unittest.main() 332