def test_can_parse_full_uri(): uri = URI("foo://bob@[email protected]:8042" "/over/there?name=ferret#nose") assert str(uri) ==\ "foo://bob%[email protected]:8042/over/there?name=ferret#nose" assert len(uri) == (len("foo://bob%[email protected]:8042" "/over/there?name=ferret#nose")) assert bool(uri) assert URI(uri) == \ "foo://bob%[email protected]:8042/over/there?name=ferret#nose" assert uri.string == \ "foo://bob%[email protected]:8042/over/there?name=ferret#nose" assert uri.scheme == "foo" assert uri.hierarchical_part == \ "//bob%[email protected]:8042/over/there" assert uri.query == "name=ferret" assert dict(uri.query) == {"name": "ferret"} assert uri.query.get("name") == "ferret" assert uri.fragment == "nose" assert uri.authority == "bob%[email protected]:8042" assert uri.path == "/over/there" assert uri.user_info == "bob@somewhere" assert uri.host == "example.com" assert uri.port == 8042 assert uri.host_port == "example.com:8042" assert uri.absolute_path_reference == "/over/there?name=ferret#nose"
def test_can_parse_none_uri_from_none_uri(): uri = URI(URI(None)) assert str(uri) == "" assert uri.string is None assert uri.scheme is None assert uri.hierarchical_part is None assert uri.query is None assert uri.fragment is None assert uri.authority is None assert uri.path is None assert uri.user_info is None assert uri.host is None assert uri.port is None assert uri.host_port is None assert uri.absolute_path_reference is None
def test_can_parse_parameter_string_with_params(): uri = URI("http://example.com/foo/name;version=1.2/bar") path_segment = ParameterString(uri.path.segments[2], ";") assert str(path_segment) == "name;version=1.2" assert path_segment.string == "name;version=1.2" assert list(path_segment) == [("name", None), ("version", "1.2")] assert len(path_segment) == 2 assert path_segment[0] == ("name", None) assert path_segment[1] == ("version", "1.2") assert path_segment.get("name") is None assert path_segment.get("version") == "1.2"
def test_can_parse_uri_with_root_path(): uri = URI("foo://example.com/") assert str(uri) == "foo://example.com/" assert uri.string == "foo://example.com/" assert uri.scheme == "foo" assert uri.hierarchical_part == "//example.com/" assert uri.query is None assert uri.fragment is None assert uri.authority == "example.com" assert uri.path == "/" assert uri.user_info is None assert uri.host == "example.com" assert uri.port is None assert uri.host_port == "example.com" assert uri.absolute_path_reference == "/"
def test_can_parse_uri_with_extended_chars(): uri = URI("foo://éxamplə.çôm/foo") assert ustr(uri) == "foo://éxamplə.çôm/foo" assert uri.string == "foo://éxamplə.çôm/foo" assert uri.scheme == "foo" assert uri.hierarchical_part == "//éxamplə.çôm/foo" assert uri.query is None assert uri.fragment is None assert uri.authority == "éxamplə.çôm" assert uri.path == "/foo" assert uri.user_info is None assert uri.host == "éxamplə.çôm" assert uri.port is None assert uri.host_port == "éxamplə.çôm" assert uri.absolute_path_reference == "/foo"
def test_can_parse_only_fragment(): uri = URI("#foo") assert str(uri) == "#foo" assert uri.string == "#foo" assert uri.scheme is None assert uri.hierarchical_part == "" assert uri.query is None assert uri.fragment == "foo" assert uri.authority is None assert uri.path == "" assert uri.user_info is None assert uri.host is None assert uri.port is None assert uri.host_port is None assert uri.absolute_path_reference == "#foo"
def test_can_parse_relative_path_uri(): uri = URI("foo/bar") assert str(uri) == "foo/bar" assert uri.string == "foo/bar" assert uri.scheme is None assert uri.hierarchical_part == "foo/bar" assert uri.query is None assert uri.fragment is None assert uri.authority is None assert uri.path == "foo/bar" assert uri.user_info is None assert uri.host is None assert uri.port is None assert uri.host_port is None assert uri.absolute_path_reference == "foo/bar"
def test_can_build_uri_from_scheme_port_and_path(): uri = URI.build(scheme="http", port=3456, path="/foo") assert str(uri) == "http://:3456/foo" assert uri.string == "http://:3456/foo" assert uri.scheme == "http" assert uri.hierarchical_part == "//:3456/foo" assert uri.query is None assert uri.fragment is None assert uri.authority == ":3456" assert uri.path == "/foo" assert uri.user_info is None assert uri.host == "" assert uri.port == 3456 assert uri.host_port == ":3456" assert uri.absolute_path_reference == "/foo"
def test_can_build_none_uri(): uri = URI.build() assert str(uri) == "" assert uri.string is None assert uri.scheme is None assert uri.hierarchical_part is None assert uri.query is None assert uri.fragment is None assert uri.authority is None assert uri.path is None assert uri.user_info is None assert uri.host is None assert uri.port is None assert uri.host_port is None assert uri.absolute_path_reference is None
def test_can_build_uri_from_hierarchical_part(): uri = URI.build(hierarchical_part="//example.com/") assert str(uri) == "//example.com/" assert uri.string == "//example.com/" assert uri.scheme is None assert uri.hierarchical_part == "//example.com/" assert uri.query is None assert uri.fragment is None assert uri.authority == "example.com" assert uri.path == "/" assert uri.user_info is None assert uri.host == "example.com" assert uri.port is None assert uri.host_port == "example.com" assert uri.absolute_path_reference == "/"
def test_can_build_uri_from_absolute_path_reference(): uri = URI.build(absolute_path_reference="/foo/bar?spam=eggs#mustard") assert str(uri) == "/foo/bar?spam=eggs#mustard" assert uri.string == "/foo/bar?spam=eggs#mustard" assert uri.scheme is None assert uri.hierarchical_part == "/foo/bar" assert uri.query == "spam=eggs" assert uri.fragment == "mustard" assert uri.authority is None assert uri.path == "/foo/bar" assert uri.user_info is None assert uri.host is None assert uri.port is None assert uri.host_port is None assert uri.absolute_path_reference == "/foo/bar?spam=eggs#mustard"
def test_can_build_uri_from_scheme_host_and_path(): uri = URI.build(scheme="http", host="example.com", path="/foo/bar") assert str(uri) == "http://example.com/foo/bar" assert uri.string == "http://example.com/foo/bar" assert uri.scheme == "http" assert uri.hierarchical_part == "//example.com/foo/bar" assert uri.query is None assert uri.fragment is None assert uri.authority == "example.com" assert uri.path == "/foo/bar" assert uri.user_info is None assert uri.host == "example.com" assert uri.port is None assert uri.host_port == "example.com" assert uri.absolute_path_reference == "/foo/bar"
def test_can_build_uri_from_authority_and_absolute_path_reference(): uri = URI.build(authority="[email protected]:9999", absolute_path_reference="/foo/bar?spam=eggs#mustard") assert str(uri) == "//[email protected]:9999/foo/bar?spam=eggs#mustard" assert uri.string == "//[email protected]:9999/foo/bar?spam=eggs#mustard" assert uri.scheme is None assert uri.hierarchical_part == "//[email protected]:9999/foo/bar" assert uri.query == "spam=eggs" assert uri.fragment == "mustard" assert uri.authority == "[email protected]:9999" assert uri.path == "/foo/bar" assert uri.user_info == "bob" assert uri.host == "example.com" assert uri.port == 9999 assert uri.host_port == "example.com:9999" assert uri.absolute_path_reference == "/foo/bar?spam=eggs#mustard"
def test_can_build_uri_from_scheme_authority_and_port(): uri = URI.build(scheme="http", authority="*****@*****.**", port=3456) assert str(uri) == "http://[email protected]:3456" assert uri.string == "http://[email protected]:3456" assert uri.scheme == "http" assert uri.hierarchical_part == "//[email protected]:3456" assert uri.query is None assert uri.fragment is None assert uri.authority == "[email protected]:3456" assert uri.path == "" assert uri.user_info == "bob" assert uri.host == "example.com" assert uri.port == 3456 assert uri.host_port == "example.com:3456" assert uri.absolute_path_reference == ""
def test_can_parse_only_query(): uri = URI("?foo=bar") assert str(uri) == "?foo=bar" assert uri.string == "?foo=bar" assert uri.scheme is None assert uri.hierarchical_part == "" assert uri.query == "foo=bar" assert dict(uri.query) == {"foo": "bar"} assert uri.fragment is None assert uri.authority is None assert uri.path == "" assert uri.user_info is None assert uri.host is None assert uri.port is None assert uri.host_port is None assert uri.absolute_path_reference == "?foo=bar"
def test_can_build_uri_from_scheme_hierarchical_part_query_and_fragment(): uri = URI.build(scheme="foo", hierarchical_part="//example.com/", query="spam=eggs", fragment="mustard") assert str(uri) == "foo://example.com/?spam=eggs#mustard" assert uri.string == "foo://example.com/?spam=eggs#mustard" assert uri.scheme == "foo" assert uri.hierarchical_part == "//example.com/" assert uri.query == "spam=eggs" assert uri.fragment == "mustard" assert uri.authority == "example.com" assert uri.path == "/" assert uri.user_info is None assert uri.host == "example.com" assert uri.port is None assert uri.host_port == "example.com" assert uri.absolute_path_reference == "/?spam=eggs#mustard"
def test_can_resolve_without_strict_mode(): base = URI("http://a/b/c/d;p?q") uri = base.resolve("http:g", strict=False) assert uri == "http://a/b/c/g"
def test_uri_equality_when_none(): uri = URI(None) none = None assert uri == none
def test_can_cast_none_uri(): uri = URI._cast(None) none = None assert uri == none
def test_can_cast_existing_uri(): existing_uri = URI("http://example.com/") uri = URI._cast(existing_uri) string = "http://example.com/" assert uri == string
def test_resolving_when_reference_is_none_returns_none(): base = URI("http://example.com") uri = base.resolve(None) assert uri is None
def test_can_resolve_from_empty_uri(): base = URI("") uri = base.resolve("foo") assert uri == "foo"
def test_uri_equality_with_string_containing_encoded_space(): uri = URI("http://example.com/foo bar") string = "http://example.com/foo%20bar" assert uri == string
def test_uri_is_hashable(): uri = URI("http://example.com/") hashed = hash(uri) assert hashed
def test_uri_to_true(): uri = URI("http://example.com/") assert uri.__bool__() assert uri.__nonzero__()
def _test_references(references): base = URI("http://a/b/c/d;p?q") for reference, target in references.items(): print(reference, "->", target) uri = base.resolve(reference) assert uri == target
def test_uri_to_false(): uri = URI("") assert not uri.__bool__() assert not uri.__nonzero__()
def test_can_resolve_from_empty_path(): base = URI("http://example.com") uri = base.resolve("foo") assert uri == "http://example.com/foo"
def test_uri_inequality(): uri1 = URI("http://example.com/") uri2 = URI("http://example.org/") assert uri1 != uri2
def test_uri_can_be_iterated(): uri = URI("http://example.com/") listed = list(uri) assert listed == ['h', 't', 't', 'p', ':', '/', '/', 'e', 'x', 'a', 'm', 'p', 'l', 'e', '.', 'c', 'o', 'm', '/']
def test_uri_equality_with_string(): uri = URI("http://example.com/") string = "http://example.com/" assert uri == string