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