Merge branch 'splitcontainer' of tig:tznind/gui.cs into tznind-splitcontainer

This commit is contained in:
Tig Kindel
2023-02-12 10:57:21 +07:00

View File

@@ -2096,6 +2096,93 @@ namespace Terminal.Gui.ViewTests {
}
[Fact,AutoInitShutdown]
public void TestDisposal_NoEarlyDisposalsOfUsersViews_DuringRebuildForTileCount ()
{
var tv = GetTileView (20,10);
var myReusableView = new DisposeCounter ();
// I want my view in the first tile
tv.Tiles.ElementAt (0).View.Add (myReusableView);
Assert.Equal (0, myReusableView.DisposalCount);
// I've changed my mind, I want 3 tiles now
tv.RebuildForTileCount (3);
// but I still want my view in the first tile
tv.Tiles.ElementAt (0).View.Add (myReusableView);
Assert.Multiple (
()=>Assert.Equal (0, myReusableView.DisposalCount)
,()=> {
tv.Dispose ();
Assert.Equal (1, myReusableView.DisposalCount);
});
}
[Fact, AutoInitShutdown]
public void TestDisposal_NoEarlyDisposalsOfUsersViews_DuringInsertTile ()
{
var tv = GetTileView (20, 10);
var myReusableView = new DisposeCounter ();
// I want my view in the first tile
tv.Tiles.ElementAt (0).View.Add (myReusableView);
Assert.Equal (0, myReusableView.DisposalCount);
// I've changed my mind, I want 3 tiles now
tv.InsertTile (0);
tv.InsertTile (2);
// but I still want my view in the first tile
tv.Tiles.ElementAt (0).View.Add (myReusableView);
Assert.Multiple (
() => Assert.Equal (0, myReusableView.DisposalCount)
, () => {
tv.Dispose ();
// TODO seems to be double disposed ?!
Assert.True (myReusableView.DisposalCount >= 1);
});
}
[Theory, AutoInitShutdown]
[InlineData(0)]
[InlineData (1)]
public void TestDisposal_NoEarlyDisposalsOfUsersViews_DuringRemoveTile(int idx)
{
var tv = GetTileView (20, 10);
var myReusableView = new DisposeCounter ();
// I want my view in the first tile
tv.Tiles.ElementAt (0).View.Add (myReusableView);
Assert.Equal (0, myReusableView.DisposalCount);
tv.RemoveTile (idx);
// but I still want my view in the first tile
tv.Tiles.ElementAt (0).View.Add (myReusableView);
Assert.Multiple (
() => Assert.Equal (0, myReusableView.DisposalCount)
, () => {
tv.Dispose ();
// TODO seems to be double disposed ?!
Assert.True (myReusableView.DisposalCount >= 1);
});
}
private class DisposeCounter : View
{
public int DisposalCount;
protected override void Dispose (bool disposing)
{
DisposalCount++;
base.Dispose (disposing);
}
}
/// <summary>
/// Creates a vertical orientation root container with left pane split into
/// two (with horizontal splitter line).