@@ -4,12 +4,26 @@ describe('Filter: limitTo', function() {
44 var items ;
55 var str ;
66 var number ;
7+ var arrayLike ;
78 var limitTo ;
89
910 beforeEach ( inject ( function ( $filter ) {
1011 items = [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' ] ;
1112 str = "tuvwxyz" ;
1213 number = 100.045 ;
14+ arrayLike = {
15+ 0 : 'a' ,
16+ 1 : 'b' ,
17+ 2 : 'c' ,
18+ 3 : 'd' ,
19+ 4 : 'e' ,
20+ 5 : 'f' ,
21+ 6 : 'g' ,
22+ 7 : 'h' ,
23+ get length ( ) {
24+ return Object . keys ( this ) . length - 1 ;
25+ }
26+ } ;
1327 limitTo = $filter ( 'limitTo' ) ;
1428 } ) ) ;
1529
@@ -21,20 +35,26 @@ describe('Filter: limitTo', function() {
2135 expect ( limitTo ( str , '3' ) ) . toEqual ( "tuv" ) ;
2236 expect ( limitTo ( number , 3 ) ) . toEqual ( "100" ) ;
2337 expect ( limitTo ( number , '3' ) ) . toEqual ( "100" ) ;
38+ expect ( limitTo ( arrayLike , 3 ) ) . toEqual ( [ 'a' , 'b' , 'c' ] ) ;
39+ expect ( limitTo ( arrayLike , '3' ) ) . toEqual ( [ 'a' , 'b' , 'c' ] ) ;
2440 } ) ;
2541
2642 it ( 'should return the first X items beginning from index Y when X and Y are positive' , function ( ) {
2743 expect ( limitTo ( items , 3 , '3' ) ) . toEqual ( [ 'd' , 'e' , 'f' ] ) ;
2844 expect ( limitTo ( items , '3' , 3 ) ) . toEqual ( [ 'd' , 'e' , 'f' ] ) ;
2945 expect ( limitTo ( str , 3 , 3 ) ) . toEqual ( "wxy" ) ;
3046 expect ( limitTo ( str , '3' , '3' ) ) . toEqual ( "wxy" ) ;
47+ expect ( limitTo ( arrayLike , 3 , 3 ) ) . toEqual ( [ 'd' , 'e' , 'f' ] ) ;
48+ expect ( limitTo ( arrayLike , '3' , '3' ) ) . toEqual ( [ 'd' , 'e' , 'f' ] ) ;
3149 } ) ;
3250
3351 it ( 'should return the first X items beginning from index Y when X is positive and Y is negative' , function ( ) {
3452 expect ( limitTo ( items , 3 , '-3' ) ) . toEqual ( [ 'f' , 'g' , 'h' ] ) ;
3553 expect ( limitTo ( items , '3' , - 3 ) ) . toEqual ( [ 'f' , 'g' , 'h' ] ) ;
3654 expect ( limitTo ( str , 3 , - 3 ) ) . toEqual ( "xyz" ) ;
3755 expect ( limitTo ( str , '3' , '-3' ) ) . toEqual ( "xyz" ) ;
56+ expect ( limitTo ( arrayLike , 3 , '-3' ) ) . toEqual ( [ 'f' , 'g' , 'h' ] ) ;
57+ expect ( limitTo ( arrayLike , '3' , - 3 ) ) . toEqual ( [ 'f' , 'g' , 'h' ] ) ;
3858 } ) ;
3959
4060 it ( 'should return the last X items when X is negative' , function ( ) {
@@ -44,38 +64,52 @@ describe('Filter: limitTo', function() {
4464 expect ( limitTo ( str , '-3' ) ) . toEqual ( "xyz" ) ;
4565 expect ( limitTo ( number , - 3 ) ) . toEqual ( "045" ) ;
4666 expect ( limitTo ( number , '-3' ) ) . toEqual ( "045" ) ;
67+ expect ( limitTo ( arrayLike , - 3 ) ) . toEqual ( [ 'f' , 'g' , 'h' ] ) ;
68+ expect ( limitTo ( arrayLike , '-3' ) ) . toEqual ( [ 'f' , 'g' , 'h' ] ) ;
4769 } ) ;
4870
4971 it ( 'should return the last X items until index Y when X and Y are negative' , function ( ) {
5072 expect ( limitTo ( items , - 3 , '-3' ) ) . toEqual ( [ 'c' , 'd' , 'e' ] ) ;
5173 expect ( limitTo ( items , '-3' , - 3 ) ) . toEqual ( [ 'c' , 'd' , 'e' ] ) ;
5274 expect ( limitTo ( str , - 3 , - 3 ) ) . toEqual ( "uvw" ) ;
5375 expect ( limitTo ( str , '-3' , '-3' ) ) . toEqual ( "uvw" ) ;
76+ expect ( limitTo ( arrayLike , - 3 , '-3' ) ) . toEqual ( [ 'c' , 'd' , 'e' ] ) ;
77+ expect ( limitTo ( arrayLike , '-3' , - 3 ) ) . toEqual ( [ 'c' , 'd' , 'e' ] ) ;
5478 } ) ;
5579
5680 it ( 'should return the last X items until index Y when X is negative and Y is positive' , function ( ) {
5781 expect ( limitTo ( items , - 3 , '4' ) ) . toEqual ( [ 'b' , 'c' , 'd' ] ) ;
5882 expect ( limitTo ( items , '-3' , 4 ) ) . toEqual ( [ 'b' , 'c' , 'd' ] ) ;
5983 expect ( limitTo ( str , - 3 , 4 ) ) . toEqual ( "uvw" ) ;
6084 expect ( limitTo ( str , '-3' , '4' ) ) . toEqual ( "uvw" ) ;
85+ expect ( limitTo ( arrayLike , - 3 , '4' ) ) . toEqual ( [ 'b' , 'c' , 'd' ] ) ;
86+ expect ( limitTo ( arrayLike , '-3' , 4 ) ) . toEqual ( [ 'b' , 'c' , 'd' ] ) ;
6187 } ) ;
6288
6389 it ( 'should return an empty array when X = 0' , function ( ) {
6490 expect ( limitTo ( items , 0 ) ) . toEqual ( [ ] ) ;
6591 expect ( limitTo ( items , '0' ) ) . toEqual ( [ ] ) ;
92+ expect ( limitTo ( arrayLike , 0 ) ) . toEqual ( [ ] ) ;
93+ expect ( limitTo ( arrayLike , '0' ) ) . toEqual ( [ ] ) ;
6694 } ) ;
6795
6896 it ( 'should return entire array when X cannot be parsed' , function ( ) {
69- expect ( limitTo ( items , 'bogus' ) ) . toEqual ( items ) ;
70- expect ( limitTo ( items , 'null' ) ) . toEqual ( items ) ;
71- expect ( limitTo ( items , 'undefined' ) ) . toEqual ( items ) ;
72- expect ( limitTo ( items , null ) ) . toEqual ( items ) ;
73- expect ( limitTo ( items , undefined ) ) . toEqual ( items ) ;
97+ expect ( limitTo ( items , 'bogus' ) ) . toBe ( items ) ;
98+ expect ( limitTo ( items , 'null' ) ) . toBe ( items ) ;
99+ expect ( limitTo ( items , 'undefined' ) ) . toBe ( items ) ;
100+ expect ( limitTo ( items , null ) ) . toBe ( items ) ;
101+ expect ( limitTo ( items , undefined ) ) . toBe ( items ) ;
102+ expect ( limitTo ( arrayLike , 'bogus' ) ) . toBe ( arrayLike ) ;
103+ expect ( limitTo ( arrayLike , 'null' ) ) . toBe ( arrayLike ) ;
104+ expect ( limitTo ( arrayLike , 'undefined' ) ) . toBe ( arrayLike ) ;
105+ expect ( limitTo ( arrayLike , null ) ) . toBe ( arrayLike ) ;
106+ expect ( limitTo ( arrayLike , undefined ) ) . toBe ( arrayLike ) ;
74107 } ) ;
75108
76109 it ( 'should return an empty string when X = 0' , function ( ) {
77110 expect ( limitTo ( str , 0 ) ) . toEqual ( "" ) ;
78111 expect ( limitTo ( str , '0' ) ) . toEqual ( "" ) ;
112+ expect ( limitTo ( { } , 1 ) ) . toEqual ( { } ) ;
79113 } ) ;
80114
81115 it ( 'should return entire string when X cannot be parsed' , function ( ) {
@@ -97,12 +131,16 @@ describe('Filter: limitTo', function() {
97131 expect ( limitTo ( str , '3' , 'undefined' ) ) . toEqual ( limitTo ( str , '3' ) ) ;
98132 expect ( limitTo ( str , '-3' , null ) ) . toEqual ( limitTo ( str , '-3' , 0 ) ) ;
99133 expect ( limitTo ( str , 3 , undefined ) ) . toEqual ( limitTo ( str , 3 ) ) ;
134+ expect ( limitTo ( arrayLike , 3 , 'bogus' ) ) . toEqual ( limitTo ( arrayLike , 3 , 0 ) ) ;
135+ expect ( limitTo ( arrayLike , - 3 , 'null' ) ) . toEqual ( limitTo ( arrayLike , - 3 ) ) ;
136+ expect ( limitTo ( arrayLike , '3' , 'undefined' ) ) . toEqual ( limitTo ( arrayLike , '3' , 0 ) ) ;
137+ expect ( limitTo ( arrayLike , '-3' , null ) ) . toEqual ( limitTo ( arrayLike , '-3' ) ) ;
138+ expect ( limitTo ( arrayLike , 3 , undefined ) ) . toEqual ( limitTo ( arrayLike , 3 , 0 ) ) ;
100139 } ) ;
101140
102- it ( 'should return input if not String or Array or Number' , function ( ) {
141+ it ( 'should return input if not array-like or Number' , function ( ) {
103142 expect ( limitTo ( null , 1 ) ) . toEqual ( null ) ;
104143 expect ( limitTo ( undefined , 1 ) ) . toEqual ( undefined ) ;
105- expect ( limitTo ( { } , 1 ) ) . toEqual ( { } ) ;
106144 } ) ;
107145
108146
@@ -111,8 +149,13 @@ describe('Filter: limitTo', function() {
111149 expect ( limitTo ( items , '9' ) ) . toEqual ( items ) ;
112150 expect ( limitTo ( items , - 9 ) ) . toEqual ( items ) ;
113151 expect ( limitTo ( items , '-9' ) ) . toEqual ( items ) ;
152+ expect ( limitTo ( arrayLike , 9 ) ) . toEqual ( items ) ;
153+ expect ( limitTo ( arrayLike , '9' ) ) . toEqual ( items ) ;
154+ expect ( limitTo ( arrayLike , - 9 ) ) . toEqual ( items ) ;
155+ expect ( limitTo ( arrayLike , '-9' ) ) . toEqual ( items ) ;
114156
115157 expect ( limitTo ( items , 9 ) ) . not . toBe ( items ) ;
158+ expect ( limitTo ( arrayLike , 9 ) ) . not . toBe ( items ) ;
116159 } ) ;
117160
118161 it ( 'should return the entire string if X exceeds input length' , function ( ) {
@@ -129,6 +172,10 @@ describe('Filter: limitTo', function() {
129172 expect ( limitTo ( items , 'Infinity' ) ) . toEqual ( items ) ;
130173 expect ( limitTo ( items , - Infinity ) ) . toEqual ( items ) ;
131174 expect ( limitTo ( items , '-Infinity' ) ) . toEqual ( items ) ;
175+ expect ( limitTo ( arrayLike , Infinity ) ) . toEqual ( items ) ;
176+ expect ( limitTo ( arrayLike , 'Infinity' ) ) . toEqual ( items ) ;
177+ expect ( limitTo ( arrayLike , - Infinity ) ) . toEqual ( items ) ;
178+ expect ( limitTo ( arrayLike , '-Infinity' ) ) . toEqual ( items ) ;
132179 } ) ;
133180
134181 it ( 'should return the entire string when limited by Infinity' , function ( ) {
@@ -141,6 +188,8 @@ describe('Filter: limitTo', function() {
141188 it ( 'should return an empty array if Y exceeds input length' , function ( ) {
142189 expect ( limitTo ( items , '3' , 12 ) ) . toEqual ( [ ] ) ;
143190 expect ( limitTo ( items , - 3 , '12' ) ) . toEqual ( [ ] ) ;
191+ expect ( limitTo ( arrayLike , '3' , 12 ) ) . toEqual ( [ ] ) ;
192+ expect ( limitTo ( arrayLike , - 3 , '12' ) ) . toEqual ( [ ] ) ;
144193 } ) ;
145194
146195 it ( 'should return an empty string if Y exceeds input length' , function ( ) {
@@ -153,19 +202,25 @@ describe('Filter: limitTo', function() {
153202 expect ( limitTo ( items , '-4' , - 12 ) ) . toEqual ( [ 'e' , 'f' , 'g' , 'h' ] ) ;
154203 expect ( limitTo ( str , 4 , '-12' ) ) . toEqual ( "tuvw" ) ;
155204 expect ( limitTo ( str , '-4' , - 12 ) ) . toEqual ( "wxyz" ) ;
205+ expect ( limitTo ( arrayLike , 4 , '-12' ) ) . toEqual ( [ 'a' , 'b' , 'c' , 'd' ] ) ;
206+ expect ( limitTo ( arrayLike , '-4' , - 12 ) ) . toEqual ( [ 'e' , 'f' , 'g' , 'h' ] ) ;
156207 } ) ;
157208
158209 it ( 'should return the entire string beginning from Y if X is positive and X+Y exceeds input length' , function ( ) {
159210 expect ( limitTo ( items , 7 , 3 ) ) . toEqual ( [ 'd' , 'e' , 'f' , 'g' , 'h' ] ) ;
160211 expect ( limitTo ( items , 7 , - 3 ) ) . toEqual ( [ 'f' , 'g' , 'h' ] ) ;
161212 expect ( limitTo ( str , 6 , 3 ) ) . toEqual ( "wxyz" ) ;
162213 expect ( limitTo ( str , 6 , - 3 ) ) . toEqual ( "xyz" ) ;
214+ expect ( limitTo ( arrayLike , 7 , 3 ) ) . toEqual ( [ 'd' , 'e' , 'f' , 'g' , 'h' ] ) ;
215+ expect ( limitTo ( arrayLike , 7 , - 3 ) ) . toEqual ( [ 'f' , 'g' , 'h' ] ) ;
163216 } ) ;
164217
165218 it ( 'should return the entire string until index Y if X is negative and X+Y exceeds input length' , function ( ) {
166219 expect ( limitTo ( items , - 7 , 3 ) ) . toEqual ( [ 'a' , 'b' , 'c' ] ) ;
167220 expect ( limitTo ( items , - 7 , - 3 ) ) . toEqual ( [ 'a' , 'b' , 'c' , 'd' , 'e' ] ) ;
168221 expect ( limitTo ( str , - 6 , 3 ) ) . toEqual ( "tuv" ) ;
169222 expect ( limitTo ( str , - 6 , - 3 ) ) . toEqual ( "tuvw" ) ;
223+ expect ( limitTo ( arrayLike , - 7 , 3 ) ) . toEqual ( [ 'a' , 'b' , 'c' ] ) ;
224+ expect ( limitTo ( arrayLike , - 7 , - 3 ) ) . toEqual ( [ 'a' , 'b' , 'c' , 'd' , 'e' ] ) ;
170225 } ) ;
171226} ) ;
0 commit comments