1*3ac0a46fSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*3ac0a46fSAndroid Build Coastguard Worker# Copyright 2020 The PDFium Authors 3*3ac0a46fSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*3ac0a46fSAndroid Build Coastguard Worker# found in the LICENSE file. 5*3ac0a46fSAndroid Build Coastguard Worker 6*3ac0a46fSAndroid Build Coastguard Workerimport unittest 7*3ac0a46fSAndroid Build Coastguard Worker 8*3ac0a46fSAndroid Build Coastguard Workerimport PRESUBMIT 9*3ac0a46fSAndroid Build Coastguard Workerfrom PRESUBMIT_test_mocks import MockInputApi, MockOutputApi, MockFile 10*3ac0a46fSAndroid Build Coastguard Worker 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Workerclass BannedTypeCheckTest(unittest.TestCase): 13*3ac0a46fSAndroid Build Coastguard Worker 14*3ac0a46fSAndroid Build Coastguard Worker def testBannedCppFunctions(self): 15*3ac0a46fSAndroid Build Coastguard Worker input_api = MockInputApi() 16*3ac0a46fSAndroid Build Coastguard Worker input_api.files = [ 17*3ac0a46fSAndroid Build Coastguard Worker MockFile('some/cpp/problematic/file.cc', ['using namespace std;']), 18*3ac0a46fSAndroid Build Coastguard Worker MockFile('third_party/some/cpp/problematic/file.cc', 19*3ac0a46fSAndroid Build Coastguard Worker ['using namespace std;']), 20*3ac0a46fSAndroid Build Coastguard Worker MockFile('some/cpp/ok/file.cc', ['using std::string;']), 21*3ac0a46fSAndroid Build Coastguard Worker MockFile('some/cpp/nocheck/file.cc', 22*3ac0a46fSAndroid Build Coastguard Worker ['using namespace std; // nocheck']), 23*3ac0a46fSAndroid Build Coastguard Worker MockFile('some/cpp/comment/file.cc', 24*3ac0a46fSAndroid Build Coastguard Worker [' // A comment about `using namespace std;`']), 25*3ac0a46fSAndroid Build Coastguard Worker MockFile('some/cpp/v8/get-current.cc', ['v8::Isolate::GetCurrent()']), 26*3ac0a46fSAndroid Build Coastguard Worker MockFile('some/cpp/v8/try-get-current.cc', 27*3ac0a46fSAndroid Build Coastguard Worker ['v8::Isolate::TryGetCurrent()']), 28*3ac0a46fSAndroid Build Coastguard Worker ] 29*3ac0a46fSAndroid Build Coastguard Worker 30*3ac0a46fSAndroid Build Coastguard Worker results = PRESUBMIT._CheckNoBannedFunctions(input_api, MockOutputApi()) 31*3ac0a46fSAndroid Build Coastguard Worker 32*3ac0a46fSAndroid Build Coastguard Worker # There are no warnings to test, so add an empty warning to keep the test 33*3ac0a46fSAndroid Build Coastguard Worker # extendable for the future. This block can be removed once warnings are 34*3ac0a46fSAndroid Build Coastguard Worker # added. 35*3ac0a46fSAndroid Build Coastguard Worker self.assertEqual(1, len(results)) 36*3ac0a46fSAndroid Build Coastguard Worker results.insert(0, MockOutputApi().PresubmitPromptWarning('')) 37*3ac0a46fSAndroid Build Coastguard Worker 38*3ac0a46fSAndroid Build Coastguard Worker # warnings are results[0], errors are results[1] 39*3ac0a46fSAndroid Build Coastguard Worker self.assertEqual(2, len(results)) 40*3ac0a46fSAndroid Build Coastguard Worker self.assertTrue('some/cpp/problematic/file.cc' in results[1].message) 41*3ac0a46fSAndroid Build Coastguard Worker self.assertFalse( 42*3ac0a46fSAndroid Build Coastguard Worker 'third_party/some/cpp/problematic/file.cc' in results[1].message) 43*3ac0a46fSAndroid Build Coastguard Worker self.assertFalse('some/cpp/ok/file.cc' in results[1].message) 44*3ac0a46fSAndroid Build Coastguard Worker self.assertFalse('some/cpp/nocheck/file.cc' in results[0].message) 45*3ac0a46fSAndroid Build Coastguard Worker self.assertFalse('some/cpp/nocheck/file.cc' in results[1].message) 46*3ac0a46fSAndroid Build Coastguard Worker self.assertFalse('some/cpp/comment/file.cc' in results[0].message) 47*3ac0a46fSAndroid Build Coastguard Worker self.assertFalse('some/cpp/comment/file.cc' in results[1].message) 48*3ac0a46fSAndroid Build Coastguard Worker self.assertTrue('some/cpp/v8/get-current.cc' in results[1].message) 49*3ac0a46fSAndroid Build Coastguard Worker self.assertTrue('some/cpp/v8/try-get-current.cc' in results[1].message) 50*3ac0a46fSAndroid Build Coastguard Worker 51*3ac0a46fSAndroid Build Coastguard Worker 52*3ac0a46fSAndroid Build Coastguard Workerclass CheckChangeOnUploadTest(unittest.TestCase): 53*3ac0a46fSAndroid Build Coastguard Worker 54*3ac0a46fSAndroid Build Coastguard Worker def testCheckPngNames(self): 55*3ac0a46fSAndroid Build Coastguard Worker correct_paths = [ 56*3ac0a46fSAndroid Build Coastguard Worker 'test_expected.pdf.0.png', 57*3ac0a46fSAndroid Build Coastguard Worker 'test_expected_win.pdf.1.png', 58*3ac0a46fSAndroid Build Coastguard Worker 'test_expected_agg.pdf.3.png', 59*3ac0a46fSAndroid Build Coastguard Worker 'test_expected_agg_linux.pdf.3.png', 60*3ac0a46fSAndroid Build Coastguard Worker 'test_expected_skia.pdf.2.png', 61*3ac0a46fSAndroid Build Coastguard Worker 'test_expected_skia_mac.pdf.4.png', 62*3ac0a46fSAndroid Build Coastguard Worker 'notpng.cc', # Check will be skipped for non-PNG files 63*3ac0a46fSAndroid Build Coastguard Worker ] 64*3ac0a46fSAndroid Build Coastguard Worker wrong_paths = [ 65*3ac0a46fSAndroid Build Coastguard Worker 'expected.pdf.0.png', # Missing '_expected' 66*3ac0a46fSAndroid Build Coastguard Worker 'test1_expected.0.png', # Missing '.pdf' 67*3ac0a46fSAndroid Build Coastguard Worker 'test2_expected.pdf.png', # Missing page number 68*3ac0a46fSAndroid Build Coastguard Worker 'test3_expected.pdf.x.png', # Wrong character for page number 69*3ac0a46fSAndroid Build Coastguard Worker 'test4_expected_linux_agg.pdf.0.png', # Wrong order of keywords 70*3ac0a46fSAndroid Build Coastguard Worker 'test4_expected_mac_skia.pdf.0.png', # Wrong order of keywords 71*3ac0a46fSAndroid Build Coastguard Worker 'test5_expected_useskia.pdf.0.png', # Wrong keyword 72*3ac0a46fSAndroid Build Coastguard Worker ] 73*3ac0a46fSAndroid Build Coastguard Worker mock_input_api = MockInputApi() 74*3ac0a46fSAndroid Build Coastguard Worker mock_output_api = MockOutputApi() 75*3ac0a46fSAndroid Build Coastguard Worker mock_input_api.files = map(MockFile, correct_paths + wrong_paths) 76*3ac0a46fSAndroid Build Coastguard Worker errors = list( 77*3ac0a46fSAndroid Build Coastguard Worker map(str, PRESUBMIT._CheckPngNames(mock_input_api, mock_output_api))) 78*3ac0a46fSAndroid Build Coastguard Worker 79*3ac0a46fSAndroid Build Coastguard Worker self.assertEqual(len(wrong_paths), len(errors)) 80*3ac0a46fSAndroid Build Coastguard Worker self.assertFalse('notpng.cc' in errors[0]) 81*3ac0a46fSAndroid Build Coastguard Worker for path, error in zip(wrong_paths, errors): 82*3ac0a46fSAndroid Build Coastguard Worker self.assertIn(path, error) 83*3ac0a46fSAndroid Build Coastguard Worker 84*3ac0a46fSAndroid Build Coastguard Worker 85*3ac0a46fSAndroid Build Coastguard Workerif __name__ == '__main__': 86*3ac0a46fSAndroid Build Coastguard Worker unittest.main() 87