123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- unit TCFlexLayout;
- {$mode ObjFPC}{$H+}
- interface
- uses
- Classes, SysUtils, testregistry, TCFresnelCSS, Fresnel.Controls, Fresnel.DOM;
- type
- { TTestFlexLayout }
- TTestFlexLayout = class(TCustomTestFresnelCSS)
- published
- procedure TestFlexLayout_Empty;
- procedure TestFlexLayout_Empty_FlexInline;
- procedure TestFlexLayout_Row_OneItem;
- procedure TestFlexLayout_Row_OneItem_NoGrow;
- procedure TestFlexLayout_Row_OneItem_Grow;
- procedure TestFlexLayout_Row_OneItem_Shrink;
- procedure TestFlexLayout_Row_TwoItems_Grow;
- procedure TestFlexLayout_Row_TwoItems_JustifyCenter;
- // todo: test flex-direction:row, flex-wrap:nowrap
- // todo: test flex-direction:row-reverse, flex-wrap:nowrap
- // todo: test flex-direction:row, flex-wrap:wrap
- // todo: test flex-direction:row-reverse, flex-wrap:wrap
- // todo: test flex-direction:row, flex-wrap:wrap-reverse
- // todo: test flex-direction:row-reverse, flex-wrap:wrap-reverse
- // todo: test flex-direction:column, flex-wrap:nowrap
- // todo: test flex-direction:column-reverse, flex-wrap:nowrap
- // todo: test flex-direction:column, flex-wrap:wrap
- // todo: test flex-direction:column-reverse, flex-wrap:wrap
- // todo: test flex-direction:column, flex-wrap:wrap-reverse
- // todo: test flex-direction:column-reverse, flex-wrap:wrap-reverse
- // todo: test child visibility:collapse
- // todo: test child visibility:hidden
- // todo: test child position:relative
- // todo: test child position:absolute
- // todo: test child position:fixed
- // todo: test child position:sticky
- // todo: test justify-content: left, right, start, end, flex-start, flex-end, center, space-around, space-between, space-evenly
- // todo: test align-items: stretch, normal, left, right, start, end, flex-start, flex-end, center, baseline, first baseline, last baseline
- // todo: test column-gap, row-gap
- // todo: test padding-left,right,top,bottom percentage uses container's width
- // todo: test margin-left,right,top,bottom percentage uses container's width
- end;
- implementation
- { TTestFlexLayout }
- procedure TTestFlexLayout.TestFlexLayout_Empty;
- var
- FlexDiv: TDiv;
- begin
- FlexDiv:=TDiv.Create(Viewport);
- FlexDiv.Name:='FlexDiv';
- FlexDiv.Parent:=Viewport;
- Viewport.Stylesheet.Text:=LinesToStr([
- '#FlexDiv { width: 100px; height: 100px; display: flex; }'
- ]);
- Viewport.Draw;
- AssertEquals('FlexDiv.Rendered',true,FlexDiv.Rendered);
- AssertEquals('FlexDiv.GetComputedString(fcaWidth)','100px',FlexDiv.GetComputedString(fcaWidth));
- AssertEquals('FlexDiv.GetComputedString(fcaDisplay)','flex',FlexDiv.GetComputedString(fcaDisplay));
- AssertEquals('FlexDiv.ComputedDisplayInside',CSSRegistry.Keywords[CSSRegistry.kwFlex],CSSRegistry.Keywords[FlexDiv.ComputedDisplayInside]);
- AssertEquals('FlexDiv.ComputedDisplayOutside',CSSRegistry.Keywords[CSSRegistry.kwBlock],CSSRegistry.Keywords[FlexDiv.ComputedDisplayOutside]);
- end;
- procedure TTestFlexLayout.TestFlexLayout_Empty_FlexInline;
- var
- FlexDiv: TDiv;
- begin
- FlexDiv:=TDiv.Create(Viewport);
- FlexDiv.Name:='FlexDiv';
- FlexDiv.Parent:=Viewport;
- Viewport.Stylesheet.Text:=LinesToStr([
- '#FlexDiv { width: 100px; height: 100px; display: inline flex; }'
- ]);
- Viewport.Draw;
- AssertEquals('FlexDiv.Rendered',true,FlexDiv.Rendered);
- AssertEquals('FlexDiv.GetComputedString(fcaWidth)','100px',FlexDiv.GetComputedString(fcaWidth));
- AssertEquals('FlexDiv.GetComputedString(fcaDisplay)','inline flex',FlexDiv.GetComputedString(fcaDisplay));
- AssertEquals('FlexDiv.ComputedDisplayInside',CSSRegistry.Keywords[CSSRegistry.kwFlex],CSSRegistry.Keywords[FlexDiv.ComputedDisplayInside]);
- AssertEquals('FlexDiv.ComputedDisplayOutside',CSSRegistry.Keywords[CSSRegistry.kwInline],CSSRegistry.Keywords[FlexDiv.ComputedDisplayOutside]);
- end;
- procedure TTestFlexLayout.TestFlexLayout_Row_OneItem;
- var
- FlexDiv, Div1: TDiv;
- Body: TBody;
- begin
- Body:=TBody.Create(Viewport);
- Body.Name:='Body';
- Body.Parent:=Viewport;
- FlexDiv:=TDiv.Create(Viewport);
- FlexDiv.Name:='FlexDiv';
- FlexDiv.Parent:=Body;
- Div1:=TDiv.Create(Viewport);
- Div1.Name:='Div1';
- Div1.Parent:=FlexDiv;
- Viewport.Stylesheet.Text:=LinesToStr([
- 'body { margin: 0; }',
- '#FlexDiv { display: flex; }',
- '#Div1 { width: 30px; height: 20px; }'
- ]);
- Viewport.Draw;
- AssertEquals('FlexDiv.Rendered',true,FlexDiv.Rendered);
- AssertEquals('FlexDiv.GetComputedString(fcaDisplay)','flex',FlexDiv.GetComputedString(fcaDisplay));
- AssertEquals('Div1.UsedContentBox.Left',0,Div1.UsedContentBox.Left);
- AssertEquals('Div1.UsedContentBox.Top',0,Div1.UsedContentBox.Top);
- AssertEquals('Div1.UsedContentBox.Width',30,Div1.UsedContentBox.Width);
- AssertEquals('Div1.UsedContentBox.Height',20,Div1.UsedContentBox.Height);
- AssertEquals('FlexDiv.UsedContentBox.Left',0,FlexDiv.UsedContentBox.Left);
- AssertEquals('FlexDiv.UsedContentBox.Top',0,FlexDiv.UsedContentBox.Top);
- AssertEquals('FlexDiv.UsedContentBox.Width',800,FlexDiv.UsedContentBox.Width);
- AssertEquals('FlexDiv.UsedContentBox.Height',20,FlexDiv.UsedContentBox.Height);
- end;
- procedure TTestFlexLayout.TestFlexLayout_Row_OneItem_NoGrow;
- var
- FlexDiv, Div1: TDiv;
- Body: TBody;
- begin
- Body:=TBody.Create(Viewport);
- Body.Name:='Body';
- Body.Parent:=Viewport;
- FlexDiv:=TDiv.Create(Viewport);
- FlexDiv.Name:='FlexDiv';
- FlexDiv.Parent:=Body;
- Div1:=TDiv.Create(Viewport);
- Div1.Name:='Div1';
- Div1.Parent:=FlexDiv;
- Viewport.Stylesheet.Text:=LinesToStr([
- 'body { margin: 0; }',
- '#FlexDiv { display: flex; width: 200px; }',
- '#Div1 { width: 30px; height: 20px; }'
- ]);
- Viewport.Draw;
- AssertEquals('FlexDiv.Rendered',true,FlexDiv.Rendered);
- AssertEquals('FlexDiv.GetComputedString(fcaDisplay)','flex',FlexDiv.GetComputedString(fcaDisplay));
- AssertEquals('Div1.GetComputedString(fcaFlexGrow)','0',Div1.GetComputedString(fcaFlexGrow));
- AssertEquals('Div1.UsedContentBox.Left',0,Div1.UsedContentBox.Left);
- AssertEquals('Div1.UsedContentBox.Top',0,Div1.UsedContentBox.Top);
- AssertEquals('Div1.UsedContentBox.Width',30,Div1.UsedContentBox.Width);
- AssertEquals('Div1.UsedContentBox.Height',20,Div1.UsedContentBox.Height);
- AssertEquals('FlexDiv.UsedContentBox.Left',0,FlexDiv.UsedContentBox.Left);
- AssertEquals('FlexDiv.UsedContentBox.Top',0,FlexDiv.UsedContentBox.Top);
- AssertEquals('FlexDiv.UsedContentBox.Width',200,FlexDiv.UsedContentBox.Width);
- AssertEquals('FlexDiv.UsedContentBox.Height',20,FlexDiv.UsedContentBox.Height);
- end;
- procedure TTestFlexLayout.TestFlexLayout_Row_OneItem_Grow;
- var
- FlexDiv, Div1: TDiv;
- Body: TBody;
- begin
- Body:=TBody.Create(Viewport);
- Body.Name:='Body';
- Body.Parent:=Viewport;
- FlexDiv:=TDiv.Create(Viewport);
- FlexDiv.Name:='FlexDiv';
- FlexDiv.Parent:=Body;
- Div1:=TDiv.Create(Viewport);
- Div1.Name:='Div1';
- Div1.Parent:=FlexDiv;
- Viewport.Stylesheet.Text:=LinesToStr([
- 'body { margin: 0; }',
- '#FlexDiv { display: flex; width: 200px; }',
- '#Div1 { width: 30px; height: 20px; flex-grow: 1; }'
- ]);
- Viewport.Draw;
- AssertEquals('FlexDiv.Rendered',true,FlexDiv.Rendered);
- AssertEquals('FlexDiv.GetComputedString(fcaDisplay)','flex',FlexDiv.GetComputedString(fcaDisplay));
- AssertEquals('Div1.GetComputedString(fcaFlexGrow)','1',Div1.GetComputedString(fcaFlexGrow));
- AssertEquals('Div1.UsedContentBox.Left',0,Div1.UsedContentBox.Left);
- AssertEquals('Div1.UsedContentBox.Top',0,Div1.UsedContentBox.Top);
- AssertEquals('Div1.UsedContentBox.Width',200,Div1.UsedContentBox.Width);
- AssertEquals('Div1.UsedContentBox.Height',20,Div1.UsedContentBox.Height);
- AssertEquals('FlexDiv.UsedContentBox.Left',0,FlexDiv.UsedContentBox.Left);
- AssertEquals('FlexDiv.UsedContentBox.Top',0,FlexDiv.UsedContentBox.Top);
- AssertEquals('FlexDiv.UsedContentBox.Width',200,FlexDiv.UsedContentBox.Width);
- AssertEquals('FlexDiv.UsedContentBox.Height',20,FlexDiv.UsedContentBox.Height);
- end;
- procedure TTestFlexLayout.TestFlexLayout_Row_OneItem_Shrink;
- var
- FlexDiv, Div1: TDiv;
- Body: TBody;
- begin
- Body:=TBody.Create(Viewport);
- Body.Name:='Body';
- Body.Parent:=Viewport;
- FlexDiv:=TDiv.Create(Viewport);
- FlexDiv.Name:='FlexDiv';
- FlexDiv.Parent:=Body;
- Div1:=TDiv.Create(Viewport);
- Div1.Name:='Div1';
- Div1.Parent:=FlexDiv;
- Viewport.Stylesheet.Text:=LinesToStr([
- 'body { margin: 0; }',
- '#FlexDiv { display: flex; width: 10px; }',
- '#Div1 { width: 30px; height: 20px; }'
- ]);
- Viewport.Draw;
- AssertEquals('FlexDiv.Rendered',true,FlexDiv.Rendered);
- AssertEquals('FlexDiv.GetComputedString(fcaDisplay)','flex',FlexDiv.GetComputedString(fcaDisplay));
- AssertEquals('Div1.UsedContentBox.Left',0,Div1.UsedContentBox.Left);
- AssertEquals('Div1.UsedContentBox.Top',0,Div1.UsedContentBox.Top);
- AssertEquals('Div1.UsedContentBox.Width',10,Div1.UsedContentBox.Width);
- AssertEquals('Div1.UsedContentBox.Height',20,Div1.UsedContentBox.Height);
- AssertEquals('FlexDiv.UsedContentBox.Left',0,FlexDiv.UsedContentBox.Left);
- AssertEquals('FlexDiv.UsedContentBox.Top',0,FlexDiv.UsedContentBox.Top);
- AssertEquals('FlexDiv.UsedContentBox.Width',10,FlexDiv.UsedContentBox.Width);
- AssertEquals('FlexDiv.UsedContentBox.Height',20,FlexDiv.UsedContentBox.Height);
- end;
- procedure TTestFlexLayout.TestFlexLayout_Row_TwoItems_Grow;
- var
- FlexDiv, Div1, Div2: TDiv;
- Body: TBody;
- begin
- Body:=TBody.Create(Viewport);
- Body.Name:='Body';
- Body.Parent:=Viewport;
- FlexDiv:=TDiv.Create(Viewport);
- FlexDiv.Name:='FlexDiv';
- FlexDiv.Parent:=Body;
- Div1:=TDiv.Create(Viewport);
- Div1.Name:='Div1';
- Div1.Parent:=FlexDiv;
- Div2:=TDiv.Create(Viewport);
- Div2.Name:='Div2';
- Div2.Parent:=FlexDiv;
- Viewport.Stylesheet.Text:=LinesToStr([
- 'body { margin: 0; }',
- '#FlexDiv { display: flex; width: 200px; }',
- '#Div1 { width: 30px; height: 20px; flex-grow: 3; }',
- '#Div2 { width: 70px; height: 20px; flex-grow: 2; }'
- ]);
- Viewport.Draw;
- AssertEquals('FlexDiv.Rendered',true,FlexDiv.Rendered);
- AssertEquals('FlexDiv.GetComputedString(fcaDisplay)','flex',FlexDiv.GetComputedString(fcaDisplay));
- AssertEquals('Div1.GetComputedString(fcaFlexGrow)','3',Div1.GetComputedString(fcaFlexGrow));
- AssertEquals('Div2.GetComputedString(fcaFlexGrow)','2',Div2.GetComputedString(fcaFlexGrow));
- AssertEquals('FlexDiv.UsedContentBox.Left',0,FlexDiv.UsedContentBox.Left);
- AssertEquals('FlexDiv.UsedContentBox.Top',0,FlexDiv.UsedContentBox.Top);
- AssertEquals('FlexDiv.UsedContentBox.Width',200,FlexDiv.UsedContentBox.Width);
- AssertEquals('FlexDiv.UsedContentBox.Height',20,FlexDiv.UsedContentBox.Height);
- AssertEquals('Div1.UsedContentBox.Left',0,Div1.UsedContentBox.Left);
- AssertEquals('Div1.UsedContentBox.Top',0,Div1.UsedContentBox.Top);
- AssertEquals('Div1.UsedContentBox.Width',90,Div1.UsedContentBox.Width);
- AssertEquals('Div1.UsedContentBox.Height',20,Div1.UsedContentBox.Height);
- AssertEquals('Div2.UsedContentBox.Left',90,Div2.UsedContentBox.Left);
- AssertEquals('Div2.UsedContentBox.Top',0,Div2.UsedContentBox.Top);
- AssertEquals('Div2.UsedContentBox.Width',110,Div2.UsedContentBox.Width);
- AssertEquals('Div2.UsedContentBox.Height',20,Div2.UsedContentBox.Height);
- end;
- procedure TTestFlexLayout.TestFlexLayout_Row_TwoItems_JustifyCenter;
- var
- FlexDiv, Div1, Div2: TDiv;
- Body: TBody;
- begin
- Body:=TBody.Create(Viewport);
- Body.Name:='Body';
- Body.Parent:=Viewport;
- FlexDiv:=TDiv.Create(Viewport);
- FlexDiv.Name:='FlexDiv';
- FlexDiv.Parent:=Body;
- Div1:=TDiv.Create(Viewport);
- Div1.Name:='Div1';
- Div1.Parent:=FlexDiv;
- Div2:=TDiv.Create(Viewport);
- Div2.Name:='Div2';
- Div2.Parent:=FlexDiv;
- Viewport.Stylesheet.Text:=LinesToStr([
- 'body { margin: 0; }',
- '#FlexDiv { display: flex; width: 200px; justify-content: center; }',
- '#Div1 { width: 30px; height: 20px; }',
- '#Div2 { width: 70px; height: 20px; }'
- ]);
- Viewport.Draw;
- AssertEquals('FlexDiv.Rendered',true,FlexDiv.Rendered);
- AssertEquals('FlexDiv.GetComputedString(fcaDisplay)','flex',FlexDiv.GetComputedString(fcaDisplay));
- AssertEquals('FlexDiv.GetComputedString(fcaJustifyContent)','center',FlexDiv.GetComputedString(fcaJustifyContent));
- AssertEquals('FlexDiv.UsedContentBox.Left',0,FlexDiv.UsedContentBox.Left);
- AssertEquals('FlexDiv.UsedContentBox.Top',0,FlexDiv.UsedContentBox.Top);
- AssertEquals('FlexDiv.UsedContentBox.Width',200,FlexDiv.UsedContentBox.Width);
- AssertEquals('FlexDiv.UsedContentBox.Height',20,FlexDiv.UsedContentBox.Height);
- AssertEquals('Div1.UsedContentBox.Left',50,Div1.UsedContentBox.Left);
- AssertEquals('Div1.UsedContentBox.Top',0,Div1.UsedContentBox.Top);
- AssertEquals('Div1.UsedContentBox.Width',30,Div1.UsedContentBox.Width);
- AssertEquals('Div1.UsedContentBox.Height',20,Div1.UsedContentBox.Height);
- AssertEquals('Div2.UsedContentBox.Left',80,Div2.UsedContentBox.Left);
- AssertEquals('Div2.UsedContentBox.Top',0,Div2.UsedContentBox.Top);
- AssertEquals('Div2.UsedContentBox.Width',70,Div2.UsedContentBox.Width);
- AssertEquals('Div2.UsedContentBox.Height',20,Div2.UsedContentBox.Height);
- end;
- Initialization
- RegisterTests([TTestFlexLayout]);
- end.
|