Browse Source

Made SplitterDistnce throw if passed unsupported Pos types

Thomas 2 years ago
parent
commit
5d39ae7ac6
2 changed files with 23 additions and 0 deletions
  1. 5 0
      Terminal.Gui/Views/SplitContainer.cs
  2. 18 0
      UnitTests/SplitContainerTests.cs

+ 5 - 0
Terminal.Gui/Views/SplitContainer.cs

@@ -133,6 +133,11 @@ namespace Terminal.Gui {
 		public Pos SplitterDistance {
 			get { return splitterDistance; }
 			set {
+				if(!(value is Pos.PosAbsolute) && !(value is Pos.PosFactor))
+				{
+					throw new ArgumentException($"Only Percent and Absolute values are supported for {nameof(SplitterDistance)} property.  Passed value was {value.GetType().Name}");
+				}
+
 				splitterDistance = value;
 				Setup ();
 				OnSplitterMoved ();

+ 18 - 0
UnitTests/SplitContainerTests.cs

@@ -226,6 +226,24 @@ namespace UnitTests {
 22222222222";
 			TestHelpers.AssertDriverContentsAre (looksLike, output);
 		}
+
+		[Fact, AutoInitShutdown]
+		public void TestSplitContainer_CannotSetSplitterPosToFuncEtc ()
+		{
+			var splitContainer = Get11By3SplitContainer ();
+
+			var ex = Assert.Throws<ArgumentException>(()=>splitContainer.SplitterDistance = Pos.Right(splitContainer));
+			Assert.Equal("Only Percent and Absolute values are supported for SplitterDistance property.  Passed value was PosCombine",ex.Message);
+
+
+			ex = Assert.Throws<ArgumentException>(()=>splitContainer.SplitterDistance = Pos.Function(()=>1));
+			Assert.Equal("Only Percent and Absolute values are supported for SplitterDistance property.  Passed value was PosFunc",ex.Message);
+
+			// Also not allowed because this results in a PosCombine
+			ex = Assert.Throws<ArgumentException>(()=>splitContainer.SplitterDistance = Pos.Percent(50) - 1);
+			Assert.Equal("Only Percent and Absolute values are supported for SplitterDistance property.  Passed value was PosCombine",ex.Message);
+		}
+
 		private SplitContainer Get11By3SplitContainer ()
 		{
 			var container = new SplitContainer () {