diff options
| author | Misko Hevery | 2013-07-31 16:54:21 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2013-07-31 16:55:06 -0700 | 
| commit | 705c9d95bc3157547ac6008d2f0a6a0c0e0ca60a (patch) | |
| tree | f88e8de9e31fba05b232fe6bf841bd62cf886988 | |
| parent | 61906d3517428b6d52d3284b8d26d1a46e01dad7 (diff) | |
| download | angular.js-705c9d95bc3157547ac6008d2f0a6a0c0e0ca60a.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 6ae1066c..730d2433 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -353,17 +353,24 @@ LocationHashbangInHtml5Url.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 df826525..708b4a13 100644 --- a/test/ng/locationSpec.js +++ b/test/ng/locationSpec.js @@ -66,6 +66,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'); | 
