@@ -391,14 +391,16 @@ def assertBadSplit(addr):
391391
392392 def test_bad_address_split_v6_too_long (self ):
393393 def assertBadSplit (addr ):
394- msg = r"At most 39 characters expected in %s"
395- with self .assertAddressError (msg , repr ( re .escape (addr [:14 ]) )):
394+ msg = r"At most 45 characters expected in ' %s"
395+ with self .assertAddressError (msg , re .escape (addr [:45 ] )):
396396 ipaddress .IPv6Address (addr )
397397
398398 # Long IPv6 address
399399 long_addr = ("0:" * 10000 ) + "0"
400400 assertBadSplit (long_addr )
401401 assertBadSplit (long_addr + "%zoneid" )
402+ assertBadSplit (long_addr + ":255.255.255.255" )
403+ assertBadSplit (long_addr + ":ffff:255.255.255.255" )
402404
403405 def test_bad_address_split_v6_too_many_parts (self ):
404406 def assertBadSplit (addr ):
@@ -2178,6 +2180,11 @@ def testIPv6AddressTooLarge(self):
21782180 self .assertEqual (ipaddress .ip_address ('FFFF::192.0.2.1' ),
21792181 ipaddress .ip_address ('FFFF::c000:201' ))
21802182
2183+ self .assertEqual (ipaddress .ip_address ('0000:0000:0000:0000:0000:FFFF:192.168.255.255' ),
2184+ ipaddress .ip_address ('::ffff:c0a8:ffff' ))
2185+ self .assertEqual (ipaddress .ip_address ('FFFF:0000:0000:0000:0000:0000:192.168.255.255' ),
2186+ ipaddress .ip_address ('ffff::c0a8:ffff' ))
2187+
21812188 self .assertEqual (ipaddress .ip_address ('::FFFF:192.0.2.1%scope' ),
21822189 ipaddress .ip_address ('::FFFF:c000:201%scope' ))
21832190 self .assertEqual (ipaddress .ip_address ('FFFF::192.0.2.1%scope' ),
@@ -2190,6 +2197,10 @@ def testIPv6AddressTooLarge(self):
21902197 ipaddress .ip_address ('::FFFF:c000:201%scope' ))
21912198 self .assertNotEqual (ipaddress .ip_address ('FFFF::192.0.2.1' ),
21922199 ipaddress .ip_address ('FFFF::c000:201%scope' ))
2200+ self .assertEqual (ipaddress .ip_address ('0000:0000:0000:0000:0000:FFFF:192.168.255.255%scope' ),
2201+ ipaddress .ip_address ('::ffff:c0a8:ffff%scope' ))
2202+ self .assertEqual (ipaddress .ip_address ('FFFF:0000:0000:0000:0000:0000:192.168.255.255%scope' ),
2203+ ipaddress .ip_address ('ffff::c0a8:ffff%scope' ))
21932204
21942205 def testIPVersion (self ):
21952206 self .assertEqual (self .ipv4_address .version , 4 )
@@ -2574,6 +2585,10 @@ def testCompressIPv6Address(self):
25742585 '::7:6:5:4:3:2:0' : '0:7:6:5:4:3:2:0/128' ,
25752586 '7:6:5:4:3:2:1::' : '7:6:5:4:3:2:1:0/128' ,
25762587 '0:6:5:4:3:2:1::' : '0:6:5:4:3:2:1:0/128' ,
2588+ '0000:0000:0000:0000:0000:0000:255.255.255.255' : '::ffff:ffff/128' ,
2589+ '0000:0000:0000:0000:0000:ffff:255.255.255.255' : '::ffff:255.255.255.255/128' ,
2590+ 'ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255' :
2591+ 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128' ,
25772592 }
25782593 for uncompressed , compressed in list (test_addresses .items ()):
25792594 self .assertEqual (compressed , str (ipaddress .IPv6Interface (
0 commit comments