* DB Widgets tests

This commit is contained in:
michael 2020-03-10 23:22:29 +00:00
parent c1f474e1be
commit 38a6cfc3f9
4 changed files with 316 additions and 1 deletions

View File

@ -0,0 +1,105 @@
unit tcdbhtmlwidgets;
{$mode objfpc}
interface
uses
Classes, SysUtils, tcwidget, htmlwidgets, testregistry, db, dbhtmlwidgets, jsondataset, tcdbwidgets;
Type
TMyDBSelectWidget = class(TDBSelectWidget);
{ TTestDBSelectWidget }
TTestDBSelectWidget= class(TBaseTestDBWidget)
private
FMy: TMyDBSelectWidget;
procedure AssertOption(Idx: Integer; aText, aValue: String; Selected: Boolean=False);
Protected
Procedure SetUp; override;
Procedure TearDown; override;
Procedure Hookup;
Public
Property My : TMyDBSelectWidget Read FMy;
Published
Procedure TestHookup;
Procedure TestRender;
end;
implementation
uses JS, web;
{ TBaseTestDBWidget }
{ TTestDBSelectWidget }
procedure TTestDBSelectWidget.AssertOption(Idx: Integer; aText, aValue: String; Selected: Boolean);
Var
O : TJSHTMLOptionElement;
begin
AssertTrue('Correct index',Idx<My.Element.childElementCount);
O:=My.Element.children[Idx] as TJSHTMLOptionElement;
AssertEquals('Text',aText,O.InnerText);
if aValue='' then
aValue:=aText;
AssertEquals('Value',aValue,O.Value);
AssertEquals('Selected',Selected,O.selected);
end;
procedure TTestDBSelectWidget.SetUp;
begin
inherited SetUp;
FMy:=TMyDBSelectWidget.Create(Nil);
FMy.ParentID:=SBaseWindowID;
FMy.ItemField:='FS2';
FMy.ValueField:='FI1';
end;
procedure TTestDBSelectWidget.TearDown;
begin
FreeAndNil(FMy);
inherited TearDown;
end;
procedure TTestDBSelectWidget.Hookup;
begin
FMy.Datasource:=MyDatasource;
end;
procedure TTestDBSelectWidget.TestHookup;
begin
AssertNotNull('Have widget',My);
AssertNull('Have no datasource',My.Datasource);
AssertEquals('Have parentID',SBaseWindowID,My.ParentID);
Hookup;
AssertNotNull('Have datasource',MyDatasource);
AssertNotNull('Have dataset',MyDataset);
AssertSame('Have no datasource',MyDatasource,My.Datasource);
AssertSame('Have dataset',MyDataset,My.Dataset);
end;
procedure TTestDBSelectWidget.TestRender;
begin
Hookup;
My.Refresh;
AssertTree('select/option');
AssertEquals('Multi',False,My.multiple);
AssertEquals('SelectedIndex',-1,My.selectedIndex);
AssertEquals('Amount of option values',2,My.Element.childElementCount);
AssertOption(0,'FS2_1','1');
AssertOption(1,'FS2_2','2');
end;
initialization
// RegisterTests([TTestDBSelectWidget]);
end.

View File

@ -0,0 +1,202 @@
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.

View File

@ -60,6 +60,14 @@
<IsPartOfProject Value="True"/>
<UnitName Value="tcHTMLWidgets"/>
</Unit>
<Unit>
<Filename Value="tcdbhtmlwidgets.pp"/>
<IsPartOfProject Value="True"/>
</Unit>
<Unit>
<Filename Value="tcdbwidgets.pp"/>
<IsPartOfProject Value="True"/>
</Unit>
</Units>
</ProjectOptions>
<CompilerOptions>

View File

@ -3,7 +3,7 @@ program testwidgets;
{$mode objfpc}
uses
browserconsole, {browsertestrunner} consoletestrunner, JS, Classes, SysUtils, Web, btnrun, tcWidget, tchtmlwidgets;
browserconsole, consoletestrunner, JS, Classes, SysUtils, Web, btnrun, tcWidget, tchtmlwidgets, tcdbhtmlwidgets, tcdbwidgets;
var
Application : TTestRunner;