mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 06:49:27 +02:00
fcl-db: csvdataset: take into account Delimiter when saving, open file with fmCreate when saving + tests; bug #33432
git-svn-id: trunk@39009 -
This commit is contained in:
parent
3d6d020fca
commit
77dc0597e9
@ -217,6 +217,7 @@ Var
|
||||
|
||||
begin
|
||||
FBuilder:=TCSVBuilder.Create;
|
||||
FBuilder.Assign(FOptions);
|
||||
FBuilder.SetOutput(Stream);
|
||||
if FOptions.FirstLineAsFieldNames then
|
||||
begin
|
||||
@ -375,7 +376,7 @@ Var
|
||||
begin
|
||||
First;
|
||||
MergeChangeLog;
|
||||
P:=TCSVDataPacketReader.Create(Self,AStream,FCSVOPtions);
|
||||
P:=TCSVDataPacketReader.Create(Self,AStream,FCSVOptions);
|
||||
try
|
||||
GetDatasetPacket(P);
|
||||
finally
|
||||
@ -388,7 +389,7 @@ Var
|
||||
F : TFileStream;
|
||||
|
||||
begin
|
||||
F:=TFileStream.Create(AFileName,fmOpenRead or fmShareDenyWrite);
|
||||
F:=TFileStream.Create(AFileName, fmCreate);
|
||||
try
|
||||
SaveToCSVStream(F);
|
||||
finally
|
||||
|
@ -32,12 +32,14 @@ type
|
||||
Procedure TestLoad2fieldsFirstLineAsNames;
|
||||
Procedure TestLoad2fields;
|
||||
Procedure TestLoad2Records2fields;
|
||||
Procedure TestLoad2Records2fieldsTabDelim;
|
||||
Procedure TestSaveEmptyDefault;
|
||||
Procedure TestSaveEmptyFirstLineAsNames;
|
||||
Procedure TestSaveOneRecordDefault;
|
||||
Procedure TestSaveOneRecordFirstLineAsNames;
|
||||
Procedure TestSaveTwoRecordsDefault;
|
||||
Procedure TestSaveTwoRecordsFirstLineAsNames;
|
||||
Procedure TestSaveTwoRecordsFirstLineAsNamesTabDelim;
|
||||
Procedure TestSaveOneRecord2FieldsDefault;
|
||||
Procedure TestSaveOneRecord2FieldsFirstLineAsNames;
|
||||
Procedure TestLoadPriorFieldDefs;
|
||||
@ -72,7 +74,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.LoadFromLines(Const Lines : Array of string);
|
||||
procedure TTestCSVDataset.LoadFromLines(const Lines: array of string);
|
||||
|
||||
Var
|
||||
L : TStringList;
|
||||
@ -90,7 +92,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.SaveToLines(Const Lines: TStrings);
|
||||
procedure TTestCSVDataset.SaveToLines(const Lines: TStrings);
|
||||
|
||||
Var
|
||||
S : TStringStream;
|
||||
@ -110,7 +112,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.AssertLines(Const Lines: Array of string);
|
||||
procedure TTestCSVDataset.AssertLines(const Lines: array of string);
|
||||
|
||||
Var
|
||||
L : TStrings;
|
||||
@ -127,7 +129,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoadEmptyDefault;
|
||||
procedure TTestCSVDataset.TestLoadEmptyDefault;
|
||||
begin
|
||||
LoadFromLines(['a']);
|
||||
AssertEquals('Active',True,CSVDataset.Active);
|
||||
@ -138,7 +140,7 @@ begin
|
||||
AssertEquals('field contents','a',CSVDataset.Fields[0].AsString);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoadEmptyFirstLineAsNames;
|
||||
procedure TTestCSVDataset.TestLoadEmptyFirstLineAsNames;
|
||||
|
||||
begin
|
||||
CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
@ -151,7 +153,7 @@ begin
|
||||
AssertEquals('Empty',True,CSVDataset.EOF and CSVDataset.BOF);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoad2fieldsFirstLineAsNames;
|
||||
procedure TTestCSVDataset.TestLoad2fieldsFirstLineAsNames;
|
||||
begin
|
||||
CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
CSVDataset.CSVOptions.DefaultFieldLength:=128;
|
||||
@ -165,7 +167,7 @@ begin
|
||||
AssertEquals('Empty',True,CSVDataset.EOF and CSVDataset.BOF);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoad2fields;
|
||||
procedure TTestCSVDataset.TestLoad2fields;
|
||||
|
||||
begin
|
||||
CSVDataset.CSVOptions.DefaultFieldLength:=128;
|
||||
@ -182,7 +184,7 @@ begin
|
||||
AssertEquals('field 1 contents','b',CSVDataset.Fields[1].AsString);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoad2Records2fields;
|
||||
procedure TTestCSVDataset.TestLoad2Records2fields;
|
||||
begin
|
||||
CSVDataset.CSVOptions.DefaultFieldLength:=128;
|
||||
LoadFromLines(['a,b','c,d']);
|
||||
@ -204,14 +206,35 @@ begin
|
||||
AssertEquals('At EOF',True,CSVDataset.EOF);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestSaveEmptyDefault;
|
||||
procedure TTestCSVDataset.TestLoad2Records2fieldsTabDelim;
|
||||
begin
|
||||
CSVDataset.CSVOptions.Delimiter:=#9;
|
||||
CSVDataset.CSVOptions.DefaultFieldLength:=10;
|
||||
CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
LoadFromLines(['f_a'#9'f_b','a1'#9'b1','a2'#9'b2']);
|
||||
AssertEquals('Active',True,CSVDataset.Active);
|
||||
AssertEquals('field count',2,CSVDataset.FieldDefs.Count);
|
||||
AssertEquals('field 0 name','f_a',CSVDataset.FieldDefs[0].Name);
|
||||
AssertEquals('field 0 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[0].Size);
|
||||
AssertEquals('field 1 name','f_b',CSVDataset.FieldDefs[1].Name);
|
||||
AssertEquals('field 1 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[1].Size);
|
||||
AssertEquals('field 0 contents','a1',CSVDataset.Fields[0].AsString);
|
||||
AssertEquals('field 1 contents','b1',CSVDataset.Fields[1].AsString);
|
||||
CSVDataset.Next;
|
||||
AssertEquals('field 0 contents','a2',CSVDataset.Fields[0].AsString);
|
||||
AssertEquals('field 1 contents','b2',CSVDataset.Fields[1].AsString);
|
||||
CSVDataset.Next;
|
||||
AssertEquals('At EOF',True,CSVDataset.EOF);
|
||||
end;
|
||||
|
||||
procedure TTestCSVDataset.TestSaveEmptyDefault;
|
||||
begin
|
||||
CSVDataset.FieldDefs.Add('a',ftString);
|
||||
CSVDataset.CreateDataset;
|
||||
AssertLines([]);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestSaveEmptyFirstLineAsNames;
|
||||
procedure TTestCSVDataset.TestSaveEmptyFirstLineAsNames;
|
||||
begin
|
||||
CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
CSVDataset.FieldDefs.Add('a',ftString);
|
||||
@ -219,7 +242,7 @@ begin
|
||||
AssertLines(['a']);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestSaveOneRecordDefault;
|
||||
procedure TTestCSVDataset.TestSaveOneRecordDefault;
|
||||
begin
|
||||
// CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
CSVDataset.FieldDefs.Add('a',ftString,20);
|
||||
@ -230,7 +253,7 @@ begin
|
||||
AssertLines(['b']);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestSaveOneRecordFirstLineAsNames;
|
||||
procedure TTestCSVDataset.TestSaveOneRecordFirstLineAsNames;
|
||||
begin
|
||||
CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
CSVDataset.FieldDefs.Add('a',ftString,20);
|
||||
@ -241,7 +264,7 @@ begin
|
||||
AssertLines(['a','b']);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestSaveTwoRecordsDefault;
|
||||
procedure TTestCSVDataset.TestSaveTwoRecordsDefault;
|
||||
begin
|
||||
CSVDataset.FieldDefs.Add('a',ftString,20);
|
||||
CSVDataset.CreateDataset;
|
||||
@ -254,7 +277,7 @@ begin
|
||||
AssertLines(['b','c']);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestSaveTwoRecordsFirstLineAsNames;
|
||||
procedure TTestCSVDataset.TestSaveTwoRecordsFirstLineAsNames;
|
||||
begin
|
||||
CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
CSVDataset.FieldDefs.Add('a',ftString,20);
|
||||
@ -268,7 +291,19 @@ begin
|
||||
AssertLines(['a','b','c']);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestSaveOneRecord2FieldsDefault;
|
||||
procedure TTestCSVDataset.TestSaveTwoRecordsFirstLineAsNamesTabDelim;
|
||||
begin
|
||||
CSVDataset.CSVOptions.Delimiter:=#9;
|
||||
CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
CSVDataset.FieldDefs.Add('f_a',ftString,2);
|
||||
CSVDataset.FieldDefs.Add('f_b',ftString,2);
|
||||
CSVDataset.CreateDataset;
|
||||
CSVDataset.InsertRecord(['a2','b2']);
|
||||
CSVDataset.InsertRecord(['a1','b1']);
|
||||
AssertLines(['f_a'#9'f_b','a1'#9'b1','a2'#9'b2']);
|
||||
end;
|
||||
|
||||
procedure TTestCSVDataset.TestSaveOneRecord2FieldsDefault;
|
||||
begin
|
||||
CSVDataset.FieldDefs.Add('a',ftString,20);
|
||||
CSVDataset.FieldDefs.Add('b',ftString,20);
|
||||
@ -280,7 +315,7 @@ begin
|
||||
AssertLines(['c,d']);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestSaveOneRecord2FieldsFirstLineAsNames;
|
||||
procedure TTestCSVDataset.TestSaveOneRecord2FieldsFirstLineAsNames;
|
||||
begin
|
||||
CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
CSVDataset.FieldDefs.Add('a',ftString,20);
|
||||
@ -293,7 +328,7 @@ begin
|
||||
AssertLines(['a,b','c,d']);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoadPriorFieldDefs;
|
||||
procedure TTestCSVDataset.TestLoadPriorFieldDefs;
|
||||
begin
|
||||
CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
|
||||
CSVDataset.FieldDefs.Add('a',ftString,20);
|
||||
@ -310,7 +345,7 @@ begin
|
||||
AssertEquals('field 1 contents',2,CSVDataset.Fields[1].AsInteger);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoadPriorFieldDefsNoFieldNames;
|
||||
procedure TTestCSVDataset.TestLoadPriorFieldDefsNoFieldNames;
|
||||
begin
|
||||
CSVDataset.FieldDefs.Add('a',ftString,20);
|
||||
CSVDataset.FieldDefs.Add('b',ftInteger,4);
|
||||
@ -326,7 +361,7 @@ begin
|
||||
AssertEquals('field 1 contents',2,CSVDataset.Fields[1].AsInteger);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoadPriorFieldDefsNoFieldNamesWrongCount;
|
||||
procedure TTestCSVDataset.TestLoadPriorFieldDefsNoFieldNamesWrongCount;
|
||||
|
||||
Var
|
||||
OK : Boolean;
|
||||
@ -343,7 +378,7 @@ begin
|
||||
Fail('Expected exception, but none raised');
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoadPriorFieldDefsFieldNamesWrongCount;
|
||||
procedure TTestCSVDataset.TestLoadPriorFieldDefsFieldNamesWrongCount;
|
||||
|
||||
const
|
||||
EM = 'DS : CSV File Field count (1) does not match dataset field count (2).';
|
||||
@ -365,7 +400,7 @@ begin
|
||||
Fail(OK);
|
||||
end;
|
||||
|
||||
Procedure TTestCSVDataset.TestLoadPriorFieldDefsFieldNamesWrongNames;
|
||||
procedure TTestCSVDataset.TestLoadPriorFieldDefsFieldNamesWrongNames;
|
||||
const
|
||||
EM = 'DS : CSV File field 1: name "c" does not match dataset field name "b".';
|
||||
Var
|
||||
|
Loading…
Reference in New Issue
Block a user