blob: 9812a61899fe9062e9fe72c93b54ad1d1f6dc4a7 [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
7import mox
David Jamesc3b68b32013-04-03 09:17:03 -07008import os
9import sys
Jon Salz98255932012-08-18 14:48:02 +080010import unittest
11
12
13# pylint: disable=W0212
David Jamesc3b68b32013-04-03 09:17:03 -070014if __name__ == '__main__':
15 sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), '..', '..'))
Jon Salz98255932012-08-18 14:48:02 +080016
17pre_upload = __import__('pre-upload')
18
19
20class TryUTF8DecodeTest(unittest.TestCase):
21 def runTest(self):
22 self.assertEquals(u'', pre_upload._try_utf8_decode(''))
23 self.assertEquals(u'abc', pre_upload._try_utf8_decode('abc'))
24 self.assertEquals(u'你好布萊恩', pre_upload._try_utf8_decode('你好布萊恩'))
25 # Invalid UTF-8
26 self.assertEquals('\x80', pre_upload._try_utf8_decode('\x80'))
27
28
29class CheckNoLongLinesTest(unittest.TestCase):
30 def setUp(self):
31 self.mocker = mox.Mox()
32 self.mocker.StubOutWithMock(pre_upload, '_filter_files')
33 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
34 self.mocker.StubOutWithMock(pre_upload, '_get_file_diff')
35 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(['x.py'])
36 pre_upload._filter_files(
37 ['x.py'], mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(['x.py'])
38
39 def tearDown(self):
40 self.mocker.UnsetStubs()
41 self.mocker.VerifyAll()
42
43 def runTest(self):
44 pre_upload._get_file_diff(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
45 [(1, u"x" * 80), # OK
46 (2, "\x80" * 80), # OK
47 (3, u"x" * 81), # Too long
48 (4, "\x80" * 81), # Too long
49 (5, u"See http://" + (u"x" * 80)), # OK (URL)
50 (6, u"See https://" + (u"x" * 80)), # OK (URL)
51 (7, u"# define " + (u"x" * 80)), # OK (compiler directive)
52 (8, u"#define" + (u"x" * 74)), # Too long
53 ])
54 self.mocker.ReplayAll()
55 failure = pre_upload._check_no_long_lines('PROJECT', 'COMMIT')
56 self.assertTrue(failure)
57 self.assertEquals('Found lines longer than 80 characters (first 5 shown):',
58 failure.msg)
59 self.assertEquals(['x.py, line %d, 81 chars' % line
60 for line in [3, 4, 8]],
61 failure.items)
62
Olof Johanssona96810f2012-09-04 16:20:03 -070063class CheckKernelConfig(unittest.TestCase):
64 def tearDown(self):
65 self.mocker.UnsetStubs()
66
67 def runTest(self):
68 self.mocker = mox.Mox();
69
70 # Mixed changes, should fail
71 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
72 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(
73 ['/kernel/files/chromeos/config/base.config',
74 '/kernel/files/arch/arm/mach-exynos/mach-exynos5-dt.c'
75 ])
76 self.mocker.ReplayAll()
77 failure = pre_upload._kernel_configcheck('PROJECT', 'COMMIT')
78 self.assertTrue(failure)
79
80 # Code-only changes, should pass
81 self.mocker.UnsetStubs()
82 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
83 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(
84 ['/kernel/files/Makefile',
85 '/kernel/files/arch/arm/mach-exynos/mach-exynos5-dt.c'
86 ])
87 self.mocker.ReplayAll()
88 failure = pre_upload._kernel_configcheck('PROJECT', 'COMMIT')
89 self.assertFalse(failure)
90
91 # Config-only changes, should pass
92 self.mocker.UnsetStubs()
93 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
94 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(
95 ['/kernel/files/chromeos/config/base.config',
96 ])
97 self.mocker.ReplayAll()
98 failure = pre_upload._kernel_configcheck('PROJECT', 'COMMIT')
99 self.assertFalse(failure)
100
Jon Salz98255932012-08-18 14:48:02 +0800101
102if __name__ == '__main__':
103 unittest.main()