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