123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- 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.
|