diff options
| author | Misko Hevery | 2013-07-31 16:54:21 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2013-07-31 17:10:10 -0700 | 
| commit | 90532f5e3c2016c99833a4dd779a5c4718c84f4d (patch) | |
| tree | 5c0763df89bc1c5c10e10895b9776b597d23c533 | |
| parent | 2bc04d23fbc302e6dd52ab80a621aa264548d9e3 (diff) | |
| download | angular.js-90532f5e3c2016c99833a4dd779a5c4718c84f4d.tar.bz2 | |
fix(location): fix parameter handling on search()
| -rw-r--r-- | docs/content/error/location/wpt.ngdoc | 4 | ||||
| -rw-r--r-- | src/ng/location.js | 29 | ||||
| -rw-r--r-- | test/ng/locationSpec.js | 29 | 
3 files changed, 51 insertions, 11 deletions
| diff --git a/docs/content/error/location/wpt.ngdoc b/docs/content/error/location/wpt.ngdoc new file mode 100644 index 00000000..8b3b3b2a --- /dev/null +++ b/docs/content/error/location/wpt.ngdoc @@ -0,0 +1,4 @@ +@ngdoc error +@name $location:wpt +@fullName Wrong parameter type +@description diff --git a/src/ng/location.js b/src/ng/location.js index e99137d5..9ec6300f 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -349,17 +349,24 @@ LocationUrl.prototype = {     * @return {string} search     */    search: function(search, paramValue) { -    if (isUndefined(search)) -      return this.$$search; - -    if (isDefined(paramValue)) { -      if (paramValue === null) { -        delete this.$$search[search]; -      } else { -        this.$$search[search] = paramValue; -      } -    } else { -      this.$$search = isString(search) ? parseKeyValue(search) : search; +    switch (arguments.length) { +      case 0: +        return this.$$search; +      case 1: +        if (isString(search)) { +          this.$$search = parseKeyValue(search); +        } else if (isObject(search)) { +          this.$$search = search; +        } else { +          throw $locationMinErr('wpt', 'First parameter of function must be string or an object.'); +        } +        break; +      default: +        if (paramValue == undefined || paramValue == null) { +          delete this.$$search[search]; +        } else { +          this.$$search[search] = paramValue; +        }      }      this.$$compose(); diff --git a/test/ng/locationSpec.js b/test/ng/locationSpec.js index b6efe783..0158bf61 100644 --- a/test/ng/locationSpec.js +++ b/test/ng/locationSpec.js @@ -78,6 +78,35 @@ describe('$location', function() {      }); +    it('search() should handle multiple value', function() { +      url.search('a&b'); +      expect(url.search()).toEqual({a: true, b: true}); + +      url.search('a', null); + +      expect(url.search()).toEqual({b: true}); + +      url.search('b', undefined); +      expect(url.search()).toEqual({}); +    }); + + +    it('search() should handle single value', function() { +      url.search('ignore'); +      expect(url.search()).toEqual({ignore: true}); +    }); + + +    it('search() should throw error an incorrect argument', function() { +      expect(function() { +        url.search(null); +      }).toThrow('[$location:wpt] First parameter of function must be string or an object.'); +      expect(function() { +        url.search(undefined); +      }).toThrow('[$location:wpt] First parameter of function must be string or an object.'); +    }); + +      it('hash() should change hash fragment', function() {        url.hash('new-hash');        expect(url.hash()).toBe('new-hash'); | 
