1#!/usr/bin/env python 2# Copyright 2018 The Chromium 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 os 7import sys 8import unittest 9 10import PRESUBMIT 11 12sys.path.append( 13 os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..')) 14 15from PRESUBMIT_test_mocks import (MockInputApi, MockOutputApi, MockAffectedFile) 16 17 18def FullPath(path): 19 return os.path.join(MockInputApi().PresubmitLocalPath(), path) 20 21 22class MetricsProtoCheckerTest(unittest.TestCase): 23 24 def testModifiedWithoutReadme(self): 25 input_api = MockInputApi() 26 input_api.files = [MockAffectedFile(FullPath('somefile.proto'), 'some diff')] 27 self.assertEqual(1, len(PRESUBMIT.CheckChange(input_api, MockOutputApi()))) 28 29 def testModifiedWithReadme(self): 30 input_api = MockInputApi() 31 input_api.files = [ 32 MockAffectedFile(FullPath('somefile.proto'), 'some diff'), 33 MockAffectedFile(FullPath(PRESUBMIT.README), 'some diff'), 34 ] 35 self.assertEqual(0, len(PRESUBMIT.CheckChange(input_api, MockOutputApi()))) 36 37 def testModifiedReadmeOnly(self): 38 input_api = MockInputApi() 39 input_api.files = [ 40 MockAffectedFile(FullPath(PRESUBMIT.README), 'some diff'), 41 ] 42 self.assertEqual(0, len(PRESUBMIT.CheckChange(input_api, MockOutputApi()))) 43 44 def testExcludedPaths(self): 45 input_api = MockInputApi() 46 input_api.files = [ 47 # Changes to these files don't require README changes. 48 MockAffectedFile(FullPath('PRESUBMIT.py'), 'some diff'), 49 MockAffectedFile(FullPath('PRESUBMIT_test.py'), 'some diff'), 50 MockAffectedFile(FullPath('OWNERS'), 'some diff'), 51 MockAffectedFile(FullPath('DIR_METADATA'), 'some diff'), 52 ] 53 self.assertEqual(0, len(PRESUBMIT.CheckChange(input_api, MockOutputApi()))) 54 55 def testIncludedAndExcludedPaths(self): 56 input_api = MockInputApi() 57 input_api.files = [ 58 # Changes to these files don't require README changes. 59 MockAffectedFile(FullPath('PRESUBMIT.py'), 'some diff'), 60 MockAffectedFile(FullPath('PRESUBMIT_test.py'), 'some diff'), 61 MockAffectedFile(FullPath('OWNERS'), 'some diff'), 62 # But this one does. 63 MockAffectedFile(FullPath('somefile.proto'), 'some diff'), 64 ] 65 self.assertEqual(1, len(PRESUBMIT.CheckChange(input_api, MockOutputApi()))) 66 67 def testPathOutsideLocalDir(self): 68 input_api = MockInputApi() 69 input_api.files = [ 70 MockAffectedFile('file_in_root_dir.proto', 'some diff'), 71 ] 72 self.assertEqual(0, len(PRESUBMIT.CheckChange(input_api, MockOutputApi()))) 73 74 75if __name__ == '__main__': 76 unittest.main() 77