Browse Source

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

Tig Kindel 2 years ago
parent
commit
dc4fe69626
1 changed files with 87 additions and 0 deletions
  1. 87 0
      UnitTests/Views/TileViewTests.cs

+ 87 - 0
UnitTests/Views/TileViewTests.cs

@@ -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).