@@ -333,6 +333,55 @@ def test_literal_concatenation(self):
333333 self .assertEqual (t .interpolations [0 ].format_spec , "" )
334334 self .assertEqual (f (t ), "Hello, Pythonand welcome!" )
335335
336+ # Test concatenation with Unicode literal
337+ name = "Python"
338+ t = t "Hello, {name}" u"and welcome!"
339+ self .assertEqual (t .strings , ("Hello, " , "and welcome!" ))
340+ self .assertEqual (t .interpolations [0 ].value , name )
341+ self .assertEqual (t .interpolations [0 ].expression , "name" )
342+ self .assertEqual (t .interpolations [0 ].conversion , None )
343+ self .assertEqual (t .interpolations [0 ].format_spec , "" )
344+ self .assertEqual (f (t ), "Hello, Pythonand welcome!" )
345+
346+ # Test concatenation with f-string literal
347+ tab = '\t '
348+ t = t "Tab: {tab}. " f"f-tab: { tab } ."
349+ self .assertEqual (t .strings , ("Tab: " , ". f-tab: \t ." ))
350+ self .assertEqual (t .interpolations [0 ].value , tab )
351+ self .assertEqual (t .interpolations [0 ].expression , "tab" )
352+ self .assertEqual (t .interpolations [0 ].conversion , None )
353+ self .assertEqual (t .interpolations [0 ].format_spec , "" )
354+ self .assertEqual (f (t ), "Tab: \t . f-tab: \t ." )
355+
356+ # Test concatenation with raw string literal
357+ tab = '\t '
358+ t = t "Tab: {tab}. " r"Raw tab: \t."
359+ self .assertEqual (t .strings , ("Tab: " , r". Raw tab: \t." ))
360+ self .assertEqual (t .interpolations [0 ].value , tab )
361+ self .assertEqual (t .interpolations [0 ].expression , "tab" )
362+ self .assertEqual (t .interpolations [0 ].conversion , None )
363+ self .assertEqual (t .interpolations [0 ].format_spec , "" )
364+ self .assertEqual (f (t ), "Tab: \t . Raw tab: \\ t." )
365+
366+ # Test concatenation with raw f-string literal
367+ tab = '\t '
368+ t = t "Tab: {tab}. " rf"f-tab: { tab } . Raw tab: \t."
369+ self .assertEqual (t .strings , ("Tab: " , ". f-tab: \t . Raw tab: \\ t." ))
370+ self .assertEqual (t .interpolations [0 ].value , tab )
371+ self .assertEqual (t .interpolations [0 ].expression , "tab" )
372+ self .assertEqual (t .interpolations [0 ].conversion , None )
373+ self .assertEqual (t .interpolations [0 ].format_spec , "" )
374+ self .assertEqual (f (t ), "Tab: \t . f-tab: \t . Raw tab: \\ t." )
375+
376+ what = 't'
377+ expected_msg = 'cannot mix bytes and nonbytes literals'
378+ for case in (
379+ "t'{what}-string literal' b'bytes literal'" ,
380+ "t'{what}-string literal' br'raw bytes literal'" ,
381+ ):
382+ with self .assertRaisesRegex (SyntaxError , expected_msg ):
383+ eval (case )
384+
336385 def test_triple_quoted (self ):
337386 # Test triple-quoted t-strings
338387 t = t """
0 commit comments