33# This module is part of GitPython and is released under the
44# 3-Clause BSD License: https://opensource.org/license/bsd-3-clause/
55
6- from git import Actor
6+ from unittest import mock
77
8+ from git import Actor
89from test .lib import TestBase
910
1011
1112class TestActor (TestBase ):
1213 def test_from_string_should_separate_name_and_email (self ):
13- a = Actor ._from_string ("Michael Trier <mtrier@example.com>" )
14+ a = Actor .from_string ("Michael Trier <mtrier@example.com>" )
1415 self .assertEqual ("Michael Trier" , a .name )
1516 self .assertEqual ("mtrier@example.com" , a .email )
1617
@@ -23,18 +24,34 @@ def test_from_string_should_separate_name_and_email(self):
2324 assert len (m ) == 1
2425
2526 def test_from_string_should_handle_just_name (self ):
26- a = Actor ._from_string ("Michael Trier" )
27+ a = Actor .from_string ("Michael Trier" )
2728 self .assertEqual ("Michael Trier" , a .name )
2829 self .assertEqual (None , a .email )
2930
31+ def test_from_string_constructs_subclass (self ):
32+ class DerivedActor (Actor ):
33+ pass
34+
35+ self .assertIsInstance (DerivedActor .from_string ("name <email>" ), DerivedActor )
36+
3037 def test_from_string_handles_unterminated_email_without_regex_backtracking (self ):
3138 value = "A" * 20_000 + " <unterminated"
32- actor = Actor . _from_string ( value )
33- self . assertNotIn ( "name_email_regex" , vars ( Actor ) )
39+ with mock . patch . object ( Actor , "name_email_regex" , None ):
40+ actor = Actor . from_string ( value )
3441 self .assertEqual (actor , Actor (value , None ))
3542
43+ def test_name_email_regex_is_available_but_deprecated (self ):
44+ with self .assertWarns (DeprecationWarning ) as context :
45+ match = Actor .name_email_regex .match ("Michael Trier <mtrier@example.com>" )
46+
47+ message = str (context .warning )
48+ self .assertIn ("Actor.from_string()" , message )
49+ self .assertIn ("Actor(name, email)" , message )
50+ assert match is not None
51+ self .assertEqual (match .groups (), ("Michael Trier" , "mtrier@example.com" ))
52+
3653 def test_from_string_does_not_parse_across_lines (self ):
37- self .assertEqual (Actor ._from_string ("x <a>\n y <b>" ), Actor ("x" , "a" ))
54+ self .assertEqual (Actor .from_string ("x <a>\n y <b>" ), Actor ("x" , "a" ))
3855
3956 def test_from_string_uses_git_delimiters (self ):
4057 for value , expected in (
@@ -45,12 +62,12 @@ def test_from_string_uses_git_delimiters(self):
4562 ("Name <email" , Actor ("Name <email" , None )),
4663 ("Name email>" , Actor ("Name email>" , None )),
4764 ):
48- self .assertEqual (Actor ._from_string (value ), expected )
65+ self .assertEqual (Actor .from_string (value ), expected )
4966
5067 def test_should_display_representation (self ):
51- a = Actor ._from_string ("Michael Trier <mtrier@example.com>" )
68+ a = Actor .from_string ("Michael Trier <mtrier@example.com>" )
5269 self .assertEqual ('<git.Actor "Michael Trier <mtrier@example.com>">' , repr (a ))
5370
5471 def test_str_should_alias_name (self ):
55- a = Actor ._from_string ("Michael Trier <mtrier@example.com>" )
72+ a = Actor .from_string ("Michael Trier <mtrier@example.com>" )
5673 self .assertEqual (a .name , str (a ))
0 commit comments