fpc/packages/fcl-base/tests/tccsvdocument.pp
2019-12-05 10:43:02 +00:00

149 lines
2.4 KiB
ObjectPascal

unit tccsvdocument;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpcunit, testregistry, csvdocument;
Type
{ TTestCSVDocument }
TTestCSVDocument = Class(TTestCase)
private
FDoc: TCSVDocument;
procedure RemoveTestFile;
function StripQuotes(S: String): string;
procedure TestTestFile;
Public
Procedure SetUp; override;
Procedure TearDown; override;
Procedure CreateTestFile;
Property Doc : TCSVDocument Read FDoc;
Published
Procedure TestEmpty;
Procedure TestRead;
end;
implementation
Const
TestFileName = 'test.csv';
{ TTestCSVDocument }
procedure TTestCSVDocument.SetUp;
begin
FDoc:=TCSVDocument.Create;
Inherited;
end;
procedure TTestCSVDocument.TearDown;
begin
RemoveTestFile;
FreeAndNil(FDoc);
Inherited;
end;
procedure TTestCSVDocument.RemoveTestFile;
begin
If FileExists(TestFileName) then
AssertTrue('Deleting test file',DeleteFile(TestFileName));
end;
Const
ColCount = 3;
RowCount = 4;
Type
TRow = Array[0..ColCount-1] of string;
TCells = Array[0..RowCount-1] of TRow;
Const
Cells : TCells = (
('a','b','c'),
('1','"one"','1.1'),
('2','"two"','2.2'),
('3','"three"','3.3')
);
procedure TTestCSVDocument.CreateTestFile;
Var
L : TStringList;
R,C : Integer;
S : String;
begin
L:=TStringList.Create;
try
for R:=0 to RowCount-1 do
begin
S:='';
for C:=0 to ColCount-1 do
begin
if S<>'' then
S:=S+',';
S:=S+Cells[R,C];
end;
L.Add(S);
end;
L.SaveToFile(TestFileName);
finally
L.Free;
end;
end;
procedure TTestCSVDocument.TestEmpty;
begin
AssertNotNull('Have document',Doc);
end;
Function TTestCSVDocument.StripQuotes(S : String) : string;
Var
L : integer;
begin
Result:=S;
L:=Length(Result);
if (L>1) then
if (Result[1]='"') and (Result[L]='"') then
Result:=Copy(Result,2,L-2);
end;
procedure TTestCSVDocument.TestTestFile;
Var
R,C : Integer;
begin
AssertEquals('Row count',RowCount,Doc.RowCount);
For R:=0 to RowCount-1 do
For C:=0 to ColCount-1 do
begin
AssertEquals('Col['+IntToStr(R)+'] count',ColCount,Doc.ColCount[R]);
AssertEquals(Format('Cell[%d,%d]',[C,R]),StripQuotes(Cells[R,C]),Doc.Cells[C,R]);
end;
end;
procedure TTestCSVDocument.TestRead;
begin
CreateTestFile;
Doc.LoadFromFile(TestFileName);
TestTestFile;
end;
initialization
RegisterTest(TTestCSVDocument);
end.