From 0add077916f0d536d08c171fc515bbe6a4887af7 Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 4 Dec 2019 12:07:17 +0000 Subject: [PATCH] * Fix bug ID #36385, CSV header contains also disabled fields git-svn-id: trunk@43639 - --- packages/fcl-db/src/export/fpcsvexport.pp | 5 +- packages/fcl-db/tests/testdbexport.pas | 84 ++++++++++++++++++++++- 2 files changed, 85 insertions(+), 4 deletions(-) diff --git a/packages/fcl-db/src/export/fpcsvexport.pp b/packages/fcl-db/src/export/fpcsvexport.pp index c5bc2dc094..4159c559ca 100644 --- a/packages/fcl-db/src/export/fpcsvexport.pp +++ b/packages/fcl-db/src/export/fpcsvexport.pp @@ -131,9 +131,8 @@ begin If FormatSettings.HeaderRow then begin For I:=0 to ExportFields.Count-1 do - begin - FCSVOut.AppendCell(ExportFields[i].ExportedName); - end; + if ExportFields[i].Enabled then + FCSVOut.AppendCell(ExportFields[i].ExportedName); FCSVOut.AppendRow; //close off with line ending end; inherited DoDataHeader; diff --git a/packages/fcl-db/tests/testdbexport.pas b/packages/fcl-db/tests/testdbexport.pas index 0c5ef700cf..ebf97e3e1d 100644 --- a/packages/fcl-db/tests/testdbexport.pas +++ b/packages/fcl-db/tests/testdbexport.pas @@ -57,11 +57,13 @@ type procedure TestCSVExport; //tests csv export with default values procedure TestCSVExport_RFC4180WithHeader; //tests csv export with settings that match RFC4180 procedure TestCSVExport_TweakSettingsSemicolon; //tests semicolon delimited, custom country values + procedure TestCSVExportDisabledFields; procedure TestFixedTextExport; procedure TestFixedTextExportUTF8; procedure TestFixedTextExportUTF16; procedure TestFixedTextExportBoolean; procedure TestFixedTextExportHeader; + procedure TestFixedTextExportHeaderDisabledFields; procedure TestFixedTextExportSpaces; procedure TestJSONExport; procedure TestRTFExport; @@ -550,6 +552,46 @@ begin end; end; +procedure TTestDBExport.TestCSVExportDisabledFields; +var + DS : TBufDataset; + Exporter: TCSVExporter; + F : text; + S : UTF8String; + haveFile : Boolean; + +begin + haveFile:=False; + Exporter:=Nil; + DS:=GetABCDS; + try + Exporter := TCSVExporter.Create(nil); + Exporter.FormatSettings.HeaderRow:=True; + Exporter.Dataset:=DS; + Exporter.FileName := FExportTempDir + lowercase(TestName) + '.csv'; + Exporter.BuildDefaultFieldMap(Exporter.ExportFields); + Exporter.ExportFields[1].Enabled:=False; + AssertEquals('Output count',2,Exporter.Execute); + AssertTrue('Output file must be created', FileExists(Exporter.FileName)); + AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0)); + AssignFile(F,Exporter.FileName); + Reset(F); + haveFile:=True; + Readln(F,S); + AssertEquals('Correct header line','A,C',S); // 1 extra + Readln(F,S); + AssertEquals('Correct first line','xx,zz',S); // 1 extra + Readln(F,S); + AssertEquals('Correct first line','x,z',S); // 1 extra + finally + if HaveFile then + closeFile(F); + if (FKeepFilesAfterTest = False) then + DeleteFile(Exporter.FileName); + Exporter.Free; + end; +end; + procedure TTestDBExport.TestFixedTextExport; var Exporter: TFixedLengthExporter; @@ -796,7 +838,7 @@ var begin haveFile:=False; Exporter:=Nil; - DS:=GetBooleanDS; + DS:=GetABCDS; try Exporter := TFixedLengthExporter.Create(nil); Exporter.FormatSettings.BooleanFalse:='false'; @@ -827,6 +869,46 @@ begin end; end; +procedure TTestDBExport.TestFixedTextExportHeaderDisabledFields; +var + DS : TBufDataset; + Exporter: TFixedLengthExporter; + F : text; + S : UTF8String; + haveFile : Boolean; + +begin + haveFile:=False; + Exporter:=Nil; + DS:=GetABCDS; + try + Exporter := TFixedLengthExporter.Create(nil); + Exporter.FormatSettings.HeaderRow:=True; + Exporter.Dataset:=DS; + Exporter.FileName := FExportTempDir + lowercase(TestName) + '.txt'; + Exporter.BuildDefaultFieldMap(Exporter.ExportFields); + Exporter.ExportFields[1].Enabled:=False; + AssertEquals('Output count',2,Exporter.Execute); + AssertTrue('Output file must be created', FileExists(Exporter.FileName)); + AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0)); + AssignFile(F,Exporter.FileName); + Reset(F); + haveFile:=True; + Readln(F,S); + AssertEquals('Correct header line','A C ',S); // 1 extra + Readln(F,S); + AssertEquals('Correct first line','xxzz',S); // 1 extra + Readln(F,S); + AssertEquals('Correct first line','x z ',S); // 1 extra + finally + if HaveFile then + closeFile(F); + if (FKeepFilesAfterTest = False) then + DeleteFile(Exporter.FileName); + Exporter.Free; + end; +end; + procedure TTestDBExport.TestFixedTextExportSpaces; var DS : TBufDataset;