@@ -140,6 +140,15 @@ def test_debug_specifier(self):
140140 )
141141 self .assertEqual (fstring (t ), "Value: value = 42" )
142142
143+ class C :
144+ def __format__ (self , spec ):
145+ return f"FORMAT-{ spec } "
146+
147+ x = y = C ()
148+ t = t "{x:{y:{value=}}}"
149+ self .assertEqual (t .interpolations [0 ].format_spec ,
150+ "FORMAT-value=42" )
151+
143152 def test_raw_tstrings (self ):
144153 path = r"C:\Users"
145154 t = rt "{path}\Documents"
@@ -150,6 +159,14 @@ def test_raw_tstrings(self):
150159 t = tr "{path}\Documents"
151160 self .assertTStringEqual (t , ("" , r"\Documents" ), [(path , "path" )])
152161
162+ value = 42
163+ t = rt "{value:{f'\xFF '}}\n "
164+ self .assertTStringEqual (
165+ t , ("" , "\\ n" ), [(value , "value" , None , 'ÿ' )])
166+ t = t "{value:{rf'\xFF '}}\n "
167+ self .assertTStringEqual (
168+ t , ("" , "\n " ), [(value , "value" , None , '\\ xFF' )])
169+
153170 def test_template_concatenation (self ):
154171 # Test template + template
155172 t1 = t "Hello, "
@@ -217,6 +234,10 @@ def test_syntax_errors(self):
217234 ("t'{x=!}'" , "t-string: missing conversion character" ),
218235 ("t'{x!z}'" , "t-string: invalid conversion character 'z': "
219236 "expected 's', 'r', or 'a'" ),
237+ ("f\" {t'{x!z}'}\" " , "t-string: invalid conversion character 'z': "
238+ "expected 's', 'r', or 'a'" ),
239+ ("t'{f\" {x!z}\" }'" , "f-string: invalid conversion character 'z': "
240+ "expected 's', 'r', or 'a'" ),
220241 ("t'{lambda:1}'" , "t-string: lambda expressions are not allowed "
221242 "without parentheses" ),
222243 ("t'{x:{;}}'" , "t-string: expecting a valid expression after '{'" ),
@@ -287,5 +308,22 @@ def test_triple_quoted(self):
287308 )
288309 self .assertEqual (fstring (t ), "\n Hello,\n Python\n " )
289310
311+ t = t '{"""a" # inside"""}'
312+ self .assertEqual (t .interpolations [0 ].expression ,
313+ '"""a" # inside"""' )
314+
315+ t = t '{ """a""" "#" # outside
316+ } '
317+ self .assertEqual (t .interpolations [0 ].expression , '"""a""""#"' )
318+
319+ x , y = 1 , 2
320+ t = t '{ x != y # outside
321+ } '
322+ self .assertEqual (t .interpolations [0 ].expression , 'x != y' )
323+
324+ d = {'a#b' : 42 }
325+ t = t '''{f"{d["a#b"]}"}'''
326+ self .assertEqual (t .interpolations [0 ].expression , 'f"{d["a#b"]}"' )
327+
290328if __name__ == '__main__' :
291329 unittest .main ()
0 commit comments