Browse Source

* Fix tests

michael 5 years ago
parent
commit
c1f474e1be
1 changed files with 275 additions and 31 deletions
  1. 275 31
      packages/webwidget/tests/tcwidget.pp

+ 275 - 31
packages/webwidget/tests/tcwidget.pp

@@ -49,8 +49,9 @@ Type
   TMySubContentWidget = Class(TMyParentWidget)
   Private
     FSub: TJSHTMLElement;
-  Public
+  Protected
     Function DoRenderHTML(aParent,aElement : TJSHTMLElement) :TJSHTMLElement; override;
+  Public
     Procedure DoUnRender(aParent: TJSHTMLElement); override;
     function GetContentElement: TJSHTMLELement; override;
   end;
@@ -60,8 +61,9 @@ Type
   TMyPrefixSubContentWidget = Class(TMySubContentWidget)
   Private
     FTop : TJSHTMLELement;
-  Public
+  Protected
     Function DoRenderHTML(aParent,aElement : TJSHTMLElement) :TJSHTMLElement; override;
+  Public
     Procedure DoUnRender(aParent: TJSHTMLElement); override;
     function GetTopElement: TJSHTMLELement; override;
   end;
@@ -73,6 +75,7 @@ Type
     FUL : TJSHTMLElement;
     FSubs : TJSHTMLElementArray;
     Function DoRenderHTML(aParent,aElement : TJSHTMLElement) :TJSHTMLElement; override;
+
   Public
     Property References;
     Property Subs : TJSHTMLElementArray read FSubs;
@@ -313,13 +316,251 @@ Type
     Procedure SelectMultiAfterRefresh;
   end;
 
+  TTestLoopWidget = Class(TSimpleLoopTemplateWidget);
+
+  { TTestSimpleLoopWidget }
+
+  TTestSimpleLoopWidget = class(TBaseTestWidget)
+  private
+    FMy: TTestLoopWidget;
+    procedure CheckCount(aCount: Integer; ParentEl: TJSHTmlElement=nil; aRowOffset : Integer = 0);
+    procedure DoGetValue(Sender: TObject; aValue: TLoopTemplateValue);
+    procedure DoGroupValue(Sender: TObject; aValue: TLoopTemplateValue);
+    function GetItems: TWebWidgetReferences;
+  Public
+    Procedure Setup; override;
+    Procedure TearDown; override;
+    Property MyWidget : TTestLoopWidget Read FMy;
+    Property References : TWebWidgetReferences Read GetItems;
+  Published
+//  Public
+    Procedure TestSetup;
+    Procedure TestRender;
+    Procedure TestRenderAfterMaxCount;
+    Procedure TestRenderAfterHeader;
+    Procedure TestRenderAfterFooter;
+    Procedure TestRenderAfterItem;
+    Procedure TestRenderGetValue;
+    Procedure TestRenderOneGroup;
+//  Published
+    Procedure TestRenderTwoGroups;
+  end;
+
 implementation
 
+{ TTestSimpleLoopWidget }
+
+Const
+  SSimpleHeader = '<dl>'+sLinebreak;
+  SSimpleFooter = '</dl>'+sLinebreak;
+  SSimpleItem = '<dt id="{{_row_}}">{{_row_}}</dt><dd>{{_index_}}</dd>'+sLinebreak;
+  SSimpleItem2 = '<dt id="{{_id_}}">{{_row_}}</dt><dd>{{_name_}}</dd>'+sLinebreak;
+
+
+  SSimpleDivGroupHeader = '<div id="div_{{_group_}}">'+sLinebreak;
+  SSimpleDivGroupFooter = '</div>'+sLinebreak;
+  SSimpleGroupHeader = '<dl id="grp_{{_group_}}">'+sLinebreak;
+  SSimpleGroupFooter = '</dl>'+sLinebreak;
+
+function TTestSimpleLoopWidget.GetItems: TWebWidgetReferences;
+begin
+  Result:=MyWidget.References
+end;
+
+procedure TTestSimpleLoopWidget.Setup;
+begin
+  inherited Setup;
+  FMy:=TTestLoopWidget.Create(Nil);
+  FMy.HeaderTemplate:=SSimpleHeader;
+  FMy.FooterTemplate:=SSimpleFooter;
+  FMy.ItemTemplate:=SSimpleItem;
+  FMy.ItemCount:=3;
+  FMy.ParentID:=SBaseWindowID;
+end;
+
+procedure TTestSimpleLoopWidget.TearDown;
+begin
+  FreeAndNil(FMy);
+  inherited TearDown;
+end;
+
+procedure TTestSimpleLoopWidget.TestSetup;
+begin
+  AssertNotnull('have widget',MyWidget);
+  AssertEquals('Have header template',SSimpleHeader,MyWidget.HeaderTemplate);
+  AssertEquals('Have footer template',SSimpleFooter,MyWidget.FooterTemplate);
+  AssertEquals('Have item template',SSimpleItem,MyWidget.ItemTemplate);
+end;
+
+procedure TTestSimpleLoopWidget.CheckCount(aCount: Integer; ParentEl: TJSHTmlElement; aRowOffset: Integer);
+
+Var
+  El,EL2 : TJSHTMLElement;
+  S : String;
+  I : Integer;
+
+begin
+  // Checks for /tag(id)/tag(id)
+  //Function AssertTree(dl>aParent : TJSHTmlElement; aTree : String) :TJSHTMLElement;
+  if Assigned(ParentEl) then
+    El:=AssertTree(ParentEl,'dt('+IntToStr(1+aRowOffset)+')')
+  else
+    El:=AssertTree('dl/dt('+IntToStr(1+aRowOffset)+')');
+  For I:=1 to aCount do
+    begin
+    S:=IntToStr(aRowOffset+I);
+    AssertEquals('dt text '+S,S,El.InnerText);
+    El:=TJSHTMLElement(El.nextElementSibling);
+    AssertNotNull('Have element '+S,El);
+    AssertEquals('Have dd element '+S,'dd',LowerCase(El.TagName));
+    AssertEquals('dd text '+S,IntToStr(aRowOffset+I-1),El.InnerText);
+    El:=TJSHTMLElement(El.nextElementSibling);
+    if I<>aCount then
+      begin
+      AssertNotNull('Have next DT element '+S,El);
+      AssertEquals('Have next DT element id',IntToStr(aRowOffset+I+1),El.ID);
+      end
+    else
+      AssertNull('Last element : done',el);
+    end;
+end;
+
+procedure TTestSimpleLoopWidget.DoGetValue(Sender: TObject; aValue: TLoopTemplateValue);
+begin
+  With aValue do
+    begin
+    if Name='name' then
+      Value:='Name-'+IntToStr(Index);
+    end;
+end;
+
+procedure TTestSimpleLoopWidget.DoGroupValue(Sender: TObject; aValue: TLoopTemplateValue);
+begin
+  if aValue.Name='divsplit' then
+    aValue.Value:=IntToStr(aValue.Index div 10)
+  else
+    aValue.Value:=IntToStr(aValue.Index div 3);
+//  Writeln('Calculating group ',aValue.name,' value ',aValue.Value,' from index ',aValue.Index);
+end;
+
+
+procedure TTestSimpleLoopWidget.TestRender;
+begin
+  MyWidget.Refresh;
+  CheckCount(3);
+end;
+
+procedure TTestSimpleLoopWidget.TestRenderAfterMaxCount;
+begin
+  MyWidget.Refresh;
+  MyWidget.ItemCount:=2;
+  CheckCount(2);
+end;
+
+procedure TTestSimpleLoopWidget.TestRenderAfterHeader;
+begin
+  MyWidget.Refresh;
+  MyWidget.HeaderTemplate:='<dl id="666"/>';
+  AssertTree('dl(666)');
+  CheckCount(3);
+end;
+
+procedure TTestSimpleLoopWidget.TestRenderAfterFooter;
+begin
+  MyWidget.Refresh;
+  MyWidget.FooterTemplate:='</dl><p id="me">me</p>';
+  CheckCount(3);
+  AssertTree('p(me)');
+end;
+
+procedure TTestSimpleLoopWidget.TestRenderAfterItem;
+begin
+  MyWidget.Refresh;
+  MyWidget.ItemTemplate:='<dt id="{{_index_}}">{{row}}</dt>';
+  AssertTree('dl/dt(0)');
+  AssertTree('dl/dt(1)');
+  AssertTree('dl/dt(2)');
+end;
+
+procedure TTestSimpleLoopWidget.TestRenderGetValue;
+begin
+  MyWidget.OnGetValue:=@DoGetValue;
+  MyWidget.Refresh;
+  MyWidget.ItemTemplate:='<dt id="{{name}}">{{row}}</dt>';
+  AssertTree('dl/dt(name-0)');
+  AssertTree('dl/dt(name-1)');
+  AssertTree('dl/dt(name-2)');
+end;
+
+
+procedure TTestSimpleLoopWidget.TestRenderOneGroup;
+
+Var
+  El : TJSHTMLElement;
+
+begin
+  MyWidget.ItemCount:=9;
+  MyWidget.ContainerTag:='div';
+
+  MyWidget.HeaderTemplate:='';
+  MyWidget.FooterTemplate:='';
+  MyWidget.Groups.AddGroup('split',SSimpleGroupHeader,SSimpleGroupFooter);
+  MyWidget.OnGetGroupValue:=@DoGroupValue;
+  MyWidget.Refresh;
+  el:=AssertTree('div/dl(grp_0)');
+  CheckCount(3,El,0);
+  el:=AssertTree('div/dl(grp_1)');
+  CheckCount(3,El,3);
+  el:=AssertTree('div/dl(grp_2)');
+  CheckCount(3,El,6);
+end;
+
+procedure TTestSimpleLoopWidget.TestRenderTwoGroups;
+
+Var
+  El : TJSHTMLElement;
+
+begin
+  MyWidget.ItemCount:=27;
+  MyWidget.ContainerTag:='div';
+  MyWidget.HeaderTemplate:='';
+  MyWidget.FooterTemplate:='';
+  MyWidget.Groups.AddGroup('divsplit',SSimpleDivGroupHeader,SSimpleDivGroupFooter);
+  MyWidget.Groups.AddGroup('split',SSimpleGroupHeader,SSimpleGroupFooter);
+  MyWidget.OnGetGroupValue:=@DoGroupValue;
+  MyWidget.Refresh;
+  // 0 -- 9
+  el:=AssertTree('div/div(div_0)/dl(grp_0)');
+  CheckCount(3,El,0);
+  el:=AssertTree('div/div(div_0)/dl(grp_1)');
+  CheckCount(3,El,3);
+  el:=AssertTree('div/div(div_0)/dl(grp_2)');
+  CheckCount(3,El,6);
+  el:=AssertTree('div/div(div_0)/dl(grp_3)');
+  CheckCount(1,El,9);
+  // 10-19
+  el:=AssertTree('div/div(div_1)/dl(grp_3)');
+  CheckCount(2,El,10);
+  el:=AssertTree('div/div(div_1)/dl(grp_4)');
+  CheckCount(3,El,12);
+  el:=AssertTree('div/div(div_1)/dl(grp_5)');
+  CheckCount(3,El,15);
+  el:=AssertTree('div/div(div_1)/dl(grp_6)');
+  CheckCount(2,El,18);
+  // 20-27
+  el:=AssertTree('div/div(div_2)/dl(grp_6)');
+  CheckCount(1,El,20);
+  el:=AssertTree('div/div(div_2)/dl(grp_7)');
+  CheckCount(3,El,21);
+  el:=AssertTree('div/div(div_2)/dl(grp_8)');
+  CheckCount(3,El,24);
+end;
+
 { TMyChildWidget }
 
 class function TMySimpleChildWidget.AllowChildren: Boolean;
 begin
-  Result:=FAlse;
+  Result:=False;
 end;
 
 { TMyRefWidget }
@@ -397,13 +638,16 @@ end;
 procedure TTestWebWidgetReferences.TestAdd;
 begin
   AddSet;
-  AssertEquals('Count',3,references.Count);
-  AssertEquals('0 : Name','a',references[0].name);
-  AssertEquals('0 : Selector','div',references[0].Selector);
-  AssertEquals('1 : Name','b',references[1].name);
-  AssertEquals('1 : Selector','ul',references[1].selector);
-  AssertEquals('2 : Name','c',references[2].name);
-  AssertEquals('2 : Selector','ul>li',references[2].selector);
+  With References do
+    begin
+    AssertEquals('Count',3,Count);
+    AssertEquals('0 : Name','a',Items[0].name);
+    AssertEquals('0 : Selector','div',Items[0].Selector);
+    AssertEquals('1 : Name','b',Items[1].name);
+    AssertEquals('1 : Selector','ul',Items[1].selector);
+    AssertEquals('2 : Name','c',Items[2].name);
+    AssertEquals('2 : Selector','ul>li',Items[2].selector);
+    end;
 end;
 
 procedure TTestWebWidgetReferences.TestIndexOf;
@@ -427,16 +671,16 @@ end;
 procedure TTestWebWidgetReferences.TestFind;
 begin
   AddSet;
-  AssertSame('A',References[0],References.FindReference('A'));
-  AssertSame('a',References[0],References.FindReference('a'));
+  AssertSame('A',References.Items[0],References.FindReference('A'));
+  AssertSame('a',References.Items[0],References.FindReference('a'));
   AssertNull('e',References.FindReference('E'));
 end;
 
 procedure TTestWebWidgetReferences.TestGet;
 begin
   AddSet;
-  AssertSame('A',References[0],References.GetReference('A'));
-  AssertSame('a',References[0],References.GetReference('a'));
+  AssertSame('A',References.Items[0],References.GetReference('A'));
+  AssertSame('a',References.Items[0],References.GetReference('a'));
   AssertException('Get unknown',EWidgets,@GetDRef);
 end;
 
@@ -445,9 +689,9 @@ begin
   MyWidget.References.Add('me','ul');
   AssertEquals('Ref count',1,MyWidget.References.Count);
   MyWidget.Refresh;
-  AssertEquals('count of References found',1,Length(References[0].Elements));
-  AssertSame('first array Reference filled',MyWidget.UL,References[0].Elements[0]);
-  AssertSame('Reference filled',MyWidget.UL,References[0].Element);
+  AssertEquals('count of References found',1,Length(References.Items[0].Elements));
+  AssertSame('first array Reference filled',MyWidget.UL,References.Items[0].Elements[0]);
+  AssertSame('Reference filled',MyWidget.UL,References.Items[0].Element);
 end;
 
 procedure TTestWebWidgetReferences.GetSingleByName;
@@ -455,8 +699,8 @@ begin
   MyWidget.References.Add('me','ul');
   AssertEquals('Ref count',1,MyWidget.References.Count);
   MyWidget.Refresh;
-  AssertEquals('count of References found',1,Length(References[0].Elements));
-  AssertSame('first array Reference filled',MyWidget.UL,References[0].Elements[0]);
+  AssertEquals('count of References found',1,Length(References.Items[0].Elements));
+  AssertSame('first array Reference filled',MyWidget.UL,References.Items[0].Elements[0]);
   AssertSame('Reference filled',MyWidget.UL,MyWidget.references.GetElementByName('me'));
   AssertEquals('Reference filled',1,Length(MyWidget.references.GetElementsByName('me')));
   AssertSame('Reference filled',MyWidget.UL,MyWidget.references.GetElementsByName('me')[0]);
@@ -475,8 +719,8 @@ begin
   MyWidget.References.Add('ME','ul');
   AssertEquals('Ref count',1,MyWidget.References.Count);
   MyWidget.Refresh;
-  AssertEquals('count of References found',1,Length(References[0].Elements));
-  AssertSame('first array Reference filled',MyWidget.UL,References[0].Elements[0]);
+  AssertEquals('count of References found',1,Length(References.Items[0].Elements));
+  AssertSame('first array Reference filled',MyWidget.UL,References.Items[0].Elements[0]);
   AssertSame('Reference filled',MyWidget.UL,MyWidget.references.GetElementByName('me'));
   AssertEquals('Reference filled',1,Length(MyWidget.references.GetElementsByName('me')));
   AssertSame('Reference filled',MyWidget.UL,MyWidget.references.GetElementsByName('me')[0]);
@@ -491,10 +735,10 @@ begin
   MyWidget.References.Add('me','li');
   AssertEquals('Ref count',1,MyWidget.References.Count);
   MyWidget.Refresh;
-  AssertEquals('Count of References found',10,Length(References[0].Elements));
+  AssertEquals('Count of References found',10,Length(References.Items[0].Elements));
   for I:=0 to Length(MyWidget.FSubs)-1 do
-    AssertSame('1 array Reference filled',MyWidget.Subs[I],References[0].Elements[i]);
-  AssertSame('first Reference filled',MyWidget.Subs[0],References[0].Element);
+    AssertSame('1 array Reference filled',MyWidget.Subs[I],References.Items[0].Elements[i]);
+  AssertSame('first Reference filled',MyWidget.Subs[0],References.Items[0].Element);
 end;
 
 procedure TTestWebWidgetReferences.GetMultiByName;
@@ -530,9 +774,9 @@ begin
   MyWidget.Refresh;
   MyWidget.References.Add('me','ul');
   AssertEquals('Ref count',1,MyWidget.References.Count);
-  AssertEquals('count of References found',1,Length(References[0].Elements));
-  AssertSame('first array Reference filled',MyWidget.UL,References[0].Elements[0]);
-  AssertSame('Reference filled',MyWidget.UL,References[0].Element);
+  AssertEquals('count of References found',1,Length(References.Items[0].Elements));
+  AssertSame('first array Reference filled',MyWidget.UL,References.Items[0].Elements[0]);
+  AssertSame('Reference filled',MyWidget.UL,References.Items[0].Element);
 end;
 
 procedure TTestWebWidgetReferences.SelectMultiAfterRefresh;
@@ -543,10 +787,10 @@ begin
   MyWidget.Refresh;
   MyWidget.References.Add('me','li');
   AssertEquals('Ref count',1,MyWidget.References.Count);
-  AssertEquals('Count of References found',10,Length(References[0].Elements));
+  AssertEquals('Count of References found',10,Length(References.Items[0].Elements));
   for I:=0 to Length(MyWidget.FSubs)-1 do
-    AssertSame('1 array Reference filled',MyWidget.Subs[I],References[0].Elements[i]);
-  AssertSame('first Reference filled',MyWidget.Subs[0],References[0].Element);
+    AssertSame('1 array Reference filled',MyWidget.Subs[I],References.Items[0].Elements[i]);
+  AssertSame('first Reference filled',MyWidget.Subs[0],References.Items[0].Element);
 end;
 
 { TTestWebWidgetStyles }
@@ -1960,6 +2204,6 @@ begin
 end;
 
 initialization
-  RegisterTests([TTestWidgetBasicOperations,TTestWebWidgetStyles,TTestWebWidgetReferences]);
+  RegisterTests([TTestWidgetBasicOperations,TTestWebWidgetStyles,TTestWebWidgetReferences,TTestSimpleLoopWidget]);
 end.