# -*- coding: utf-8 -*- # Copyright (c) 2015 Ian Stapleton Cordasco # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. # See the License for the specific language governing permissions and # limitations under the License. class BaseTestParsesURIs: test_class = None """Tests for self.test_class handling of URIs.""" def test_handles_basic_uri(self, basic_uri): """Test that self.test_class can handle a simple URI.""" uri = self.test_class.from_string(basic_uri) assert uri.scheme == 'http' assert uri.authority == basic_uri[7:] # len('http://') assert uri.host == uri.authority assert uri.path is None assert uri.query is None assert uri.fragment is None assert uri.port is None assert uri.userinfo is None def test_handles_basic_uri_with_port(self, basic_uri_with_port): """Test that self.test_class can handle a simple URI with a port.""" uri = self.test_class.from_string(basic_uri_with_port) assert uri.scheme == 'ftp' assert uri.authority == basic_uri_with_port[6:] assert uri.host != uri.authority assert str(uri.port) == '21' assert uri.path is None assert uri.query is None assert uri.fragment is None assert uri.userinfo is None def test_handles_uri_with_port_and_userinfo( self, uri_with_port_and_userinfo): """ Test that self.test_class can handle a URI with a port and userinfo. """ uri = self.test_class.from_string(uri_with_port_and_userinfo) assert uri.scheme == 'ssh' # 6 == len('ftp://') assert uri.authority == uri_with_port_and_userinfo[6:] assert uri.host != uri.authority assert str(uri.port) == '22' assert uri.path is None assert uri.query is None assert uri.fragment is None assert uri.userinfo == 'user:pass' def test_handles_tricky_userinfo( self, uri_with_port_and_tricky_userinfo): """ Test that self.test_class can handle a URI with unusual (non a-z) chars in userinfo. """ uri = self.test_class.from_string(uri_with_port_and_tricky_userinfo) assert uri.scheme == 'ssh' # 6 == len('ftp://') assert uri.authority == uri_with_port_and_tricky_userinfo[6:] assert uri.host != uri.authority assert str(uri.port) == '22' assert uri.path is None assert uri.query is None assert uri.fragment is None assert uri.userinfo == 'user%20!=:pass' def test_handles_basic_uri_with_path(self, basic_uri_with_path): """Test that self.test_class can handle a URI with a path.""" uri = self.test_class.from_string(basic_uri_with_path) assert uri.scheme == 'http' assert basic_uri_with_path == (uri.scheme + '://' + uri.authority + uri.path) assert uri.host == uri.authority assert uri.path == '/path/to/resource' assert uri.query is None assert uri.fragment is None assert uri.userinfo is None assert uri.port is None def test_handles_uri_with_path_and_query(self, uri_with_path_and_query): """ Test that self.test_class can handle a URI with a path and query. """ uri = self.test_class.from_string(uri_with_path_and_query) assert uri.scheme == 'http' assert uri.host == uri.authority assert uri.path == '/path/to/resource' assert uri.query == 'key=value' assert uri.fragment is None assert uri.userinfo is None assert uri.port is None def test_handles_uri_with_everything(self, uri_with_everything): """ Test that self.test_class can handle and with everything in it. """ uri = self.test_class.from_string(uri_with_everything) assert uri.scheme == 'https' assert uri.path == '/path/to/resource' assert uri.query == 'key=value' assert uri.fragment == 'fragment' assert uri.userinfo == 'user:pass' assert str(uri.port) == '443' def test_handles_relative_uri(self, relative_uri): """Test that self.test_class can handle a relative URI.""" uri = self.test_class.from_string(relative_uri) assert uri.scheme is None assert uri.authority == relative_uri[2:] def test_handles_percent_in_path(self, uri_path_with_percent): """Test that self.test_class encodes the % character properly.""" uri = self.test_class.from_string(uri_path_with_percent) print(uri.path) assert uri.path == '/%25%20' def test_handles_percent_in_query(self, uri_query_with_percent): uri = self.test_class.from_string(uri_query_with_percent) assert uri.query == 'a=%25' def test_handles_percent_in_fragment(self, uri_fragment_with_percent): uri = self.test_class.from_string(uri_fragment_with_percent) assert uri.fragment == 'perc%25ent' class BaseTestUnsplits: test_class = None def test_basic_uri_unsplits(self, basic_uri): uri = self.test_class.from_string(basic_uri) assert uri.unsplit() == basic_uri def test_basic_uri_with_port_unsplits(self, basic_uri_with_port): uri = self.test_class.from_string(basic_uri_with_port) assert uri.unsplit() == basic_uri_with_port def test_uri_with_port_and_userinfo_unsplits(self, uri_with_port_and_userinfo): uri = self.test_class.from_string(uri_with_port_and_userinfo) assert uri.unsplit() == uri_with_port_and_userinfo def test_basic_uri_with_path_unsplits(self, basic_uri_with_path): uri = self.test_class.from_string(basic_uri_with_path) assert uri.unsplit() == basic_uri_with_path def test_uri_with_path_and_query_unsplits(self, uri_with_path_and_query): uri = self.test_class.from_string(uri_with_path_and_query) assert uri.unsplit() == uri_with_path_and_query def test_uri_with_everything_unsplits(self, uri_with_everything): uri = self.test_class.from_string(uri_with_everything) assert uri.unsplit() == uri_with_everything def test_relative_uri_unsplits(self, relative_uri): uri = self.test_class.from_string(relative_uri) assert uri.unsplit() == relative_uri def test_absolute_path_uri_unsplits(self, absolute_path_uri): uri = self.test_class.from_string(absolute_path_uri) assert uri.unsplit() == absolute_path_uri