[go: nahoru, domu]

blob: 56e862e2e34579deef90485b5405905288ec3044 [file] [log] [blame]
#!/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, include_deletes=True):
if include_deletes:
return self.affected_files
else:
return filter(lambda x: x.Action() != 'D', self.affected_files)
def AffectedTextFiles(self, include_deletes=True):
return self.affected_files
class MockAffectedFile(object):
def __init__(self, path, action='A'):
self.path = path
self.action = action
def Action(self):
return self.action
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 + 1 global EOF error.
self.failUnless(len(PRESUBMIT.LocalChecks(api, MockOutputApi)) == 8)
self.file_contents = 'file\twith\ttabs\n'
# 3 source files, 1 error by file.
self.failUnless(len(PRESUBMIT.LocalChecks(api, MockOutputApi)) == 3)
self.file_contents = 'file\rusing\rCRs\n'
# 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\n'
# 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\n'
self.failIf(PRESUBMIT.LocalChecks(api, MockOutputApi))
def testLocalChecksDeletedFile(self):
api = MockInputApi()
api.affected_files = [
MockAffectedFile('foo/blat/source.py', 'D'),
]
self.file_contents = 'file with \n\terror\nhere\r\nyes there'
self.failUnless(len(PRESUBMIT.LocalChecks(api, MockOutputApi)) == 0)
if __name__ == '__main__':
unittest.main()