mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-30 01:38:01 +01:00
* Remove continous press code from Application * WIP prototype code to handle continuous press as subcomponent of View * Prototype with Button * Implement CWP * Move to seperate classes and prevent double entry to Start * Fix repeat clicking when moving mouse by removing phantom click code (old implementation of WantContinuousButtonPressed) * Remove initial tick because it results in double activation e.g. button firing twice immediately as mouse is pressed down. * Refactor DatePicker lamdas * WIP investigate subcomponents instead of statics * Add IMouseGrabHandler to IApplication * Make mouse grabbing non static activity * Make MouseHeldDown suppress when null fields e.g. app not initialized in tests * Update test and remove dependency on Application * Fix other mouse click and hold tests * Code cleanup * Update class diagram * Fix bad xml doc references * Fix timed events not getting passed through in v2 applications * Make timed events nullable for tests that dont create an Application * Remove strange blocking test * WIP remove all idles and replace with zero timeouts * Fix build of tests * Fix unit tests * Add wakeup call back in * Comment out incredibly complicated test and fix others * Fix test * test fix * Make Post execute immediately if already on UI thread * Re enable test and simplify Invoke to just execute if in UI thread (up front) * Remove xml doc references to idles * Remove more references to idles * Make Screen initialization threadsafe * Add more exciting timeouts * WIP add tests * fix log * fix test * make continuous key press use smoth acceleration * Rename _lock to _lockScreen * Remove section on idles, they are not a thing anymore - and they kinda never were. * Add nullable enable * Add xml comment * Fix namings and cleanup code * xmldoc fix * Rename LockAndRunTimers to just RunTimers * Rename AddTimeout and RemoveTimeout (and event) to just Add/Remove * Update description of MainLoop * Commented out Run_T_Call_Init_ForceDriver_Should_Pick_Correct_Driver * Again? Commented out Run_T_Call_Init_ForceDriver_Should_Pick_Correct_Driver * Revert Commented out Run_T_Call_Init_ForceDriver_Should_Pick_Correct_Driver * When mouse is released from MouseHeldDown reset host MouseState * Fix namespaces in class diagram * Apply @BDisp suggested fix * Fix class diagrams * Add lock * Make TimeSpan.Zero definetly run * Fix duplicate entry in package props --------- Co-authored-by: Tig <tig@users.noreply.github.com>
167 lines
4.8 KiB
C#
167 lines
4.8 KiB
C#
using UnitTests;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace Terminal.Gui.ViewTests;
|
|
|
|
public class ShadowStyleTests (ITestOutputHelper output)
|
|
{
|
|
[Theory]
|
|
[InlineData (
|
|
ShadowStyle.None,
|
|
"""
|
|
011
|
|
111
|
|
111
|
|
""")]
|
|
[InlineData (
|
|
ShadowStyle.Transparent,
|
|
"""
|
|
031
|
|
131
|
|
111
|
|
""")]
|
|
[InlineData (
|
|
ShadowStyle.Opaque,
|
|
"""
|
|
021
|
|
221
|
|
111
|
|
""")]
|
|
[SetupFakeDriver]
|
|
public void ShadowView_Colors (ShadowStyle style, string expectedAttrs)
|
|
{
|
|
((FakeDriver)Application.Driver!).SetBufferSize (5, 5);
|
|
Color fg = Color.Red;
|
|
Color bg = Color.Green;
|
|
|
|
// 0 - View
|
|
// 1 - SuperView
|
|
// 2 - Opaque - fg is Black, bg is SuperView.Bg
|
|
// 3 - Transparent - fg is darker fg, bg is darker bg
|
|
Attribute [] attributes =
|
|
{
|
|
Attribute.Default,
|
|
new (fg, bg),
|
|
new (Color.Black, bg),
|
|
new (fg.GetDimColor (), bg.GetDimColor ())
|
|
};
|
|
|
|
var superView = new Toplevel
|
|
{
|
|
Height = 3,
|
|
Width = 3,
|
|
Text = "012ABC!@#",
|
|
};
|
|
superView.SetScheme (new (new Attribute (fg, bg)));
|
|
superView.TextFormatter.WordWrap = true;
|
|
|
|
View view = new ()
|
|
{
|
|
Width = Dim.Auto (),
|
|
Height = Dim.Auto (),
|
|
Text = "*",
|
|
ShadowStyle = style,
|
|
};
|
|
view.SetScheme (new (Attribute.Default));
|
|
|
|
superView.Add (view);
|
|
Application.TopLevels.Push (superView);
|
|
Application.LayoutAndDraw (true);
|
|
DriverAssert.AssertDriverAttributesAre (expectedAttrs, output, Application.Driver, attributes);
|
|
Application.ResetState (true);
|
|
}
|
|
|
|
// Visual tests
|
|
[Theory]
|
|
[InlineData (
|
|
ShadowStyle.None,
|
|
"""
|
|
01#$
|
|
AB#$
|
|
!@#$
|
|
!@#$
|
|
""")]
|
|
[InlineData (
|
|
ShadowStyle.Opaque,
|
|
"""
|
|
01▖$
|
|
AB▌$
|
|
▝▀▘$
|
|
!@#$
|
|
""")]
|
|
[InlineData (
|
|
ShadowStyle.Transparent,
|
|
"""
|
|
01#$
|
|
AB#$
|
|
!@#$
|
|
!@#$
|
|
""")]
|
|
[SetupFakeDriver]
|
|
public void Visual_Test (ShadowStyle style, string expected)
|
|
{
|
|
((FakeDriver)Application.Driver!).SetBufferSize (5, 5);
|
|
|
|
var superView = new Toplevel
|
|
{
|
|
Width = 4,
|
|
Height = 4,
|
|
Text = "!@#$".Repeat (4)!
|
|
};
|
|
superView.TextFormatter.WordWrap = true;
|
|
|
|
var view = new View
|
|
{
|
|
Text = "01\nAB",
|
|
Width = Dim.Auto (),
|
|
Height = Dim.Auto ()
|
|
};
|
|
view.ShadowStyle = style;
|
|
superView.Add (view);
|
|
Application.TopLevels.Push (superView);
|
|
Application.LayoutAndDraw (true);
|
|
|
|
DriverAssert.AssertDriverContentsWithFrameAre (expected, output);
|
|
view.Dispose ();
|
|
Application.ResetState (true);
|
|
}
|
|
|
|
|
|
[Theory]
|
|
[InlineData (ShadowStyle.None, 0, 0, 0, 0)]
|
|
[InlineData (ShadowStyle.Opaque, 1, 0, 0, 1)]
|
|
[InlineData (ShadowStyle.Transparent, 1, 0, 0, 1)]
|
|
public void ShadowStyle_Button1Pressed_Causes_Movement (ShadowStyle style, int expectedLeft, int expectedTop, int expectedRight, int expectedBottom)
|
|
{
|
|
Application.Init (new FakeDriver ());
|
|
var superView = new View
|
|
{
|
|
Height = 10, Width = 10
|
|
};
|
|
|
|
View view = new ()
|
|
{
|
|
Width = Dim.Auto (),
|
|
Height = Dim.Auto (),
|
|
Text = "0123",
|
|
HighlightStates = MouseState.Pressed,
|
|
ShadowStyle = style,
|
|
CanFocus = true
|
|
};
|
|
|
|
superView.Add (view);
|
|
superView.BeginInit ();
|
|
superView.EndInit ();
|
|
|
|
Thickness origThickness = view.Margin!.Thickness;
|
|
view.NewMouseEvent (new () { Flags = MouseFlags.Button1Pressed, Position = new (0, 0) });
|
|
Assert.Equal (new (expectedLeft, expectedTop, expectedRight, expectedBottom), view.Margin.Thickness);
|
|
|
|
view.NewMouseEvent (new () { Flags = MouseFlags.Button1Released, Position = new (0, 0) });
|
|
Assert.Equal (origThickness, view.Margin.Thickness);
|
|
|
|
// Button1Pressed, Button1Released cause Application.MouseGrabHandler.MouseGrabView to be set
|
|
Application.ResetState (true);
|
|
}
|
|
}
|