diff options
| -rw-r--r-- | src/ng/location.js | 13 | ||||
| -rw-r--r-- | test/ng/locationSpec.js | 24 | 
2 files changed, 35 insertions, 2 deletions
| diff --git a/src/ng/location.js b/src/ng/location.js index 9bb4d417..85f780e2 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -178,6 +178,11 @@ function LocationHashbangUrl(appBase, hashPrefix) {        throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url,            hashPrefix);      } + +    if (withoutHashUrl === '' && withoutBaseUrl.charAt(0) === '?') { +      withoutHashUrl = withoutBaseUrl; +    } +      parseAppUrl(withoutHashUrl, this, appBase);      this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); @@ -228,10 +233,14 @@ function LocationHashbangUrl(appBase, hashPrefix) {     */    this.$$compose = function() {      var search = toKeyValue(this.$$search), -        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; +        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '', +        url = '';      this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; -    this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : ''); +    if (this.$$url) { +      url = this.$$path ? hashPrefix + this.$$url : this.$$url; +    } +    this.$$absUrl = appBase + url;    };    this.$$rewrite = function(url) { diff --git a/test/ng/locationSpec.js b/test/ng/locationSpec.js index ff823d30..8ff5da30 100644 --- a/test/ng/locationSpec.js +++ b/test/ng/locationSpec.js @@ -1487,6 +1487,30 @@ describe('$location', function() {        expect(location.url()).toBe('/not-starting-with-slash');        expect(location.absUrl()).toBe('http://server/pre/index.html#/not-starting-with-slash');      }); + +    describe("search()", function() { +      it("should return a populated search object for search query when path is empty", function() { +        location = new LocationHashbangUrl('http://server/pre/index.html', '!'); + +        location.$$parse('http://server/pre/?foo=1&bar=2&baz=3'); +        expect(location.path()).toBe(''); +        expect(location.absUrl()).toBe('http://server/pre/index.html?foo=1&bar=2&baz=3') +        expect(location.search()).toEqual({ +          foo: '1', +          bar: '2', +          baz: '3' +        }); + +        location.$$parse('http://server/pre/index.html?foo=1&bar=2&baz=3'); +        expect(location.path()).toBe(''); +        expect(location.absUrl()).toBe('http://server/pre/index.html?foo=1&bar=2&baz=3') +        expect(location.search()).toEqual({ +          foo: '1', +          bar: '2', +          baz: '3' +        }); +      }); +    });    }); | 
