Deskaid
by ezyang
- tests
#!/usr/bin/env python3
import unittest
from expecttest import TestCase
from codemcp.git_parse_message import parse_message
class TestGitMessage(TestCase):
def test_empty_message(self):
subject, body, trailers = parse_message("")
self.assertEqual(subject, "")
self.assertEqual(body, "")
self.assertEqual(trailers, "")
def test_subject_only(self):
subject, body, trailers = parse_message("Subject line")
self.assertEqual(subject, "Subject line")
self.assertEqual(body, "")
self.assertEqual(trailers, "")
def test_no_trailers(self):
message = "Subject line\n\nThis is the body of the commit message.\nIt spans multiple lines."
subject, body, trailers = parse_message(message)
self.assertEqual(subject, "Subject line")
# Update the expected text to match what the function returns
self.assertExpectedInline(
body,
"""\
This is the body of the commit message.
It spans multiple lines.""",
)
self.assertEqual(trailers, "")
def test_simple_trailers(self):
message = "Subject line\n\nThis is the body of the commit message.\n\nSigned-off-by: Alice <alice@example.com>\nReviewed-by: Bob <bob@example.com>"
subject, body, trailers = parse_message(message)
self.assertEqual(subject, "Subject line")
self.assertEqual(body, "This is the body of the commit message.")
self.assertExpectedInline(
trailers,
"""\
Signed-off-by: Alice <alice@example.com>
Reviewed-by: Bob <bob@example.com>""",
)
def test_trailers_with_divider(self):
message = "Subject line\n\nThis is the body of the commit message.\n\nSigned-off-by: Alice <alice@example.com>\nReviewed-by: Bob <bob@example.com>\n---\nThis is after the divider and should be ignored."
subject, body, trailers = parse_message(message)
self.assertEqual(subject, "Subject line")
self.assertEqual(body, "This is the body of the commit message.")
self.assertExpectedInline(
trailers,
"""\
Signed-off-by: Alice <alice@example.com>
Reviewed-by: Bob <bob@example.com>""",
)
def test_trailers_with_continuation(self):
message = "Subject line\n\nThis is the body of the commit message.\n\nSigned-off-by: Alice <alice@example.com>\nCo-authored-by: Bob <bob@example.com>\n Carol <carol@example.com>\n Dave <dave@example.com>"
subject, body, trailers = parse_message(message)
self.assertEqual(subject, "Subject line")
self.assertEqual(body, "This is the body of the commit message.")
self.assertExpectedInline(
trailers,
"""\
Signed-off-by: Alice <alice@example.com>
Co-authored-by: Bob <bob@example.com>
Carol <carol@example.com>
Dave <dave@example.com>""",
)
def test_mixed_trailers_non_trailers(self):
message = "Subject line\n\nThis is the body of the commit message.\n\nThis is not a trailer line.\nSigned-off-by: Alice <alice@example.com>\nAlso not a trailer.\nReviewed-by: Bob <bob@example.com>"
subject, body, trailers = parse_message(message)
self.assertEqual(subject, "Subject line")
self.assertEqual(body, "This is the body of the commit message.")
self.assertExpectedInline(
trailers,
"""\
This is not a trailer line.
Signed-off-by: Alice <alice@example.com>
Also not a trailer.
Reviewed-by: Bob <bob@example.com>""",
)
def test_not_enough_trailers(self):
message = "Subject line\n\nThis is the body of the commit message.\n\nNot-a-trailer: This is not a proper trailer\nAlso not a trailer."
subject, body, trailers = parse_message(message)
self.assertEqual(subject, "Subject line")
self.assertExpectedInline(
body,
"""\
This is the body of the commit message.
Not-a-trailer: This is not a proper trailer
Also not a trailer.""",
)
self.assertEqual(trailers, "")
def test_duplicate_trailers(self):
message = "Subject line\n\nThis is the body of the commit message.\n\nSigned-off-by: Alice <alice@example.com>\nSigned-off-by: Bob <bob@example.com>"
subject, body, trailers = parse_message(message)
self.assertEqual(subject, "Subject line")
self.assertEqual(body, "This is the body of the commit message.")
self.assertExpectedInline(
trailers,
"""\
Signed-off-by: Alice <alice@example.com>
Signed-off-by: Bob <bob@example.com>""",
)
def test_cherry_picked_trailer(self):
message = "Subject line\n\nThis is the body of the commit message.\n\n(cherry picked from commit abcdef1234567890)"
subject, body, trailers = parse_message(message)
self.assertEqual(subject, "Subject line")
self.assertEqual(body, "This is the body of the commit message.")
self.assertEqual(trailers, "(cherry picked from commit abcdef1234567890)")
if __name__ == "__main__":
unittest.main()