UNPKG

mach

Version:
260 lines (207 loc) 7.64 kB
/* jshint -W058 */ var expect = require('expect'); var Location = require('../Location'); describe('an empty Location', function () { var location; beforeEach(function () { location = new Location; }); it('has the correct href', function () { expect(location.href).toEqual('/'); }); }); describe('a fully-specified Location', function () { var location; beforeEach(function () { location = new Location('http://user:pass@example.com:5000/the/path?the=query'); }); it('has the correct href', function () { expect(location.href).toEqual('http://user:pass@example.com:5000/the/path?the=query'); }); it('has the correct protocol', function () { expect(location.protocol).toEqual('http:'); }); it('has the correct auth', function () { expect(location.auth).toEqual('user:pass'); }); it('has the correct host', function () { expect(location.host).toEqual('example.com:5000'); }); it('has the correct hostname', function () { expect(location.hostname).toEqual('example.com'); }); it('has the correct port', function () { expect(location.port).toEqual('5000'); }); it('has the correct pathname', function () { expect(location.pathname).toEqual('/the/path'); }); it('has the correct path', function () { expect(location.path).toEqual('/the/path?the=query'); }); it('has the correct search', function () { expect(location.search).toEqual('?the=query'); }); it('has the correct queryString', function () { expect(location.queryString).toEqual('the=query'); }); it('has the correct query', function () { expect(location.query).toEqual({ the: 'query' }); }); describe('with http: protocol on the standard port', function () { it('leaves the port # out of host', function () { var location = new Location('http://example.com:80/the/path'); expect(location.host).toEqual('example.com'); }); }); describe('with http: protocol on a non-standard port', function () { it('includes the port # in host', function () { var location = new Location('http://example.com:8080/the/path'); expect(location.host).toEqual('example.com:8080'); }); }); describe('with https: protocol on the standard port', function () { it('leaves the port # out of host', function () { var location = new Location('https://example.com:443/the/path'); expect(location.host).toEqual('example.com'); }); }); describe('with https: protocol on a non-standard port', function () { it('includes the port # in host', function () { var location = new Location('https://example.com:5000/the/path'); expect(location.host).toEqual('example.com:5000'); }); }); describe('when the href is set', function () { it('has the correct href', function () { location.href = 'https://user:pass@example.net/another/path?another=query'; expect(location.href).toEqual('https://user:pass@example.net/another/path?another=query'); }); }); describe('when the protocol is set', function () { it('has the correct href', function () { location.protocol = 'https:'; expect(location.href).toEqual('https://user:pass@example.com:5000/the/path?the=query'); }); }); describe('when the hostname is set', function () { it('has the correct href', function () { location.hostname = 'example.net'; expect(location.href).toEqual('http://user:pass@example.net:5000/the/path?the=query'); }); }); describe('when the host is set', function () { describe('with a port', function () { it('has the correct href', function () { location.host = 'example.net:8080'; expect(location.href).toEqual('http://user:pass@example.net:8080/the/path?the=query'); }); }); describe('without a port', function () { it('has the correct href', function () { location.host = 'example.net'; expect(location.href).toEqual('http://user:pass@example.net/the/path?the=query'); }); }); }); describe('when the port is set', function () { it('has the correct href', function () { location.port = 6000; expect(location.href).toEqual('http://user:pass@example.com:6000/the/path?the=query'); }); }); describe('when the pathname is set', function () { it('has the correct href', function () { location.pathname = '/another/path'; expect(location.href).toEqual('http://user:pass@example.com:5000/another/path?the=query'); }); }); describe('when the path is set', function () { describe('with a search', function () { it('has the correct href', function () { location.path = '/another/path?another=query'; expect(location.href).toEqual('http://user:pass@example.com:5000/another/path?another=query'); }); }); describe('without a search', function () { it('has the correct href', function () { location.path = '/another/path'; expect(location.href).toEqual('http://user:pass@example.com:5000/another/path'); }); }); }); describe('when the search is set', function () { it('has the correct href', function () { location.search = '?another=query'; expect(location.href).toEqual('http://user:pass@example.com:5000/the/path?another=query'); }); }); describe('when the queryString is set', function () { it('has the correct href', function () { location.queryString = 'another=query'; expect(location.href).toEqual('http://user:pass@example.com:5000/the/path?another=query'); }); }); describe('when the query is set', function () { it('has the correct href', function () { location.query = { another: 'query' }; expect(location.href).toEqual('http://user:pass@example.com:5000/the/path?another=query'); }); }); describe('when appending another location', function () { beforeEach(function () { location = location.concat('https://example.org/more/path?more=query'); }); it('uses the new protocol', function () { expect(location.protocol).toEqual('https:'); }); it('uses the new host', function () { expect(location.host).toEqual('example.org'); }); it('has the correct pathname', function () { expect(location.pathname).toEqual('/the/path/more/path'); }); it('has the correct query', function () { expect(location.query).toEqual({ the: 'query', more: 'query' }); }); }); }); describe('a Location with only a path', function () { var location; beforeEach(function () { location = new Location('/the/path?the=query'); }); it('has no protocol', function () { expect(location.protocol).toBe(null); }); it('has no hostname', function () { expect(location.hostname).toBe(null); }); it('has no port', function () { expect(location.port).toBe(null); }); it('has no host', function () { expect(location.host).toBe(null); }); it('has the correct pathname', function () { expect(location.pathname).toEqual('/the/path'); }); it('has the correct query', function () { expect(location.query).toEqual({ the: 'query' }); }); }); describe('a Location with no search', function () { var location; beforeEach(function () { location = new Location('/the/path'); }); it('has an empty search', function () { expect(location.search).toEqual(''); }); it('has an empty queryString', function () { expect(location.queryString).toEqual(''); }); it('has an empty query', function () { expect(location.query).toEqual({}); }); });