2
0
Эх сурвалжийг харах

Change LineCanvas interpretation of Length=0

Thomas 2 жил өмнө
parent
commit
c9ab7b5bd8

+ 3 - 15
Terminal.Gui/Core/Graphs/LineCanvas.cs

@@ -199,8 +199,8 @@ namespace Terminal.Gui.Graphs {
 			}
 			}
 
 
 			// TODO: Remove these two once we have all of the below ported to IntersectionRuneResolvers
 			// TODO: Remove these two once we have all of the below ported to IntersectionRuneResolvers
-			var useDouble = intersects.Any (i => i.Line.Style == BorderStyle.Double && i.Line.Length != 0);
-			var useRounded = intersects.Any (i => i.Line.Style == BorderStyle.Rounded && i.Line.Length != 0);
+			var useDouble = intersects.Any (i => i.Line.Style == BorderStyle.Double);
+			var useRounded = intersects.Any (i => i.Line.Style == BorderStyle.Rounded);
 
 
 			// TODO: maybe make these resolvers to for simplicity?
 			// TODO: maybe make these resolvers to for simplicity?
 			// or for dotted lines later on or that kind of thing?
 			// or for dotted lines later on or that kind of thing?
@@ -220,13 +220,6 @@ namespace Terminal.Gui.Graphs {
 
 
 		private IntersectionRuneType GetRuneTypeForIntersects (IntersectionDefinition [] intersects)
 		private IntersectionRuneType GetRuneTypeForIntersects (IntersectionDefinition [] intersects)
 		{
 		{
-			if (intersects.All (i => i.Line.Length == 0)) {
-				return IntersectionRuneType.Dot;
-			}
-
-			// ignore dots
-			intersects = intersects.Where (i => i.Type != IntersectionType.Dot).ToArray ();
-
 			var set = new HashSet<IntersectionType> (intersects.Select (i => i.Type));
 			var set = new HashSet<IntersectionType> (intersects.Select (i => i.Type));
 
 
 			#region Crosshair Conditions
 			#region Crosshair Conditions
@@ -504,7 +497,7 @@ namespace Terminal.Gui.Graphs {
 
 
 						return new IntersectionDefinition (
 						return new IntersectionDefinition (
 							Start,
 							Start,
-							Length < 0 ? IntersectionType.StartLeft : IntersectionType.StartRight,
+							GetTypeByLength(IntersectionType.StartLeft, IntersectionType.PassOverHorizontal,IntersectionType.StartRight),
 							this
 							this
 							);
 							);
 
 
@@ -597,11 +590,6 @@ namespace Terminal.Gui.Graphs {
 			{
 			{
 				return Start.X == x && Start.Y == y;
 				return Start.X == x && Start.Y == y;
 			}
 			}
-
-			private bool IsDot ()
-			{
-				return Length == 0;
-			}
 		}
 		}
 	}
 	}
 }
 }

+ 75 - 32
UnitTests/Core/LineCanvasTests.cs

@@ -15,20 +15,6 @@ namespace Terminal.Gui.CoreTests {
 			this.output = output;
 			this.output = output;
 		}
 		}
 
 
-		[Fact, AutoInitShutdown]
-		public void TestLineCanvas_Dot ()
-		{
-			var v = GetCanvas (out var canvas);
-			canvas.AddLine (new Point (0, 0), 0, Orientation.Horizontal, BorderStyle.Single);
-
-			v.Redraw (v.Bounds);
-
-			string looksLike =
-@"    
-.";
-			TestHelpers.AssertDriverContentsAre (looksLike, output);
-		}
-
 		[InlineData (BorderStyle.Single)]
 		[InlineData (BorderStyle.Single)]
 		[InlineData (BorderStyle.Rounded)]
 		[InlineData (BorderStyle.Rounded)]
 		[Theory, AutoInitShutdown]
 		[Theory, AutoInitShutdown]
@@ -326,10 +312,10 @@ namespace Terminal.Gui.CoreTests {
 			//LHS line down
 			//LHS line down
 			lc.AddLine (new Point (0, 0), 5, Orientation.Vertical, BorderStyle.Double);
 			lc.AddLine (new Point (0, 0), 5, Orientation.Vertical, BorderStyle.Double);
 
 
-			//Vertical line before Title (must cover 3 squares so it results in a ╡ intersection
-			lc.AddLine (new Point (1, -1), 3, Orientation.Vertical, BorderStyle.Single);
-			//Vertical line after Title (must cover 3 squares so it results in a ╞ intersection
-			lc.AddLine (new Point (6, -1), 3, Orientation.Vertical, BorderStyle.Single);
+			//Vertical line before Title, results in a ╡
+			lc.AddLine (new Point (1, 0), 0, Orientation.Vertical, BorderStyle.Single);
+			//Vertical line after Title, results in a ╞
+			lc.AddLine (new Point (6, 0), 0, Orientation.Vertical, BorderStyle.Single);
 
 
 			// remainder of title
 			// remainder of title
 			lc.AddLine (new Point (6, 0), 3, Orientation.Horizontal, BorderStyle.Double);
 			lc.AddLine (new Point (6, 0), 3, Orientation.Horizontal, BorderStyle.Double);
@@ -345,28 +331,85 @@ namespace Terminal.Gui.CoreTests {
 			TestHelpers.AssertDriverContentsAre (looksLike, output);
 			TestHelpers.AssertDriverContentsAre (looksLike, output);
 		}
 		}
 
 
-
-		[Fact, AutoInitShutdown]
-		public void TestLineCanvas_CreateT_With_1Length_Plus_0Length ()
+		[InlineData(0,0,0, Orientation.Horizontal,BorderStyle.Double,"═")]
+		[InlineData(0,0,0, Orientation.Vertical,BorderStyle.Double,"║")]
+		[InlineData(0,0,0, Orientation.Horizontal,BorderStyle.Single,"─")]
+		[InlineData(0,0,0, Orientation.Vertical,BorderStyle.Single,"│")]
+		[AutoInitShutdown, Theory]
+		public void TestLineCanvas_1LineTests(
+			int x1, int y1,int l1, Orientation o1, BorderStyle s1,
+			string expected
+		)
 		{
 		{
-			// Draw at 1,1 within client area of View (i.e. leave a top and left margin of 1)
 			var v = GetCanvas (out var lc);
 			var v = GetCanvas (out var lc);
 			v.Width = 10;
 			v.Width = 10;
-			v.Height = 1;
-			v.Bounds = new Rect (0, 0, 10, 1);
+			v.Height = 10;
+			v.Bounds = new Rect (0, 0, 10, 10);
 
 
-			// Create ═╡ with:
-			// A 1 width horizontal
-			lc.AddLine (new Point (0, 0), 1, Orientation.Horizontal, BorderStyle.Double);
-			// And a 0 length vertical 
-			lc.AddLine (new Point (1, 0), 0, Orientation.Vertical, BorderStyle.Single);
+			lc.AddLine (new Point (x1, y1), l1, o1, s1);
 
 
 			v.Redraw (v.Bounds);
 			v.Redraw (v.Bounds);
+		
+			TestHelpers.AssertDriverContentsAre (expected, output);
+		}
 
 
-			string looksLike =
-		@"═╡";
-			TestHelpers.AssertDriverContentsAre (looksLike, output);
+
+		[Theory, AutoInitShutdown]
+		[InlineData(
+			0,0,1,Orientation.Horizontal,BorderStyle.Double,
+			1,0,0, Orientation.Vertical,BorderStyle.Single, "═╡"
+		)]
+		[InlineData(
+			0,0,0, Orientation.Vertical,BorderStyle.Single,
+			0,0,1,Orientation.Horizontal,BorderStyle.Double,
+			 "╞═"
+		)]
+		[InlineData(
+			0,0,1, Orientation.Vertical,BorderStyle.Single,
+			0,0,0,Orientation.Horizontal,BorderStyle.Double,
+@"
+╤
+│"
+		)]
+		[InlineData(
+			0,0,1, Orientation.Vertical,BorderStyle.Single,
+			0,1,0,Orientation.Horizontal,BorderStyle.Double,
+			@"
+│
+╧
+"
+		)]
+		[InlineData(
+			0,0,0, Orientation.Vertical,BorderStyle.Single,
+			0,0,0,Orientation.Horizontal,BorderStyle.Single,
+			@"┼
+"
+		)]
+		[InlineData(
+			0,0,0, Orientation.Vertical,BorderStyle.Double,
+			0,0,0,Orientation.Horizontal,BorderStyle.Double,
+			@"╬
+"
+		)]
+		public void TestLineCanvas_2LineTests(
+			int x1, int y1,int l1, Orientation o1, BorderStyle s1,
+			int x2, int y2, int l2, Orientation o2, BorderStyle s2,
+			string expected
+		)
+		{
+			var v = GetCanvas (out var lc);
+			v.Width = 10;
+			v.Height = 10;
+			v.Bounds = new Rect (0, 0, 10, 10);
+
+			lc.AddLine (new Point (x1, y1), l1, o1, s1);
+			lc.AddLine (new Point (x2, y2), l2, o2, s2);
+
+			v.Redraw (v.Bounds);
+		
+			TestHelpers.AssertDriverContentsAre (expected, output);
 		}
 		}
+		
 
 
 		/// <summary>
 		/// <summary>
 		/// Creates a new <see cref="View"/> into which a <see cref="LineCanvas"/> is rendered
 		/// Creates a new <see cref="View"/> into which a <see cref="LineCanvas"/> is rendered