Home | History | Annotate | Download | only in tests
      1 import httplib2
      2 import pytest
      3 
      4 
      5 def test_from_std66():
      6     cases = (
      7         ("http://example.com", ("http", "example.com", "", None, None)),
      8         ("https://example.com", ("https", "example.com", "", None, None)),
      9         ("https://example.com:8080", ("https", "example.com:8080", "", None, None)),
     10         ("http://example.com/", ("http", "example.com", "/", None, None)),
     11         ("http://example.com/path", ("http", "example.com", "/path", None, None)),
     12         (
     13             "http://example.com/path?a=1&b=2",
     14             ("http", "example.com", "/path", "a=1&b=2", None),
     15         ),
     16         (
     17             "http://example.com/path?a=1&b=2#fred",
     18             ("http", "example.com", "/path", "a=1&b=2", "fred"),
     19         ),
     20         (
     21             "http://example.com/path?a=1&b=2#fred",
     22             ("http", "example.com", "/path", "a=1&b=2", "fred"),
     23         ),
     24     )
     25     for a, b in cases:
     26         assert httplib2.parse_uri(a) == b
     27 
     28 
     29 def test_norm():
     30     cases = (
     31         ("http://example.org", "http://example.org/"),
     32         ("http://EXAMple.org", "http://example.org/"),
     33         ("http://EXAMple.org?=b", "http://example.org/?=b"),
     34         ("http://EXAMple.org/mypath?a=b", "http://example.org/mypath?a=b"),
     35         ("http://localhost:80", "http://localhost:80/"),
     36     )
     37     for a, b in cases:
     38         assert httplib2.urlnorm(a)[-1] == b
     39 
     40     assert httplib2.urlnorm("http://localhost:80/") == httplib2.urlnorm(
     41         "HTTP://LOCALHOST:80"
     42     )
     43 
     44     try:
     45         httplib2.urlnorm("/")
     46         assert False, "Non-absolute URIs should raise an exception"
     47     except httplib2.RelativeURIError:
     48         pass
     49 
     50 
     51 @pytest.mark.parametrize(
     52     "data",
     53     (
     54         ("", ",d41d8cd98f00b204e9800998ecf8427e"),
     55         (
     56             "http://example.org/fred/?a=b",
     57             "example.orgfreda=b,58489f63a7a83c3b7794a6a398ee8b1f",
     58         ),
     59         (
     60             "http://example.org/fred?/a=b",
     61             "example.orgfreda=b,8c5946d56fec453071f43329ff0be46b",
     62         ),
     63         (
     64             "http://www.example.org/fred?/a=b",
     65             "www.example.orgfreda=b,499c44b8d844a011b67ea2c015116968",
     66         ),
     67         (
     68             "https://www.example.org/fred?/a=b",
     69             "www.example.orgfreda=b,692e843a333484ce0095b070497ab45d",
     70         ),
     71         (
     72             httplib2.urlnorm("http://WWW")[-1],
     73             httplib2.safename(httplib2.urlnorm("http://www")[-1]),
     74         ),
     75         (
     76             u"http://\u2304.org/fred/?a=b",
     77             ".orgfreda=b,ecaf0f97756c0716de76f593bd60a35e",
     78         ),
     79         (
     80             "normal-resource-name.js",
     81             "normal-resource-name.js,8ff7c46fd6e61bf4e91a0a1606954a54",
     82         ),
     83         (
     84             "foo://dom/path/brath/carapath",
     85             "dompathbrathcarapath,83db942781ed975c7a5b7c24039f8ca3",
     86         ),
     87         ("with/slash", "withslash,17cc656656bb8ce2411bd41ead56d176"),
     88         (
     89             "thisistoomuch" * 42,
     90             ("thisistoomuch" * 6) + "thisistoomuc,c4553439dd179422c6acf6a8ac093eb6",
     91         ),
     92         (u"\u043f\u0440", ",9f18c0db74a9734e9d18461e16345083"),
     93         (u"\u043f\u0440".encode("utf-8"), ",9f18c0db74a9734e9d18461e16345083"),
     94         (
     95             b"column\tvalues/unstr.zip",
     96             "columnvaluesunstr.zip,b9740dcd0553e11b526450ceb8f76683",
     97         ),
     98     ),
     99     ids=str,
    100 )
    101 def test_safename(data):
    102     result = httplib2.safename(data[0])
    103     assert result == data[1]
    104 
    105 
    106 def test_safename2():
    107     assert httplib2.safename("http://www") != httplib2.safename("https://www")
    108 
    109     # Test the max length limits
    110     uri = "http://" + ("w" * 200) + ".org"
    111     uri2 = "http://" + ("w" * 201) + ".org"
    112     assert httplib2.safename(uri) != httplib2.safename(uri2)
    113     # Max length should be 90 + 1 (',') + 32 = 123
    114     assert len(httplib2.safename(uri2)) == 123
    115     assert len(httplib2.safename(uri)) == 123
    116