def testPrepending(self): # Does not prepend scheme for abbreviated domains self.assertEqual(self.x('google.ca'), ('google.ca', None)) # Does not prepend scheme for abbreviated domains self.assertEqual(self.x('google.ca:8080'), ('google.ca:8080', None)) # Does not prepend when scheme already exists self.assertEqual(self.x('https://google.ca'), ('https://google.ca', None)) # Does not prepend if None type is not specified in allowed_scheme, # because a scheme is required y = IS_GENERIC_URL(allowed_schemes=['http', 'blargg'], prepend_scheme='http') self.assertEqual(y('google.ca'), ('google.ca', 'Enter a valid URL'))
class TestIsGenericUrl(unittest.TestCase): x = IS_GENERIC_URL() def testInvalidUrls(self): urlsToCheckA = [] for i in list(range(0, 32)) + [127]: # Control characters are disallowed in any part of a URL urlsToCheckA.append('http://www.benn' + chr(i) + '.ca') urlsToCheckB = [ None, '', 'http://www.no spaces allowed.com', 'http://www.benn.ca/no spaces allowed/', 'http://www.benn.ca/angle_<bracket/', 'http://www.benn.ca/angle_>bracket/', 'http://www.benn.ca/invalid%character', 'http://www.benn.ca/illegal%%20use', 'http://www.benn.ca/illegaluse%', 'http://www.benn.ca/illegaluse%0', 'http://www.benn.ca/illegaluse%x', 'http://www.benn.ca/ill%egaluse%x', 'http://www.benn.ca/double"quote/', 'http://www.curly{brace.com', 'http://www.benn.ca/curly}brace/', 'http://www.benn.ca/or|symbol/', 'http://www.benn.ca/back\slash', 'http://www.benn.ca/the^carat', 'http://left[bracket.me', 'http://www.benn.ca/right]bracket', 'http://www.benn.ca/angle`quote', '-ttp://www.benn.ca', '+ttp://www.benn.ca', '.ttp://www.benn.ca', '9ttp://www.benn.ca', 'ht;tp://www.benn.ca', 'ht@tp://www.benn.ca', 'ht&tp://www.benn.ca', 'ht=tp://www.benn.ca', 'ht$tp://www.benn.ca', 'ht,tp://www.benn.ca', 'ht:tp://www.benn.ca', 'htp://invalid_scheme.com', ] failures = [] for url in urlsToCheckA + urlsToCheckB: if self.x(url)[1] is None: failures.append('Incorrectly accepted: ' + str(url)) if len(failures) > 0: self.fail(failures) def testValidUrls(self): urlsToCheck = [ 'ftp://ftp.is.co.za/rfc/rfc1808.txt', 'gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles', 'http://www.math.uio.no/faq/compression-faq/part1.html', 'mailto:[email protected]', 'news:comp.infosystems.www.servers.unix', 'telnet://melvyl.ucop.edu/', 'hTTp://www.benn.ca', '%66%74%70://ftp.is.co.za/rfc/rfc1808.txt', '%46%74%70://ftp.is.co.za/rfc/rfc1808.txt', '/faq/compression-faq/part1.html', 'google.com', 'www.google.com:8080', '128.127.123.250:8080', 'blargg:ping', 'http://www.benn.ca', 'http://benn.ca', 'http://amazon.com/books/', 'https://amazon.com/movies', 'rtsp://idontknowthisprotocol', 'HTTP://allcaps.com', 'http://localhost', 'http://localhost#fragment', 'http://localhost/hello', 'http://localhost/hello?query=True', 'http://localhost/hello/', 'http://localhost:8080', 'http://localhost:8080/', 'http://localhost:8080/hello', 'http://localhost:8080/hello/', 'file:///C:/Documents%20and%20Settings/Jonathan/Desktop/view.py', ] failures = [] for url in urlsToCheck: if self.x(url)[1] is not None: failures.append('Incorrectly rejected: ' + str(url)) if len(failures) > 0: self.fail(failures) def testPrepending(self): # Does not prepend scheme for abbreviated domains self.assertEqual(self.x('google.ca'), ('google.ca', None)) # Does not prepend scheme for abbreviated domains self.assertEqual(self.x('google.ca:8080'), ('google.ca:8080', None)) # Does not prepend when scheme already exists self.assertEqual(self.x('https://google.ca'), ('https://google.ca', None)) # Does not prepend if None type is not specified in allowed_scheme, # because a scheme is required y = IS_GENERIC_URL(allowed_schemes=['http', 'blargg'], prepend_scheme='http') self.assertEqual(y('google.ca'), ('google.ca', 'Enter a valid URL'))