@@ -27,6 +27,26 @@ def test_from_string_should_handle_just_name(self):
2727 self .assertEqual ("Michael Trier" , a .name )
2828 self .assertEqual (None , a .email )
2929
30+ def test_from_string_handles_unterminated_email_without_regex_backtracking (self ):
31+ value = "A" * 20_000 + " <unterminated"
32+ actor = Actor ._from_string (value )
33+ self .assertNotIn ("name_email_regex" , vars (Actor ))
34+ self .assertEqual (actor , Actor (value , None ))
35+
36+ def test_from_string_does_not_parse_across_lines (self ):
37+ self .assertEqual (Actor ._from_string ("x <a>\n y <b>" ), Actor ("x" , "a" ))
38+
39+ def test_from_string_uses_git_delimiters (self ):
40+ for value , expected in (
41+ ("Name <e<mail>" , Actor ("Name" , "e<mail" )),
42+ ("Name <email>>" , Actor ("Name" , "email" )),
43+ ("Name<email>" , Actor ("Name" , "email" )),
44+ (" <>" , Actor ("" , "" )),
45+ ("Name <email" , Actor ("Name <email" , None )),
46+ ("Name email>" , Actor ("Name email>" , None )),
47+ ):
48+ self .assertEqual (Actor ._from_string (value ), expected )
49+
3050 def test_should_display_representation (self ):
3151 a = Actor ._from_string ("Michael Trier <mtrier@example.com>" )
3252 self .assertEqual ('<git.Actor "Michael Trier <mtrier@example.com>">' , repr (a ))
0 commit comments