Home | History | Annotate | Download | only in checkers
      1 #!/usr/bin/env python
      2 #
      3 # Copyright (C) 2010 Apple Inc. All rights reserved.
      4 # Copyright (C) 2011 Patrick Gansterer <paroga (at] 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, lines_to_check, changelog_data):
     36         def handle_style_error(line_number, category, confidence, message):
     37             self.fail('Unexpected error: %d %s %d %s for\n%s' % (line_number, category, confidence, message, changelog_data))
     38         self.lines_to_check = set(lines_to_check)
     39         checker = changelog.ChangeLogChecker('ChangeLog', handle_style_error, self.mock_should_line_be_checked)
     40         checker.check(changelog_data.split('\n'))
     41 
     42     def assert_error(self, expected_line_number, lines_to_check, expected_category, changelog_data):
     43         self.had_error = False
     44 
     45         def handle_style_error(line_number, category, confidence, message):
     46             self.had_error = True
     47             self.assertEquals(expected_line_number, line_number)
     48             self.assertEquals(expected_category, category)
     49         self.lines_to_check = set(lines_to_check)
     50         checker = changelog.ChangeLogChecker('ChangeLog', handle_style_error, self.mock_should_line_be_checked)
     51         checker.check(changelog_data.split('\n'))
     52         self.assertTrue(self.had_error)
     53 
     54     def mock_handle_style_error(self):
     55         pass
     56 
     57     def mock_should_line_be_checked(self, line_number):
     58         return line_number in self.lines_to_check
     59 
     60     def test_init(self):
     61         checker = changelog.ChangeLogChecker('ChangeLog', self.mock_handle_style_error, self.mock_should_line_be_checked)
     62         self.assertEquals(checker.file_path, 'ChangeLog')
     63         self.assertEquals(checker.handle_style_error, self.mock_handle_style_error)
     64         self.assertEquals(checker.should_line_be_checked, self.mock_should_line_be_checked)
     65 
     66     def test_missing_bug_number(self):
     67         self.assert_error(1, range(1, 20), 'changelog/bugnumber',
     68                           '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
     69                           '\n'
     70                           '        Example bug\n')
     71         self.assert_error(1, range(1, 20), 'changelog/bugnumber',
     72                           '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
     73                           '\n'
     74                           '        Example bug\n'
     75                           '        http://bugs.webkit.org/show_bug.cgi?id=\n')
     76         self.assert_error(1, range(1, 20), 'changelog/bugnumber',
     77                           '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
     78                           '\n'
     79                           '        Example bug\n'
     80                           '        https://bugs.webkit.org/show_bug.cgi?id=\n')
     81         self.assert_error(1, range(1, 20), 'changelog/bugnumber',
     82                           '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
     83                           '\n'
     84                           '        Example bug\n'
     85                           '        http://webkit.org/b/\n')
     86         self.assert_error(1, range(1, 20), 'changelog/bugnumber',
     87                           '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
     88                           '\n'
     89                           '        Example bug'
     90                           '\n'
     91                           '        http://trac.webkit.org/changeset/12345\n')
     92         self.assert_error(2, range(2, 5), 'changelog/bugnumber',
     93                           '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
     94                           '        Example bug\n'
     95                           '        https://bugs.webkit.org/show_bug.cgi\n'
     96                           '\n'
     97                           '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
     98                           '        Another change\n')
     99         self.assert_error(2, range(2, 6), 'changelog/bugnumber',
    100                           '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    101                           '        Example bug\n'
    102                           '        More text about bug.\n'
    103                           '\n'
    104                           '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    105                           '\n'
    106                           '        No bug in this change.\n')
    107 
    108     def test_no_error(self):
    109         self.assert_no_error([],
    110                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    111                              '\n'
    112                              '        Example ChangeLog entry out of range\n'
    113                              '        http://example.com/\n')
    114         self.assert_no_error([],
    115                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    116                              '\n'
    117                              '        Example bug\n'
    118                              '        http://bugs.webkit.org/show_bug.cgi?id=12345\n')
    119         self.assert_no_error(range(1, 20),
    120                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    121                              '\n'
    122                              '        Example bug\n'
    123                              '        http://bugs.webkit.org/show_bug.cgi?id=12345\n')
    124         self.assert_no_error(range(1, 20),
    125                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    126                              '\n'
    127                              '        Example bug\n'
    128                              '        https://bugs.webkit.org/show_bug.cgi?id=12345\n')
    129         self.assert_no_error(range(1, 20),
    130                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    131                              '\n'
    132                              '        Example bug\n'
    133                              '        http://webkit.org/b/12345\n')
    134         self.assert_no_error(range(1, 20),
    135                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    136                              '\n'
    137                              '        Unreview build fix for r12345.\n')
    138         self.assert_no_error(range(1, 20),
    139                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    140                              '\n'
    141                              '        Fix build after a bad change.\n')
    142         self.assert_no_error(range(1, 20),
    143                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    144                              '\n'
    145                              '        Fix example port build.\n')
    146         self.assert_no_error(range(2, 6),
    147                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    148                              '        Example bug\n'
    149                              '        https://bugs.webkit.org/show_bug.cgi?id=12345\n'
    150                              '\n'
    151                              '2011-01-01  Patrick Gansterer  <paroga (at] paroga.com>\n'
    152                              '        No bug here!\n')
    153 
    154 if __name__ == '__main__':
    155     unittest.main()
    156