Browse Source

* Fix failing test

git-svn-id: trunk@37362 -
michael 7 years ago
parent
commit
96aa33cfd9

+ 33 - 18
packages/fcl-report/src/fpreport.pp

@@ -798,6 +798,7 @@ type
     procedure RecalcLayout; override;
     procedure RecalcLayout; override;
     procedure CalcPrintPosition; virtual;
     procedure CalcPrintPosition; virtual;
     function  PrepareObject(aRTParent: TFPReportElement): TFPReportElement; override;
     function  PrepareObject(aRTParent: TFPReportElement): TFPReportElement; override;
+    procedure PrepareObjects(aRTParent: TFPReportElement); override;
     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
     procedure DoWriteLocalProperties(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil); override;
     procedure DoWriteLocalProperties(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil); override;
   public
   public
@@ -885,6 +886,7 @@ type
     Class Function ReportBandType : TFPReportBandType; virtual;
     Class Function ReportBandType : TFPReportBandType; virtual;
     procedure   WriteElement(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil); override;
     procedure   WriteElement(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil); override;
     procedure   ReadElement(AReader: TFPReportStreamer); override;
     procedure   ReadElement(AReader: TFPReportStreamer); override;
+    property Page : TFPReportCustomPage read GetReportPage;
   end;
   end;
   TFPReportCustomBandClass = Class of TFPReportCustomBand;
   TFPReportCustomBandClass = Class of TFPReportCustomBand;
 
 
@@ -1416,6 +1418,7 @@ type
     FPerDesignerPageCount: array of UInt32;
     FPerDesignerPageCount: array of UInt32;
     FUsePageCountMarker: Boolean;
     FUsePageCountMarker: Boolean;
     FVariables : TFPReportVariables;
     FVariables : TFPReportVariables;
+    FDataAdded : TFPList;
     function GetPage(AIndex: integer): TFPReportCustomPage;
     function GetPage(AIndex: integer): TFPReportCustomPage;
     function GetPageCount: integer; { this is designer page count }
     function GetPageCount: integer; { this is designer page count }
     function GetRenderedPageCount: integer;
     function GetRenderedPageCount: integer;
@@ -6494,6 +6497,12 @@ begin
   Result := TFPReportCustomPage.Create(nil);
   Result := TFPReportCustomPage.Create(nil);
   Result.Assign(self);
   Result.Assign(self);
   Result.CreateRTLayout;
   Result.CreateRTLayout;
+  PrepareObjects(aRTParent);
+end;
+
+procedure TFPReportCustomPage.PrepareObjects(aRTParent: TFPReportElement);
+begin
+  // inherited PrepareObjects(aRTParent);
 end;
 end;
 
 
 procedure TFPReportCustomPage.MarginsChanged;
 procedure TFPReportCustomPage.MarginsChanged;
@@ -7025,12 +7034,14 @@ begin
   FBands:=Nil;
   FBands:=Nil;
   L:=CreateLayouter;
   L:=CreateLayouter;
   try
   try
+    FDataAdded:=TFPList.Create;
     FBands:=TBandList.Create;
     FBands:=TBandList.Create;
     SetLength(FPerDesignerPageCount, PageCount);
     SetLength(FPerDesignerPageCount, PageCount);
     L.Execute(Self);
     L.Execute(Self);
   finally
   finally
     SetLength(FPerDesignerPageCount, 0);
     SetLength(FPerDesignerPageCount, 0);
-    Fbands.Free;
+    FreeAndNil(FDataAdded);
+    FreeAndNil(Fbands);
     L.Free;
     L.Free;
   end;
   end;
 end;
 end;
@@ -7126,25 +7137,29 @@ begin
   F:='';
   F:='';
   For I:=0 to FExpr.Identifiers.Count-1 do
   For I:=0 to FExpr.Identifiers.Count-1 do
     f:=f+FExpr.Identifiers[i].Name+'; ';
     f:=f+FExpr.Identifiers[i].Name+'; ';
-  for i := 0 to AData.DataFields.Count-1 do
-  begin
-    d := AData.Name;
-    f := AData.DataFields[i].FieldName;
-    r := ReportKindToResultType(AData.DataFields[i].FieldKind);
-    if d <> '' then
-      begin
-      {$ifdef gdebug}
-      writeln('registering (dotted name)... '+ d+'.'+f);
-      {$endif}
-      FExpr.Identifiers.AddVariable(d+'.'+f, r, @DoGetExpressionVariableValue);
-      end
-    else
+  if FDataAdded.IndexOf(AData)=-1 then
+    begin
+    for i := 0 to AData.DataFields.Count-1 do
       begin
       begin
-      {$ifdef gdebug}
-      writeln('registering... '+ f);
-      {$endif}
-      FExpr.Identifiers.AddVariable(f, r, @DoGetExpressionVariableValue);
+      d := AData.Name;
+      f := AData.DataFields[i].FieldName;
+      r := ReportKindToResultType(AData.DataFields[i].FieldKind);
+      if d <> '' then
+        begin
+        {$ifdef gdebug}
+        writeln('registering (dotted name)... '+ d+'.'+f);
+        {$endif}
+        FExpr.Identifiers.AddVariable(d+'.'+f, r, @DoGetExpressionVariableValue);
+        end
+      else
+        begin
+        {$ifdef gdebug}
+        writeln('registering... '+ f);
+        {$endif}
+        FExpr.Identifiers.AddVariable(f, r, @DoGetExpressionVariableValue);
+        end;
       end;
       end;
+  FDataAdded.Add(AData);
   end;
   end;
   if APage.Data = AData then
   if APage.Data = AData then
   begin
   begin

+ 18 - 15
packages/fcl-report/test/tcbasereport.pp

@@ -64,7 +64,7 @@ type
     FPrepareObjectsCalled: integer;
     FPrepareObjectsCalled: integer;
     procedure SetupPage;
     procedure SetupPage;
   protected
   protected
-    procedure PrepareObjects; override;
+    procedure PrepareObjects(aRTParent: TFPReportElement); override;
   public
   public
     constructor Create(AOwner: TComponent); override;
     constructor Create(AOwner: TComponent); override;
     procedure ResetChanged;
     procedure ResetChanged;
@@ -77,7 +77,7 @@ type
   private
   private
     FPrepareObjectsCalled: integer;
     FPrepareObjectsCalled: integer;
   protected
   protected
-    procedure PrepareObjects; override;
+    procedure PrepareObjects(aRTParent: TFPReportElement); override;
   public
   public
     constructor Create(AOwner: TComponent); override;
     constructor Create(AOwner: TComponent); override;
   end;
   end;
@@ -87,7 +87,7 @@ type
   private
   private
     FPrepareObjectsCalled: integer;
     FPrepareObjectsCalled: integer;
   protected
   protected
-    procedure PrepareObjects; override;
+    procedure PrepareObjects(aRTParent: TFPReportElement); override;
   public
   public
     constructor Create(AOwner: TComponent); override;
     constructor Create(AOwner: TComponent); override;
   end;
   end;
@@ -1983,10 +1983,11 @@ begin
   Margins.Bottom := 20;
   Margins.Bottom := 20;
 end;
 end;
 
 
-procedure TMyFPReportPage.PrepareObjects;
+procedure TMyFPReportPage.PrepareObjects(aRTParent: TFPReportElement);
+
 begin
 begin
   Inc(FPrepareObjectsCalled);
   Inc(FPrepareObjectsCalled);
-  inherited PrepareObjects;
+  inherited PrepareObjects(aRTParent);
 end;
 end;
 
 
 constructor TMyFPReportPage.Create(AOwner: TComponent);
 constructor TMyFPReportPage.Create(AOwner: TComponent);
@@ -2008,10 +2009,11 @@ end;
 
 
 { TMyReportTitleBand }
 { TMyReportTitleBand }
 
 
-procedure TMyReportTitleBand.PrepareObjects;
+procedure TMyReportTitleBand.PrepareObjects(aRTParent: TFPReportElement);
+
 begin
 begin
   Inc(FPrepareObjectsCalled);
   Inc(FPrepareObjectsCalled);
-  inherited PrepareObjects;
+  inherited PrepareObjects(aRTParent);
 end;
 end;
 
 
 constructor TMyReportTitleBand.Create(AOwner: TComponent);
 constructor TMyReportTitleBand.Create(AOwner: TComponent);
@@ -2022,10 +2024,11 @@ end;
 
 
 { TMyDataBand }
 { TMyDataBand }
 
 
-procedure TMyDataBand.PrepareObjects;
+procedure TMyDataBand.PrepareObjects(aRTParent: TFPReportElement);
+
 begin
 begin
   Inc(FPrepareObjectsCalled);
   Inc(FPrepareObjectsCalled);
-  inherited PrepareObjects;
+  inherited PrepareObjects(aRTParent);
 end;
 end;
 
 
 constructor TMyDataBand.Create(AOwner: TComponent);
 constructor TMyDataBand.Create(AOwner: TComponent);
@@ -2801,14 +2804,14 @@ begin
   p.Name := 'Page3';
   p.Name := 'Page3';
   p.Data := Data;
   p.Data := Data;
 
 
-  AssertEquals('Failed on 1', TMyFPReportPage(Report.Pages[0]).FPrepareObjectsCalled, 0);
-  AssertEquals('Failed on 2', TMyFPReportPage(Report.Pages[1]).FPrepareObjectsCalled, 0);
-  AssertEquals('Failed on 3', TMyFPReportPage(Report.Pages[2]).FPrepareObjectsCalled, 0);
+  AssertEquals('Failed on 1', 0, TMyFPReportPage(Report.Pages[0]).FPrepareObjectsCalled);
+  AssertEquals('Failed on 2', 0, TMyFPReportPage(Report.Pages[1]).FPrepareObjectsCalled);
+  AssertEquals('Failed on 3', 0, TMyFPReportPage(Report.Pages[2]).FPrepareObjectsCalled);
 
 
   Report.RunReport;
   Report.RunReport;
-  AssertEquals('Failed on 4', TMyFPReportPage(Report.Pages[0]).FPrepareObjectsCalled, 1);
-  AssertEquals('Failed on 5', TMyFPReportPage(Report.Pages[1]).FPrepareObjectsCalled, 1);
-  AssertEquals('Failed on 6', TMyFPReportPage(Report.Pages[2]).FPrepareObjectsCalled, 1);
+  AssertEquals('Failed on 4', 1, TMyFPReportPage(Report.Pages[0]).FPrepareObjectsCalled);
+  AssertEquals('Failed on 5', 1, TMyFPReportPage(Report.Pages[1]).FPrepareObjectsCalled);
+  AssertEquals('Failed on 6', 1, TMyFPReportPage(Report.Pages[2]).FPrepareObjectsCalled);
 end;
 end;
 
 
 procedure TTestCustomReport.TestBandPrepareObjects;
 procedure TTestCustomReport.TestBandPrepareObjects;

+ 4 - 9
packages/fcl-report/test/testfpreport.lpi

@@ -32,19 +32,14 @@
     <RunParams>
     <RunParams>
       <local>
       <local>
         <FormatVersion Value="1"/>
         <FormatVersion Value="1"/>
+        <CommandLineParams Value="--suite=TTestCustomReport.TestPagePrepareObjects"/>
         <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
         <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
       </local>
       </local>
     </RunParams>
     </RunParams>
-    <RequiredPackages Count="3">
+    <RequiredPackages Count="1">
       <Item1>
       <Item1>
-        <PackageName Value="fclreport"/>
-      </Item1>
-      <Item2>
-        <PackageName Value="FPCUnitConsoleRunner"/>
-      </Item2>
-      <Item3>
         <PackageName Value="FCL"/>
         <PackageName Value="FCL"/>
-      </Item3>
+      </Item1>
     </RequiredPackages>
     </RequiredPackages>
     <Units Count="5">
     <Units Count="5">
       <Unit0>
       <Unit0>
@@ -75,7 +70,7 @@
       <Filename Value="testfpreport"/>
       <Filename Value="testfpreport"/>
     </Target>
     </Target>
     <SearchPaths>
     <SearchPaths>
-      <OtherUnitFiles Value="$(fptest)/src;$(fptest)/3rdparty/epiktimer"/>
+      <OtherUnitFiles Value="../src"/>
       <UnitOutputDirectory Value="units"/>
       <UnitOutputDirectory Value="units"/>
     </SearchPaths>
     </SearchPaths>
     <Parsing>
     <Parsing>