@@ -399,14 +399,16 @@ def assertBadSplit(addr):
399
399
400
400
def test_bad_address_split_v6_too_long (self ):
401
401
def assertBadSplit (addr ):
402
- msg = r"At most 39 characters expected in %s"
403
- with self .assertAddressError (msg , repr ( re .escape (addr [:14 ]) )):
402
+ msg = r"At most 45 characters expected in ' %s"
403
+ with self .assertAddressError (msg , re .escape (addr [:45 ] )):
404
404
ipaddress .IPv6Address (addr )
405
405
406
406
# Long IPv6 address
407
407
long_addr = ("0:" * 10000 ) + "0"
408
408
assertBadSplit (long_addr )
409
409
assertBadSplit (long_addr + "%zoneid" )
410
+ assertBadSplit (long_addr + ":255.255.255.255" )
411
+ assertBadSplit (long_addr + ":ffff:255.255.255.255" )
410
412
411
413
def test_bad_address_split_v6_too_many_parts (self ):
412
414
def assertBadSplit (addr ):
@@ -2189,6 +2191,11 @@ def testIPv6AddressTooLarge(self):
2189
2191
self .assertEqual (ipaddress .ip_address ('FFFF::192.0.2.1' ),
2190
2192
ipaddress .ip_address ('FFFF::c000:201' ))
2191
2193
2194
+ self .assertEqual (ipaddress .ip_address ('0000:0000:0000:0000:0000:FFFF:192.168.255.255' ),
2195
+ ipaddress .ip_address ('::ffff:c0a8:ffff' ))
2196
+ self .assertEqual (ipaddress .ip_address ('FFFF:0000:0000:0000:0000:0000:192.168.255.255' ),
2197
+ ipaddress .ip_address ('ffff::c0a8:ffff' ))
2198
+
2192
2199
self .assertEqual (ipaddress .ip_address ('::FFFF:192.0.2.1%scope' ),
2193
2200
ipaddress .ip_address ('::FFFF:c000:201%scope' ))
2194
2201
self .assertEqual (ipaddress .ip_address ('FFFF::192.0.2.1%scope' ),
@@ -2201,6 +2208,10 @@ def testIPv6AddressTooLarge(self):
2201
2208
ipaddress .ip_address ('::FFFF:c000:201%scope' ))
2202
2209
self .assertNotEqual (ipaddress .ip_address ('FFFF::192.0.2.1' ),
2203
2210
ipaddress .ip_address ('FFFF::c000:201%scope' ))
2211
+ self .assertEqual (ipaddress .ip_address ('0000:0000:0000:0000:0000:FFFF:192.168.255.255%scope' ),
2212
+ ipaddress .ip_address ('::ffff:c0a8:ffff%scope' ))
2213
+ self .assertEqual (ipaddress .ip_address ('FFFF:0000:0000:0000:0000:0000:192.168.255.255%scope' ),
2214
+ ipaddress .ip_address ('ffff::c0a8:ffff%scope' ))
2204
2215
2205
2216
def testIPVersion (self ):
2206
2217
self .assertEqual (ipaddress .IPv4Address .version , 4 )
@@ -2610,6 +2621,10 @@ def testCompressIPv6Address(self):
2610
2621
'::7:6:5:4:3:2:0' : '0:7:6:5:4:3:2:0/128' ,
2611
2622
'7:6:5:4:3:2:1::' : '7:6:5:4:3:2:1:0/128' ,
2612
2623
'0:6:5:4:3:2:1::' : '0:6:5:4:3:2:1:0/128' ,
2624
+ '0000:0000:0000:0000:0000:0000:255.255.255.255' : '::ffff:ffff/128' ,
2625
+ '0000:0000:0000:0000:0000:ffff:255.255.255.255' : '::ffff:255.255.255.255/128' ,
2626
+ 'ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255' :
2627
+ 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128' ,
2613
2628
}
2614
2629
for uncompressed , compressed in list (test_addresses .items ()):
2615
2630
self .assertEqual (compressed , str (ipaddress .IPv6Interface (
0 commit comments