From 8aa31da4dda4e9a760014d02342230906917d748 Mon Sep 17 00:00:00 2001 From: Martin Staffa <mjstaffa@googlemail.com> Date: Sun, 9 Mar 2014 20:17:55 +0100 Subject: [PATCH 1/3] fix(filterFilter): comparator should return true if deep object key is undefined --- src/ng/filter/filter.js | 6 ++++-- test/ng/filter/filterSpec.js | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ng/filter/filter.js b/src/ng/filter/filter.js index 5c6bf2d79e7e..105ff535dc09 100644 --- a/src/ng/filter/filter.js +++ b/src/ng/filter/filter.js @@ -138,8 +138,10 @@ function filterFilter() { comparator = function(obj, text) { if (obj && text && typeof obj === 'object' && typeof text === 'object') { for (var objKey in obj) { - if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) && - comparator(obj[objKey], text[objKey])) { + if (objKey.charAt(0) !== '$' && + hasOwnProperty.call(obj, objKey) && + (!isDefined(text[objKey]) || comparator(obj[objKey], text[objKey])) + ) { return true; } } diff --git a/test/ng/filter/filterSpec.js b/test/ng/filter/filterSpec.js index 7679136ac9f9..2b59402d64b3 100644 --- a/test/ng/filter/filterSpec.js +++ b/test/ng/filter/filterSpec.js @@ -75,6 +75,8 @@ describe('Filter: filter', function() { {person: {name: 'Rita'}}, {person: {name: 'Billy'}}, {person: {name: 'Joan'}}]; + + expect(filter(items, {person: {name : undefined}}).length).toBe(4); expect(filter(items, {person: {name: 'Jo'}}).length).toBe(2); expect(filter(items, {person: {name: 'Jo'}})).toEqual([ {person: {name: 'John'}}, {person: {name: 'Joan'}}]); From 4e63e2683e1bae057e4ec54ebf6f7179854337f1 Mon Sep 17 00:00:00 2001 From: Martin Staffa <mjstaffa@googlemail.com> Date: Sun, 9 Mar 2014 20:20:57 +0100 Subject: [PATCH 2/3] test(filterFilter): undefined object predicate key should return true --- test/ng/filter/filterSpec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/ng/filter/filterSpec.js b/test/ng/filter/filterSpec.js index 2b59402d64b3..72e8dca62351 100644 --- a/test/ng/filter/filterSpec.js +++ b/test/ng/filter/filterSpec.js @@ -53,6 +53,7 @@ describe('Filter: filter', function() { var items = [{first: 'misko', last: 'hevery'}, {first: 'adam', last: 'abrons'}]; + expect(filter(items, {first: undefined}).length).toBe(2); expect(filter(items, {first:'', last:''}).length).toBe(2); expect(filter(items, {first:'', last:'hevery'}).length).toBe(1); expect(filter(items, {first:'adam', last:'hevery'}).length).toBe(0); From 3d9ff4ff41f68904a8a8662aaf93b3b849ab3807 Mon Sep 17 00:00:00 2001 From: Martin Staffa <mjstaffa@googlemail.com> Date: Sun, 9 Mar 2014 20:31:37 +0100 Subject: [PATCH 3/3] style(filterSpec): multiple small fixes Mixed spaces / tabs, missing semicolon, typos, already defined variables --- test/ng/filter/filterSpec.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/ng/filter/filterSpec.js b/test/ng/filter/filterSpec.js index 72e8dca62351..948f7038a3e6 100644 --- a/test/ng/filter/filterSpec.js +++ b/test/ng/filter/filterSpec.js @@ -49,7 +49,7 @@ describe('Filter: filter', function() { expect(filter(items, function(i) {return i.done;}).length).toBe(1); }); - it('should take object as perdicate', function() { + it('should take object as predicate', function() { var items = [{first: 'misko', last: 'hevery'}, {first: 'adam', last: 'abrons'}]; @@ -62,7 +62,7 @@ describe('Filter: filter', function() { }); - it('should support predicat object with dots in the name', function() { + it('should support predicate object with dots in the name', function() { var items = [{'first.name': 'misko', 'last.name': 'hevery'}, {'first.name': 'adam', 'last.name': 'abrons'}]; @@ -97,8 +97,8 @@ describe('Filter: filter', function() { it('should support boolean properties', function() { var items = [{name: 'tom', current: true}, - {name: 'demi', current: false}, - {name: 'sofia'}]; + {name: 'demi', current: false}, + {name: 'sofia'}]; expect(filter(items, {current:true}).length).toBe(1); expect(filter(items, {current:true})[0].name).toBe('tom'); @@ -121,26 +121,26 @@ describe('Filter: filter', function() { expect(filter(items, expr, true)).toEqual([items[1]]); expect(filter(items, expr, false)).toEqual([items[1], items[2]]); - var items = [ + items = [ {key: 'value1', nonkey: 1}, {key: 'value2', nonkey: 2}, {key: 'value12', nonkey: 3}, {key: 'value1', nonkey:4}, {key: 'Value1', nonkey:5} ]; - var expr = {key: 'value1'}; + expr = {key: 'value1'}; expect(filter(items, expr, true)).toEqual([items[0], items[3]]); - var items = [ + items = [ {key: 1, nonkey: 1}, {key: 2, nonkey: 2}, {key: 12, nonkey: 3}, {key: 1, nonkey:4} ]; - var expr = { key: 1 }; + expr = { key: 1 }; expect(filter(items, expr, true)).toEqual([items[0], items[3]]); - var expr = 12; + expr = 12; expect(filter(items, expr, true)).toEqual([items[2]]); }); @@ -154,7 +154,7 @@ describe('Filter: filter', function() { var expr = {key: 10}; var comparator = function (obj,value) { return obj > value; - } + }; expect(filter(items, expr, comparator)).toEqual([items[2]]); expr = 10;