diff options
| -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'); |
