123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828 |
- using System;
- using System.Linq;
- using Terminal.Gui;
- using Xunit;
- using Xunit.Abstractions;
- namespace UnitTests {
- public class TileViewTests {
- readonly ITestOutputHelper output;
- public TileViewTests (ITestOutputHelper output)
- {
- this.output = output;
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Vertical ()
- {
- var tileView = Get11By3TileView (out var line);
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- 11111│22222
- 11111│22222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Keyboard movement on splitter should have no effect if it is not focused
- line.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Vertical_WithBorder ()
- {
- var tileView = Get11By3TileView (out var line, true);
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- ┌────┬────┐
- │1111│2222│
- └────┴────┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Keyboard movement on splitter should have no effect if it is not focused
- line.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Vertical_Focused ()
- {
- var tileView = Get11By3TileView (out var line);
- SetInputFocusLine (tileView);
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- 11111│22222
- 11111◊22222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Now while focused move the splitter 1 unit right
- line.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- 111111│2222
- 111111◊2222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // and 2 to the left
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- 1111│222222
- 1111◊222222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Vertical_Focused_WithBorder ()
- {
- var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- ┌────┬────┐
- │1111◊2222│
- └────┴────┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Now while focused move the splitter 1 unit right
- line.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- ┌─────┬───┐
- │11111◊222│
- └─────┴───┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // and 2 to the left
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- ┌───┬─────┐
- │111◊22222│
- └───┴─────┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Vertical_Focused_50PercentSplit ()
- {
- var tileView = Get11By3TileView (out var line);
- SetInputFocusLine (tileView);
- tileView.SetSplitterPos(0,Pos.Percent (50));
- Assert.IsType<Pos.PosFactor> (tileView.SplitterDistances.ElementAt(0));
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- 11111│22222
- 11111◊22222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Now while focused move the splitter 1 unit right
- line.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- 111111│2222
- 111111◊2222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Even when moving the splitter location it should stay a Percentage based one
- Assert.IsType<Pos.PosFactor> (tileView.SplitterDistances.ElementAt(0));
- // and 2 to the left
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- 1111│222222
- 1111◊222222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Even when moving the splitter location it should stay a Percentage based one
- Assert.IsType<Pos.PosFactor> (tileView.SplitterDistances.ElementAt (0));
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Horizontal ()
- {
- var tileView = Get11By3TileView (out var line);
- tileView.Orientation = Terminal.Gui.Graphs.Orientation.Horizontal;
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- 11111111111
- ───────────
- 22222222222";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Keyboard movement on splitter should have no effect if it is not focused
- line.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Vertical_View1MinSize_Absolute ()
- {
- var tileView = Get11By3TileView (out var line);
- SetInputFocusLine (tileView);
- tileView.Tiles.ElementAt(0).MinSize = 6;
- // distance is too small (below 6)
- tileView.SetSplitterPos(0, 2);
- // Should bound the value to the minimum distance
- Assert.Equal (6, tileView.SplitterDistances.ElementAt (0));
- tileView.Redraw (tileView.Bounds);
- // so should ignore the 2 distance and stick to 6
- string looksLike =
- @"
- 111111│2222
- 111111◊2222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Keyboard movement on splitter should have no effect because it
- // would take us below the minimum splitter size
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // but we can continue to move the splitter right if we want
- line.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- 1111111│222
- 1111111◊222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Vertical_View1MinSize_Absolute_WithBorder ()
- {
- var tileView = Get11By3TileView (out var line,true);
- SetInputFocusLine (tileView);
- tileView.Tiles.ElementAt(0).MinSize = 5;
- // distance is too small (below 5)
- tileView.SetSplitterPos(0,2);
- // Should bound the value to the minimum distance
- Assert.Equal (6, tileView.SplitterDistances.ElementAt(0));
- tileView.Redraw (tileView.Bounds);
- // so should ignore the 2 distance and stick to 5
- string looksLike =
- @"
- ┌─────┬───┐
- │11111◊222│
- └─────┴───┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Keyboard movement on splitter should have no effect because it
- // would take us below the minimum splitter size
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // but we can continue to move the splitter right if we want
- line.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- ┌──────┬──┐
- │111111◊22│
- └──────┴──┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Vertical_View2MinSize_Absolute ()
- {
- var tileView = Get11By3TileView (out var line);
- SetInputFocusLine (tileView);
- tileView.Tiles.ElementAt(1).MinSize = 6;
- // distance leaves too little space for view2 (less than 6 would remain)
- tileView.SetSplitterPos(0,8);
- // Should bound the value to the minimum distance
- Assert.Equal (4, tileView.SplitterDistances.ElementAt(0));
- tileView.Redraw (tileView.Bounds);
- // so should ignore the 2 distance and stick to 6
- string looksLike =
- @"
- 1111│222222
- 1111◊222222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Keyboard movement on splitter should have no effect because it
- // would take us below the minimum splitter size
- line.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // but we can continue to move the splitter left if we want
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- 111│2222222
- 111◊2222222
- │ ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Vertical_View2MinSize_Absolute_WithBorder ()
- {
- var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
- tileView.Tiles.ElementAt(1).MinSize = 5;
- // distance leaves too little space for view2 (less than 5 would remain)
- tileView.SetSplitterPos(0,8);
- // Should bound the value to the minimum distance
- Assert.Equal (4, tileView.SplitterDistances.ElementAt(0));
- tileView.Redraw (tileView.Bounds);
- // so should ignore the 2 distance and stick to 6
- string looksLike =
- @"
- ┌───┬─────┐
- │111◊22222│
- └───┴─────┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Keyboard movement on splitter should have no effect because it
- // would take us below the minimum splitter size
- line.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // but we can continue to move the splitter left if we want
- line.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
- tileView.SetNeedsDisplay ();
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- ┌──┬──────┐
- │11◊222222│
- └──┴──────┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_InsertPanelAtStart ()
- {
- var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
- tileView.InsertTile (0);
- tileView.Redraw (tileView.Bounds);
- // so should ignore the 2 distance and stick to 6
- string looksLike =
- @"
- ┌──┬───┬──┐
- │ │111│22│
- └──┴───┴──┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
-
- [Fact, AutoInitShutdown]
- public void TestTileView_InsertPanelMiddle()
- {
- var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
- tileView.InsertTile (1);
- tileView.Redraw (tileView.Bounds);
- // so should ignore the 2 distance and stick to 6
- string looksLike =
- @"
- ┌──┬───┬──┐
- │11│ │22│
- └──┴───┴──┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_InsertPanelAtEnd ()
- {
- var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
- tileView.InsertTile (2);
- tileView.Redraw (tileView.Bounds);
- // so should ignore the 2 distance and stick to 6
- string looksLike =
- @"
- ┌──┬───┬──┐
- │11│222│ │
- └──┴───┴──┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Horizontal_Focused ()
- {
- var tileView = Get11By3TileView (out var line);
- tileView.Orientation = Terminal.Gui.Graphs.Orientation.Horizontal;
- SetInputFocusLine (tileView);
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- 11111111111
- ─────◊─────
- 22222222222";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Now move splitter line down
- line.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- 11111111111
- 11111111111
- ─────◊─────";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // And 2 up
- line.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ()));
- line.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- ─────◊─────
- 22222222222
- 22222222222";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_Horizontal_View1MinSize_Absolute ()
- {
- var tileView = Get11By3TileView (out var line);
- tileView.Orientation = Terminal.Gui.Graphs.Orientation.Horizontal;
- SetInputFocusLine (tileView);
- tileView.Tiles.ElementAt(0).MinSize = 1;
- // 0 should not be allowed because it brings us below minimum size of View1
- tileView.SetSplitterPos(0,0);
- Assert.Equal ((Pos)1, tileView.SplitterDistances.ElementAt(0));
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- 11111111111
- ─────◊─────
- 22222222222";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // Now move splitter line down (allowed
- line.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- 11111111111
- 11111111111
- ─────◊─────";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // And up 2 (only 1 is allowed because of minimum size of 1 on view1)
- line.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ()));
- line.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ()));
- tileView.Redraw (tileView.Bounds);
- looksLike =
- @"
- 11111111111
- ─────◊─────
- 22222222222";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestTileView_CannotSetSplitterPosToFuncEtc ()
- {
- var tileView = Get11By3TileView ();
- var ex = Assert.Throws<ArgumentException> (() => tileView.SetSplitterPos(0,Pos.Right (tileView)));
- Assert.Equal ("Only Percent and Absolute values are supported. Passed value was PosCombine", ex.Message);
- ex = Assert.Throws<ArgumentException> (() => tileView.SetSplitterPos(0,Pos.Function (() => 1)));
- Assert.Equal ("Only Percent and Absolute values are supported. Passed value was PosFunc", ex.Message);
- // Also not allowed because this results in a PosCombine
- ex = Assert.Throws<ArgumentException> (() => tileView.SetSplitterPos(0, Pos.Percent (50) - 1));
- Assert.Equal ("Only Percent and Absolute values are supported. Passed value was PosCombine", ex.Message);
- }
- [Fact,AutoInitShutdown]
- public void TestNestedContainer2LeftAnd1Right_RendersNicely()
- {
- var tileView = GetNestedContainer2Left1Right (false);
- Assert.Equal (20,tileView.Frame.Width);
- Assert.Equal (10, tileView.Tiles.ElementAt(0).View.Frame.Width);
- Assert.Equal (9, tileView.Tiles.ElementAt (1).View.Frame.Width);
- Assert.IsType<TileView> (tileView.Tiles.ElementAt (0).View);
- var left = (TileView)tileView.Tiles.ElementAt (0).View;
- Assert.Same (left.SuperView, tileView);
- Assert.Equal(2, left.Tiles.ElementAt (0).View.Subviews.Count);
- Assert.IsType<Label> (left.Tiles.ElementAt (0).View.Subviews [0]);
- Assert.IsType<Label> (left.Tiles.ElementAt (0).View.Subviews [1]);
- var onesTop = (Label)left.Tiles.ElementAt (0).View.Subviews [0];
- var onesBottom = (Label)left.Tiles.ElementAt (0).View.Subviews [1];
- Assert.Same (left.Tiles.ElementAt (0).View, onesTop.SuperView);
- Assert.Same (left.Tiles.ElementAt (0).View, onesBottom.SuperView);
- Assert.Equal (10, onesTop.Frame.Width);
- Assert.Equal (10, onesBottom.Frame.Width);
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- 1111111111│222222222
- 1111111111│222222222
- │
- │
- │
- ──────────┤
- │
- │
- │
- │";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact,AutoInitShutdown]
- public void TestNestedContainer3RightAnd1Down_RendersNicely()
- {
- var tileView = GetNestedContainer3Right1Down (false);
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- 111111│222222│333333
- 111111│222222│333333
- 111111│222222│333333
- 111111│222222│333333
- 111111│222222│333333
- 111111│222222├──────
- 111111│222222│444444
- 111111│222222│444444
- 111111│222222│444444
- 111111│222222│444444
- ";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // It looks good but lets double check the measurements incase
- // anything is sticking out but drawn over
- // 3 panels + 2 splitters
- Assert.Equal(5,tileView.Subviews.Count);
- // Check X and Widths of Tiles
- Assert.Equal(0,tileView.Tiles.ElementAt(0).View.Frame.X);
- Assert.Equal(6,tileView.Tiles.ElementAt(0).View.Frame.Width);
- Assert.Equal(7,tileView.Tiles.ElementAt(1).View.Frame.X);
- Assert.Equal(6,tileView.Tiles.ElementAt(1).View.Frame.Width);
- Assert.Equal(14,tileView.Tiles.ElementAt(2).View.Frame.X);
- Assert.Equal(6,tileView.Tiles.ElementAt(2).View.Frame.Width);
-
- // Check Y and Heights of Tiles
- Assert.Equal(0,tileView.Tiles.ElementAt(0).View.Frame.Y);
- Assert.Equal(10,tileView.Tiles.ElementAt(0).View.Frame.Height);
- Assert.Equal(0,tileView.Tiles.ElementAt(1).View.Frame.Y);
- Assert.Equal(10,tileView.Tiles.ElementAt(1).View.Frame.Height);
- Assert.Equal(0,tileView.Tiles.ElementAt(2).View.Frame.Y);
- Assert.Equal(10,tileView.Tiles.ElementAt(2).View.Frame.Height);
-
- // Check Sub containers in last panel
- var subSplit = (TileView)tileView.Tiles.ElementAt(2).View;
- Assert.Equal(0,subSplit.Tiles.ElementAt(0).View.Frame.X);
- Assert.Equal(6,subSplit.Tiles.ElementAt(0).View.Frame.Width);
- Assert.Equal(0,subSplit.Tiles.ElementAt(0).View.Frame.Y);
- Assert.Equal(5,subSplit.Tiles.ElementAt(0).View.Frame.Height);
- Assert.IsType<TextView>(subSplit.Tiles.ElementAt(0).View.Subviews.Single());
- Assert.Equal(0,subSplit.Tiles.ElementAt(1).View.Frame.X);
- Assert.Equal(6,subSplit.Tiles.ElementAt(1).View.Frame.Width);
- Assert.Equal(6,subSplit.Tiles.ElementAt(1).View.Frame.Y);
- Assert.Equal(4,subSplit.Tiles.ElementAt(1).View.Frame.Height);
- Assert.IsType<TextView>(subSplit.Tiles.ElementAt(1).View.Subviews.Single());
- }
- [Fact,AutoInitShutdown]
- public void TestNestedContainer3RightAnd1Down_WithBorder_RendersNicely()
- {
- var tileView = GetNestedContainer3Right1Down (true);
- tileView.Redraw (tileView.Bounds);
- string looksLike =
- @"
- ┌─────┬──────┬─────┐
- │11111│222222│33333│
- │11111│222222│33333│
- │11111│222222│33333│
- │11111│222222│33333│
- │11111│222222├─────┤
- │11111│222222│44444│
- │11111│222222│44444│
- │11111│222222│44444│
- └─────┴──────┴─────┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- // It looks good but lets double check the measurements incase
- // anything is sticking out but drawn over
- // 3 panels + 2 splitters
- Assert.Equal(5,tileView.Subviews.Count);
- // Check X and Widths of Tiles
- Assert.Equal(1,tileView.Tiles.ElementAt(0).View.Frame.X);
- Assert.Equal(5,tileView.Tiles.ElementAt(0).View.Frame.Width);
- Assert.Equal(7,tileView.Tiles.ElementAt(1).View.Frame.X);
- Assert.Equal(6,tileView.Tiles.ElementAt(1).View.Frame.Width);
- Assert.Equal(14,tileView.Tiles.ElementAt(2).View.Frame.X);
- Assert.Equal(5,tileView.Tiles.ElementAt(2).View.Frame.Width);
-
- // Check Y and Heights of Tiles
- Assert.Equal(1,tileView.Tiles.ElementAt(0).View.Frame.Y);
- Assert.Equal(8,tileView.Tiles.ElementAt(0).View.Frame.Height);
- Assert.Equal(1,tileView.Tiles.ElementAt(1).View.Frame.Y);
- Assert.Equal(8,tileView.Tiles.ElementAt(1).View.Frame.Height);
- Assert.Equal(1,tileView.Tiles.ElementAt(2).View.Frame.Y);
- Assert.Equal(8,tileView.Tiles.ElementAt(2).View.Frame.Height);
-
- // Check Sub containers in last panel
- var subSplit = (TileView)tileView.Tiles.ElementAt(2).View;
- Assert.Equal(0,subSplit.Tiles.ElementAt(0).View.Frame.X);
- Assert.Equal(5,subSplit.Tiles.ElementAt(0).View.Frame.Width);
- Assert.Equal(0,subSplit.Tiles.ElementAt(0).View.Frame.Y);
- Assert.Equal(4,subSplit.Tiles.ElementAt(0).View.Frame.Height);
- Assert.IsType<TextView>(subSplit.Tiles.ElementAt(0).View.Subviews.Single());
- Assert.Equal(0,subSplit.Tiles.ElementAt(1).View.Frame.X);
- Assert.Equal(5,subSplit.Tiles.ElementAt(1).View.Frame.Width);
- Assert.Equal(5,subSplit.Tiles.ElementAt(1).View.Frame.Y);
- Assert.Equal(3,subSplit.Tiles.ElementAt(1).View.Frame.Height);
- Assert.IsType<TextView>(subSplit.Tiles.ElementAt(1).View.Subviews.Single());
- }
- /// <summary>
- /// Creates a vertical orientation root container with left pane split into
- /// two (with horizontal splitter line).
- /// </summary>
- /// <param name="withBorder"></param>
- /// <returns></returns>
- private TileView GetNestedContainer2Left1Right(bool withBorder)
- {
- var container = GetTileView (20, 10,withBorder);
- Assert.True (container.TryTileView (0,2, out var newContainer));
-
- newContainer.Orientation = Terminal.Gui.Graphs.Orientation.Horizontal;
- newContainer.ColorScheme = new ColorScheme ();
- container.ColorScheme = new ColorScheme ();
- container.LayoutSubviews ();
- return container;
- }
- /// <summary>
- /// Creates a vertical orientation root container with 3 tiles.
- /// The rightmost is split horizontally
- /// </summary>
- /// <param name="withBorder"></param>
- /// <returns></returns>
- private TileView GetNestedContainer3Right1Down(bool withBorder)
- {
- var container =
- new TileView (3)
- {
- Width = 20,
- Height = 10,
- IntegratedBorder = withBorder ? BorderStyle.Single : BorderStyle.None
- };
- Assert.True (container.TryTileView (2,2, out var newContainer));
-
- newContainer.Orientation = Terminal.Gui.Graphs.Orientation.Horizontal;
-
- int i=0;
- foreach(var tile in container.Tiles.Take(2).Union(newContainer.Tiles))
- {
- i++;
- tile.View.Add(new TextView{
- Width = Dim.Fill(),
- Height = Dim.Fill(),
- Text =
- string.Join('\n',
- Enumerable.Repeat(
- new string(i.ToString()[0],100)
- ,10).ToArray()),
- WordWrap = false
- });
- }
- newContainer.ColorScheme = new ColorScheme ();
- container.ColorScheme = new ColorScheme ();
- container.LayoutSubviews ();
- return container;
- }
- private LineView GetLine (TileView tileView)
- {
- return tileView.Subviews.OfType<LineView> ().Single ();
- }
- private void SetInputFocusLine (TileView tileView)
- {
- var line = GetLine (tileView);
- line.SetFocus ();
- Assert.True (line.HasFocus);
- }
- private TileView Get11By3TileView(out LineView line, bool withBorder = false)
- {
- var split = Get11By3TileView (withBorder);
- line = GetLine (split);
-
- return split;
- }
- private TileView Get11By3TileView (bool withBorder = false)
- {
- return GetTileView (11, 3, withBorder);
- }
- private TileView GetTileView (int width, int height, bool withBorder = false)
- {
- var container = new TileView () {
- Width = width,
- Height = height,
- };
- container.IntegratedBorder = withBorder ? BorderStyle.Single : BorderStyle.None;
- container.Tiles.ElementAt(0).View.Add (new Label (new string ('1', 100)) { Width = Dim.Fill(), Height = 1, AutoSize = false});
- container.Tiles.ElementAt (0).View.Add (new Label (new string ('1', 100)) { Width = Dim.Fill (), Height = 1, AutoSize = false,Y = 1});
- container.Tiles.ElementAt (1).View.Add (new Label (new string ('2', 100)) { Width = Dim.Fill (), Height = 1, AutoSize = false });
- container.Tiles.ElementAt (1).View.Add (new Label (new string ('2', 100)) { Width = Dim.Fill (), Height = 1, AutoSize = false,Y = 1});
- container.Tiles.ElementAt (0).MinSize = 0;
- container.Tiles.ElementAt (1).MinSize = 0;
- Application.Top.Add (container);
- container.ColorScheme = new ColorScheme ();
- container.LayoutSubviews ();
- container.BeginInit ();
- container.EndInit ();
- return container;
- }
- }
- }
|