@@ -125,6 +125,120 @@ describe('serialize( obj )', function () {
125125
126126            expect ( obj . hello ( ) ) . to . equal ( true ) ; 
127127        } ) ; 
128+ 
129+         it ( 'should serialize functions that contain dates' ,  function  ( )  { 
130+            function  fn ( arg1 )  { return  new  Date ( '2016-04-28T22:02:17.156Z' ) } ; 
131+             expect ( serialize ( fn ) ) . to . be . a ( 'string' ) . equal ( 'function fn(arg1) {return new Date(\'2016-04-28T22:02:17.156Z\')}' ) ; 
132+         } ) ; 
133+ 
134+         it ( 'should deserialize functions that contain dates' ,  function  ( )  { 
135+             var  fn ;  eval ( 'fn = '  +  serialize ( function  ( )  {  return  new  Date ( '2016-04-28T22:02:17.156Z' )  } ) ) ; 
136+             expect ( fn ) . to . be . a ( 'function' ) ; 
137+             expect ( fn ( ) . getTime ( ) ) . to . equal ( new  Date ( '2016-04-28T22:02:17.156Z' ) . getTime ( ) ) ; 
138+         } ) ; 
139+ 
140+         it ( 'should serialize functions that return other functions' ,  function  ( )  { 
141+             function  fn ( )  { return  function ( arg1 )  { return  arg1  +  5 } } ; 
142+             expect ( serialize ( fn ) ) . to . be . a ( 'string' ) . equal ( 'function fn() {return function(arg1) {return arg1 + 5}}' ) ; 
143+         } ) ; 
144+ 
145+         it ( 'should deserialize functions that return other functions' ,  function  ( )  { 
146+             var  fn ;  eval ( 'fn = '  +  serialize ( function  ( )  {  return  function ( arg1 )  { return  arg1  +  5 }  } ) ) ; 
147+             expect ( fn ) . to . be . a ( 'function' ) ; 
148+             expect ( fn ( ) ( 7 ) ) . to . equal ( 12 ) ; 
149+         } ) ; 
150+     } ) ; 
151+ 
152+     describe ( 'arrow-functions' ,  function  ( )  { 
153+         it ( 'should serialize arrow functions' ,  function  ( )  { 
154+             var  fn  =  ( )  =>  { } ; 
155+             expect ( serialize ( fn ) ) . to . be . a ( 'string' ) . equal ( '() => {}' ) ; 
156+         } ) ; 
157+ 
158+         it ( 'should deserialize arrow functions' ,  function  ( )  { 
159+             var  fn ;  eval ( 'fn = '  +  serialize ( ( )  =>  true ) ) ; 
160+             expect ( fn ) . to . be . a ( 'function' ) ; 
161+             expect ( fn ( ) ) . to . equal ( true ) ; 
162+         } ) ; 
163+ 
164+         it ( 'should serialize arrow functions with one argument' ,  function  ( )  { 
165+             var  fn  =  arg1  =>  { } 
166+             expect ( serialize ( fn ) ) . to . be . a ( 'string' ) . equal ( 'arg1 => {}' ) ; 
167+         } ) ; 
168+ 
169+         it ( 'should deserialize arrow functions with one argument' ,  function  ( )  { 
170+             var  fn ;  eval ( 'fn = '  +  serialize ( arg1  =>  { } ) ) ; 
171+             expect ( fn ) . to . be . a ( 'function' ) ; 
172+             expect ( fn . length ) . to . equal ( 1 ) ; 
173+         } ) ; 
174+ 
175+         it ( 'should serialize arrow functions with multiple arguments' ,  function  ( )  { 
176+             var  fn  =  ( arg1 ,  arg2 )  =>  { } 
177+             expect ( serialize ( fn ) ) . to . equal ( '(arg1, arg2) => {}' ) ; 
178+         } ) ; 
179+ 
180+         it ( 'should deserialize arrow functions with multiple arguments' ,  function  ( )  { 
181+             var  fn ;  eval ( 'fn = '  +  serialize (  ( arg1 ,  arg2 )  =>  { } ) ) ; 
182+             expect ( fn ) . to . be . a ( 'function' ) ; 
183+             expect ( fn . length ) . to . equal ( 2 ) ; 
184+         } ) ; 
185+ 
186+         it ( 'should serialize arrow functions with bodies' ,  function  ( )  { 
187+             var  fn  =  ( )  =>  {  return  true ;  } 
188+             expect ( serialize ( fn ) ) . to . equal ( '() => { return true; }' ) ; 
189+         } ) ; 
190+ 
191+         it ( 'should deserialize arrow functions with bodies' ,  function  ( )  { 
192+             var  fn ;  eval ( 'fn = '  +  serialize (  ( )  =>  {  return  true ;  } ) ) ; 
193+             expect ( fn ) . to . be . a ( 'function' ) ; 
194+             expect ( fn ( ) ) . to . equal ( true ) ; 
195+         } ) ; 
196+ 
197+         it ( 'should serialize enhanced literal objects' ,  function  ( )  { 
198+             var  obj  =  { 
199+                 foo : ( )  =>  {  return  true ;  } , 
200+                 bar : arg1  =>  {  return  true ;  } , 
201+                 baz : ( arg1 ,  arg2 )  =>  {  return  true ;  } 
202+             } ; 
203+ 
204+             expect ( serialize ( obj ) ) . to . equal ( '{"foo":() => { return true; },"bar":arg1 => { return true; },"baz":(arg1, arg2) => { return true; }}' ) ; 
205+         } ) ; 
206+ 
207+         it ( 'should deserialize enhanced literal objects' ,  function  ( )  { 
208+             var  obj ; 
209+             eval ( 'obj = '  +  serialize ( {                 foo : ( )  =>  {  return  true ;  } , 
210+                 foo : ( )  =>  {  return  true ;  } , 
211+                 bar : arg1  =>  {  return  true ;  } , 
212+                 baz : ( arg1 ,  arg2 )  =>  {  return  true ;  } 
213+             } ) ) ; 
214+ 
215+             expect ( obj . foo ( ) ) . to . equal ( true ) ; 
216+             expect ( obj . bar ( 'arg1' ) ) . to . equal ( true ) ; 
217+             expect ( obj . baz ( 'arg1' ,  'arg1' ) ) . to . equal ( true ) ; 
218+         } ) ; 
219+ 
220+         it ( 'should serialize arrow functions with added properties' ,  function  ( )  { 
221+             var  fn  =  ( )  =>  { } ; 
222+             fn . property1  =  'a string' 
223+             expect ( serialize ( fn ) ) . to . be . a ( 'string' ) . equal ( '() => {}' ) ; 
224+         } ) ; 
225+ 
226+         it ( 'should deserialize arrow functions with added properties' ,  function  ( )  { 
227+             var  fn ;  eval ( 'fn = '  +  serialize (  ( )  =>  {  this . property1  =  'a string' ;  return  5  } ) ) ; 
228+             expect ( fn ) . to . be . a ( 'function' ) ; 
229+             expect ( fn ( ) ) . to . equal ( 5 ) ; 
230+         } ) ; 
231+ 
232+          it ( 'should serialize arrow functions that return other functions' ,  function  ( )  { 
233+             var  fn  =  arg1  =>  {  return  arg2  =>  arg1  +  arg2  } ; 
234+             expect ( serialize ( fn ) ) . to . be . a ( 'string' ) . equal ( 'arg1 => { return arg2 => arg1 + arg2 }' ) ; 
235+           } ) ; 
236+ 
237+         it ( 'should deserialize arrow functions that return other functions' ,  function  ( )  { 
238+             var  fn ;  eval ( 'fn = '  +  serialize ( arg1  =>  {  return  arg2  =>  arg1  +  arg2  }  ) ) ; 
239+             expect ( fn ) . to . be . a ( 'function' ) ; 
240+             expect ( fn ( 2 ) ( 3 ) ) . to . equal ( 5 ) ; 
241+         } ) ; 
128242    } ) ; 
129243
130244    describe ( 'regexps' ,  function  ( )  { 
@@ -196,6 +310,12 @@ describe('serialize( obj )', function () {
196310            expect ( d ) . to . be . a ( 'string' ) ; 
197311            expect ( d ) . to . equal ( '2016-04-28T25:02:17.156Z' ) ; 
198312        } ) ; 
313+ 
314+         it ( 'should serialize dates within objects' ,  function  ( )  { 
315+             var  d  =  { foo : new  Date ( '2016-04-28T22:02:17.156Z' ) } ; 
316+             expect ( serialize ( d ) ) . to . be . a ( 'string' ) . equal ( '{"foo":new Date("2016-04-28T22:02:17.156Z")}' ) ; 
317+             expect ( serialize ( { t : [ d ] } ) ) . to . be . a ( 'string' ) . equal ( '{"t":[{"foo":new Date("2016-04-28T22:02:17.156Z")}]}' ) ; 
318+         } ) ; 
199319    } ) ; 
200320
201321    describe ( 'maps' ,  function  ( )  { 
0 commit comments