414e4fef41e4cd05c2bbdddb71e4efdeeeb95e1f
[WebKit-https.git] / Tools / Scripts / webkitpy / style / checkers / changelog_unittest.py
1 #!/usr/bin/env python
2 #
3 # Copyright (C) 2010 Apple Inc. All rights reserved.
4 # Copyright (C) 2011 Patrick Gansterer <paroga@paroga.com>
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1.  Redistributions of source code must retain the above copyright
10 #     notice, this list of conditions and the following disclaimer.
11 # 2.  Redistributions in binary form must reproduce the above copyright
12 #     notice, this list of conditions and the following disclaimer in the
13 #     documentation and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
16 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
19 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26 """Unit test for changelog.py."""
27
28 import changelog
29 import unittest
30
31
32 class ChangeLogCheckerTest(unittest.TestCase):
33     """Tests ChangeLogChecker class."""
34
35     def assert_no_error(self, changelog_data):
36         def handle_style_error(line_number, category, confidence, message):
37             self.fail('Unexpected error: %d %s %d %s' % (line_number, category, confidence, message))
38         checker = changelog.ChangeLogChecker('ChangeLog', handle_style_error)
39         checker.check(changelog_data.split('\n'))
40
41     def assert_error(self, expected_line_number, expected_category, changelog_data):
42         self.had_error = False
43
44         def handle_style_error(line_number, category, confidence, message):
45             self.had_error = True
46             self.assertEquals(expected_line_number, line_number)
47             self.assertEquals(expected_category, category)
48
49         checker = changelog.ChangeLogChecker('ChangeLog', handle_style_error)
50         checker.check(changelog_data.split('\n'))
51         self.assertTrue(self.had_error)
52
53     def mock_handle_style_error(self):
54         pass
55
56     def test_init(self):
57         checker = changelog.ChangeLogChecker('ChangeLog', self.mock_handle_style_error)
58         self.assertEquals(checker.file_path, 'ChangeLog')
59         self.assertEquals(checker.handle_style_error, self.mock_handle_style_error)
60
61     def test_missing_bug_number(self):
62         entries = [
63             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Example bug',
64             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Example bug\n        http://bugs.webkit.org/show_bug.cgi?id=\n',
65             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Example bug\n        https://bugs.webkit.org/show_bug.cgi?id=\n',
66             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Example bug\n        http://webkit.org/b/\n',
67             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Example bug\n        http://trac.webkit.org/changeset/12345\n',
68             'Example bug\n        https://bugs.webkit.org/show_bug.cgi\n\n2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n',
69             'Example bug\n        More text about bug.\n\n2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n',
70         ]
71
72         for entry in entries:
73             self.assert_error(1, 'changelog/bugnumber', entry)
74
75     def test_no_error(self):
76         entries = [
77             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Example bug\n        http://bugs.webkit.org/show_bug.cgi?id=12345\n',
78             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Example bug\n        https://bugs.webkit.org/show_bug.cgi?id=12345\n',
79             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Example bug\n        http://webkit.org/b/12345\n',
80             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Unreview build fix for r12345.\n',
81             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Fix build after a bad change.\n',
82             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n\n        Fix example port build.\n',
83             'Example bug\n        https://bugs.webkit.org/show_bug.cgi?id=12345\n\n2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n',
84         ]
85
86         for entry in entries:
87             self.assert_no_error(entry)
88
89 if __name__ == '__main__':
90     unittest.main()