@@ -290,3 +290,172 @@ fn split_name(
290
290
}
291
291
} )
292
292
}
293
+
294
+ #[ cfg( test) ]
295
+ mod tests {
296
+ use super :: * ;
297
+
298
+ #[ test]
299
+ fn test_split_name_none ( ) {
300
+ let full_name = None ;
301
+ let ( first, last) = split_name ( & full_name) ;
302
+ assert_eq ! ( first, None ) ;
303
+ assert_eq ! ( last, None ) ;
304
+ }
305
+
306
+ #[ test]
307
+ fn test_split_name_empty_string ( ) {
308
+ let full_name = Some ( EditableField {
309
+ value : EditableFieldString ( "" . to_string ( ) ) ,
310
+ label : None ,
311
+ id : None ,
312
+ extensions : None ,
313
+ } ) ;
314
+ let ( first, last) = split_name ( & full_name) ;
315
+ assert_eq ! ( first, None ) ;
316
+ assert_eq ! ( last, None ) ;
317
+ }
318
+
319
+ #[ test]
320
+ fn test_split_name_whitespace_only ( ) {
321
+ let full_name = Some ( EditableField {
322
+ value : EditableFieldString ( " \t \n " . to_string ( ) ) ,
323
+ label : None ,
324
+ id : None ,
325
+ extensions : None ,
326
+ } ) ;
327
+ let ( first, last) = split_name ( & full_name) ;
328
+ assert_eq ! ( first, None ) ;
329
+ assert_eq ! ( last, None ) ;
330
+ }
331
+
332
+ #[ test]
333
+ fn test_split_name_single_name ( ) {
334
+ let full_name = Some ( EditableField {
335
+ value : EditableFieldString ( "John" . to_string ( ) ) ,
336
+ label : None ,
337
+ id : None ,
338
+ extensions : None ,
339
+ } ) ;
340
+ let ( first, last) = split_name ( & full_name) ;
341
+ assert_eq ! ( first, Some ( "John" . to_string( ) ) ) ;
342
+ assert_eq ! ( last, None ) ;
343
+ }
344
+
345
+ #[ test]
346
+ fn test_split_name_single_name_with_whitespace ( ) {
347
+ let full_name = Some ( EditableField {
348
+ value : EditableFieldString ( " John " . to_string ( ) ) ,
349
+ label : None ,
350
+ id : None ,
351
+ extensions : None ,
352
+ } ) ;
353
+ let ( first, last) = split_name ( & full_name) ;
354
+ assert_eq ! ( first, Some ( "John" . to_string( ) ) ) ;
355
+ assert_eq ! ( last, None ) ;
356
+ }
357
+
358
+ #[ test]
359
+ fn test_split_name_first_last ( ) {
360
+ let full_name = Some ( EditableField {
361
+ value : EditableFieldString ( "John Doe" . to_string ( ) ) ,
362
+ label : None ,
363
+ id : None ,
364
+ extensions : None ,
365
+ } ) ;
366
+ let ( first, last) = split_name ( & full_name) ;
367
+ assert_eq ! ( first, Some ( "John" . to_string( ) ) ) ;
368
+ assert_eq ! ( last, Some ( "Doe" . to_string( ) ) ) ;
369
+ }
370
+
371
+ #[ test]
372
+ fn test_split_name_first_middle_last ( ) {
373
+ let full_name = Some ( EditableField {
374
+ value : EditableFieldString ( "John Michael Doe" . to_string ( ) ) ,
375
+ label : None ,
376
+ id : None ,
377
+ extensions : None ,
378
+ } ) ;
379
+ let ( first, last) = split_name ( & full_name) ;
380
+ assert_eq ! ( first, Some ( "John" . to_string( ) ) ) ;
381
+ assert_eq ! ( last, Some ( "Michael Doe" . to_string( ) ) ) ;
382
+ }
383
+
384
+ #[ test]
385
+ fn test_split_name_multiple_middle_names ( ) {
386
+ let full_name = Some ( EditableField {
387
+ value : EditableFieldString ( "John Michael Andrew Doe" . to_string ( ) ) ,
388
+ label : None ,
389
+ id : None ,
390
+ extensions : None ,
391
+ } ) ;
392
+ let ( first, last) = split_name ( & full_name) ;
393
+ assert_eq ! ( first, Some ( "John" . to_string( ) ) ) ;
394
+ assert_eq ! ( last, Some ( "Michael Andrew Doe" . to_string( ) ) ) ;
395
+ }
396
+
397
+ #[ test]
398
+ fn test_split_name_complex_surname ( ) {
399
+ let full_name = Some ( EditableField {
400
+ value : EditableFieldString ( "Jane van der Berg" . to_string ( ) ) ,
401
+ label : None ,
402
+ id : None ,
403
+ extensions : None ,
404
+ } ) ;
405
+ let ( first, last) = split_name ( & full_name) ;
406
+ assert_eq ! ( first, Some ( "Jane" . to_string( ) ) ) ;
407
+ assert_eq ! ( last, Some ( "van der Berg" . to_string( ) ) ) ;
408
+ }
409
+
410
+ #[ test]
411
+ fn test_split_name_hyphenated_surname ( ) {
412
+ let full_name = Some ( EditableField {
413
+ value : EditableFieldString ( "Mary Smith-Johnson" . to_string ( ) ) ,
414
+ label : None ,
415
+ id : None ,
416
+ extensions : None ,
417
+ } ) ;
418
+ let ( first, last) = split_name ( & full_name) ;
419
+ assert_eq ! ( first, Some ( "Mary" . to_string( ) ) ) ;
420
+ assert_eq ! ( last, Some ( "Smith-Johnson" . to_string( ) ) ) ;
421
+ }
422
+
423
+ #[ test]
424
+ fn test_split_name_extra_whitespace ( ) {
425
+ let full_name = Some ( EditableField {
426
+ value : EditableFieldString ( " John Michael Doe " . to_string ( ) ) ,
427
+ label : None ,
428
+ id : None ,
429
+ extensions : None ,
430
+ } ) ;
431
+ let ( first, last) = split_name ( & full_name) ;
432
+ assert_eq ! ( first, Some ( "John" . to_string( ) ) ) ;
433
+ assert_eq ! ( last, Some ( "Michael Doe" . to_string( ) ) ) ;
434
+ }
435
+
436
+ #[ test]
437
+ fn test_split_name_special_characters ( ) {
438
+ let full_name = Some ( EditableField {
439
+ value : EditableFieldString ( "José María González" . to_string ( ) ) ,
440
+ label : None ,
441
+ id : None ,
442
+ extensions : None ,
443
+ } ) ;
444
+ let ( first, last) = split_name ( & full_name) ;
445
+ assert_eq ! ( first, Some ( "José" . to_string( ) ) ) ;
446
+ assert_eq ! ( last, Some ( "María González" . to_string( ) ) ) ;
447
+ }
448
+
449
+ #[ test]
450
+ fn test_split_name_single_character_names ( ) {
451
+ let full_name = Some ( EditableField {
452
+ value : EditableFieldString ( "A B C" . to_string ( ) ) ,
453
+ label : None ,
454
+ id : None ,
455
+ extensions : None ,
456
+ } ) ;
457
+ let ( first, last) = split_name ( & full_name) ;
458
+ assert_eq ! ( first, Some ( "A" . to_string( ) ) ) ;
459
+ assert_eq ! ( last, Some ( "B C" . to_string( ) ) ) ;
460
+ }
461
+ }
0 commit comments