timescaledb/scripts/githooks/commit_msg_tests.py
Jacob Champion f400c75b79 Tweak commit-msg hook's line character limits
The commit-msg hook was counting the end-of-line characters in the 50-
and 72-character limit, so commit messages had to be wrapped slightly
shorter in order to avoid the hook complaint. Strip the EOL characters
during the check instead.

Since we use universal newline handling during the file read, stripping
LF ('\n') should be enough to handle both Windows and Unix development
environments.
2022-06-21 13:04:42 -05:00

76 lines
3.5 KiB
Python
Executable File

#!/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()