@@ -27,6 +27,25 @@ describe('browser', function(){
27
27
browser . startUrlWatcher ( ) ;
28
28
} ) ;
29
29
30
+ it ( 'should contain cookie cruncher' , function ( ) {
31
+ expect ( browser . cookies ) . toBeDefined ( ) ;
32
+ } ) ;
33
+
34
+ it ( 'should be able to start cookie watcher' , function ( ) {
35
+ browser . delay = 1 ;
36
+ expectAsserts ( 2 ) ;
37
+ browser . watchCookies ( function ( cookies ) {
38
+ assertEquals ( { 'foo' :'bar' } , cookies ) ;
39
+ } ) ;
40
+ browser . setTimeout = function ( fn , delay ) {
41
+ assertEquals ( 1 , delay ) ;
42
+ document . cookie = 'foo=bar' ;
43
+ browser . setTimeout = function ( fn , delay ) { } ;
44
+ fn ( ) ;
45
+ } ;
46
+ browser . startCookieWatcher ( ) ;
47
+ } ) ;
48
+
30
49
describe ( 'outstading requests' , function ( ) {
31
50
it ( 'should process callbacks immedietly with no outstanding requests' , function ( ) {
32
51
var callback = jasmine . createSpy ( 'callback' ) ;
@@ -67,4 +86,193 @@ describe('browser', function(){
67
86
} ) ;
68
87
} ) ;
69
88
89
+
90
+ describe ( 'cookies' , function ( ) {
91
+
92
+ function deleteAllCookies ( ) {
93
+ var cookies = document . cookie . split ( ";" ) ;
94
+
95
+ for ( var i = 0 ; i < cookies . length ; i ++ ) {
96
+ var cookie = cookies [ i ] ;
97
+ var eqPos = cookie . indexOf ( "=" ) ;
98
+ var name = eqPos > - 1 ? cookie . substr ( 0 , eqPos ) : cookie ;
99
+ document . cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT" ;
100
+ }
101
+ } ;
102
+
103
+ var browser ;
104
+
105
+ beforeEach ( function ( ) {
106
+ deleteAllCookies ( ) ;
107
+ browser = new Browser ( { } , jqLite ( document ) ) ;
108
+ expect ( document . cookie ) . toEqual ( '' ) ;
109
+ } ) ;
110
+
111
+
112
+ afterEach ( function ( ) {
113
+ deleteAllCookies ( ) ;
114
+ expect ( document . cookie ) . toEqual ( '' ) ;
115
+ } ) ;
116
+
117
+
118
+ describe ( 'remove all via (null)' , function ( ) {
119
+
120
+ it ( 'should do nothing when no cookies are set' , function ( ) {
121
+ browser . cookies ( null ) ;
122
+ expect ( document . cookie ) . toEqual ( '' ) ;
123
+ expect ( browser . cookies ( ) ) . toEqual ( { } ) ;
124
+ } ) ;
125
+
126
+ } ) ;
127
+
128
+ describe ( 'remove via (cookieName, undefined)' , function ( ) {
129
+
130
+ it ( 'should remove a cookie when it is present' , function ( ) {
131
+ document . cookie = 'foo=bar' ;
132
+
133
+ browser . cookies ( 'foo' , undefined ) ;
134
+
135
+ expect ( document . cookie ) . toEqual ( '' ) ;
136
+ expect ( browser . cookies ( ) ) . toEqual ( { } ) ;
137
+ } ) ;
138
+
139
+
140
+ it ( 'should do nothing when an nonexisting cookie is being removed' , function ( ) {
141
+ browser . cookies ( 'doesntexist' , undefined ) ;
142
+ expect ( document . cookie ) . toEqual ( '' ) ;
143
+ expect ( browser . cookies ( ) ) . toEqual ( { } ) ;
144
+ } ) ;
145
+ } ) ;
146
+
147
+
148
+ describe ( 'put via (cookieName, string)' , function ( ) {
149
+
150
+ it ( 'should create and store a cookie' , function ( ) {
151
+ browser . cookies ( 'cookieName' , 'cookieValue' ) ;
152
+ expect ( document . cookie ) . toEqual ( 'cookieName=cookieValue' ) ;
153
+ expect ( browser . cookies ( ) ) . toEqual ( { 'cookieName' :'cookieValue' } ) ;
154
+ } ) ;
155
+
156
+
157
+ it ( 'should overwrite an existing unsynced cookie' , function ( ) {
158
+ document . cookie = "cookie=new" ;
159
+
160
+ var oldVal = browser . cookies ( 'cookie' , 'newer' ) ;
161
+
162
+ expect ( document . cookie ) . toEqual ( 'cookie=newer' ) ;
163
+ expect ( browser . cookies ( ) ) . toEqual ( { 'cookie' :'newer' } ) ;
164
+ expect ( oldVal ) . not . toBeDefined ( ) ;
165
+ } ) ;
166
+
167
+ it ( 'should escape both name and value' , function ( ) {
168
+ browser . cookies ( 'cookie1=' , 'val;ue' ) ;
169
+ browser . cookies ( 'cookie2=bar;baz' , 'val=ue' ) ;
170
+
171
+ var rawCookies = document . cookie . split ( "; " ) ; //order is not guaranteed, so we need to parse
172
+ expect ( rawCookies . length ) . toEqual ( 2 ) ;
173
+ expect ( rawCookies ) . toContain ( 'cookie1%3D=val%3Bue' ) ;
174
+ expect ( rawCookies ) . toContain ( 'cookie2%3Dbar%3Bbaz=val%3Due' ) ;
175
+ } ) ;
176
+ } ) ;
177
+
178
+
179
+ describe ( 'get via (cookieName)' , function ( ) {
180
+
181
+ it ( 'should return undefined for nonexistent cookie' , function ( ) {
182
+ expect ( browser . cookies ( 'nonexistent' ) ) . not . toBeDefined ( ) ;
183
+ } ) ;
184
+
185
+
186
+ it ( 'should return a value for an existing cookie' , function ( ) {
187
+ document . cookie = "foo=bar" ;
188
+ browser . cookies ( true ) ;
189
+ expect ( browser . cookies ( ) . foo ) . toEqual ( 'bar' ) ;
190
+ } ) ;
191
+
192
+
193
+ it ( 'should unescape cookie values that were escaped by puts' , function ( ) {
194
+ document . cookie = "cookie2%3Dbar%3Bbaz=val%3Due" ;
195
+ browser . cookies ( true ) ;
196
+ expect ( browser . cookies ( ) [ 'cookie2=bar;baz' ] ) . toEqual ( 'val=ue' ) ;
197
+ } ) ;
198
+
199
+
200
+ it ( 'should preserve leading & trailing spaces in names and values' , function ( ) {
201
+ browser . cookies ( ' cookie name ' , ' cookie value ' ) ;
202
+ expect ( browser . cookies ( ) [ ' cookie name ' ] ) . toEqual ( ' cookie value ' ) ;
203
+ expect ( browser . cookies ( ) [ 'cookie name' ] ) . not . toBeDefined ( ) ;
204
+ } ) ;
205
+ } ) ;
206
+
207
+
208
+ describe ( 'getAll' , function ( ) {
209
+
210
+ it ( 'should return cookies as hash' , function ( ) {
211
+ document . cookie = "foo1=bar1" ;
212
+ document . cookie = "foo2=bar2" ;
213
+ expect ( browser . cookies ( ) ) . toEqual ( { 'foo1' :'bar1' , 'foo2' :'bar2' } ) ;
214
+ } ) ;
215
+
216
+
217
+ it ( 'should return empty hash if no cookies exist' , function ( ) {
218
+ expect ( browser . cookies ( ) ) . toEqual ( { } ) ;
219
+ } ) ;
220
+ } ) ;
221
+
222
+
223
+ describe ( 'watch' , function ( ) {
224
+
225
+ it ( 'should allow listeners to be registered' , function ( ) {
226
+ expectAsserts ( 1 ) ;
227
+
228
+ browser . watchCookies ( function ( cookies ) {
229
+ assertEquals ( { 'aaa' :'bbb' } , cookies ) ;
230
+ } ) ;
231
+
232
+ browser . cookies ( 'aaa' , 'bbb' ) ;
233
+ browser . cookies ( ) ;
234
+ } ) ;
235
+
236
+
237
+ it ( 'should fire listeners when cookie changes are discovered' , function ( ) {
238
+ expectAsserts ( 1 ) ;
239
+
240
+ browser . watchCookies ( function ( cookies ) {
241
+ assertEquals ( { 'foo' :'bar' } , cookies ) ;
242
+ } ) ;
243
+
244
+ document . cookie = 'foo=bar' ;
245
+ browser . cookies ( ) ;
246
+ } ) ;
247
+
248
+
249
+ it ( 'should not fire listeners when no cookies were changed' , function ( ) {
250
+ expectAsserts ( 0 ) ;
251
+
252
+ browser . cookies ( function ( cookies ) {
253
+ assertEquals ( { 'shouldnt' :'fire' } , cookies ) ;
254
+ } ) ;
255
+
256
+ browser . cookies ( true ) ;
257
+ } ) ;
258
+ } ) ;
259
+
260
+
261
+ it ( 'should pick up external changes made to browser cookies' , function ( ) {
262
+ browser . cookies ( 'oatmealCookie' , 'drool' ) ;
263
+ expect ( browser . cookies ( ) ) . toEqual ( { 'oatmealCookie' :'drool' } ) ;
264
+
265
+ document . cookie = 'oatmealCookie=changed' ;
266
+ browser . cookies ( true ) ;
267
+ expect ( browser . cookies ( ) . oatmealCookie ) . toEqual ( 'changed' ) ;
268
+ } ) ;
269
+
270
+
271
+ it ( 'should initialize cookie cache with existing cookies' , function ( ) {
272
+ document . cookie = "existingCookie=existingValue" ;
273
+ expect ( browser . cookies ( ) ) . toEqual ( { 'existingCookie' :'existingValue' } ) ;
274
+ } ) ;
275
+
276
+ } ) ;
70
277
} ) ;
278
+
0 commit comments