def test_location_init02(self): location = Location() src = 'scheme://netloc/path;parameters?query=a#fragment' location.href = src self.assertEqual(src, location.tostring()) self.assertEqual(src, location.href) self.assertEqual('null', location.origin) self.assertEqual('scheme:', location.protocol) self.assertEqual('netloc', location.host) self.assertEqual('netloc', location.hostname) self.assertEqual('', location.port) self.assertEqual('/path;parameters', location.pathname) self.assertEqual('?query=a', location.search) self.assertEqual('#fragment', location.hash) src = "scheme://*****:*****@netloc:88" \ "/path;parameters?query=a#fragment" location.href = src self.assertEqual(src, location.tostring()) self.assertEqual(src, location.href) self.assertEqual('null', location.origin) self.assertEqual('scheme:', location.protocol) self.assertEqual('netloc:88', location.host) self.assertEqual('netloc', location.hostname) self.assertEqual('88', location.port) self.assertEqual('/path;parameters', location.pathname) self.assertEqual('?query=a', location.search) self.assertEqual('#fragment', location.hash)
def test_location_init_ipv6(self): location = Location() src = 'http://[::1]/svg/svg.svg' location.href = src self.assertEqual(src, location.tostring()) self.assertEqual(src, location.href) self.assertEqual('http://[::1]', location.origin) self.assertEqual('http:', location.protocol) self.assertEqual('[::1]', location.host) self.assertEqual('[::1]', location.hostname) self.assertEqual('', location.port) self.assertEqual('/svg/svg.svg', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) src = 'http://[::1]:8000/svg/svg.svg' location.href = src self.assertEqual(src, location.tostring()) self.assertEqual(src, location.href) self.assertEqual('http://[::1]:8000', location.origin) self.assertEqual('http:', location.protocol) self.assertEqual('[::1]:8000', location.host) self.assertEqual('[::1]', location.hostname) self.assertEqual('8000', location.port) self.assertEqual('/svg/svg.svg', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash)
def test_location_attr_search(self): location = Location() location.href = 'https://example.org/' location.search = 'q=🏳️🌈&key=e1f7bc78' self.assertEqual( "https://example.org/" "?key=e1f7bc78&q=%F0%9F%8F%B3%EF%B8%8F%E2%80%8D%F0%9F%8C%88", location.tostring()) self.assertEqual( "https://example.org/" "?key=e1f7bc78&q=%F0%9F%8F%B3%EF%B8%8F%E2%80%8D%F0%9F%8C%88", location.href) self.assertEqual('https://example.org', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.org', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('', location.port) self.assertEqual('/', location.pathname) self.assertEqual( '?key=e1f7bc78&q=%F0%9F%8F%B3%EF%B8%8F%E2%80%8D%F0%9F%8C%88', location.search) self.assertEqual('', location.hash) location.search = '' self.assertEqual('https://example.org/', location.tostring()) self.assertEqual('', location.search)
def test_location_attr_hash(self): location = Location() location.href = 'https://example.org/' location.hash = '#api' self.assertEqual('https://example.org/#api', location.tostring()) self.assertEqual('https://example.org/#api', location.href) self.assertEqual('https://example.org', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.org', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('#api', location.hash) location.hash = 'url-class' self.assertEqual('https://example.org/#url-class', location.tostring()) self.assertEqual('https://example.org/#url-class', location.href) self.assertEqual('https://example.org', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.org', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('#url-class', location.hash) location.hash = 'hash!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' self.assertEqual('#hash!%22#$%&\'()*+,-./:;%3C=%3E?@[\]^_%60{|}~', location.hash) location.hash = '' self.assertEqual('', location.hash)
def test_location_init_about(self): location = Location() src = 'about:blank' location.href = src self.assertEqual(src, location.tostring()) self.assertEqual(src, location.href) self.assertEqual('null', location.origin) self.assertEqual('about:', location.protocol) self.assertEqual('', location.host) self.assertEqual('', location.hostname) self.assertEqual('', location.port) self.assertEqual('blank', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash)
def test_location_attr_pathname(self): location = Location() location.href = 'http://localhost/' location.pathname = '/svg/svg.svg' self.assertEqual('http://localhost/svg/svg.svg', location.tostring()) self.assertEqual('http://localhost/svg/svg.svg', location.href) self.assertEqual('http://localhost', location.origin) self.assertEqual('http:', location.protocol) self.assertEqual('localhost', location.host) self.assertEqual('localhost', location.hostname) self.assertEqual('', location.port) self.assertEqual('/svg/svg.svg', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) location.pathname = '/wiki/Category:W3C勧告' self.assertEqual( 'http://localhost/wiki/Category:W3C%E5%8B%A7%E5%91%8A', location.tostring()) self.assertEqual( 'http://localhost/wiki/Category:W3C%E5%8B%A7%E5%91%8A', location.href) self.assertEqual('http://localhost', location.origin) self.assertEqual('http:', location.protocol) self.assertEqual('localhost', location.host) self.assertEqual('localhost', location.hostname) self.assertEqual('', location.port) self.assertEqual('/wiki/Category:W3C%E5%8B%A7%E5%91%8A', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) location.pathname = '/path;param?a=0&b=1#hash' self.assertEqual('http://localhost/path;param%3Fa=0&b=1%23hash', location.href) self.assertEqual('http://localhost', location.origin) self.assertEqual('http:', location.protocol) self.assertEqual('localhost', location.host) self.assertEqual('localhost', location.hostname) self.assertEqual('', location.port) self.assertEqual('/path;param%3Fa=0&b=1%23hash', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) location.pathname = '' self.assertEqual('/', location.pathname)
def test_location_attr_protocol(self): location = Location() location.href = 'ssh://[email protected]/' location.protocol = 'ftp:' self.assertEqual('ftp://[email protected]/', location.tostring()) self.assertEqual('ftp://[email protected]/', location.href) self.assertEqual('ftp://example.org', location.origin) self.assertEqual('ftp:', location.protocol) self.assertEqual('example.org', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # starts with ASCII-alpha, followed by zero or more of # ASCII-alphanumeric, U+002B (+), U+002D (-), and U+002E (.). location.protocol = 'h323' self.assertEqual('h323:', location.protocol) # contains U+002B (+) location.protocol = 'CoAP+TCP' self.assertEqual('coap+tcp:', location.protocol) # contains U+002D (-) location.protocol = 'view-source' self.assertEqual('view-source:', location.protocol) # contains U+002E (.) location.protocol = 'xmlrpc.beep' self.assertEqual('xmlrpc.beep:', location.protocol) # starts with ASCII-alpha self.assertRaises(ValueError, lambda: setattr(location, 'protocol', '0http:')) # starts with ASCII-alpha, followed by zero or more of # ASCII-alphanumeric, U+002B (+), U+002D (-), and U+002E (.). self.assertRaises(ValueError, lambda: setattr(location, 'protocol', 'coap_tcp:')) # empty string location.protocol = '' self.assertEqual('', location.protocol)
def test_location_init03(self): location = Location() src = '/path;parameters?query=a#fragment' self.assertRaises(ValueError, lambda: setattr(location, 'href', src)) src = 'path;parameters?query=a#fragment' self.assertRaises(ValueError, lambda: setattr(location, 'href', src)) src = 'file:///path;parameters?query=a#fragment' location.href = src self.assertEqual(src, location.tostring()) self.assertEqual(src, location.href) self.assertEqual('null', location.origin) self.assertEqual('file:', location.protocol) self.assertEqual('', location.host) self.assertEqual('', location.hostname) self.assertEqual('', location.port) self.assertEqual('/path;parameters', location.pathname) self.assertEqual('?query=a', location.search) self.assertEqual('#fragment', location.hash)
def test_location_attr_host(self): location = Location() location.href = 'https://example.org/' # ascii-domain with port location.host = 'example.org:8080' self.assertEqual('https://example.org:8080/', location.tostring()) self.assertEqual('https://example.org:8080/', location.href) self.assertEqual('https://example.org:8080', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.org:8080', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('8080', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # ascii-domain location.host = 'example.net' self.assertEqual('https://example.net/', location.tostring()) self.assertEqual('https://example.net/', location.href) self.assertEqual('https://example.net', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.net', location.host) self.assertEqual('example.net', location.hostname) self.assertEqual('', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # IPv6 address without [] location.host = '2001:db8::1' self.assertEqual('https://[2001:db8::1]/', location.tostring()) self.assertEqual('https://[2001:db8::1]/', location.href) self.assertEqual('https://[2001:db8::1]', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('[2001:db8::1]', location.host) self.assertEqual('[2001:db8::1]', location.hostname) self.assertEqual('', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # IPv6 address with [] location.host = '[2001:db8::2]' self.assertEqual('https://[2001:db8::2]/', location.tostring()) self.assertEqual('https://[2001:db8::2]/', location.href) self.assertEqual('https://[2001:db8::2]', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('[2001:db8::2]', location.host) self.assertEqual('[2001:db8::2]', location.hostname) self.assertEqual('', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # IPv6 address with port location.host = '[2001:db8::3]:8000' self.assertEqual('https://[2001:db8::3]:8000/', location.tostring()) self.assertEqual('https://[2001:db8::3]:8000/', location.href) self.assertEqual('https://[2001:db8::3]:8000', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('[2001:db8::3]:8000', location.host) self.assertEqual('[2001:db8::3]', location.hostname) self.assertEqual('8000', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # IDN location.host = '日本語.example:444' self.assertEqual('https://xn--wgv71a119e.example:444/', location.href) self.assertEqual('https://xn--wgv71a119e.example:444', location.origin) self.assertEqual('xn--wgv71a119e.example:444', location.host) self.assertEqual('xn--wgv71a119e.example', location.hostname) self.assertEqual('444', location.port) # empty string location.host = '' self.assertEqual('', location.host) self.assertEqual('null', location.origin) self.assertEqual('', location.port)
def test_location_attr_port(self): location = Location() location.href = 'https://example.org:8080/' location.port = '' self.assertEqual('https://example.org/', location.tostring()) self.assertEqual('https://example.org/', location.href) self.assertEqual('https://example.org', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.org', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) location.port = '8888' self.assertEqual('https://example.org:8888/', location.tostring()) self.assertEqual('https://example.org:8888/', location.href) self.assertEqual('https://example.org:8888', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.org:8888', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('8888', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) location.port = '443' self.assertEqual('https://example.org/', location.tostring()) self.assertEqual('https://example.org/', location.href) self.assertEqual('https://example.org', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.org', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('443', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) location.port = '0' self.assertEqual('0', location.port) location.port = '65535' self.assertEqual('65535', location.port) # less than 2 ** 16 self.assertRaises(ValueError, lambda: setattr(location, 'port', '65536')) # ASCII-digits self.assertRaises(ValueError, lambda: setattr(location, 'port', '0.1')) # empty string self.assertEqual('https://example.org:65535/', location.href) self.assertEqual('https://example.org:65535', location.origin) self.assertEqual('example.org:65535', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('65535', location.port) location.port = '' self.assertEqual('https://example.org/', location.href) self.assertEqual('https://example.org', location.origin) self.assertEqual('example.org', location.host) self.assertEqual('example.org', location.hostname) self.assertEqual('', location.port)
def test_location_attr_hostname(self): location = Location() location.href = 'https://example.org:8080/' # ascii-domain location.hostname = 'example.net' self.assertEqual('https://example.net:8080/', location.tostring()) self.assertEqual('https://example.net:8080/', location.href) self.assertEqual('https://example.net:8080', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.net:8080', location.host) self.assertEqual('example.net', location.hostname) self.assertEqual('8080', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # ascii-domain with port location.hostname = 'example.com:444' self.assertEqual('https://example.com:444/', location.tostring()) self.assertEqual('https://example.com:444/', location.href) self.assertEqual('https://example.com:444', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('example.com:444', location.host) self.assertEqual('example.com', location.hostname) self.assertEqual('444', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # IPv6 address without [] location.hostname = '2001:db8::1' self.assertEqual('https://[2001:db8::1]:444/', location.tostring()) self.assertEqual('https://[2001:db8::1]:444/', location.href) self.assertEqual('https://[2001:db8::1]:444', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('[2001:db8::1]:444', location.host) self.assertEqual('[2001:db8::1]', location.hostname) self.assertEqual('444', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # IPv6 address with [] location.hostname = '2001:db8::2' self.assertEqual('https://[2001:db8::2]:444/', location.tostring()) self.assertEqual('https://[2001:db8::2]:444/', location.href) self.assertEqual('https://[2001:db8::2]:444', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('[2001:db8::2]:444', location.host) self.assertEqual('[2001:db8::2]', location.hostname) self.assertEqual('444', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # IPv6 address with port location.hostname = '[2001:db8::3]:445' self.assertEqual('https://[2001:db8::3]:445/', location.tostring()) self.assertEqual('https://[2001:db8::3]:445/', location.href) self.assertEqual('https://[2001:db8::3]:445', location.origin) self.assertEqual('https:', location.protocol) self.assertEqual('[2001:db8::3]:445', location.host) self.assertEqual('[2001:db8::3]', location.hostname) self.assertEqual('445', location.port) self.assertEqual('/', location.pathname) self.assertEqual('', location.search) self.assertEqual('', location.hash) # IDN location.hostname = '日本語.example' self.assertEqual('https://xn--wgv71a119e.example:445/', location.href) self.assertEqual('https://xn--wgv71a119e.example:445', location.origin) self.assertEqual('xn--wgv71a119e.example:445', location.host) self.assertEqual('xn--wgv71a119e.example', location.hostname) self.assertEqual('445', location.port) # contains forbidden host code point self.assertRaises( ValueError, lambda: setattr(location, 'hostname', 'example%20.test')) # empty string location.hostname = '' self.assertEqual('', location.host) self.assertEqual('', location.hostname) self.assertEqual('null', location.origin) self.assertEqual('445', location.port)