@@ -200,7 +200,6 @@ it.describe("fast-csv parser", function (it) {
200
200
} ) ;
201
201
} ) ;
202
202
} ) ;
203
-
204
203
} ) ;
205
204
206
205
it . describe ( "with \\r" , function ( it ) {
@@ -402,4 +401,203 @@ it.describe("fast-csv parser", function (it) {
402
401
403
402
} ) ;
404
403
404
+ it . describe ( "with \\r\\n" , function ( it ) {
405
+
406
+ it . describe ( "unescaped data" , function ( it ) {
407
+
408
+ it . should ( "parse a block of CSV text" , function ( ) {
409
+ var data = "first_name,last_name,email_address\r\nFirst1,Last1,[email protected] " ;
410
+ var myParser = parser ( { delimiter : "," } ) ;
411
+ assert . deepEqual ( myParser ( data , false ) , { "line" : "" , "rows" : [
412
+ [ "first_name" , "last_name" , "email_address" ] ,
413
+ [ "First1" , "Last1" , "[email protected] " ]
414
+ ] } ) ;
415
+ } ) ;
416
+
417
+ it . should ( "return the rest of the line if there is more data" , function ( ) {
418
+ var data = "first_name,last_name,email_address\r\nFirst1,Last1,[email protected] " ;
419
+ var myParser = parser ( { delimiter : "," } ) ;
420
+ assert . deepEqual ( myParser ( data , true ) , {
421
+ "line" :
"First1,Last1,[email protected] " ,
422
+ "rows" : [
423
+ [ "first_name" , "last_name" , "email_address" ]
424
+ ]
425
+ } ) ;
426
+ } ) ;
427
+
428
+ it . should ( "accept new data and return the result" , function ( ) {
429
+ var data = "first_name,last_name,email_address\r\nFirst1,Last1,[email protected] ," ;
430
+ var myParser = parser ( { delimiter : "," } ) ;
431
+ var parsedData = myParser ( data , true ) ;
432
+ assert . deepEqual ( parsedData , {
433
+ "line" :
"First1,Last1,[email protected] ," ,
434
+ "rows" : [
435
+ [ "first_name" , "last_name" , "email_address" ]
436
+ ]
437
+ } ) ;
438
+ assert . deepEqual ( myParser ( parsedData . line + "\r\nFirst2,Last2,[email protected] " , false ) , { "line" :
"" , "rows" :
[
439
+ [ "First1" , "Last1" , "[email protected] " ] ,
440
+ [ "First2" , "Last2" , "[email protected] " ]
441
+ ] } ) ;
442
+ } ) ;
443
+
444
+ it . should ( "not parse a row if a new line is not found and there is more data" , function ( ) {
445
+ var data = "first_name,last_name,email_address" ;
446
+ var myParser = parser ( { delimiter : "," } ) ;
447
+ var parsedData = myParser ( data , true ) ;
448
+ assert . deepEqual ( parsedData , {
449
+ "line" : "first_name,last_name,email_address" ,
450
+ "rows" : [ ]
451
+ } ) ;
452
+ } ) ;
453
+
454
+ it . should ( "not parse a row if there is a trailing delimiter and there is more data" , function ( ) {
455
+ var data = "first_name,last_name,email_address," ;
456
+ var myParser = parser ( { delimiter : "," } ) ;
457
+ var parsedData = myParser ( data , true ) ;
458
+ assert . deepEqual ( parsedData , {
459
+ "line" : "first_name,last_name,email_address," ,
460
+ "rows" : [ ]
461
+ } ) ;
462
+ } ) ;
463
+
464
+ it . should ( "parse a row if a new line is found and there is more data" , function ( ) {
465
+ var data = "first_name,last_name,email_address\r\n" ;
466
+ var myParser = parser ( { delimiter : "," } ) ;
467
+ var parsedData = myParser ( data , true ) ;
468
+ assert . deepEqual ( parsedData , {
469
+ "line" : "" ,
470
+ "rows" : [
471
+ [ "first_name" , "last_name" , "email_address" ]
472
+ ]
473
+ } ) ;
474
+ } ) ;
475
+
476
+ } ) ;
477
+
478
+ it . describe ( "escaped values" , function ( it ) {
479
+
480
+ it . should ( "parse a block of CSV text" , function ( ) {
481
+ var data = 'first_name,last_name,email_address\r\n"First,1","Last,1","[email protected] "' ;
482
+ var myParser = parser ( { delimiter : "," } ) ;
483
+ assert . deepEqual ( myParser ( data , false ) , { "line" : "" , "rows" : [
484
+ [ "first_name" , "last_name" , "email_address" ] ,
485
+ [ "First,1" , "Last,1" , "[email protected] " ]
486
+ ] } ) ;
487
+ } ) ;
488
+
489
+ it . should ( "parse a block of CSV text with escaped escaped char" , function ( ) {
490
+ var data = 'first_name,last_name,email_address\r\n"First,""1""","Last,""1""","[email protected] "' ;
491
+ var myParser = parser ( { delimiter : "," } ) ;
492
+ assert . deepEqual ( myParser ( data , false ) , { "line" : "" , "rows" : [
493
+ [ "first_name" , "last_name" , "email_address" ] ,
494
+ [ "First,\"1\"" , "Last,\"1\"" , "[email protected] " ]
495
+ ] } ) ;
496
+ } ) ;
497
+
498
+ it . should ( "parse a block of CSV text with alternate escape char" , function ( ) {
499
+ var data = 'first_name,last_name,email_address\r\n"First,\\"1\\"","Last,\\"1\\"","[email protected] "' ;
500
+ var myParser = parser ( { delimiter : "," , escape : "\\" } ) ;
501
+ assert . deepEqual ( myParser ( data , false ) , { "line" : "" , "rows" : [
502
+ [ "first_name" , "last_name" , "email_address" ] ,
503
+ [ "First,\"1\"" , "Last,\"1\"" , "[email protected] " ]
504
+ ] } ) ;
505
+ } ) ;
506
+
507
+ it . should ( "return the rest of the line if a complete value is not found" , function ( ) {
508
+ var data = 'first_name,last_name,email_address\r\n"First,""1""","Last,""1""","[email protected] ' ;
509
+ var myParser = parser ( { delimiter : "," } ) ;
510
+ assert . deepEqual ( myParser ( data , true ) , {
511
+ "line" :
'"First,""1""","Last,""1""","[email protected] ' ,
512
+ "rows" : [
513
+ [ "first_name" , "last_name" , "email_address" ]
514
+ ]
515
+ } ) ;
516
+ } ) ;
517
+
518
+ it . should ( "accept more data appended to the returned line with escaped values" , function ( ) {
519
+ var data = 'first_name,last_name,email_address\r\n"First,""1""","Last,""1""","[email protected] ' ;
520
+ var myParser = parser ( { delimiter : "," } ) ,
521
+ parsedData = myParser ( data , true ) ;
522
+ assert . deepEqual ( parsedData , {
523
+ "line" :
'"First,""1""","Last,""1""","[email protected] ' ,
524
+ "rows" : [
525
+ [ "first_name" , "last_name" , "email_address" ]
526
+ ]
527
+ } ) ;
528
+ assert . deepEqual ( myParser ( parsedData . line + '"\r\n"First,""2""","Last,""2""","[email protected] "' , false ) , {
529
+ line : "" ,
530
+ rows : [
531
+ [ "First,\"1\"" , "Last,\"1\"" , "[email protected] " ] ,
532
+ [ "First,\"2\"" , "Last,\"2\"" , "[email protected] " ]
533
+ ]
534
+ } ) ;
535
+ } ) ;
536
+
537
+ it . should ( "throw an error if there is not more data and there is an invalid escape sequence" , function ( ) {
538
+ var data = 'first_name,last_name,email_address\r\n"First,""1""","Last,""1""","[email protected] ' ;
539
+ var myParser = parser ( { delimiter : "," } ) ,
540
+ parsedData = myParser ( data , true ) ;
541
+ assert . deepEqual ( parsedData , {
542
+ "line" :
'"First,""1""","Last,""1""","[email protected] ' ,
543
+ "rows" : [
544
+ [ "first_name" , "last_name" , "email_address" ]
545
+ ]
546
+ } ) ;
547
+ assert . throws ( function ( ) {
548
+ assert . deepEqual ( myParser ( parsedData . line + '\r\n"First,"",2""","Last""2""","[email protected] "' , false ) , {
549
+ line : "" ,
550
+ rows : [
551
+ [ "First,\"1\"" , "Last,\"1\"" , "[email protected] " ] ,
552
+ [ "First,\"2\"" , "Last,\"2\"" , "[email protected] " ]
553
+ ]
554
+ } ) ;
555
+ } , Error , ' Parse Error: expected: \'"\' got: \'F\'. at \'First,""2""","Last""2""","[email protected] "' ) ;
556
+ } ) ;
557
+
558
+ it . should ( "handle empty values properly" , function ( ) {
559
+ var data = '"","",""\r\n,Last4,[email protected] ' ;
560
+ var myParser = parser ( { delimiter : "," } ) ,
561
+ parsedData = myParser ( data , false ) ;
562
+ assert . deepEqual ( parsedData , { "line" : "" , "rows" : [
563
+ [ "" , "" , "" ] ,
564
+ [ "" , "Last4" , "[email protected] " ]
565
+ ] } ) ;
566
+ } ) ;
567
+
568
+ it . should ( "not parse a row if a new line is not found and there is more data" , function ( ) {
569
+ var data = '"first_name","last_name","email_address"' ;
570
+ var myParser = parser ( { delimiter : "," } ) ;
571
+ var parsedData = myParser ( data , true ) ;
572
+ assert . deepEqual ( parsedData , {
573
+ "line" : '"first_name","last_name","email_address"' ,
574
+ "rows" : [ ]
575
+ } ) ;
576
+ } ) ;
577
+
578
+ it . should ( "not parse a row if there is a trailing delimiter and there is more data" , function ( ) {
579
+ var data = '"first_name","last_name","email_address",' ;
580
+ var myParser = parser ( { delimiter : "," } ) ;
581
+ var parsedData = myParser ( data , true ) ;
582
+ assert . deepEqual ( parsedData , {
583
+ "line" : '"first_name","last_name","email_address",' ,
584
+ "rows" : [ ]
585
+ } ) ;
586
+ } ) ;
587
+
588
+ it . should ( "parse a row if a new line is found and there is more data" , function ( ) {
589
+ var data = '"first_name","last_name","email_address"\r\n' ;
590
+ var myParser = parser ( { delimiter : "," } ) ;
591
+ var parsedData = myParser ( data , true ) ;
592
+ assert . deepEqual ( parsedData , {
593
+ "line" : "" ,
594
+ "rows" : [
595
+ [ "first_name" , "last_name" , "email_address" ]
596
+ ]
597
+ } ) ;
598
+ } ) ;
599
+ } ) ;
600
+
601
+ } ) ;
602
+
405
603
} ) ;
0 commit comments