blob: 419f937b2eb3b3f7f5bcc70c1934c5275b4f5241 [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 Frysingerae409522014-02-01 03:16:11 -05007"""Unittests for pre-upload.py."""
8
Mike Frysinger09d6a3d2013-10-08 22:21:03 -04009from __future__ import print_function
10
Jon Salz98255932012-08-18 14:48:02 +080011import mox
David Jamesc3b68b32013-04-03 09:17:03 -070012import os
13import sys
Jon Salz98255932012-08-18 14:48:02 +080014import unittest
15
16
17# pylint: disable=W0212
David Jamesc3b68b32013-04-03 09:17:03 -070018if __name__ == '__main__':
19 sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), '..', '..'))
Jon Salz98255932012-08-18 14:48:02 +080020
21pre_upload = __import__('pre-upload')
22
23
24class TryUTF8DecodeTest(unittest.TestCase):
Mike Frysingerae409522014-02-01 03:16:11 -050025 """Verify we sanely handle unicode content."""
26
Jon Salz98255932012-08-18 14:48:02 +080027 def runTest(self):
28 self.assertEquals(u'', pre_upload._try_utf8_decode(''))
29 self.assertEquals(u'abc', pre_upload._try_utf8_decode('abc'))
30 self.assertEquals(u'你好布萊恩', pre_upload._try_utf8_decode('你好布萊恩'))
31 # Invalid UTF-8
32 self.assertEquals('\x80', pre_upload._try_utf8_decode('\x80'))
33
34
35class CheckNoLongLinesTest(unittest.TestCase):
Mike Frysingerae409522014-02-01 03:16:11 -050036 """Tests for _check_no_long_lines."""
37
Jon Salz98255932012-08-18 14:48:02 +080038 def setUp(self):
39 self.mocker = mox.Mox()
40 self.mocker.StubOutWithMock(pre_upload, '_filter_files')
41 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
42 self.mocker.StubOutWithMock(pre_upload, '_get_file_diff')
43 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(['x.py'])
44 pre_upload._filter_files(
45 ['x.py'], mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(['x.py'])
46
47 def tearDown(self):
48 self.mocker.UnsetStubs()
49 self.mocker.VerifyAll()
50
51 def runTest(self):
52 pre_upload._get_file_diff(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
53 [(1, u"x" * 80), # OK
54 (2, "\x80" * 80), # OK
55 (3, u"x" * 81), # Too long
56 (4, "\x80" * 81), # Too long
57 (5, u"See http://" + (u"x" * 80)), # OK (URL)
58 (6, u"See https://" + (u"x" * 80)), # OK (URL)
59 (7, u"# define " + (u"x" * 80)), # OK (compiler directive)
60 (8, u"#define" + (u"x" * 74)), # Too long
61 ])
62 self.mocker.ReplayAll()
63 failure = pre_upload._check_no_long_lines('PROJECT', 'COMMIT')
64 self.assertTrue(failure)
65 self.assertEquals('Found lines longer than 80 characters (first 5 shown):',
66 failure.msg)
67 self.assertEquals(['x.py, line %d, 81 chars' % line
68 for line in [3, 4, 8]],
69 failure.items)
70
Mike Frysingerae409522014-02-01 03:16:11 -050071
Olof Johanssona96810f2012-09-04 16:20:03 -070072class CheckKernelConfig(unittest.TestCase):
Mike Frysingerae409522014-02-01 03:16:11 -050073 """Tests for _kernel_configcheck."""
74
75 def setUp(self):
76 self.mocker = mox.Mox()
77
Olof Johanssona96810f2012-09-04 16:20:03 -070078 def tearDown(self):
79 self.mocker.UnsetStubs()
80
81 def runTest(self):
Olof Johanssona96810f2012-09-04 16:20:03 -070082 # Mixed changes, should fail
83 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
84 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(
85 ['/kernel/files/chromeos/config/base.config',
86 '/kernel/files/arch/arm/mach-exynos/mach-exynos5-dt.c'
87 ])
88 self.mocker.ReplayAll()
89 failure = pre_upload._kernel_configcheck('PROJECT', 'COMMIT')
90 self.assertTrue(failure)
91
92 # Code-only changes, should pass
93 self.mocker.UnsetStubs()
94 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
95 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(
96 ['/kernel/files/Makefile',
97 '/kernel/files/arch/arm/mach-exynos/mach-exynos5-dt.c'
98 ])
99 self.mocker.ReplayAll()
100 failure = pre_upload._kernel_configcheck('PROJECT', 'COMMIT')
101 self.assertFalse(failure)
102
103 # Config-only changes, should pass
104 self.mocker.UnsetStubs()
105 self.mocker.StubOutWithMock(pre_upload, '_get_affected_files')
106 pre_upload._get_affected_files(mox.IgnoreArg()).AndReturn(
107 ['/kernel/files/chromeos/config/base.config',
108 ])
109 self.mocker.ReplayAll()
110 failure = pre_upload._kernel_configcheck('PROJECT', 'COMMIT')
111 self.assertFalse(failure)
112
Jon Salz98255932012-08-18 14:48:02 +0800113
114if __name__ == '__main__':
115 unittest.main()