1) As long as x is valid, I expect that urlunsplit(urlsplit(x)) == x
2) yelp:///foo is a well-formed (albeit odd) url. It it similar to file:///tmp: it specifies the /foo resource, on the "current" host, using the yelp protocol (defined on mobile devices).
>>> from urlparse import urlsplit, urlunsplit
>>> urlunsplit(urlsplit('yelp:///foo'))
'yelp:/foo'
Urlparse / unparse has the same bug:
>>> urlunparse(urlparse('yelp:///foo'))
'yelp:/foo'
The file: protocol seems to be special-case, in an inappropriate manner:
>>> urlunsplit(urlsplit('file:///tmp'))
'file:///tmp'