pas2js/packages/webwidget/tests/tcdbwidgets.pp
2020-03-10 23:22:29 +00:00

203 lines
4.3 KiB
ObjectPascal

unit tcdbwidgets;
{$mode objfpc}
interface
uses
Classes, SysUtils, testregistry, dbwebwidget, db, js, jsondataset, tcwidget, web;
Type
{ TBaseTestDBWidget }
TBaseTestDBWidget = Class(TBaseTestWidget)
private
FFieldCount: Integer;
FRecordCount: Integer;
FDataset : TDataset;
FDatasource : TDatasource;
function GetDataset: TDataset;
function GetDatasource: TDatasource;
Protected
Procedure SetUp; override;
Procedure TearDown; override;
Public
Class Function CreateDataset(aRecordCount : Integer = 2; aFieldCount : Integer = 2) : TDataset;
Property MyDataset : TDataset Read GetDataset;
Property MyDatasource : TDatasource Read GetDatasource;
Property RecordCount : Integer Read FRecordCount Write FRecordCount;
Property FieldCount : Integer Read FFieldCount Write FFieldCount;
end;
TMyDBLoopTemplateWidget = Class(TDBLoopTemplateWidget);
{ TTestSimpleDBloopWidget }
TTestSimpleDBloopWidget = Class(TBaseTestDBWidget)
private
FMy: TMyDBLoopTemplateWidget;
procedure DoFormatField(Sender: TObject; aData: TDBFieldValueData);
Protected
Procedure SetUp; override;
Procedure TearDown; override;
Property My : TMyDBLoopTemplateWidget Read FMy;
Published
Procedure TestSetup;
Procedure TestRender;
Procedure TestFormatField;
end;
implementation
Type
{ TMyJSONDataset }
TMyJSONDataset = Class(TJSONDataset)
Protected
Procedure MetaDataToFieldDefs; override;
Public
Property Rows;
end;
{ TTestSimpleDBloopWidget }
Const
SSimpleHeader = '<ul>';
SSimpleFooter = '</ul>';
SSimpleItem = '<li id="{{FI1}}">{{FS2}}</li>';
procedure TTestSimpleDBloopWidget.DoFormatField(Sender: TObject; aData: TDBFieldValueData);
begin
if aData.Field.Name='FI1' then
aData.Value:='myf-'+IntToStr(aData.Field.AsInteger);
end;
procedure TTestSimpleDBloopWidget.SetUp;
begin
inherited SetUp;
RecordCount:=3;
FMy:=TMyDBLoopTemplateWidget.Create(Nil);
FMy.ParentID:=SBaseWindowID;
FMy.Datasource:=MyDataSource;
FMy.HeaderTemplate:=SSimpleHeader;
FMy.FooterTemplate:=SSimpleFooter;
FMy.ItemTemplate:=SSimpleItem;
end;
procedure TTestSimpleDBloopWidget.TearDown;
begin
FreeAndNil(FMy);
inherited TearDown;
end;
procedure TTestSimpleDBloopWidget.TestSetup;
begin
AssertEquals('Recordcount',3,RecordCount);
AssertNotNull('Have dataset',My);
AssertNotNull('Have dataset datasource',My.Datasource);
end;
procedure TTestSimpleDBloopWidget.TestRender;
Var
El : TJSHTMLElement;
i : Integer;
begin
My.Refresh;
For I:=1 to 3 do
begin
El:=AssertTree('ul/li('+IntToStr(i)+')');
AssertEquals('Inner text','FS2_'+IntToStr(I),EL.InnerText);
end;
end;
procedure TTestSimpleDBloopWidget.TestFormatField;
Var
El : TJSHTMLElement;
i : Integer;
begin
My.OnFormatField:=@DoFormatField;
My.Refresh;
For I:=1 to 3 do
begin
El:=AssertTree('ul/li('+IntToStr(i)+')');
AssertEquals('Inner text','FS2_'+IntToStr(I),EL.InnerText);
end;
end;
{ TMyJSONDataset }
procedure TMyJSONDataset.MetaDataToFieldDefs;
begin
// Do nothing
end;
function TBaseTestDBWidget.GetDataset: TDataset;
begin
if FDataset=Nil then
FDataset:=CreateDataset(FRecordCount,FFieldCount);
Result:=FDataset;
end;
function TBaseTestDBWidget.GetDatasource: TDatasource;
begin
if FDatasource=Nil then
begin
FDatasource:=TDatasource.Create(Nil);
FDatasource.Dataset:=MyDataset;
end;
Result:=FDatasource;
end;
procedure TBaseTestDBWidget.SetUp;
begin
inherited SetUp;
FRecordCount:=2;
FFieldCount:=2;
end;
procedure TBaseTestDBWidget.TearDown;
begin
FreeAndNil(FDatasource);
FreeAndNil(FDataset);
inherited TearDown;
end;
class function TBaseTestDBWidget.CreateDataset(aRecordCount : Integer = 2; aFieldCount : Integer = 2) : TDataset;
Var
JD : TMyJSONDataset;
I,J : integer;
O : TJSObject;
A : TJSArray;
begin
JD:=TMyJSONDataSet.Create(Nil);
Result:=JD;
JD.FieldDefs.Add('FI1',ftInteger);
For I:=2 to aFieldCount do
JD.FieldDefs.Add('FS'+IntToStr(I),ftString,100);
JD.RowType:=rtJSONObject;
A:=TJSArray.New;
For J:=1 to aRecordCount do
begin
O:=TJSObject.New;
A.Push(O);
O['FI1']:=J;
For I:=2 to aFieldCount do
O['FS'+IntToStr(I)]:='FS'+IntToStr(I)+'_'+IntToStr(J);
end;
JD.Rows:=A;
JD.Open;
end;
begin
// RegisterTests([TTestSimpleDBloopWidget]);
end.