#!/usr/bin/python # Copyright (c) 2009 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Unit tests for top-level Chromium presubmit script. """ import os import PRESUBMIT import re import unittest class MockInputApi(object): def __init__(self): self.affected_files = [] self.re = re self.os_path = os.path def AffectedFiles(self): return self.affected_files def AffectedTextFiles(self, include_deletes=True): return self.affected_files class MockAffectedFile(object): def __init__(self, path): self.path = path def LocalPath(self): return self.path class MockOutputApi(object): class PresubmitError(object): def __init__(self, msg, items=[], long_text=''): self.msg = msg self.items = items class PresubmitUnittest(unittest.TestCase): def setUp(self): self.file_contents = '' def MockReadFile(path): self.failIf(path.endswith('notsource')) return self.file_contents self._ReadFile = PRESUBMIT.ReadFile PRESUBMIT.ReadFile = MockReadFile def tearDown(self): PRESUBMIT.ReadFile = self._ReadFile def testLocalChecks(self): api = MockInputApi() api.affected_files = [ MockAffectedFile('foo/blat/yoo.notsource'), MockAffectedFile('third_party/blat/source.cc'), MockAffectedFile('foo/blat/source.h'), MockAffectedFile('foo/blat/source.mm'), MockAffectedFile('foo/blat/source.py'), ] self.file_contents = 'file with \n\terror\nhere\r\nyes there' # 3 source files, 2 errors by file + 1 global CR error. self.failUnless(len(PRESUBMIT.LocalChecks(api, MockOutputApi)) == 7) self.file_contents = 'file\twith\ttabs' # 3 source files, 1 error by file. self.failUnless(len(PRESUBMIT.LocalChecks(api, MockOutputApi)) == 3) self.file_contents = 'file\rusing\rCRs' # One global CR error. self.failUnless(len(PRESUBMIT.LocalChecks(api, MockOutputApi)) == 1) self.failUnless( len(PRESUBMIT.LocalChecks(api, MockOutputApi)[0].items) == 3) self.file_contents = 'both\ttabs and\r\nCRLF' # 3 source files, 1 error by file + 1 global CR error. self.failUnless(len(PRESUBMIT.LocalChecks(api, MockOutputApi)) == 4) self.file_contents = 'file with\nzero \\t errors \\r\\n' self.failIf(PRESUBMIT.LocalChecks(api, MockOutputApi)) if __name__ == '__main__': unittest.main()