lazarus/test/lcltests/testpreferredsize.pas
mattias c39c47fd60 test: added codetools tests
git-svn-id: trunk@29294 -
2011-02-01 17:38:52 +00:00

315 lines
13 KiB
ObjectPascal

{
Test that empty ScrollBox with AutoScroll shows no scrollbars:
./runtests --format=plain --suite=TestScrollBoxEmpty
Test that ScrollBox with AutoScroll shows/hides scrollbars:
./runtests --format=plain --suite=TestScrollBoxAutoShowHideScrollbars
Test that ScrollBox with AutoScroll computes correct Visible and Range.
./runtests --format=plain --suite=TestScrollBoxRange
}
unit TestPreferredSize;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LCLProc, Forms, Controls, StdCtrls, ExtCtrls, fpcunit,
WSControls, testglobals;
type
{ TTestPreferredSize }
TTestPreferredSize = class(TTestCase)
published
procedure TestGroupBoxPreferredSize1;
procedure TestScrollBoxEmpty;
procedure TestScrollBoxAutoShowHideScrollbars;
procedure TestScrollBoxRange;
end;
implementation
{ TTestPreferredSize }
procedure TTestPreferredSize.TestGroupBoxPreferredSize1;
var
Form1: TForm;
GroupBox1: TGroupBox;
w1: integer;
h1: integer;
w2: Integer;
h2: Integer;
begin
// create a groupbox on a form
Form1:=TForm.Create(nil);
Form1.SetBounds(100,100,300,300);
GroupBox1:=TGroupBox.Create(Form1);
GroupBox1.SetBounds(10,10,100,100);
GroupBox1.Parent:=Form1;
GroupBox1.Caption:='GroupBox1';
Form1.Show;
Application.ProcessMessages;
// get the preferredsize of the groupbox with a size of 100x100
w1:=0;
h1:=0;
GroupBox1.GetPreferredSize(w1,h1,true,false);
//writeln('TTestPreferredSize.TestGroupBox1 ',w1,',',h1);
// get the preferredsize of the groupbox with a size of 10x100
GroupBox1.Width:=10;
w2:=0;
h2:=0;
GroupBox1.GetPreferredSize(w2,h2,true,false);
//writeln('TTestPreferredSize.TestGroupBox1 ',w2,',',h2);
// the preferredsize must be independent of the the current width,height
AssertEquals('TGroupBox.PreferredSize changed after SetBounds: ',true,(w1=w2) and (h1=h2));
Form1.Free;
Application.ProcessMessages;
end;
procedure TTestPreferredSize.TestScrollBoxEmpty;
var
Form1: TForm;
ScrollBox1: TScrollBox;
begin
// create an empty scrollbox with AutoScroll=true on a form
Form1:=TForm.Create(nil);
Form1.SetBounds(100,100,300,300);
ScrollBox1:=TScrollBox.Create(Form1);
ScrollBox1.SetBounds(10,10,100,100);
ScrollBox1.AutoScroll:=true;
ScrollBox1.Parent:=Form1;
Form1.Show;
Application.ProcessMessages;
AssertEquals('TScrollBox: Empty, AutoScroll=true, but HorzScrollBar.IsScrollBarVisible is true',false,ScrollBox1.HorzScrollBar.IsScrollBarVisible);
AssertEquals('TScrollBox: Empty, AutoScroll=true, but VertScrollBar.IsScrollBarVisible is true',false,ScrollBox1.VertScrollBar.IsScrollBarVisible);
Form1.Free;
Application.ProcessMessages;
end;
procedure TTestPreferredSize.TestScrollBoxAutoShowHideScrollbars;
var
Form1: TForm;
ScrollBox1: TScrollBox;
Panel1: TPanel;
IntfPreferredWidth: integer;
IntfPreferredHeight: integer;
MaxPrefWidth: Integer;
MaxPrefHeight: Integer;
begin
// create a scrollbox with AutoScroll=true on a form and put a small panel into the box
Form1:=TForm.Create(nil);
Form1.SetBounds(100,100,300,300);
ScrollBox1:=TScrollBox.Create(Form1);
ScrollBox1.SetBounds(10,10,100,100);
ScrollBox1.AutoScroll:=true;
ScrollBox1.Parent:=Form1;
Panel1:=TPanel.Create(Form1);
Panel1.Caption:='Panel1';
Panel1.SetBounds(0,0,60,50);
Panel1.Constraints.MinWidth:=10;
Panel1.Constraints.MinHeight:=10;
Panel1.Parent:=ScrollBox1;
Form1.Show;
Application.ProcessMessages;
IntfPreferredWidth:=0;
IntfPreferredHeight:=0;
TWSWinControlClass(ScrollBox1.WidgetSetClass).GetPreferredSize(ScrollBox1,
IntfPreferredWidth, IntfPreferredHeight, false);
MaxPrefWidth:=ScrollBox1.Width-ScrollBox1.ClientWidth;
MaxPrefHeight:=ScrollBox1.Width-ScrollBox1.ClientWidth;
AssertEquals('ScrollBox must have small interface preferred width',true,
IntfPreferredWidth<=MaxPrefWidth);
AssertEquals('ScrollBox must have small interface preferred height',true,
IntfPreferredHeight<=MaxPrefHeight);
//writeln('TTestPreferredSize.TestScrollBoxOneChildPanel Range=',ScrollBox1.HorzScrollBar.Range,' ',ScrollBox1.HorzScrollBar.Page,' ',ScrollBox1.HorzScrollBar.Visible);
AssertEquals('ScrollBox1.HorzScrollBar.Range should be the needed Right of all childs 60',
60,ScrollBox1.HorzScrollBar.Range);
AssertEquals('ScrollBox1.VertScrollBar.Range should be the needed Bottom of all childs 50',
50,ScrollBox1.VertScrollBar.Range);
AssertEquals('ScrollBox shows HorzScrollBar for empty box',false,
ScrollBox1.HorzScrollBar.IsScrollBarVisible);
AssertEquals('ScrollBox shows VertScrollBar for empty box',false,
ScrollBox1.VertScrollBar.IsScrollBarVisible);
// now enlarge the panel, so that a HorzScrollBar is needed
Panel1.Width:=150;
Application.ProcessMessages;
AssertEquals('ScrollBox1.HorzScrollBar.Range should be the needed Right of all childs 150',
150,ScrollBox1.HorzScrollBar.Range);
AssertEquals('ScrollBox1.VertScrollBar.Range should be the needed Bottom of all childs 50',
50,ScrollBox1.VertScrollBar.Range);
AssertEquals('ScrollBox must show HorzScrollBar for oversized panel',true,
ScrollBox1.HorzScrollBar.IsScrollBarVisible);
AssertEquals('ScrollBox shows VertScrollBar for small panel',false,
ScrollBox1.VertScrollBar.IsScrollBarVisible);
// now Align the panel, so that the panel fills the whole client area
// no scrollbars should be visible
Panel1.Align:=alClient;
Application.ProcessMessages;
//writeln('TTestPreferredSize.TestScrollBoxOneChildPanel Panel1.BoundsRect=',dbgs(Panel1.BoundsRect),' ScrollBox1.ClientRect=',dbgs(ScrollBox1.ClientRect));
AssertEquals('Panel1.Align=alClient, Panel1.Left should be 0',0,Panel1.Left);
AssertEquals('Panel1.Align=alClient, Panel1.Top should be 0',0,Panel1.Top);
AssertEquals('Panel1.Align=alClient, Panel1.Right should be ScrollBox1.ClientWidth',
ScrollBox1.ClientWidth,Panel1.Left+Panel1.Width);
AssertEquals('Panel1.Align=alClient, Panel1.Bottom should be ScrollBox1.ClientHeight',
ScrollBox1.ClientHeight,Panel1.Top+Panel1.Height);
AssertEquals('ScrollBox shows HorzScrollBar for fitting panel',false,
ScrollBox1.HorzScrollBar.IsScrollBarVisible);
AssertEquals('ScrollBox shows VertScrollBar for fitting panel',false,
ScrollBox1.VertScrollBar.IsScrollBarVisible);
AssertEquals('ScrollBox1.HorzScrollBar.Range should be the needed Right of all childs',
Panel1.Constraints.MinWidth,ScrollBox1.HorzScrollBar.Range);
AssertEquals('ScrollBox1.VertScrollBar.Range should be the needed Bottom of all childs',
Panel1.Constraints.MinHeight,ScrollBox1.VertScrollBar.Range);
Form1.Free;
Application.ProcessMessages;
end;
procedure TTestPreferredSize.TestScrollBoxRange;
var
Form1: TForm;
ScrollBox1: TScrollBox;
IntfPreferredWidth: Integer;
IntfPreferredHeight: Integer;
MaxPrefWidth: Integer;
MaxPrefHeight: Integer;
Panel1: TPanel;
begin
// create an empty scrollbox on a form
Form1:=TForm.Create(nil);
Form1.SetBounds(100,100,300,250);
ScrollBox1:=TScrollBox.Create(Form1);
ScrollBox1.SetBounds(10,10,150,100);
ScrollBox1.AutoScroll:=true;
ScrollBox1.Parent:=Form1;
Form1.Show;
Application.ProcessMessages;
AssertEquals('TScrollBox: Empty, AutoScroll=true, but HorzScrollBar.Range<>0',
0,ScrollBox1.HorzScrollBar.Range);
AssertEquals('TScrollBox: Empty, AutoScroll=true, but VertScrollBar.Range<>0',
0,ScrollBox1.VertScrollBar.Range);
AssertEquals('TScrollBox: Empty, AutoScroll=true, but HorzScrollBar.Position<>0',
0,ScrollBox1.HorzScrollBar.Position);
AssertEquals('TScrollBox: Empty, AutoScroll=true, but VertScrollBar.Position<>0',
0,ScrollBox1.VertScrollBar.Position);
AssertEquals('TScrollBox: Empty, AutoScroll=true, but HorzScrollBar.Page<>ClientWidth',
ScrollBox1.ClientWidth,ScrollBox1.HorzScrollBar.Page);
AssertEquals('TScrollBox: Empty, AutoScroll=true, but VertScrollBar.Page<>ClientHeight',
ScrollBox1.ClientHeight,ScrollBox1.VertScrollBar.Page);
// now add a panel
Panel1:=TPanel.Create(Form1);
Panel1.Caption:='Panel1';
Panel1.SetBounds(0,0,60,50);
Panel1.Constraints.MinWidth:=10;
Panel1.Constraints.MinHeight:=10;
Panel1.Parent:=ScrollBox1;
Application.ProcessMessages;
IntfPreferredWidth:=0;
IntfPreferredHeight:=0;
TWSWinControlClass(ScrollBox1.WidgetSetClass).GetPreferredSize(ScrollBox1,
IntfPreferredWidth, IntfPreferredHeight, false);
MaxPrefWidth:=ScrollBox1.Width-ScrollBox1.ClientWidth;
MaxPrefHeight:=ScrollBox1.Width-ScrollBox1.ClientWidth;
AssertEquals('ScrollBox must have small interface preferred width',true,
IntfPreferredWidth<=MaxPrefWidth);
AssertEquals('ScrollBox must have small interface preferred height',true,
IntfPreferredHeight<=MaxPrefHeight);
//writeln('TTestPreferredSize.TestScrollBoxOneChildPanel Range=',ScrollBox1.HorzScrollBar.Range,' ',ScrollBox1.HorzScrollBar.Page,' ',ScrollBox1.HorzScrollBar.Visible);
AssertEquals('ScrollBox1.HorzScrollBar.Range should be the needed Right of all childs 60',
60,ScrollBox1.HorzScrollBar.Range);
AssertEquals('ScrollBox1.VertScrollBar.Range should be the needed Bottom of all childs 50',
50,ScrollBox1.VertScrollBar.Range);
AssertEquals('TScrollBox: small panel, HorzScrollBar.Position<>0',
0,ScrollBox1.HorzScrollBar.Position);
AssertEquals('TScrollBox: small panel, VertScrollBar.Position<>0',
0,ScrollBox1.VertScrollBar.Position);
AssertEquals('TScrollBox: small panel, HorzScrollBar.Page<>ClientWidth',
ScrollBox1.ClientWidth,ScrollBox1.HorzScrollBar.Page);
AssertEquals('TScrollBox: small panel, VertScrollBar.Page<>ClientHeight',
ScrollBox1.ClientHeight,ScrollBox1.VertScrollBar.Page);
// now enlarge the panel, so that a HorzScrollBar is needed
Panel1.Width:=200;
Application.ProcessMessages;
with ScrollBox1.HorzScrollBar do begin
writeln('TTestPreferredSize.TestScrollBoxRange Horz: Visible=',Visible,
' HandleVisible=',IsScrollBarVisible,
' Range=',Range,' Position=',Position,' Page=',Page,
' ClientWidth=',ScrollBox1.ClientWidth);
end;
AssertEquals('ScrollBox1.HorzScrollBar.Range should be the needed Right of all childs 200',
200,ScrollBox1.HorzScrollBar.Range);
AssertEquals('ScrollBox1.VertScrollBar.Range should be the needed Bottom of all childs 50',
50,ScrollBox1.VertScrollBar.Range);
AssertEquals('ScrollBox must show HorzScrollBar for oversized panel',
true,ScrollBox1.HorzScrollBar.IsScrollBarVisible);
AssertEquals('TScrollBox: HorzScrollBar.Position<>0',
0,ScrollBox1.HorzScrollBar.Position);
AssertEquals('TScrollBox: VertScrollBar.Position<>0',
0,ScrollBox1.VertScrollBar.Position);
AssertEquals('TScrollBox: HorzScrollBar.Page<>ClientWidth',
ScrollBox1.ClientWidth,ScrollBox1.HorzScrollBar.Page);
AssertEquals('TScrollBox: VertScrollBar.Page<>ClientHeight',
ScrollBox1.ClientHeight,ScrollBox1.VertScrollBar.Page);
// now Align the panel, so that the panel fills the whole client area
Panel1.Align:=alClient;
Application.ProcessMessages;
AssertEquals('ScrollBox1.HorzScrollBar.Range should be the needed Right of all childs 200',
200,ScrollBox1.HorzScrollBar.Range);
AssertEquals('ScrollBox1.VertScrollBar.Range should be the needed Bottom of all childs 50',
50,ScrollBox1.VertScrollBar.Range);
AssertEquals('TScrollBox: HorzScrollBar.Position<>0',
0,ScrollBox1.HorzScrollBar.Position);
AssertEquals('TScrollBox: VertScrollBar.Position<>0',
0,ScrollBox1.VertScrollBar.Position);
AssertEquals('TScrollBox: HorzScrollBar.Page<>ClientWidth',
ScrollBox1.ClientWidth,ScrollBox1.HorzScrollBar.Page);
AssertEquals('TScrollBox: VertScrollBar.Page<>ClientHeight',
ScrollBox1.ClientHeight,ScrollBox1.VertScrollBar.Page);
// check range
AssertEquals('ScrollBox1.HorzScrollBar.Range should be the needed Right of all childs',
Panel1.Left+Panel1.Width,ScrollBox1.HorzScrollBar.Range);
AssertEquals('ScrollBox1.VertScrollBar.Range should be the needed Bottom of all childs',
Panel1.Top+Panel1.Height,ScrollBox1.VertScrollBar.Range);
// Panel should fill the ClientRect
AssertEquals('Panel1.Align=alClient but Panel1.Width<>ScrollBox1.ClientWidth',
Panel1.Width,ScrollBox1.ClientWidth);
AssertEquals('Panel1.Align=alClient but Panel1.Height<>ScrollBox1.ClientHeight',
Panel1.Height,ScrollBox1.ClientHeight);
Form1.Free;
Application.ProcessMessages;
end;
initialization
AddToLCLTestSuite(TTestPreferredSize);
end.