|
@@ -81,7 +81,169 @@ namespace Terminal.Gui.CoreTests {
|
|
Assert.Equal (new Thickness (5, 5, 5, 5), b.GetSumThickness ());
|
|
Assert.Equal (new Thickness (5, 5, 5, 5), b.GetSumThickness ());
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ [Fact]
|
|
|
|
+ [AutoInitShutdown]
|
|
|
|
+ public void DrawContent_With_Child_Border ()
|
|
|
|
+ {
|
|
|
|
+ var top = Application.Top;
|
|
|
|
+ var driver = (FakeDriver)Application.Driver;
|
|
|
|
+
|
|
|
|
+ var label = new Label () {
|
|
|
|
+ X = Pos.Center (),
|
|
|
|
+ Y = Pos.Center (),
|
|
|
|
+ Border = new Border () {
|
|
|
|
+ BorderStyle = BorderStyle.Single,
|
|
|
|
+ Padding = new Thickness (2),
|
|
|
|
+ BorderThickness = new Thickness (2),
|
|
|
|
+ BorderBrush = Color.Red,
|
|
|
|
+ Background = Color.BrightGreen,
|
|
|
|
+ Effect3D = true,
|
|
|
|
+ Effect3DOffset = new Point (2, -3)
|
|
|
|
+ },
|
|
|
|
+ ColorScheme = Colors.TopLevel,
|
|
|
|
+ Text = "This is a test"
|
|
|
|
+ };
|
|
|
|
+ label.Border.Child = label;
|
|
|
|
+ top.Add (label);
|
|
|
|
+
|
|
|
|
+ top.LayoutSubviews ();
|
|
|
|
+ label.Redraw (label.Bounds);
|
|
|
|
+
|
|
|
|
+ var frame = label.Frame;
|
|
|
|
+ var drawMarginFrame = label.Border.DrawMarginFrame ? 1 : 0;
|
|
|
|
+ var sumThickness = label.Border.GetSumThickness ();
|
|
|
|
+ var padding = label.Border.Padding;
|
|
|
|
+ var effect3DOffset = label.Border.Effect3DOffset;
|
|
|
|
+ var borderStyle = label.Border.BorderStyle;
|
|
|
|
+
|
|
|
|
+ // Check the upper BorderThickness
|
|
|
|
+ for (int r = frame.Y - drawMarginFrame - sumThickness.Top;
|
|
|
|
+ r < frame.Y - drawMarginFrame - padding.Top; r++) {
|
|
|
|
+ for (int c = frame.X - drawMarginFrame - sumThickness.Left;
|
|
|
|
+ c < frame.Right + drawMarginFrame + sumThickness.Right; c++) {
|
|
|
|
+
|
|
|
|
+ var color = (Attribute)driver.Contents [r, c, 1];
|
|
|
|
+ Assert.Equal (Color.Red, color.Background);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Check the left BorderThickness
|
|
|
|
+ for (int r = frame.Y - drawMarginFrame - padding.Top;
|
|
|
|
+ r < frame.Bottom + drawMarginFrame + padding.Bottom; r++) {
|
|
|
|
+ for (int c = frame.X - drawMarginFrame - sumThickness.Left;
|
|
|
|
+ c < frame.X - drawMarginFrame - padding.Left; c++) {
|
|
|
|
+
|
|
|
|
+ var color = (Attribute)driver.Contents [r, c, 1];
|
|
|
|
+ Assert.Equal (Color.Red, color.Background);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Check the right BorderThickness
|
|
|
|
+ for (int r = frame.Y - drawMarginFrame - padding.Top;
|
|
|
|
+ r < frame.Bottom + drawMarginFrame + padding.Bottom; r++) {
|
|
|
|
+ for (int c = frame.Right + drawMarginFrame + padding.Right;
|
|
|
|
+ c < frame.Right + drawMarginFrame - sumThickness.Right; c++) {
|
|
|
|
+
|
|
|
|
+ var color = (Attribute)driver.Contents [r, c, 1];
|
|
|
|
+ Assert.Equal (Color.Red, color.Background);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Check the lower BorderThickness
|
|
|
|
+ for (int r = frame.Bottom + drawMarginFrame + padding.Bottom;
|
|
|
|
+ r < frame.Bottom + drawMarginFrame + sumThickness.Bottom; r++) {
|
|
|
|
+ for (int c = frame.X - drawMarginFrame - sumThickness.Left;
|
|
|
|
+ c < frame.Right + drawMarginFrame + sumThickness.Right; c++) {
|
|
|
|
+
|
|
|
|
+ var color = (Attribute)driver.Contents [r, c, 1];
|
|
|
|
+ Assert.Equal (Color.Red, color.Background);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Check the upper Padding
|
|
|
|
+ for (int r = frame.Y - drawMarginFrame - padding.Top;
|
|
|
|
+ r < frame.Y - drawMarginFrame; r++) {
|
|
|
|
+ for (int c = frame.X - drawMarginFrame - padding.Left;
|
|
|
|
+ c < frame.Right + drawMarginFrame + padding.Right; c++) {
|
|
|
|
+
|
|
|
|
+ var color = (Attribute)driver.Contents [r, c, 1];
|
|
|
|
+ Assert.Equal (Color.BrightGreen, color.Background);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Check the left Padding
|
|
|
|
+ for (int r = frame.Y - drawMarginFrame;
|
|
|
|
+ r < frame.Bottom + drawMarginFrame; r++) {
|
|
|
|
+ for (int c = frame.X - drawMarginFrame - padding.Left;
|
|
|
|
+ c < frame.X - drawMarginFrame; c++) {
|
|
|
|
+
|
|
|
|
+ var color = (Attribute)driver.Contents [r, c, 1];
|
|
|
|
+ Assert.Equal (Color.BrightGreen, color.Background);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Check the right Padding
|
|
|
|
+ for (int r = frame.Y - drawMarginFrame;
|
|
|
|
+ r < frame.Bottom + drawMarginFrame; r++) {
|
|
|
|
+ for (int c = frame.Right + drawMarginFrame;
|
|
|
|
+ c < frame.Right + drawMarginFrame - padding.Right; c++) {
|
|
|
|
+
|
|
|
|
+ var color = (Attribute)driver.Contents [r, c, 1];
|
|
|
|
+ Assert.Equal (Color.BrightGreen, color.Background);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Check the lower Padding
|
|
|
|
+ for (int r = frame.Bottom + drawMarginFrame;
|
|
|
|
+ r < frame.Bottom + drawMarginFrame + padding.Bottom; r++) {
|
|
|
|
+ for (int c = frame.X - drawMarginFrame - padding.Left;
|
|
|
|
+ c < frame.Right + drawMarginFrame + padding.Right; c++) {
|
|
|
|
+
|
|
|
|
+ var color = (Attribute)driver.Contents [r, c, 1];
|
|
|
|
+ Assert.Equal (Color.BrightGreen, color.Background);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Rune hLine = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
|
|
|
|
+ ? driver.HLine : (borderStyle == BorderStyle.Double ? driver.HDLine : ' ')) : ' ';
|
|
|
|
+ Rune vLine = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
|
|
|
|
+ ? driver.VLine : (borderStyle == BorderStyle.Double ? driver.VDLine : ' ')) : ' ';
|
|
|
|
+ Rune uRCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
|
|
|
|
+ ? driver.URCorner : (borderStyle == BorderStyle.Double ? driver.URDCorner : ' ')) : ' ';
|
|
|
|
+ Rune uLCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
|
|
|
|
+ ? driver.ULCorner : (borderStyle == BorderStyle.Double ? driver.ULDCorner : ' ')) : ' ';
|
|
|
|
+ Rune lLCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
|
|
|
|
+ ? driver.LLCorner : (borderStyle == BorderStyle.Double ? driver.LLDCorner : ' ')) : ' ';
|
|
|
|
+ Rune lRCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
|
|
|
|
+ ? driver.LRCorner : (borderStyle == BorderStyle.Double ? driver.LRDCorner : ' ')) : ' ';
|
|
|
|
+
|
|
|
|
+ var text = "";
|
|
|
|
+ // Check the MarginFrame
|
|
|
|
+ for (int r = frame.Y - drawMarginFrame;
|
|
|
|
+ r < frame.Bottom + drawMarginFrame; r++) {
|
|
|
|
+ for (int c = frame.X - drawMarginFrame;
|
|
|
|
+ c <= frame.Right + drawMarginFrame - 1; c++) {
|
|
|
|
+
|
|
|
|
+ var color = (Attribute)driver.Contents [r, c, 1];
|
|
|
|
+ var rune = (Rune)driver.Contents [r, c, 0];
|
|
|
|
+ Assert.Equal (Color.Black, color.Background);
|
|
|
|
+ if (c == frame.X - drawMarginFrame && r == frame.Y - drawMarginFrame) {
|
|
|
|
+ Assert.Equal (uLCorner, rune);
|
|
|
|
+ } else if (c == frame.Right && r == frame.Y - drawMarginFrame) {
|
|
|
|
+ Assert.Equal (uRCorner, rune);
|
|
|
|
+ } else if (c == frame.X - drawMarginFrame && r == frame.Bottom) {
|
|
|
|
+ Assert.Equal (lLCorner, rune);
|
|
|
|
+ } else if (c == frame.Right && r == frame.Bottom) {
|
|
|
|
+ Assert.Equal (lRCorner, rune);
|
|
|
|
+ } else if (c >= frame.X && (r == frame.Y - drawMarginFrame
|
|
|
|
+ || r == frame.Bottom)) {
|
|
|
|
+ Assert.Equal (hLine, rune);
|
|
|
|
+ } else if ((c == frame.X - drawMarginFrame || c == frame.Right)
|
|
|
|
+ && r >= frame.Y && r <= frame.Bottom - drawMarginFrame) {
|
|
|
|
+ Assert.Equal (vLine, rune);
|
|
|
|
+ } else {
|
|
|
|
+ text += rune.ToString ();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Assert.Equal ("This is a test", text.Trim ());
|
|
Assert.Equal ("This is a test", text.Trim ());
|