from jw.pkg.lib.Uri import Uri # Basic URL parsing u = Uri('ssh://john.doe@host:22/path/to/repo') assert u.protocol == 'ssh' assert u.hostname == 'host' assert u.port == 22 assert u.path == '/path/to/repo' # Username and password u = Uri('https://user:pass@example.com/repo') assert u.username == 'user' assert u.password == 'pass' # Credentials in output u = Uri('https://user:secret@example.com/repo') assert 'secret' in u.full # full shows password assert '' in u.safe_full_with_username # safe version hides password # Scheme defaults to file u = Uri('/local/path') assert u.scheme == 'file://' assert u.protocol == 'file' # Pimp returns existing Uri unchanged u1 = Uri('ssh://host/path') u2 = Uri.pimp(u1) assert u2 is u1 # New with path (add) u = Uri('ssh://host/path') u2 = u.new_add_path('subdir') assert u2.to_string == 'ssh://host/path/subdir' # New with path (replace) - to_string is updated u3 = u.new_replace_path('/other') assert u3.to_string == 'ssh://host/other' # Authority includes credentials u = Uri('ssh://user:pass@host:22/path') assert u.authority == 'userpass@host:22' # Origin excludes credentials assert u.origin == 'host:22' # ID and safe version hide password assert u.id == 'ssh://user:@host:22' assert '' in u.safe_full_with_username # Full includes path and credentials assert u.full == 'ssh://userpass@host:22/path' # Simple URLs u = Uri('https://example.com/repo.git') assert u.hostname == 'example.com' assert u.path == '/repo.git' assert u.basename == 'repo.git' # Username setter u = Uri('ssh://host/path') u.set_username('newuser') assert u.username == 'newuser' # Password setter u = Uri('ssh://host/path') u.set_password('newpass') assert u.password == 'newpass' # No port u = Uri('ssh://host/path') assert u.port is None assert u.port_str is None # to_string returns original u = Uri('ssh://user:pass@host:22/path') assert u.to_string == 'ssh://user:pass@host:22/path' # String representation hides credentials u = Uri('https://user:secret@example.com/repo.git') assert '' in str(u) print('All Uri tests passed')