aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMisko Hevery2013-07-31 16:54:21 -0700
committerMisko Hevery2013-07-31 16:55:06 -0700
commit705c9d95bc3157547ac6008d2f0a6a0c0e0ca60a (patch)
treef88e8de9e31fba05b232fe6bf841bd62cf886988
parent61906d3517428b6d52d3284b8d26d1a46e01dad7 (diff)
downloadangular.js-705c9d95bc3157547ac6008d2f0a6a0c0e0ca60a.tar.bz2
fix(location): fix parameter handling on search()
-rw-r--r--docs/content/error/location/wpt.ngdoc4
-rw-r--r--src/ng/location.js29
-rw-r--r--test/ng/locationSpec.js29
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');