@@ -211,6 +211,19 @@ def test_codec_base100(self):
211211 self .assertRaises (ValueError , codecs .decode , b (B100 )[1 :], "base100" )
212212 self .assertIsNotNone (codecs .decode (b (B100 ) + b"\n " , "base100" , "ignore" ))
213213
214+ def test_codec_base45 (self ):
215+ # RFC 9285 test vectors
216+ for s , b45 in [("AB" , "BB8" ), ("Hello!!" , "%69 VD92EX0" ), ("base-45" , "UJCLQE7W581" )]:
217+ self .assertEqual (codecs .encode (s , "base45" ), b45 )
218+ self .assertEqual (codecs .encode (b (s ), "base45" ), b (b45 ))
219+ self .assertEqual (codecs .decode (b45 , "base45" ), s )
220+ self .assertEqual (codecs .decode (b (b45 ), "base45" ), b (s ))
221+ # a trailing non-ASCII byte must not be dropped (byte length, not str length, drives encoding)
222+ self .assertEqual (codecs .encode (b"\xcf \xb1 \x1b " , "base45" ), b"OBQR0" )
223+ self .assertEqual (codecs .decode (b"OBQR0" , "base45" ), b"\xcf \xb1 \x1b " )
224+ for data in [b"\xff \xfe " , b"hello" , b"\x00 " , b"\x80 \x81 \x82 \x83 \x84 " ]:
225+ self .assertEqual (codecs .decode (codecs .encode (data , "base45" ), "base45" ), data )
226+
214227 def test_codec_base_generic (self ):
215228 for n in range (2 , 255 ):
216229 bn = "base{}_generic" .format (n )
0 commit comments