44import  contextlib 
55import  importlib .util 
66import  inspect 
7+ import  io 
78import  pydoc 
89import  py_compile 
910import  keyword 
@@ -921,6 +922,12 @@ def test_source_synopsis(self):
921922            ('""""""' ,
922923             '' ),
923924
925+             ('"""Embedded\0 null byte"""' ,
926+              None ),
927+ 
928+             ('"""Embedded null byte"""\0 ' ,
929+              None ),
930+ 
924931            ('"""Café and résumé."""' ,
925932             'Café and résumé.' ),
926933
@@ -933,8 +940,32 @@ def test_source_synopsis(self):
933940            ("'Single single quotes'" ,
934941             'Single single quotes' ),
935942
943+             ('"""split\\ \n line"""' ,
944+              'splitline' ),
945+ 
946+             ('"""Unrecognized escape \\ sequence"""' ,
947+              'Unrecognized escape \\ sequence' ),
948+ 
949+             ('"""Invalid escape seq\\ uence"""' ,
950+              None ),
951+ 
952+             ('r"""Raw \\ string"""' ,
953+              'Raw \\ string' ),
954+ 
955+             ('b"""Bytes literal"""' ,
956+              None ),
957+ 
958+             ('f"""f-string"""' ,
959+              None ),
960+ 
936961            ('"""Concatenated""" \\ \n "string" \' literals\' ' ,
937962             'Concatenatedstringliterals' ),
963+ 
964+             ('("""In """\n """parentheses""")' ,
965+              'In parentheses' ),
966+ 
967+             ('()' , # tuple 
968+              None ),
938969        ]
939970
940971        for  source , expected  in  test_cases :
@@ -943,6 +974,12 @@ def test_source_synopsis(self):
943974                result  =  pydoc .source_synopsis (source_file )
944975                self .assertEqual (result , expected )
945976
977+         # Encoding error. 
978+         source  =  b'"""\xff """' 
979+         with  io .TextIOWrapper (io .BytesIO (source ), encoding = 'utf-8' ) as  source_file :
980+             result  =  pydoc .source_synopsis (source_file )
981+             self .assertIsNone (result )
982+ 
946983        with  tempfile .NamedTemporaryFile (mode = 'w+' , encoding = 'utf-8' ) as  temp_file :
947984            temp_file .write ('"""Real file test."""\n ' )
948985            temp_file .flush ()
0 commit comments