@@ -333,6 +333,55 @@ def test_literal_concatenation(self):
333
333
self .assertEqual (t .interpolations [0 ].format_spec , "" )
334
334
self .assertEqual (f (t ), "Hello, Pythonand welcome!" )
335
335
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
+
336
385
def test_triple_quoted (self ):
337
386
# Test triple-quoted t-strings
338
387
t = t """
0 commit comments