Files
Terminal.Gui/Tests/UnitTests/View/Mouse/MouseEnterLeaveTests.cs
Tig b0f32811eb Fixes #3930 - Splits tests to Tests/UnitTests, Tests/IntegrationTests, Tests/StressTests (#3954)
* Tons of API doc updates

* Removed stale test

* Removed stale tests

* Fixed Skipped Shadow test 1

* Fixed Skipped Shadow test 2

* Fixed Skipped Shadow test 3

* Removed stale test

* Removed stale test2

* Explicit unregister of event handler on Application.Driver!.ClearedContents

* Added Toplevels to dict

* code cleanup

* spelling error

* Removed stale test3

* Removed stale test4

* Removed stale test5

* added script

* tweaked script

* tweaked script

* Created StressTests project; moved some tests

* Created IntegrationTests project; moved some tests

* New yml

* made old yml just unit tests

* Tweaked Button_IsDefault_Raises_Accepted_Correctly

* tweaked script

* cleaned up ymls

* tweakled up ymls

* stress tests...

* stress tests on ubuntu only

* Fixed WindowsDriver in InvokeLeakTest

* Fixed WindowsDriver in InvokeLeakTest2

* Added Directory.Packages.props.
Added Directory.Build.props

* Shortened StressTest time

* Removed dupe file.

* DemoFiles

* Moved all tests to ./Tests dir.

* Fixed release build issue

* Fixed .sln file

* Fixed .sl* files

* Fixing ymls

* Fixing interation tests

* Create link to the file TestHelpers.

* Created Tests/UnitTestsParallelizable.
Moved all obviously parallelizable tests.
Updated yml.

* fixing logs

* fixing logs2

* fixing logs3

* don't require stress to pass for PRs

* Fix a failure?

* tweaked script

* Coudl this be it?

* Moved tons of tests to parallelizable

* Fixed some stuff

* Script to find duplicate tests

* Testing workflows

* Updated to v4

* Fix RelativeBasePath issue

* Replace powershell to pwsh

* Add ignore projects.

* Removed dupe unit tests

* Code cleanup of tests

* Cleaned up test warnings

* yml tweak

* Moved setter

* tweak ymls

* just randomly throwing spaghetti at a wall

* Enable runing 5 test runners in par

* Turned off DEBUG_DISPOSABLE for par tests

* RunningUnitTests=true

* code cleanup (forcing more Action runs)

* DISABLE_DEBUG_IDISPOSABLE

* Added View.DebugIDisposable. False by default.

* Remobed bogus tareet

* Remobed bogus tareet2

* fixed warning

* added api doc

* fixed warning

* fixed warning

* fixed warning2

* fixed warning3

* fixed warning4

---------

Co-authored-by: BDisp <bd.bdisp@gmail.com>
2025-03-05 23:44:27 -07:00

350 lines
7.7 KiB
C#

using System.ComponentModel;
namespace Terminal.Gui.ViewMouseTests;
[Trait ("Category", "Input")]
public class MouseEnterLeaveTests
{
private class TestView : View
{
public TestView ()
{
MouseEnter += OnMouseEnterHandler;
MouseLeave += OnMouseLeaveHandler;
}
public bool CancelOnEnter { get; init; }
public bool CancelEnterEvent { get; init; }
public bool OnMouseEnterCalled { get; private set; }
public bool OnMouseLeaveCalled { get; private set; }
protected override bool OnMouseEnter (CancelEventArgs eventArgs)
{
OnMouseEnterCalled = true;
eventArgs.Cancel = CancelOnEnter;
base.OnMouseEnter (eventArgs);
return eventArgs.Cancel;
}
protected override void OnMouseLeave ()
{
OnMouseLeaveCalled = true;
base.OnMouseLeave ();
}
public bool MouseEnterRaised { get; private set; }
public bool MouseLeaveRaised { get; private set; }
private void OnMouseEnterHandler (object s, CancelEventArgs e)
{
MouseEnterRaised = true;
if (CancelEnterEvent)
{
e.Cancel = true;
}
}
private void OnMouseLeaveHandler (object s, EventArgs e) { MouseLeaveRaised = true; }
}
[Fact]
public void NewMouseEnterEvent_ViewIsEnabledAndVisible_CallsOnMouseEnter ()
{
// Arrange
var view = new TestView
{
Enabled = true,
Visible = true
};
var mouseEvent = new MouseEventArgs ();
var eventArgs = new CancelEventArgs ();
// Act
bool? cancelled = view.NewMouseEnterEvent (eventArgs);
// Assert
Assert.True (view.OnMouseEnterCalled);
Assert.False (cancelled);
Assert.False (eventArgs.Cancel);
// Cleanup
view.Dispose ();
}
[Fact]
public void NewMouseEnterEvent_ViewIsDisabled_CallsOnMouseEnter ()
{
// Arrange
var view = new TestView
{
Enabled = false,
Visible = true
};
var eventArgs = new CancelEventArgs ();
// Act
bool? cancelled = view.NewMouseEnterEvent (eventArgs);
// Assert
Assert.True (view.OnMouseEnterCalled);
Assert.False (cancelled);
Assert.False (eventArgs.Cancel);
// Cleanup
view.Dispose ();
}
[Fact]
public void NewMouseEnterEvent_ViewIsNotVisible_DoesNotCallOnMouseEnter ()
{
// Arrange
var view = new TestView
{
Enabled = true,
Visible = false
};
var eventArgs = new CancelEventArgs ();
// Act
bool? cancelled = view.NewMouseEnterEvent (eventArgs);
// Assert
Assert.False (view.OnMouseEnterCalled);
Assert.Null (cancelled);
Assert.False (eventArgs.Cancel);
// Cleanup
view.Dispose ();
}
[Fact]
public void NewMouseLeaveEvent_ViewIsVisible_CallsOnMouseLeave ()
{
// Arrange
var view = new TestView
{
Enabled = true, Visible = true
};
var mouseEvent = new MouseEventArgs ();
// Act
view.NewMouseLeaveEvent ();
// Assert
Assert.True (view.OnMouseLeaveCalled);
Assert.False (mouseEvent.Handled);
// Cleanup
view.Dispose ();
}
[Fact]
public void NewMouseLeaveEvent_ViewIsNotVisible_CallsOnMouseLeave ()
{
// Arrange
var view = new TestView
{
Enabled = true,
Visible = false
};
var mouseEvent = new MouseEventArgs ();
// Act
view.NewMouseLeaveEvent ();
// Assert
Assert.True (view.OnMouseLeaveCalled);
Assert.False (mouseEvent.Handled);
// Cleanup
view.Dispose ();
}
// Events
[Fact]
public void NewMouseEnterEvent_ViewIsEnabledAndVisible_RaisesMouseEnter ()
{
// Arrange
var view = new TestView
{
Enabled = true,
Visible = true
};
var eventArgs = new CancelEventArgs ();
// Act
bool? cancelled = view.NewMouseEnterEvent (eventArgs);
// Assert
Assert.True (view.MouseEnterRaised);
Assert.False (cancelled);
Assert.False (eventArgs.Cancel);
// Cleanup
view.Dispose ();
}
[Fact]
public void NewMouseEnterEvent_ViewIsDisabled_RaisesMouseEnter ()
{
// Arrange
var view = new TestView
{
Enabled = false,
Visible = true
};
var eventArgs = new CancelEventArgs ();
// Act
bool? cancelled = view.NewMouseEnterEvent (eventArgs);
// Assert
Assert.True (view.MouseEnterRaised);
Assert.False (cancelled);
Assert.False (eventArgs.Cancel);
// Cleanup
view.Dispose ();
}
[Fact]
public void NewMouseEnterEvent_ViewIsNotVisible_DoesNotRaiseMouseEnter ()
{
// Arrange
var view = new TestView
{
Enabled = true,
Visible = false
};
var eventArgs = new CancelEventArgs ();
// Act
bool? cancelled = view.NewMouseEnterEvent (eventArgs);
// Assert
Assert.False (view.MouseEnterRaised);
Assert.Null (cancelled);
Assert.False (eventArgs.Cancel);
// Cleanup
view.Dispose ();
}
[Fact]
public void NewMouseLeaveEvent_ViewIsVisible_RaisesMouseLeave ()
{
// Arrange
var view = new TestView
{
Enabled = true,
Visible = true
};
var mouseEvent = new MouseEventArgs ();
// Act
view.NewMouseLeaveEvent ();
// Assert
Assert.True (view.MouseLeaveRaised);
Assert.False (mouseEvent.Handled);
// Cleanup
view.Dispose ();
}
[Fact]
public void NewMouseLeaveEvent_ViewIsNotVisible_RaisesMouseLeave ()
{
// Arrange
var view = new TestView
{
Enabled = true,
Visible = false
};
var mouseEvent = new MouseEventArgs ();
// Act
view.NewMouseLeaveEvent ();
// Assert
Assert.True (view.MouseLeaveRaised);
Assert.False (mouseEvent.Handled);
// Cleanup
view.Dispose ();
}
// Handled tests
[Fact]
public void NewMouseEnterEvent_HandleOnMouseEnter_Event_Not_Raised ()
{
// Arrange
var view = new TestView
{
Enabled = true,
Visible = true,
CancelOnEnter = true
};
var eventArgs = new CancelEventArgs ();
// Act
bool? cancelled = view.NewMouseEnterEvent (eventArgs);
// Assert
Assert.True (view.OnMouseEnterCalled);
Assert.True (cancelled);
Assert.True (eventArgs.Cancel);
Assert.False (view.MouseEnterRaised);
// Cleanup
view.Dispose ();
}
[Fact]
public void NewMouseEnterEvent_HandleMouseEnterEvent ()
{
// Arrange
var view = new TestView
{
Enabled = true,
Visible = true,
CancelEnterEvent = true
};
var eventArgs = new CancelEventArgs ();
// Act
bool? cancelled = view.NewMouseEnterEvent (eventArgs);
// Assert
Assert.True (view.OnMouseEnterCalled);
Assert.True (cancelled);
Assert.True (eventArgs.Cancel);
Assert.True (view.MouseEnterRaised);
// Cleanup
view.Dispose ();
}
}