#!/usr/bin/env python3 import unittest from commit_msg import GitCommitMessage class TestCommitMsg(unittest.TestCase): def testNoInput(self): m = GitCommitMessage().parse_lines([]) self.assertEqual(len(m.body_lines), 0) m = GitCommitMessage().parse_lines(None) self.assertEqual(len(m.body_lines), 0) def testParsing(self): m = GitCommitMessage().parse_lines( ["This is a subject line", " ", "body line 1", "body line 2"] ) self.assertEqual(m.subject, "This is a subject line") self.assertTrue(m.has_subject_body_separator) self.assertEqual(m.body_lines[0], "body line 1") self.assertEqual(m.body_lines[1], "body line 2") def testNonImperative(self): m = GitCommitMessage().parse_lines(["Adds new file"]) self.assertFalse(m.check_subject_imperative()) m.parse_lines(["Adding new file"]) self.assertFalse(m.check_subject_imperative()) # Default to accept m.parse_lines(["Foo bar"]) self.assertTrue(m.check_subject_imperative()) def testSubjectBodySeparator(self): m = GitCommitMessage().parse_lines(["This is a subject line"]) self.assertTrue(m.check_subject_body_separtor()) m = GitCommitMessage().parse_lines(["This is a subject line", "body"]) self.assertFalse(m.check_subject_body_separtor()) m = GitCommitMessage().parse_lines(["This is a subject line", "", "body"]) self.assertTrue(m.check_subject_body_separtor()) m = GitCommitMessage().parse_lines(["This is a subject line", " ", "body"]) self.assertTrue(m.check_subject_body_separtor()) def testSubjectLimit(self): m = GitCommitMessage().parse_lines( ["This subject line is exactly 48 characters long"] ) self.assertTrue(m.check_subject_limit()) m = GitCommitMessage().parse_lines( ["This is a very long subject line that will obviously exceed the limit"] ) self.assertFalse(m.check_subject_limit()) m = GitCommitMessage().parse_lines( ["This 50-character subject line ends with an LF EOL\n"] ) self.assertTrue(m.check_subject_limit()) def testSubjectCapitalized(self): m = GitCommitMessage().parse_lines(["This subject line is capitalized"]) self.assertTrue(m.check_subject_capitalized()) m = GitCommitMessage().parse_lines(["this subject line is not capitalized"]) self.assertFalse(m.check_subject_capitalized()) def testSubjectNoPeriod(self): m = GitCommitMessage().parse_lines(["This subject line ends with a period."]) self.assertFalse(m.check_subject_no_period()) m = GitCommitMessage().parse_lines( ["This subject line does not end with a period"] ) self.assertTrue(m.check_subject_no_period()) def testBodyLimit(self): m = GitCommitMessage().parse_lines( ["This is a subject line", " ", "A short body line"] ) self.assertTrue(m.check_body_limit()) m = GitCommitMessage().parse_lines( [ "This is a subject line", " ", "A very long body line which certainly exceeds the 72 char recommended limit", ] ) self.assertFalse(m.check_body_limit()) m = GitCommitMessage().parse_lines( [ "This is a subject line", " ", "A body line with exactly 72 characters, followed by an EOL (Unix-style).\n", ] ) self.assertTrue(m.check_body_limit()) def testCheckAllRules(self): m = GitCommitMessage().parse_lines( ["This is a subject line", "", "A short body line"] ) self.assertEqual(0, m.check_the_seven_rules()) if __name__ == "__main__": unittest.main()