@@ -174,6 +174,76 @@ describe('Nested keys within arrays and objects are camelCased', () => {
174
174
175
175
} ) ;
176
176
177
+ describe ( 'Circular references' , ( ) => {
178
+ it ( 'Should handle objects with circular references' , ( ) => {
179
+ const parent = {
180
+ my_name : 'parent' ,
181
+ } ;
182
+ parent . child = parent ;
183
+
184
+ const selfReferentialCamel = camelCaseKeys ( parent ) ;
185
+
186
+ expect ( Object . keys ( selfReferentialCamel ) ) . deep . equals ( [ 'myName' , 'child' ] ) ;
187
+ expect ( Object . keys ( selfReferentialCamel . child ) ) . deep . equals ( [ 'myName' , 'child' ] ) ;
188
+ expect ( selfReferentialCamel ) . to . equal ( selfReferentialCamel . child ) ;
189
+ } ) ;
190
+
191
+ it ( 'Should handle objects with circular references in their children' , ( ) => {
192
+ const parent = {
193
+ name : 'parent' ,
194
+ } ;
195
+ const child = {
196
+ name : 'child' ,
197
+ my_own_parent : parent ,
198
+ }
199
+ parent . child = child ;
200
+
201
+ const selfReferentialCamel = camelCaseKeys ( parent ) ;
202
+
203
+ expect ( Object . keys ( selfReferentialCamel ) ) . deep . equals ( [ 'name' , 'child' ] ) ;
204
+ expect ( Object . keys ( selfReferentialCamel . child ) ) . deep . equals ( [ 'name' , 'myOwnParent' ] ) ;
205
+ expect ( selfReferentialCamel ) . to . equal ( selfReferentialCamel . child . myOwnParent ) ;
206
+ } ) ;
207
+
208
+ it ( 'Should handle arrays with objects with circular references in their children' , ( ) => {
209
+ const parent = {
210
+ name : 'parent' ,
211
+ } ;
212
+ const child = {
213
+ name : 'child' ,
214
+ my_own_parent : parent ,
215
+ }
216
+ parent . child = child ;
217
+
218
+ const selfReferentialCamel = camelCaseKeys ( [ parent ] ) ;
219
+
220
+ expect ( selfReferentialCamel ) . to . have . lengthOf ( 1 ) ;
221
+ expect ( Object . keys ( selfReferentialCamel [ 0 ] ) ) . deep . equals ( [ 'name' , 'child' ] ) ;
222
+ expect ( Object . keys ( selfReferentialCamel [ 0 ] . child ) ) . deep . equals ( [ 'name' , 'myOwnParent' ] ) ;
223
+ expect ( selfReferentialCamel [ 0 ] ) . to . equal ( selfReferentialCamel [ 0 ] . child . myOwnParent ) ;
224
+ } ) ;
225
+
226
+ it ( 'Should handle objects with circular references in arrays of their children' , ( ) => {
227
+ const parent = {
228
+ name : 'parent' ,
229
+ } ;
230
+ const child = {
231
+ name : 'child' ,
232
+ my_own_parent : parent ,
233
+ }
234
+ parent . children = [ child , child ] ;
235
+
236
+ const selfReferentialCamel = camelCaseKeys ( parent ) ;
237
+
238
+ expect ( Object . keys ( selfReferentialCamel ) ) . deep . equals ( [ 'name' , 'children' ] ) ;
239
+ expect ( Object . keys ( selfReferentialCamel . children ) ) . to . have . lengthOf ( 2 ) ;
240
+ expect ( Object . keys ( selfReferentialCamel . children [ 0 ] ) ) . deep . equals ( [ 'name' , 'myOwnParent' ] ) ;
241
+ expect ( Object . keys ( selfReferentialCamel . children [ 1 ] ) ) . deep . equals ( [ 'name' , 'myOwnParent' ] ) ;
242
+ expect ( selfReferentialCamel ) . to . equal ( selfReferentialCamel . children [ 0 ] . myOwnParent ) ;
243
+ expect ( selfReferentialCamel ) . to . equal ( selfReferentialCamel . children [ 1 ] . myOwnParent ) ;
244
+ } ) ;
245
+ } ) ;
246
+
177
247
describe ( 'Handling null root object' , ( ) => {
178
248
179
249
it ( 'Should not throw Error' , ( ) => {
0 commit comments