def test_parse_url_patterns(): patterns = parse_url_patterns("https://foo.bar:443/ham/spam/?egg=yolk") assert patterns == { "scheme": Scheme("https"), "host": Host("foo.bar"), "path": Path("/ham/spam/"), "params": Params({"egg": "yolk"}, Lookup.EQUAL), } patterns = parse_url_patterns("https://foo.bar:1337/ham/spam/?egg=yolk") assert patterns == { "scheme": Scheme("https"), "host": Host("foo.bar"), "port": Port(1337), "path": Path("/ham/spam/"), "params": Params({"egg": "yolk"}, Lookup.EQUAL), } patterns = parse_url_patterns("https://foo.bar/ham/spam/?egg=yolk", exact=False) assert patterns == { "scheme": Scheme("https"), "host": Host("foo.bar"), "path": Path("/ham/spam/", Lookup.STARTS_WITH), "params": Params({"egg": "yolk"}, Lookup.CONTAINS), } patterns = parse_url_patterns("all://*.foo.bar") assert len(patterns) == 1 assert "host" in patterns assert patterns["host"].lookup is Lookup.REGEX patterns = parse_url_patterns("all") assert len(patterns) == 0
def test_iter_pattern(): pattern = M(Method("GET") & Path("/baz/") | ~Params("x=y"), url="https://foo.bar:88/") patterns = list(iter(pattern)) assert len(patterns) == 6 assert set(patterns) == { Method("GET"), Scheme("https"), Host("foo.bar"), Port(88), Path("/baz/"), Params("x=y"), }
def test_match_context(): request = httpx.Request("GET", "https://foo.bar/baz/?ham=spam") pattern = (URL(r"https?://foo.bar/(?P<slug>\w+)/", Lookup.REGEX) & URL(r"https://(?P<host>[^/]+)/baz/", Lookup.REGEX) & Params({"ham": "spam"})) match = pattern.match(request) assert bool(match) assert match.context == {"host": "foo.bar", "slug": "baz"}
def test_params_pattern_hash(): assert Params("x=1&y=2") == Params("y=2&x=1")
def test_params_pattern(lookup, params, url, expected): request = httpx.Request("GET", url) assert bool(Params(params, lookup=lookup).match(request)) is expected
def test_params_pattern(lookup, params, url, expected): _request = httpx.Request("GET", url) for request in (_request, encode(_request)): assert bool(Params(params, lookup=lookup).match(request)) is expected