'use strict'; describe('urlUtils', function() { describe('urlResolve', function() { it('should normalize a relative url', function() { expect(urlResolve("foo").href).toMatch(/^https?:\/\/[^/]+\/foo$/); }); it('should parse relative URL into component pieces', function() { var parsed = urlResolve("foo"); expect(parsed.href).toMatch(/https?:\/\//); expect(parsed.protocol).toMatch(/^https?/); expect(parsed.host).not.toBe(""); expect(parsed.hostname).not.toBe(""); expect(parsed.pathname).not.toBe(""); }); it('should return pathname as / if empty path provided', function() { //IE counts / as empty, necessary to use / so that pathname is not context.html var parsed = urlResolve('/'); expect(parsed.pathname).toBe('/'); }); }); describe('isSameOrigin', function() { it('should support various combinations of urls - both string and parsed', inject(function($document) { function expectIsSameOrigin(url, expectedValue) { expect(urlIsSameOrigin(url)).toBe(expectedValue); expect(urlIsSameOrigin(urlResolve(url))).toBe(expectedValue); } expectIsSameOrigin('path', true); var origin = urlResolve($document[0].location.href); expectIsSameOrigin('//' + origin.host + '/path', true); // Different domain. expectIsSameOrigin('http://example.com/path', false); // Auto fill protocol. expectIsSameOrigin('//example.com/path', false); // Should not match when the ports are different. // This assumes that the test is *not* running on port 22 (very unlikely). expectIsSameOrigin('//' + origin.hostname + ':22/path', false); })); }); });