12bde8e466a4451c7319e3a072d118917957d6554Steve Block#!/usr/bin/env python
22bde8e466a4451c7319e3a072d118917957d6554Steve Block#
32bde8e466a4451c7319e3a072d118917957d6554Steve Block# Copyright (C) 2010 Apple Inc. All rights reserved.
42bde8e466a4451c7319e3a072d118917957d6554Steve Block# Copyright (C) 2011 Patrick Gansterer <paroga@paroga.com>
52bde8e466a4451c7319e3a072d118917957d6554Steve Block#
62bde8e466a4451c7319e3a072d118917957d6554Steve Block# Redistribution and use in source and binary forms, with or without
72bde8e466a4451c7319e3a072d118917957d6554Steve Block# modification, are permitted provided that the following conditions
82bde8e466a4451c7319e3a072d118917957d6554Steve Block# are met:
92bde8e466a4451c7319e3a072d118917957d6554Steve Block# 1.  Redistributions of source code must retain the above copyright
102bde8e466a4451c7319e3a072d118917957d6554Steve Block#     notice, this list of conditions and the following disclaimer.
112bde8e466a4451c7319e3a072d118917957d6554Steve Block# 2.  Redistributions in binary form must reproduce the above copyright
122bde8e466a4451c7319e3a072d118917957d6554Steve Block#     notice, this list of conditions and the following disclaimer in the
132bde8e466a4451c7319e3a072d118917957d6554Steve Block#     documentation and/or other materials provided with the distribution.
142bde8e466a4451c7319e3a072d118917957d6554Steve Block#
152bde8e466a4451c7319e3a072d118917957d6554Steve Block# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
162bde8e466a4451c7319e3a072d118917957d6554Steve Block# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
172bde8e466a4451c7319e3a072d118917957d6554Steve Block# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
182bde8e466a4451c7319e3a072d118917957d6554Steve Block# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
192bde8e466a4451c7319e3a072d118917957d6554Steve Block# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
202bde8e466a4451c7319e3a072d118917957d6554Steve Block# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
212bde8e466a4451c7319e3a072d118917957d6554Steve Block# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
222bde8e466a4451c7319e3a072d118917957d6554Steve Block# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
232bde8e466a4451c7319e3a072d118917957d6554Steve Block# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
242bde8e466a4451c7319e3a072d118917957d6554Steve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
252bde8e466a4451c7319e3a072d118917957d6554Steve Block
262bde8e466a4451c7319e3a072d118917957d6554Steve Block"""Unit test for changelog.py."""
272bde8e466a4451c7319e3a072d118917957d6554Steve Block
282bde8e466a4451c7319e3a072d118917957d6554Steve Blockimport changelog
292bde8e466a4451c7319e3a072d118917957d6554Steve Blockimport unittest
302bde8e466a4451c7319e3a072d118917957d6554Steve Block
312bde8e466a4451c7319e3a072d118917957d6554Steve Block
322bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass ChangeLogCheckerTest(unittest.TestCase):
332bde8e466a4451c7319e3a072d118917957d6554Steve Block    """Tests ChangeLogChecker class."""
342bde8e466a4451c7319e3a072d118917957d6554Steve Block
352bde8e466a4451c7319e3a072d118917957d6554Steve Block    def assert_no_error(self, lines_to_check, changelog_data):
362bde8e466a4451c7319e3a072d118917957d6554Steve Block        def handle_style_error(line_number, category, confidence, message):
372bde8e466a4451c7319e3a072d118917957d6554Steve Block            self.fail('Unexpected error: %d %s %d %s for\n%s' % (line_number, category, confidence, message, changelog_data))
382bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.lines_to_check = set(lines_to_check)
392bde8e466a4451c7319e3a072d118917957d6554Steve Block        checker = changelog.ChangeLogChecker('ChangeLog', handle_style_error, self.mock_should_line_be_checked)
402bde8e466a4451c7319e3a072d118917957d6554Steve Block        checker.check(changelog_data.split('\n'))
412bde8e466a4451c7319e3a072d118917957d6554Steve Block
422bde8e466a4451c7319e3a072d118917957d6554Steve Block    def assert_error(self, expected_line_number, lines_to_check, expected_category, changelog_data):
432bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.had_error = False
442bde8e466a4451c7319e3a072d118917957d6554Steve Block
452bde8e466a4451c7319e3a072d118917957d6554Steve Block        def handle_style_error(line_number, category, confidence, message):
462bde8e466a4451c7319e3a072d118917957d6554Steve Block            self.had_error = True
472bde8e466a4451c7319e3a072d118917957d6554Steve Block            self.assertEquals(expected_line_number, line_number)
482bde8e466a4451c7319e3a072d118917957d6554Steve Block            self.assertEquals(expected_category, category)
492bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.lines_to_check = set(lines_to_check)
502bde8e466a4451c7319e3a072d118917957d6554Steve Block        checker = changelog.ChangeLogChecker('ChangeLog', handle_style_error, self.mock_should_line_be_checked)
512bde8e466a4451c7319e3a072d118917957d6554Steve Block        checker.check(changelog_data.split('\n'))
522bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assertTrue(self.had_error)
532bde8e466a4451c7319e3a072d118917957d6554Steve Block
542bde8e466a4451c7319e3a072d118917957d6554Steve Block    def mock_handle_style_error(self):
552bde8e466a4451c7319e3a072d118917957d6554Steve Block        pass
562bde8e466a4451c7319e3a072d118917957d6554Steve Block
572bde8e466a4451c7319e3a072d118917957d6554Steve Block    def mock_should_line_be_checked(self, line_number):
582bde8e466a4451c7319e3a072d118917957d6554Steve Block        return line_number in self.lines_to_check
592bde8e466a4451c7319e3a072d118917957d6554Steve Block
602bde8e466a4451c7319e3a072d118917957d6554Steve Block    def test_init(self):
612bde8e466a4451c7319e3a072d118917957d6554Steve Block        checker = changelog.ChangeLogChecker('ChangeLog', self.mock_handle_style_error, self.mock_should_line_be_checked)
622bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assertEquals(checker.file_path, 'ChangeLog')
632bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assertEquals(checker.handle_style_error, self.mock_handle_style_error)
642bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assertEquals(checker.should_line_be_checked, self.mock_should_line_be_checked)
652bde8e466a4451c7319e3a072d118917957d6554Steve Block
662bde8e466a4451c7319e3a072d118917957d6554Steve Block    def test_missing_bug_number(self):
672bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_error(1, range(1, 20), 'changelog/bugnumber',
682bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
692bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '\n'
702bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        Example bug\n')
712bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_error(1, range(1, 20), 'changelog/bugnumber',
722bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
732bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '\n'
742bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        Example bug\n'
752bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        http://bugs.webkit.org/show_bug.cgi?id=\n')
762bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_error(1, range(1, 20), 'changelog/bugnumber',
772bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
782bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '\n'
792bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        Example bug\n'
802bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        https://bugs.webkit.org/show_bug.cgi?id=\n')
812bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_error(1, range(1, 20), 'changelog/bugnumber',
822bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
832bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '\n'
842bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        Example bug\n'
852bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        http://webkit.org/b/\n')
862bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_error(1, range(1, 20), 'changelog/bugnumber',
872bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
882bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '\n'
892bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        Example bug'
902bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '\n'
912bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        http://trac.webkit.org/changeset/12345\n')
922bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_error(2, range(2, 5), 'changelog/bugnumber',
932bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
942bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        Example bug\n'
952bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        https://bugs.webkit.org/show_bug.cgi\n'
962bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '\n'
972bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
982bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        Another change\n')
992bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_error(2, range(2, 6), 'changelog/bugnumber',
1002bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1012bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        Example bug\n'
1022bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        More text about bug.\n'
1032bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '\n'
1042bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1052bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '\n'
1062bde8e466a4451c7319e3a072d118917957d6554Steve Block                          '        No bug in this change.\n')
1072bde8e466a4451c7319e3a072d118917957d6554Steve Block
1082bde8e466a4451c7319e3a072d118917957d6554Steve Block    def test_no_error(self):
1092bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_no_error([],
1102bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1112bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '\n'
1122bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        Example ChangeLog entry out of range\n'
1132bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        http://example.com/\n')
1142bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_no_error([],
1152bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1162bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '\n'
1172bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        Example bug\n'
1182bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        http://bugs.webkit.org/show_bug.cgi?id=12345\n')
1192bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_no_error(range(1, 20),
1202bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1212bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '\n'
1222bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        Example bug\n'
1232bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        http://bugs.webkit.org/show_bug.cgi?id=12345\n')
1242bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_no_error(range(1, 20),
1252bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1262bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '\n'
1272bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        Example bug\n'
1282bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        https://bugs.webkit.org/show_bug.cgi?id=12345\n')
1292bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_no_error(range(1, 20),
1302bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1312bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '\n'
1322bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        Example bug\n'
1332bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        http://webkit.org/b/12345\n')
1342bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_no_error(range(1, 20),
1352bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1362bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '\n'
1372bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        Unreview build fix for r12345.\n')
1382bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_no_error(range(1, 20),
1392bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1402bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '\n'
1412bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        Fix build after a bad change.\n')
1422bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_no_error(range(1, 20),
1432bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1442bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '\n'
1452bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        Fix example port build.\n')
1462bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_no_error(range(2, 6),
1472bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1482bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        Example bug\n'
1492bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        https://bugs.webkit.org/show_bug.cgi?id=12345\n'
1502bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '\n'
1512bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '2011-01-01  Patrick Gansterer  <paroga@paroga.com>\n'
1522bde8e466a4451c7319e3a072d118917957d6554Steve Block                             '        No bug here!\n')
1532bde8e466a4451c7319e3a072d118917957d6554Steve Block
1542bde8e466a4451c7319e3a072d118917957d6554Steve Blockif __name__ == '__main__':
1552bde8e466a4451c7319e3a072d118917957d6554Steve Block    unittest.main()
156