# throws on invalid handles
did:thing.test
did:thing
john-.test
john.0
john.-
xn--bcher-.tld
john..test
jo_hn.test
-john.test
.john.test
jo!hn.test
jo%hn.test
jo&hn.test
jo@hn.test
jo*hn.test
jo|hn.test
jo:hn.test
jo/hn.test
john💩.test
bücher.test
john .test
john.test.
john
john.
.john
john.test.
.john.test
 john.test
john.test 
joh-.test
john.-est
john.tes-

# max over all handle: 'shoooort' + '.loooooooooooooooooooooooooong'.repeat(9) + '.test'
shoooort.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.test

# max segment: 'short.' + 'o'.repeat(64) + '.test'
short.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.test

# throws on "dotless" TLD handles
org
ai
gg
io

# correctly validates corner cases (modern vs. old RFCs)
cn.8
thing.0aa
thing.0aa

# does not allow IP addresses as handles
127.0.0.1
192.168.0.142
fe80::7325:8a97:c100:94b
2600:3c03::f03c:9100:feb0:af1f

# examples from stackoverflow   
-notvalid.at-all
-thing.com
www.masełkowski.pl.com
