# -*- coding: utf-8 -*- import pytest from rfc3986.uri import URIReference from rfc3986.normalizers import ( normalize_scheme, normalize_percent_characters, remove_dot_segments ) def test_normalize_scheme(): assert 'http' == normalize_scheme('htTp') assert 'http' == normalize_scheme('http') assert 'http' == normalize_scheme('HTTP') def test_normalize_percent_characters(): expected = '%3Athis_should_be_lowercase%DF%AB%4C' assert expected == normalize_percent_characters( '%3athis_should_be_lowercase%DF%ab%4c') assert expected == normalize_percent_characters( '%3Athis_should_be_lowercase%DF%AB%4C') assert expected == normalize_percent_characters( '%3Athis_should_be_lowercase%DF%aB%4C') paths = [ # (Input, expected output) ('/foo/bar/.', '/foo/bar/'), ('/foo/bar/', '/foo/bar/'), ('/foo/bar', '/foo/bar'), ('./foo/bar', 'foo/bar'), ('/./foo/bar', '/foo/bar'), ('/foo%20bar/biz%2Abaz', '/foo%20bar/biz%2Abaz'), ('../foo/bar', 'foo/bar'), ('/../foo/bar', '/foo/bar'), ('a/./b/../b/%63/%7Bfoo%7D', 'a/b/%63/%7Bfoo%7D'), ('//a/./b/../b/%63/%7Bfoo%7D', '//a/b/%63/%7Bfoo%7D'), ('mid/content=5/../6', 'mid/6'), ('/a/b/c/./../../g', '/a/g'), ] @pytest.fixture(params=paths) def path_fixture(request): return request.param @pytest.fixture(params=paths) def uris(request): to_norm, normalized = request.param return (URIReference(None, None, to_norm, None, None), URIReference(None, None, normalized, None, None)) def test_remove_dot_segments(path_fixture): to_normalize, expected = path_fixture assert expected == remove_dot_segments(to_normalize) def test_normalized_equality(uris): assert uris[0] == uris[1] def test_hostname_normalization(): assert (URIReference(None, 'EXAMPLE.COM', None, None, None) == URIReference(None, 'example.com', None, None, None)) def test_authority_normalization(): uri = URIReference( None, 'user%2aName@EXAMPLE.COM', None, None, None).normalize() assert uri.authority == 'user%2AName@example.com'