@@ -79,6 +79,28 @@ def parse(self, format_string):
7979 fmt = BarFormatter ()
8080 self .assertEqual (fmt .format ('*|+0:^10s|*' , 'foo' ), '* foo *' )
8181
82+ # test all parameters used
83+ class CheckAllUsedFormatter (string .Formatter ):
84+ def check_unused_args (self , used_args , args , kwargs ):
85+ # Track which arguments actuallly got used
86+ unused_args = set (kwargs .keys ())
87+ unused_args .update (range (0 , len (args )))
88+
89+ for arg in used_args :
90+ unused_args .remove (arg )
91+
92+ if unused_args :
93+ raise ValueError ("unused arguments" )
94+
95+ fmt = CheckAllUsedFormatter ()
96+ self .assertEqual (fmt .format ("{0}" , 10 ), "10" )
97+ self .assertEqual (fmt .format ("{0}{i}" , 10 , i = 100 ), "10100" )
98+ self .assertEqual (fmt .format ("{0}{i}{1}" , 10 , 20 , i = 100 ), "1010020" )
99+ self .assertRaises (ValueError , fmt .format , "{0}{i}{1}" , 10 , 20 , i = 100 , j = 0 )
100+ self .assertRaises (ValueError , fmt .format , "{0}" , 10 , 20 )
101+ self .assertRaises (ValueError , fmt .format , "{0}" , 10 , 20 , i = 100 )
102+ self .assertRaises (ValueError , fmt .format , "{i}" , 10 , 20 , i = 100 )
103+
82104
83105 def test_maketrans (self ):
84106 transtable = '\000 \001 \002 \003 \004 \005 \006 \007 \010 \011 \012 \013 \014 \015 \016 \017 \020 \021 \022 \023 \024 \025 \026 \027 \030 \031 \032 \033 \034 \035 \036 \037 !"#$%&\' ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177 \200 \201 \202 \203 \204 \205 \206 \207 \210 \211 \212 \213 \214 \215 \216 \217 \220 \221 \222 \223 \224 \225 \226 \227 \230 \231 \232 \233 \234 \235 \236 \237 \240 \241 \242 \243 \244 \245 \246 \247 \250 \251 \252 \253 \254 \255 \256 \257 \260 \261 \262 \263 \264 \265 \266 \267 \270 \271 \272 \273 \274 \275 \276 \277 \300 \301 \302 \303 \304 \305 \306 \307 \310 \311 \312 \313 \314 \315 \316 \317 \320 \321 \322 \323 \324 \325 \326 \327 \330 \331 \332 \333 \334 \335 \336 \337 \340 \341 \342 \343 \344 \345 \346 \347 \350 \351 \352 \353 \354 \355 \356 \357 \360 \361 \362 \363 \364 \365 \366 \367 \370 \371 \372 \373 \374 \375 \376 \377 '
0 commit comments