@@ -72,11 +72,16 @@ describe('browser', function(){
7272 }
7373 }
7474
75- var browser ;
75+ var browser , log , logs ;
7676
7777 beforeEach ( function ( ) {
7878 deleteAllCookies ( ) ;
79- browser = new Browser ( { } , jqLite ( document ) ) ;
79+ logs = { log :[ ] , warn :[ ] , info :[ ] , error :[ ] }
80+ log = { log : function ( ) { logs . log . push ( Array . prototype . slice . call ( arguments ) ) } ,
81+ warn : function ( ) { logs . warn . push ( Array . prototype . slice . call ( arguments ) ) } ,
82+ info : function ( ) { logs . info . push ( Array . prototype . slice . call ( arguments ) ) } ,
83+ error : function ( ) { logs . error . push ( Array . prototype . slice . call ( arguments ) ) } } ;
84+ browser = new Browser ( { } , jqLite ( document ) , undefined , XHR , log ) ;
8085 expect ( document . cookie ) . toEqual ( '' ) ;
8186 } ) ;
8287
@@ -121,7 +126,7 @@ describe('browser', function(){
121126
122127 it ( 'should create and store a cookie' , function ( ) {
123128 browser . cookies ( 'cookieName' , 'cookieValue' ) ;
124- expect ( document . cookie ) . toEqual ( ' cookieName=cookieValue' ) ;
129+ expect ( document . cookie ) . toMatch ( / c o o k i e N a m e = c o o k i e V a l u e ; ? ? / ) ;
125130 expect ( browser . cookies ( ) ) . toEqual ( { 'cookieName' :'cookieValue' } ) ;
126131 } ) ;
127132
@@ -145,6 +150,47 @@ describe('browser', function(){
145150 expect ( rawCookies ) . toContain ( 'cookie1%3D=val%3Bue' ) ;
146151 expect ( rawCookies ) . toContain ( 'cookie2%3Dbar%3Bbaz=val%3Due' ) ;
147152 } ) ;
153+
154+ it ( 'should log warnings when 4kb per cookie storage limit is reached' , function ( ) {
155+ var i , longVal = '' , cookieString ;
156+
157+ for ( i = 0 ; i < 4092 ; i ++ ) {
158+ longVal += '+' ;
159+ }
160+
161+ cookieString = document . cookie ;
162+ browser . cookies ( 'x' , longVal ) ; //total size 4094-4096, so it should go through
163+ expect ( document . cookie ) . not . toEqual ( cookieString ) ;
164+ expect ( browser . cookies ( ) [ 'x' ] ) . toEqual ( longVal ) ;
165+ expect ( logs . warn ) . toEqual ( [ ] ) ;
166+
167+ browser . cookies ( 'x' , longVal + 'xxx' ) //total size 4097-4099, a warning should be logged
168+ //browser behavior is undefined, so we test for existance of warning logs only
169+ expect ( logs . warn ) . toEqual (
170+ [ [ "Cookie 'x' possibly not set or overflowed because it was too large (4097 > 4096 " +
171+ "bytes)!" ] ] ) ;
172+ } ) ;
173+
174+ it ( 'should log warnings when 20 cookies per domain storage limit is reached' , function ( ) {
175+ var i , str ;
176+
177+ for ( i = 0 ; i < 20 ; i ++ ) {
178+ str = '' + i ;
179+ browser . cookies ( str , str ) ;
180+ }
181+
182+ i = 0 ;
183+ for ( str in browser . cookies ( ) ) {
184+ i ++ ;
185+ }
186+ expect ( i ) . toEqual ( 20 ) ;
187+ expect ( logs . warn ) . toEqual ( [ ] ) ;
188+
189+ browser . cookies ( 'one' , 'more' ) ;
190+ //browser behavior is undefined, so we test for existance of warning logs only
191+ expect ( logs . warn ) . toEqual ( [ ] ) ;
192+ } ) ;
193+
148194 } ) ;
149195
150196
@@ -157,14 +203,12 @@ describe('browser', function(){
157203
158204 it ( 'should return a value for an existing cookie' , function ( ) {
159205 document . cookie = "foo=bar" ;
160- browser . cookies ( true ) ;
161206 expect ( browser . cookies ( ) . foo ) . toEqual ( 'bar' ) ;
162207 } ) ;
163208
164209
165210 it ( 'should unescape cookie values that were escaped by puts' , function ( ) {
166211 document . cookie = "cookie2%3Dbar%3Bbaz=val%3Due" ;
167- browser . cookies ( true ) ;
168212 expect ( browser . cookies ( ) [ 'cookie2=bar;baz' ] ) . toEqual ( 'val=ue' ) ;
169213 } ) ;
170214
@@ -197,7 +241,6 @@ describe('browser', function(){
197241 expect ( browser . cookies ( ) ) . toEqual ( { 'oatmealCookie' :'drool' } ) ;
198242
199243 document . cookie = 'oatmealCookie=changed' ;
200- browser . cookies ( true ) ;
201244 expect ( browser . cookies ( ) . oatmealCookie ) . toEqual ( 'changed' ) ;
202245 } ) ;
203246
@@ -233,4 +276,3 @@ describe('browser', function(){
233276 } ) ;
234277 } ) ;
235278} ) ;
236-
0 commit comments