blob: 127286283e3453ed72390afed31a35f9c37b50cf [file] [log] [blame]
Jon Salz98255932012-08-18 14:48:02 +08001#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
Mike Frysinger09d6a3d2013-10-08 22:21:03 -04007from __future__ import print_function
8
Jon Salz98255932012-08-18 14:48:02 +08009import mox
David Jamesc3b68b32013-04-03 09:17:03 -070010import os
11import sys
Jon Salz98255932012-08-18 14:48:02 +080012import unittest
13
14
15# pylint: disable=W0212
David Jamesc3b68b32013-04-03 09:17:03 -070016if __name__ == '__main__':
17 sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), '..', '..'))
Jon Salz98255932012-08-18 14:48:02 +080018
19pre_upload = __import__('pre-upload')
20
21
22class TryUTF8DecodeTest(unittest.TestCase):
23 def runTest(self):
24 self.assertEquals(u'', pre_upload._try_utf8_decode(''))
25 self.assertEquals(u'abc', pre_upload._try_utf8_decode('abc'))
26 self.assertEquals(u'你好布萊恩', pre_upload._try_utf8_decode('你好布萊恩'))
27 # Invalid UTF-8
28 self.assertEquals('\x80', pre_upload._try_utf8_decode('\x80'))
29
30
31class CheckNoLongLinesTest(unittest.TestCase):
32 def setUp(self):
33 self.mocker = mox.Mox()
34 self.mocker.StubOutWithMock(pre_upload, '_filter_files')
35 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
36 self.mocker.StubOutWithMock(pre_upload, '_get_file_diff')
37 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(['x.py'])
38 pre_upload._filter_files(
39 ['x.py'], mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(['x.py'])
40
41 def tearDown(self):
42 self.mocker.UnsetStubs()
43 self.mocker.VerifyAll()
44
45 def runTest(self):
46 pre_upload._get_file_diff(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
47 [(1, u"x" * 80), # OK
48 (2, "\x80" * 80), # OK
49 (3, u"x" * 81), # Too long
50 (4, "\x80" * 81), # Too long
51 (5, u"See http://" + (u"x" * 80)), # OK (URL)
52 (6, u"See https://" + (u"x" * 80)), # OK (URL)
53 (7, u"# define " + (u"x" * 80)), # OK (compiler directive)
54 (8, u"#define" + (u"x" * 74)), # Too long
55 ])
56 self.mocker.ReplayAll()
57 failure = pre_upload._check_no_long_lines('PROJECT', 'COMMIT')
58 self.assertTrue(failure)
59 self.assertEquals('Found lines longer than 80 characters (first 5 shown):',
60 failure.msg)
61 self.assertEquals(['x.py, line %d, 81 chars' % line
62 for line in [3, 4, 8]],
63 failure.items)
64
Olof Johanssona96810f2012-09-04 16:20:03 -070065class CheckKernelConfig(unittest.TestCase):
66 def tearDown(self):
67 self.mocker.UnsetStubs()
68
69 def runTest(self):
70 self.mocker = mox.Mox();
71
72 # Mixed changes, should fail
73 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
74 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(
75 ['/kernel/files/chromeos/config/base.config',
76 '/kernel/files/arch/arm/mach-exynos/mach-exynos5-dt.c'
77 ])
78 self.mocker.ReplayAll()
79 failure = pre_upload._kernel_configcheck('PROJECT', 'COMMIT')
80 self.assertTrue(failure)
81
82 # Code-only changes, should pass
83 self.mocker.UnsetStubs()
84 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
85 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(
86 ['/kernel/files/Makefile',
87 '/kernel/files/arch/arm/mach-exynos/mach-exynos5-dt.c'
88 ])
89 self.mocker.ReplayAll()
90 failure = pre_upload._kernel_configcheck('PROJECT', 'COMMIT')
91 self.assertFalse(failure)
92
93 # Config-only changes, should pass
94 self.mocker.UnsetStubs()
95 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
96 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(
97 ['/kernel/files/chromeos/config/base.config',
98 ])
99 self.mocker.ReplayAll()
100 failure = pre_upload._kernel_configcheck('PROJECT', 'COMMIT')
101 self.assertFalse(failure)
102
Jon Salz98255932012-08-18 14:48:02 +0800103
104if __name__ == '__main__':
105 unittest.main()