@@ -570,48 +570,100 @@ public void Read_plain_text_of_fixed_length_file(string fileContent, bool parall
570570 result . Should ( ) . BeEquivalentTo ( expected , cfg => cfg . WithStrictOrdering ( ) ) ;
571571 }
572572
573+ public record RegularCaseRecord ( int Aaa , int Bbb , int Ccc , int Ddd ) ;
574+
573575 [ Theory ]
574- [ MemberData ( nameof ( Given_quoted_csv_file_should_read_quoted_properly_theory ) , new object [ ] { "AllFieldsQuotedCsv.csv" } ) ]
575- public void Read_csv_file_with_header_should_automatic_bind_mapping ( string fileContent , bool hasHeader , bool parallelProcessing , bool blankLineAtEnd , int repeat )
576+ [ InlineData ( "\" AAA\" ,\" BBB\" ,\" CCC\" ,\" DDD\" " ) ]
577+ [ InlineData ( "AAA,BBB,CCC,DDD" ) ]
578+ [ InlineData ( "aaa,bbb,ccc,ddd" ) ]
579+ [ InlineData ( "AAA , BBB , CCC , DDD" ) ]
580+ [ InlineData ( "A_AA,B_BB,C_CC,D_DD" ) ]
581+ public void Read_csv_file_with_header_in_different_case_should_automatic_bind_mapping ( string header )
576582 {
577- if ( ! hasHeader )
578- return ;
583+ // Arrange
584+
585+ var fileContent = $ """
586+ { header }
587+ 1,2,3,4
588+ 5,6,7,8
589+ 9,10,11,12
590+ 13,14,15,16
591+ 87,88,89,100
592+ 89,99,100,101
593+ 88,89,90,91
594+ """ ;
595+
596+ var reader = new StringReader ( fileContent ) ;
597+ var expected = new RegularCaseRecord [ ]
598+ {
599+ new ( 1 , 2 , 3 , 4 ) ,
600+ new ( 5 , 6 , 7 , 8 ) ,
601+ new ( 9 , 10 , 11 , 12 ) ,
602+ new ( 13 , 14 , 15 , 16 ) ,
603+ new ( 87 , 88 , 89 , 100 ) ,
604+ new ( 89 , 99 , 100 , 101 ) ,
605+ new ( 88 , 89 , 90 , 91 ) ,
606+ } ;
607+
608+ var readOptions = new VariableLengthReaderOptions
609+ {
610+ HasHeader = true ,
611+ ParallelismOptions = new ( ) { Enabled = false } ,
612+ ContainsQuotedFields = true ,
613+ } ;
614+
615+ // Act
616+
617+ var items = reader . ReadRecords < RegularCaseRecord > ( readOptions , skipMismatchedColumns : false ) ;
618+
619+ // Assert
620+
621+ items . Should ( ) . BeEquivalentTo ( expected , cfg => cfg . WithStrictOrdering ( ) ) ;
622+ }
579623
624+ [ Fact ]
625+ public void Read_csv_file_with_header_should_automatic_bind_support_additional_configuration ( )
626+ {
580627 // Arrange
581628
582- fileContent = fileContent . Replace ( Header , "id,name,age,birthday,gender,email,UNMAPPED,children" ) ;
583- using var fileStream = fileContent . ToStream ( ) ;
584- using var streamReader = new StreamReader ( fileStream , Encoding . UTF8 ) ;
629+ var fileContent = $ """
630+ AAA,BBB,CCC,DDD
631+ 1,2,3,4
632+ 5,6,7,8
633+ 9,10,11,12
634+ 13,14,15,16
635+ 87,88,89,100
636+ 89,99,100,101
637+ 88,89,90,91
638+ """ ;
585639
586- var expectedItems = new PersonComplete [ ]
640+ var reader = new StringReader ( fileContent ) ;
641+ var expected = new RegularCaseRecord [ ]
587642 {
588- new ( ) { id = new Guid ( "ec9a8be9-a000-503b-adcf-7266804f1eb1" ) , name = "Lilly Bradley" , age = 21 , birthday = DateTime . Parse ( "11/16/1977" ) , gender = Gender . Male , email = "pak@witak.bf" , children = true } ,
589- new ( ) { id = new Guid ( "63858071-cbb3-5abd-9f88-3dfd565cc4ab" ) , name = "Lucy Berry" , age = 49 , birthday = DateTime . Parse ( "11/12/1961" ) , gender = Gender . Female , email = "vanvo@ro.pk" , children = false } ,
590- new ( ) { id = new Guid ( "203804f9-93e7-5510-8bb2-177296bafe6a" ) , name = "Frank Fox" , age = 36 , birthday = DateTime . Parse ( "3/19/1977" ) , gender = Gender . Male , email = "vav@ped.fj" , children = true } ,
591- new ( ) { id = new Guid ( "a8af66fb-bad4-51eb-810c-bf3ca22337c6" ) , name = "Isabel Todd" , age = 51 , birthday = DateTime . Parse ( "9/16/1999" ) , gender = Gender . Female , email = "gu@or.bz" , children = false } ,
592- new ( ) { id = new Guid ( "1a3d8a66-3e0c-50eb-99c1-a3926bce15ed" ) , name = $ "Joseph { Environment . NewLine } Scott", age = 55 , birthday = DateTime . Parse ( "10/26/1986" ) , gender = Gender . Male , email = "bup@vugeb.tt" , children = false } ,
593- new ( ) { id = new Guid ( "aa7d4395-f10f-5776-9912-e3d86c4b9d3c" ) , name = "Gilbert Brooks" , age = 56 , birthday = DateTime . Parse ( "3/1/1956" ) , gender = Gender . Female , email = "epiju@ba.ly" , children = true } ,
594- new ( ) { id = new Guid ( "1d25b811-4002-5744-ac40-93a50f2a442c" ) , name = "Louis \" Ronaldo\" Bennett" , age = 25 , birthday = DateTime . Parse ( "4/4/1967" ) , gender = Gender . Male , email = "ma@itrovive.tv" , children = true } ,
595- new ( ) { id = new Guid ( "8e963ae5-a9ed-5572-b11c-566abc6a8a56" ) , name = "Norman Parker" , age = 57 , birthday = DateTime . Parse ( "4/17/1969" ) , gender = Gender . Male , email = "omi@hewepa.bw" , children = true } ,
596- new ( ) { id = new Guid ( "4d373cfb-79e3-54ce-87ff-f2a08fde8f28" ) , name = "Gary Doyle" , age = 20 , birthday = DateTime . Parse ( "1/21/1958" ) , gender = Gender . Male , email = "orjohma@cabmofa.ps" , children = true } ,
597- new ( ) { id = new Guid ( "5af00cdf-0758-5317-bcdf-c9a3337cc266" ) , name = "Bruce Silva" , age = 39 , birthday = DateTime . Parse ( "1/11/1968" ) , gender = Gender . Female , email = "ta@ovonib.ir" , children = true } ,
598- }
599- . Repeat ( repeat ) ;
643+ new ( 10 , 20 , 30 , 40 ) ,
644+ new ( 50 , 60 , 70 , 80 ) ,
645+ new ( 90 , 100 , 110 , 120 ) ,
646+ new ( 130 , 140 , 150 , 160 ) ,
647+ new ( 870 , 880 , 890 , 1000 ) ,
648+ new ( 890 , 990 , 1000 , 1010 ) ,
649+ new ( 880 , 890 , 900 , 910 ) ,
650+ } ;
600651
601652 var readOptions = new VariableLengthReaderOptions
602653 {
603- HasHeader = hasHeader ,
604- ParallelismOptions = new ( ) { Enabled = parallelProcessing } ,
654+ HasHeader = true ,
655+ ParallelismOptions = new ( ) { Enabled = false } ,
605656 ContainsQuotedFields = true ,
606657 } ;
607658
608659 // Act
609660
610- var items = streamReader . ReadRecords < PersonComplete > ( readOptions , skipMismatchedColumns : true ) ;
661+ var items = reader . ReadRecords < RegularCaseRecord > ( readOptions , false , builder =>
662+ builder . DefaultTypeConvert ( x => int . Parse ( x ) * 10 ) ) ;
611663
612664 // Assert
613665
614- items . Should ( ) . BeEquivalentTo ( expectedItems , cfg => cfg . WithStrictOrdering ( ) ) ;
666+ items . Should ( ) . BeEquivalentTo ( expected , cfg => cfg . WithStrictOrdering ( ) ) ;
615667 }
616668 }
617669}
0 commit comments