mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-09-12 21:49:02 +02:00
* DB Widgets tests
This commit is contained in:
parent
c1f474e1be
commit
38a6cfc3f9
105
packages/webwidget/tests/tcdbhtmlwidgets.pp
Normal file
105
packages/webwidget/tests/tcdbhtmlwidgets.pp
Normal 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.
|
||||||
|
|
202
packages/webwidget/tests/tcdbwidgets.pp
Normal file
202
packages/webwidget/tests/tcdbwidgets.pp
Normal 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.
|
||||||
|
|
@ -60,6 +60,14 @@
|
|||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="tcHTMLWidgets"/>
|
<UnitName Value="tcHTMLWidgets"/>
|
||||||
</Unit>
|
</Unit>
|
||||||
|
<Unit>
|
||||||
|
<Filename Value="tcdbhtmlwidgets.pp"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit>
|
||||||
|
<Filename Value="tcdbwidgets.pp"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit>
|
||||||
</Units>
|
</Units>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
|
@ -3,7 +3,7 @@ program testwidgets;
|
|||||||
{$mode objfpc}
|
{$mode objfpc}
|
||||||
|
|
||||||
uses
|
uses
|
||||||
browserconsole, {browsertestrunner} consoletestrunner, JS, Classes, SysUtils, Web, btnrun, tcWidget, tchtmlwidgets;
|
browserconsole, consoletestrunner, JS, Classes, SysUtils, Web, btnrun, tcWidget, tchtmlwidgets, tcdbhtmlwidgets, tcdbwidgets;
|
||||||
|
|
||||||
var
|
var
|
||||||
Application : TTestRunner;
|
Application : TTestRunner;
|
||||||
|
Loading…
Reference in New Issue
Block a user