mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-02-10 04:03:41 +01:00
Refactor test code: explicit types, input injection, cleanup
- Consolidate ColorPicker16 tests into ColorPickerTests.cs
- Replace target-typed new and tuple-style constructors with explicit types (e.g., new Mouse, new Rectangle)
- Refactor mouse event simulation to use Mouse objects and Application input injection methods
- Improve test setup with VirtualTimeProvider and IApplication for isolation
- Remove redundant Clicking_On_Border_Is_Ignored test from ListViewTests
- Use new string(' ', n) for string construction
- Make variable initializations more explicit for clarity
- Modernize and clarify test code for maintainability and compatibility
This commit is contained in:
@@ -1,79 +0,0 @@
|
||||
using UnitTests;
|
||||
|
||||
namespace UnitTests.ViewsTests;
|
||||
|
||||
public class ColorPicker16Tests
|
||||
{
|
||||
[Fact]
|
||||
public void Constructors ()
|
||||
{
|
||||
var colorPicker = new ColorPicker16 ();
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
Assert.Equal (Point.Empty, colorPicker.Caret);
|
||||
Assert.True (colorPicker.CanFocus);
|
||||
|
||||
colorPicker.BeginInit ();
|
||||
colorPicker.EndInit ();
|
||||
colorPicker.LayoutSubViews ();
|
||||
Assert.Equal (new (0, 0, 32, 4), colorPicker.Frame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void KeyBindings_Command ()
|
||||
{
|
||||
var colorPicker = new ColorPicker16 ();
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
|
||||
Assert.True (colorPicker.NewKeyDownEvent (Key.CursorRight));
|
||||
Assert.Equal (ColorName16.Blue, colorPicker.SelectedColor);
|
||||
|
||||
Assert.True (colorPicker.NewKeyDownEvent (Key.CursorDown));
|
||||
Assert.Equal (ColorName16.BrightBlue, colorPicker.SelectedColor);
|
||||
|
||||
Assert.True (colorPicker.NewKeyDownEvent (Key.CursorLeft));
|
||||
Assert.Equal (ColorName16.DarkGray, colorPicker.SelectedColor);
|
||||
|
||||
Assert.True (colorPicker.NewKeyDownEvent (Key.CursorUp));
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
|
||||
colorPicker.NewKeyDownEvent (Key.CursorLeft);
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
|
||||
colorPicker.NewKeyDownEvent (Key.CursorUp);
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[AutoInitShutdown]
|
||||
public void MouseEvents ()
|
||||
{
|
||||
var colorPicker = new ColorPicker16 { X = 0, Y = 0, Height = 4, Width = 32 };
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
var top = new Runnable ();
|
||||
top.Add (colorPicker);
|
||||
Application.Begin (top);
|
||||
|
||||
colorPicker.NewMouseEvent (new () { Position = new (4, 1), Flags = MouseFlags.LeftButtonPressed });
|
||||
Assert.Equal (ColorName16.Blue, colorPicker.SelectedColor);
|
||||
top.Dispose ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SelectedColorAndCursor ()
|
||||
{
|
||||
var colorPicker = new ColorPicker16 ();
|
||||
colorPicker.SelectedColor = ColorName16.White;
|
||||
Assert.Equal (7, colorPicker.Caret.X);
|
||||
Assert.Equal (1, colorPicker.Caret.Y);
|
||||
|
||||
colorPicker.SelectedColor = Color.Black;
|
||||
Assert.Equal (0, colorPicker.Caret.X);
|
||||
Assert.Equal (0, colorPicker.Caret.Y);
|
||||
|
||||
colorPicker.Caret = new (7, 1);
|
||||
Assert.Equal (ColorName16.White, colorPicker.SelectedColor);
|
||||
|
||||
colorPicker.Caret = Point.Empty;
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
}
|
||||
}
|
||||
@@ -61,8 +61,8 @@ public class ButtonTests
|
||||
btn1.Width = width;
|
||||
btn1.Height = height;
|
||||
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), btn1.Frame.Size);
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), btn1.Viewport.Size);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.Frame.Size);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.Viewport.Size);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.ConstrainToSize);
|
||||
|
||||
btn1.Dispose ();
|
||||
@@ -90,9 +90,9 @@ public class ButtonTests
|
||||
{
|
||||
var btn1 = new Button { ShadowStyle = ShadowStyle.None, Text = text, Width = width, Height = height };
|
||||
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), btn1.Frame.Size);
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), btn1.Viewport.Size);
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), btn1.GetContentSize ());
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.Frame.Size);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.Viewport.Size);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.GetContentSize ());
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.ConstrainToSize);
|
||||
|
||||
btn1.Dispose ();
|
||||
@@ -337,21 +337,21 @@ public class ButtonTests
|
||||
Assert.Equal (0, activatingCount);
|
||||
Assert.Equal (0, acceptingCount);
|
||||
|
||||
button.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
button.NewMouseEvent (new Mouse { Position = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (1, activatingCount);
|
||||
Assert.Equal (1, acceptingCount);
|
||||
|
||||
button.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
button.NewMouseEvent (new Mouse { Position = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (2, activatingCount);
|
||||
Assert.Equal (2, acceptingCount);
|
||||
|
||||
// Disable Mouse Highlighting to test that it does not interfere with Accepting event
|
||||
button.MouseHighlightStates = MouseState.None;
|
||||
button.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
button.NewMouseEvent (new Mouse { Position = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (3, activatingCount);
|
||||
Assert.Equal (3, acceptingCount);
|
||||
|
||||
button.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
button.NewMouseEvent (new Mouse { Position = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (4, activatingCount);
|
||||
Assert.Equal (4, acceptingCount);
|
||||
}
|
||||
@@ -395,15 +395,20 @@ public class ButtonTests
|
||||
IInputInjector injector = app.GetInputInjector ();
|
||||
|
||||
// First click
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) },
|
||||
options);
|
||||
|
||||
Assert.Equal (1, acceptingCount);
|
||||
Assert.Equal (1, activatingCount);
|
||||
|
||||
// Second click - more than 500ms later to avoid double-click detection
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (600) }, options);
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (650) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (600) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (650) },
|
||||
options);
|
||||
|
||||
Assert.Equal (2, acceptingCount);
|
||||
Assert.Equal (2, activatingCount);
|
||||
@@ -458,8 +463,10 @@ public class ButtonTests
|
||||
// First click - when MouseHighlightStates = None:
|
||||
// - Pressed event fires Activating (Command.Activate)
|
||||
// - Clicked event fires both Activating and Accepting (Command.Accept)
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) },
|
||||
options);
|
||||
|
||||
// Activating: 1 from Pressed + 1 from Clicked = 2
|
||||
// Accepting: 1 from Clicked only = 1
|
||||
@@ -467,8 +474,11 @@ public class ButtonTests
|
||||
Assert.Equal (1, acceptingCount);
|
||||
|
||||
// Second click - more than 500ms later to avoid double-click detection
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (600) }, options);
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (650) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (600) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (650) },
|
||||
options);
|
||||
|
||||
// Activating: previous 2 + 1 from Pressed + 1 from Clicked = 4
|
||||
// Accepting: previous 1 + 1 from Clicked = 2
|
||||
@@ -476,9 +486,10 @@ public class ButtonTests
|
||||
Assert.Equal (2, acceptingCount);
|
||||
|
||||
// Third click - verify it continues to work
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (1200) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (1200) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (1250) },
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (1250) },
|
||||
options);
|
||||
|
||||
// Activating: previous 4 + 1 from Pressed + 1 from Clicked = 6
|
||||
@@ -487,9 +498,10 @@ public class ButtonTests
|
||||
Assert.Equal (3, acceptingCount);
|
||||
|
||||
// Fourth click - verify consistency
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (1800) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (1800) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (1850) },
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (1850) },
|
||||
options);
|
||||
|
||||
// Activating: previous 6 + 1 from Pressed + 1 from Clicked = 8
|
||||
@@ -537,18 +549,21 @@ public class ButtonTests
|
||||
IInputInjector injector = app.GetInputInjector ();
|
||||
|
||||
// Inject Press and Release to generate a Clicked event
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) },
|
||||
options);
|
||||
|
||||
// Assert - Button should receive Clicked event and fire both Activating and Accepting
|
||||
Assert.Equal (1, activatingCount);
|
||||
Assert.Equal (1, acceptingCount);
|
||||
|
||||
// Act - Second click with timestamp spacing >500ms should be a new single click
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (600) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (600) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (650) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (650) },
|
||||
options);
|
||||
|
||||
// Assert - Should fire again (two independent single clicks, not a double-click)
|
||||
Assert.Equal (2, activatingCount);
|
||||
@@ -596,14 +611,17 @@ public class ButtonTests
|
||||
IInputInjector injector = app.GetInputInjector ();
|
||||
|
||||
// First click
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) },
|
||||
options);
|
||||
|
||||
// Second click within 500ms threshold
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (300) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (300) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (350) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (350) },
|
||||
options);
|
||||
|
||||
// Assert - Should receive a double-click event (timestamp spacing allows multi-click)
|
||||
// We don't assert exact count since View may emit additional events,
|
||||
@@ -656,14 +674,17 @@ public class ButtonTests
|
||||
IInputInjector injector = app.GetInputInjector ();
|
||||
|
||||
// First click
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) },
|
||||
options);
|
||||
|
||||
// Second click within 500ms threshold (creates double-click, but we ignore Click events)
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (300) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (300) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (350) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (350) },
|
||||
options);
|
||||
|
||||
// Assert - Should fire Accept twice (one per Press/Release cycle)
|
||||
// MouseHoldRepeat uses Press/Release events only, ignoring Click/DoubleClick synthesized events
|
||||
@@ -712,8 +733,10 @@ public class ButtonTests
|
||||
IInputInjector injector = app.GetInputInjector ();
|
||||
|
||||
// Quick single click - press and release within 50ms (too fast for timer to start)
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) },
|
||||
options);
|
||||
|
||||
// Should fire Accept once from the Clicked event
|
||||
Assert.Equal (1, acceptingCount);
|
||||
@@ -757,19 +780,24 @@ public class ButtonTests
|
||||
IInputInjector injector = app.GetInputInjector ();
|
||||
|
||||
// First click
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) },
|
||||
options);
|
||||
|
||||
// Second click
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (200) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (200) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (250) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (250) },
|
||||
options);
|
||||
|
||||
// Third click
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (400) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (400) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (450) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (450) },
|
||||
options);
|
||||
|
||||
// Assert - Should fire Accept three times (one per Press/Release cycle)
|
||||
// MouseHoldRepeat uses Press/Release events only, ignoring Click/DoubleClick/TripleClick synthesized events
|
||||
@@ -818,21 +846,27 @@ public class ButtonTests
|
||||
IInputInjector injector = app.GetInputInjector ();
|
||||
|
||||
// First click
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime }, options);
|
||||
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (50) },
|
||||
options);
|
||||
|
||||
Assert.Equal (1, acceptingCount);
|
||||
|
||||
// Second click - more than 500ms later (not a double-click)
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (600) }, options);
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (650) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (600) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (650) },
|
||||
options);
|
||||
|
||||
Assert.Equal (2, acceptingCount);
|
||||
|
||||
// Third click - more than 500ms after second
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (1200) }, options);
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonPressed, Timestamp = baseTime.AddMilliseconds (1200) },
|
||||
options);
|
||||
|
||||
injector.InjectMouse (new () { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (1250) },
|
||||
injector.InjectMouse (new Mouse { ScreenPosition = clickPos, Flags = MouseFlags.LeftButtonReleased, Timestamp = baseTime.AddMilliseconds (1250) },
|
||||
options);
|
||||
|
||||
Assert.Equal (3, acceptingCount);
|
||||
|
||||
@@ -26,7 +26,15 @@ public class CheckBoxTests
|
||||
[Fact]
|
||||
public void AllowCheckStateNone_Get_Set ()
|
||||
{
|
||||
// Arrange
|
||||
VirtualTimeProvider time = new ();
|
||||
using IApplication app = Application.Create (time);
|
||||
app.Init (DriverRegistry.Names.ANSI);
|
||||
IRunnable runnable = new Runnable ();
|
||||
|
||||
var checkBox = new CheckBox { Text = "Check this out 你" };
|
||||
(runnable as View)?.Add (checkBox);
|
||||
app.Begin (runnable);
|
||||
|
||||
checkBox.HasFocus = true;
|
||||
Assert.True (checkBox.HasFocus);
|
||||
@@ -37,7 +45,7 @@ public class CheckBoxTests
|
||||
Assert.Equal (CheckState.Checked, checkBox.Value);
|
||||
|
||||
// Select with mouse
|
||||
Assert.True (checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.LeftButtonReleased }));
|
||||
app.InjectSequence (InputInjectionExtensions.LeftButtonClick (Point.Empty));
|
||||
Assert.Equal (CheckState.UnChecked, checkBox.Value);
|
||||
|
||||
checkBox.AllowCheckStateNone = true;
|
||||
@@ -59,9 +67,9 @@ public class CheckBoxTests
|
||||
{
|
||||
var checkBox = new CheckBox { X = 0, Y = 0, Width = width, Height = height };
|
||||
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Frame.Size);
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Viewport.Size);
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), checkBox.TextFormatter.ConstrainToSize);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), checkBox.Frame.Size);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), checkBox.Viewport.Size);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), checkBox.TextFormatter.ConstrainToSize);
|
||||
|
||||
checkBox.Dispose ();
|
||||
}
|
||||
@@ -96,9 +104,9 @@ public class CheckBoxTests
|
||||
};
|
||||
checkBox.Layout ();
|
||||
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Frame.Size);
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Viewport.Size);
|
||||
Assert.Equal (new (expectedWidth, expectedHeight), checkBox.TextFormatter.ConstrainToSize);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), checkBox.Frame.Size);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), checkBox.Viewport.Size);
|
||||
Assert.Equal (new Size (expectedWidth, expectedHeight), checkBox.TextFormatter.ConstrainToSize);
|
||||
|
||||
checkBox.Dispose ();
|
||||
}
|
||||
@@ -281,9 +289,9 @@ public class CheckBoxTests
|
||||
Assert.Equal (string.Empty, ckb.Text);
|
||||
Assert.Equal ($"{Glyphs.CheckStateUnChecked} ", ckb.TextFormatter.Text);
|
||||
Assert.True (ckb.CanFocus);
|
||||
Assert.Equal (new (0, 0, 2, 1), ckb.Frame);
|
||||
Assert.Equal (new Rectangle (0, 0, 2, 1), ckb.Frame);
|
||||
|
||||
ckb = new () { Text = "Test", Value = CheckState.Checked };
|
||||
ckb = new CheckBox { Text = "Test", Value = CheckState.Checked };
|
||||
Assert.True (ckb.Width is DimAuto);
|
||||
Assert.True (ckb.Height is DimAuto);
|
||||
ckb.Layout ();
|
||||
@@ -292,9 +300,9 @@ public class CheckBoxTests
|
||||
Assert.Equal ("Test", ckb.Text);
|
||||
Assert.Equal ($"{Glyphs.CheckStateChecked} Test", ckb.TextFormatter.Text);
|
||||
Assert.True (ckb.CanFocus);
|
||||
Assert.Equal (new (0, 0, 6, 1), ckb.Frame);
|
||||
Assert.Equal (new Rectangle (0, 0, 6, 1), ckb.Frame);
|
||||
|
||||
ckb = new () { Text = "Test", X = 1, Y = 2 };
|
||||
ckb = new CheckBox { Text = "Test", X = 1, Y = 2 };
|
||||
Assert.True (ckb.Width is DimAuto);
|
||||
Assert.True (ckb.Height is DimAuto);
|
||||
ckb.Layout ();
|
||||
@@ -303,9 +311,9 @@ public class CheckBoxTests
|
||||
Assert.Equal ("Test", ckb.Text);
|
||||
Assert.Equal ($"{Glyphs.CheckStateUnChecked} Test", ckb.TextFormatter.Text);
|
||||
Assert.True (ckb.CanFocus);
|
||||
Assert.Equal (new (1, 2, 6, 1), ckb.Frame);
|
||||
Assert.Equal (new Rectangle (1, 2, 6, 1), ckb.Frame);
|
||||
|
||||
ckb = new () { Text = "Test", X = 3, Y = 4, Value = CheckState.Checked };
|
||||
ckb = new CheckBox { Text = "Test", X = 3, Y = 4, Value = CheckState.Checked };
|
||||
Assert.True (ckb.Width is DimAuto);
|
||||
Assert.True (ckb.Height is DimAuto);
|
||||
ckb.Layout ();
|
||||
@@ -314,49 +322,77 @@ public class CheckBoxTests
|
||||
Assert.Equal ("Test", ckb.Text);
|
||||
Assert.Equal ($"{Glyphs.CheckStateChecked} Test", ckb.TextFormatter.Text);
|
||||
Assert.True (ckb.CanFocus);
|
||||
Assert.Equal (new (3, 4, 6, 1), ckb.Frame);
|
||||
Assert.Equal (new Rectangle (3, 4, 6, 1), ckb.Frame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LeftButtonReleased_Activates ()
|
||||
{
|
||||
var checkBox = new CheckBox { Text = "_Checkbox" };
|
||||
Assert.True (checkBox.CanFocus);
|
||||
// Arrange
|
||||
VirtualTimeProvider time = new ();
|
||||
using IApplication app = Application.Create (time);
|
||||
app.Init (DriverRegistry.Names.ANSI);
|
||||
IRunnable runnable = new Runnable ();
|
||||
|
||||
var checkBox = new CheckBox { Text = "Check this out 你" };
|
||||
(runnable as View)?.Add (checkBox);
|
||||
app.Begin (runnable);
|
||||
|
||||
var checkedStateChangingCount = 0;
|
||||
checkBox.ValueChanging += (s, e) => checkedStateChangingCount++;
|
||||
|
||||
var selectCount = 0;
|
||||
checkBox.Activating += (s, e) => selectCount++;
|
||||
var activatingCount = 0;
|
||||
checkBox.Activating += (s, e) => activatingCount++;
|
||||
|
||||
var acceptCount = 0;
|
||||
checkBox.Accepting += (s, e) => acceptCount++;
|
||||
var acceptingCount = 0;
|
||||
checkBox.Accepting += (s, e) => acceptingCount++;
|
||||
|
||||
checkBox.HasFocus = true;
|
||||
Assert.True (checkBox.HasFocus);
|
||||
Assert.Equal (CheckState.UnChecked, checkBox.Value);
|
||||
Assert.Equal (0, checkedStateChangingCount);
|
||||
Assert.Equal (0, selectCount);
|
||||
Assert.Equal (0, acceptCount);
|
||||
Assert.Equal (0, activatingCount);
|
||||
Assert.Equal (0, acceptingCount);
|
||||
|
||||
Assert.True (checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.LeftButtonPressed }));
|
||||
app.InjectMouse (new Mouse { Flags = MouseFlags.LeftButtonPressed, ScreenPosition = Point.Empty });
|
||||
Assert.Equal (CheckState.UnChecked, checkBox.Value);
|
||||
Assert.Equal (0, checkedStateChangingCount);
|
||||
Assert.Equal (0, activatingCount);
|
||||
Assert.Equal (0, acceptingCount);
|
||||
|
||||
app.InjectMouse (new Mouse { Flags = MouseFlags.LeftButtonReleased, ScreenPosition = Point.Empty });
|
||||
Assert.Equal (CheckState.Checked, checkBox.Value);
|
||||
Assert.Equal (1, checkedStateChangingCount);
|
||||
Assert.Equal (1, selectCount);
|
||||
Assert.Equal (0, acceptCount);
|
||||
|
||||
Assert.True (checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.LeftButtonReleased }));
|
||||
Assert.Equal (CheckState.UnChecked, checkBox.Value);
|
||||
Assert.Equal (2, checkedStateChangingCount);
|
||||
Assert.Equal (2, selectCount);
|
||||
Assert.Equal (0, acceptCount);
|
||||
Assert.Equal (1, activatingCount);
|
||||
Assert.Equal (0, acceptingCount);
|
||||
|
||||
checkBox.AllowCheckStateNone = true;
|
||||
Assert.True (checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.LeftButtonReleased }));
|
||||
|
||||
// Delay 500ms to prevent double click detection
|
||||
app.InjectMouse (new Mouse { Flags = MouseFlags.LeftButtonPressed, ScreenPosition = Point.Empty, Timestamp = time.Now.AddMilliseconds (500) });
|
||||
Assert.Equal (CheckState.Checked, checkBox.Value);
|
||||
Assert.Equal (1, checkedStateChangingCount);
|
||||
Assert.Equal (1, activatingCount);
|
||||
Assert.Equal (0, acceptingCount);
|
||||
|
||||
app.InjectMouse (new Mouse { Flags = MouseFlags.LeftButtonReleased, ScreenPosition = Point.Empty });
|
||||
Assert.Equal (CheckState.UnChecked, checkBox.Value);
|
||||
Assert.Equal (2, checkedStateChangingCount);
|
||||
Assert.Equal (2, activatingCount);
|
||||
Assert.Equal (0, acceptingCount);
|
||||
|
||||
// Delay 500ms to prevent double click detection
|
||||
app.InjectMouse (new Mouse { Flags = MouseFlags.LeftButtonPressed, ScreenPosition = Point.Empty, Timestamp = time.Now.AddMilliseconds (500) });
|
||||
Assert.Equal (CheckState.UnChecked, checkBox.Value);
|
||||
Assert.Equal (2, checkedStateChangingCount);
|
||||
Assert.Equal (2, activatingCount);
|
||||
Assert.Equal (0, acceptingCount);
|
||||
|
||||
app.InjectMouse (new Mouse { Flags = MouseFlags.LeftButtonReleased, ScreenPosition = Point.Empty });
|
||||
Assert.Equal (CheckState.None, checkBox.Value);
|
||||
Assert.Equal (3, checkedStateChangingCount);
|
||||
Assert.Equal (3, selectCount);
|
||||
Assert.Equal (0, acceptCount);
|
||||
Assert.Equal (3, activatingCount);
|
||||
Assert.Equal (0, acceptingCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -386,7 +422,7 @@ public class CheckBoxTests
|
||||
Assert.Equal (0, selectCount);
|
||||
Assert.Equal (0, acceptCount);
|
||||
|
||||
checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.LeftButtonDoubleClicked });
|
||||
checkBox.NewMouseEvent (new Mouse { Position = new Point (0, 0), Flags = MouseFlags.LeftButtonDoubleClicked });
|
||||
|
||||
Assert.Equal (CheckState.UnChecked, checkBox.Value);
|
||||
Assert.Equal (0, checkedStateChangingCount);
|
||||
|
||||
@@ -6,6 +6,83 @@ namespace ViewsTests;
|
||||
/// </summary>
|
||||
public class ColorPickerTests
|
||||
{
|
||||
|
||||
[Fact]
|
||||
public void ColorPicker16_MouseEvents ()
|
||||
{
|
||||
// Arrange
|
||||
VirtualTimeProvider time = new ();
|
||||
using IApplication app = Application.Create (time);
|
||||
app.Init (DriverRegistry.Names.ANSI);
|
||||
IRunnable runnable = new Runnable ();
|
||||
|
||||
ColorPicker16 colorPicker = new () { X = 0, Y = 0, Height = 4, Width = 32 };
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
((View)runnable).Add (colorPicker);
|
||||
app.Begin (runnable);
|
||||
|
||||
app.InjectSequence (InputInjectionExtensions.LeftButtonClick (new Point (4, 1)));
|
||||
Assert.Equal (ColorName16.Blue, colorPicker.SelectedColor);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ColorPicker16_Constructors ()
|
||||
{
|
||||
var colorPicker = new ColorPicker16 ();
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
Assert.Equal (Point.Empty, colorPicker.Caret);
|
||||
Assert.True (colorPicker.CanFocus);
|
||||
|
||||
colorPicker.BeginInit ();
|
||||
colorPicker.EndInit ();
|
||||
colorPicker.LayoutSubViews ();
|
||||
Assert.Equal (new (0, 0, 32, 4), colorPicker.Frame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ColorPicker16_KeyBindings_Command ()
|
||||
{
|
||||
var colorPicker = new ColorPicker16 ();
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
|
||||
Assert.True (colorPicker.NewKeyDownEvent (Key.CursorRight));
|
||||
Assert.Equal (ColorName16.Blue, colorPicker.SelectedColor);
|
||||
|
||||
Assert.True (colorPicker.NewKeyDownEvent (Key.CursorDown));
|
||||
Assert.Equal (ColorName16.BrightBlue, colorPicker.SelectedColor);
|
||||
|
||||
Assert.True (colorPicker.NewKeyDownEvent (Key.CursorLeft));
|
||||
Assert.Equal (ColorName16.DarkGray, colorPicker.SelectedColor);
|
||||
|
||||
Assert.True (colorPicker.NewKeyDownEvent (Key.CursorUp));
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
|
||||
colorPicker.NewKeyDownEvent (Key.CursorLeft);
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
|
||||
colorPicker.NewKeyDownEvent (Key.CursorUp);
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SelectedColorAndCursor ()
|
||||
{
|
||||
var colorPicker = new ColorPicker16 ();
|
||||
colorPicker.SelectedColor = ColorName16.White;
|
||||
Assert.Equal (7, colorPicker.Caret.X);
|
||||
Assert.Equal (1, colorPicker.Caret.Y);
|
||||
|
||||
colorPicker.SelectedColor = Color.Black;
|
||||
Assert.Equal (0, colorPicker.Caret.X);
|
||||
Assert.Equal (0, colorPicker.Caret.Y);
|
||||
|
||||
colorPicker.Caret = new (7, 1);
|
||||
Assert.Equal (ColorName16.White, colorPicker.SelectedColor);
|
||||
|
||||
colorPicker.Caret = Point.Empty;
|
||||
Assert.Equal (ColorName16.Black, colorPicker.SelectedColor);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ChangedEvent_Fires ()
|
||||
{
|
||||
|
||||
@@ -135,23 +135,23 @@ public class ListViewTests (ITestOutputHelper output)
|
||||
Assert.Null (lv.SelectedItem);
|
||||
Assert.False (lv.MarkMultiple);
|
||||
|
||||
lv = new () { Source = new ListWrapper<string> (["One", "Two", "Three"]) };
|
||||
lv = new ListView { Source = new ListWrapper<string> (["One", "Two", "Three"]) };
|
||||
Assert.NotNull (lv.Source);
|
||||
Assert.Null (lv.SelectedItem);
|
||||
|
||||
lv = new () { Source = new NewListDataSource () };
|
||||
lv = new ListView { Source = new NewListDataSource () };
|
||||
Assert.NotNull (lv.Source);
|
||||
Assert.Null (lv.SelectedItem);
|
||||
|
||||
lv = new () { Y = 1, Width = 10, Height = 20, Source = new ListWrapper<string> (["One", "Two", "Three"]) };
|
||||
lv = new ListView { Y = 1, Width = 10, Height = 20, Source = new ListWrapper<string> (["One", "Two", "Three"]) };
|
||||
Assert.NotNull (lv.Source);
|
||||
Assert.Null (lv.SelectedItem);
|
||||
Assert.Equal (new (0, 1, 10, 20), lv.Frame);
|
||||
Assert.Equal (new Rectangle (0, 1, 10, 20), lv.Frame);
|
||||
|
||||
lv = new () { Y = 1, Width = 10, Height = 20, Source = new NewListDataSource () };
|
||||
lv = new ListView { Y = 1, Width = 10, Height = 20, Source = new NewListDataSource () };
|
||||
Assert.NotNull (lv.Source);
|
||||
Assert.Null (lv.SelectedItem);
|
||||
Assert.Equal (new (0, 1, 10, 20), lv.Frame);
|
||||
Assert.Equal (new Rectangle (0, 1, 10, 20), lv.Frame);
|
||||
}
|
||||
|
||||
private class NewListDataSource : IListDataSource
|
||||
@@ -440,7 +440,7 @@ public class ListViewTests (ITestOutputHelper output)
|
||||
Assert.Equal (1, lw.StartsWith ("TW"));
|
||||
Assert.Equal (2, lw.StartsWith ("TH"));
|
||||
|
||||
lw = new (["One", "Two", "Three"]);
|
||||
lw = new ListWrapper<string> (["One", "Two", "Three"]);
|
||||
|
||||
Assert.Equal (1, lw.StartsWith ("t"));
|
||||
Assert.Equal (1, lw.StartsWith ("tw"));
|
||||
@@ -483,7 +483,7 @@ public class ListViewTests (ITestOutputHelper output)
|
||||
lv.Source = null;
|
||||
Assert.Null (lv.Source);
|
||||
|
||||
lv = new () { Source = new ListWrapper<string> (["One", "Two"]) };
|
||||
lv = new ListView { Source = new ListWrapper<string> (["One", "Two"]) };
|
||||
Assert.NotNull (lv.Source);
|
||||
|
||||
lv.SetSourceAsync<string> (null);
|
||||
@@ -800,7 +800,7 @@ public class ListViewTests (ITestOutputHelper output)
|
||||
lw.CollectionChanged += Lw_CollectionChanged;
|
||||
|
||||
lw.Dispose ();
|
||||
lw = new (null);
|
||||
lw = new ListWrapper<string> (null);
|
||||
Assert.Equal (0, lw.Count);
|
||||
Assert.Equal (0, added);
|
||||
Assert.Equal (0, removed);
|
||||
@@ -916,61 +916,6 @@ public class ListViewTests (ITestOutputHelper output)
|
||||
|
||||
#endregion
|
||||
|
||||
[Fact]
|
||||
public void Clicking_On_Border_Is_Ignored ()
|
||||
{
|
||||
IApplication? app = Application.Create ();
|
||||
app.Init (DriverRegistry.Names.ANSI);
|
||||
|
||||
var selected = "";
|
||||
|
||||
var lv = new ListView { Height = 5, Width = 7, BorderStyle = LineStyle.Single };
|
||||
lv.SetSource (["One", "Two", "Three", "Four"]);
|
||||
lv.ValueChanged += (_, e) => selected = e.NewValue is { } ? lv.Source!.ToList () [e.NewValue.Value]!.ToString ()! : "";
|
||||
var top = new Runnable ();
|
||||
top.Add (lv);
|
||||
app.Begin (top);
|
||||
|
||||
//AutoInitDisposeAttribute.RunIteration ();
|
||||
|
||||
Assert.Equal (new (1), lv.Border!.Thickness);
|
||||
Assert.Null (lv.SelectedItem);
|
||||
Assert.Equal ("", lv.Text);
|
||||
app.LayoutAndDraw ();
|
||||
|
||||
DriverAssert.AssertDriverContentsWithFrameAre (@"
|
||||
┌─────┐
|
||||
│One │
|
||||
│Two │
|
||||
│Three│
|
||||
└─────┘",
|
||||
_output,
|
||||
app?.Driver);
|
||||
|
||||
app?.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonPressed });
|
||||
Assert.Equal ("", selected);
|
||||
Assert.Null (lv.SelectedItem);
|
||||
|
||||
app?.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 1), Flags = MouseFlags.LeftButtonPressed });
|
||||
Assert.Equal ("One", selected);
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
|
||||
app?.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 2), Flags = MouseFlags.LeftButtonPressed });
|
||||
Assert.Equal ("Two", selected);
|
||||
Assert.Equal (1, lv.SelectedItem);
|
||||
|
||||
app?.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 3), Flags = MouseFlags.LeftButtonPressed });
|
||||
Assert.Equal ("Three", selected);
|
||||
Assert.Equal (2, lv.SelectedItem);
|
||||
|
||||
app?.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.LeftButtonPressed });
|
||||
Assert.Equal ("Three", selected);
|
||||
Assert.Equal (2, lv.SelectedItem);
|
||||
top.Dispose ();
|
||||
|
||||
app?.Dispose ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Ensures_Visibility_SelectedItem_On_MoveDown_And_MoveUp ()
|
||||
{
|
||||
@@ -1276,13 +1221,13 @@ Item 6",
|
||||
app.LayoutAndDraw ();
|
||||
|
||||
Assert.Equal ("Second ", GetContents (0));
|
||||
Assert.Equal (new (' ', 7), GetContents (1));
|
||||
Assert.Equal (new string (' ', 7), GetContents (1));
|
||||
|
||||
lv.MoveUp ();
|
||||
lv.Draw ();
|
||||
|
||||
Assert.Equal ("First ", GetContents (0));
|
||||
Assert.Equal (new (' ', 7), GetContents (1));
|
||||
Assert.Equal (new string (' ', 7), GetContents (1));
|
||||
|
||||
string GetContents (int line)
|
||||
{
|
||||
@@ -1434,7 +1379,7 @@ Three",
|
||||
app?.Driver);
|
||||
|
||||
// Scroll down
|
||||
app?.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.WheeledDown });
|
||||
app?.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.WheeledDown });
|
||||
app?.LayoutAndDraw ();
|
||||
Assert.Equal (1, lv.TopItem);
|
||||
|
||||
@@ -1446,7 +1391,7 @@ Four ",
|
||||
app?.Driver);
|
||||
|
||||
// Scroll up
|
||||
app?.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.WheeledUp });
|
||||
app?.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.WheeledUp });
|
||||
app?.LayoutAndDraw ();
|
||||
Assert.Equal (0, lv.TopItem);
|
||||
|
||||
@@ -1507,7 +1452,7 @@ hree - lon",
|
||||
app?.Driver);
|
||||
|
||||
// Scroll right with mouse
|
||||
app?.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.WheeledRight });
|
||||
app?.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.WheeledRight });
|
||||
app?.LayoutAndDraw ();
|
||||
Assert.Equal (2, lv.LeftItem);
|
||||
|
||||
@@ -1519,7 +1464,7 @@ ree - long",
|
||||
app?.Driver);
|
||||
|
||||
// Scroll left with mouse
|
||||
app?.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.WheeledLeft });
|
||||
app?.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.WheeledLeft });
|
||||
app?.LayoutAndDraw ();
|
||||
Assert.Equal (1, lv.LeftItem);
|
||||
|
||||
@@ -1572,7 +1517,7 @@ hree - lon",
|
||||
[Fact]
|
||||
public void Source_CollectionChanged_Remove ()
|
||||
{
|
||||
ObservableCollection<string> source = new () { "One", "Two", "Three" };
|
||||
ObservableCollection<string> source = ["One", "Two", "Three"];
|
||||
ListView lv = new () { Source = new ListWrapper<string> (source) };
|
||||
|
||||
lv.SelectedItem = 2;
|
||||
@@ -1595,35 +1540,32 @@ hree - lon",
|
||||
[Fact]
|
||||
public void Mouse_Click_Selects_Item ()
|
||||
{
|
||||
// Tests that clicking on an item in the ListView selects it
|
||||
IApplication? app = Application.Create ();
|
||||
// Arrange
|
||||
VirtualTimeProvider time = new ();
|
||||
using IApplication app = Application.Create (time);
|
||||
app.Init (DriverRegistry.Names.ANSI);
|
||||
IRunnable runnable = new Runnable ();
|
||||
|
||||
ListView lv = new () { Width = 10, Height = 5 };
|
||||
lv.SetSource (["One", "Two", "Three", "Four", "Five"]);
|
||||
|
||||
var top = new Runnable ();
|
||||
top.Add (lv);
|
||||
app.Begin (top);
|
||||
app.LayoutAndDraw ();
|
||||
(runnable as View)?.Add (lv);
|
||||
app.Begin (runnable);
|
||||
|
||||
// Initially no item is selected
|
||||
Assert.Null (lv.SelectedItem);
|
||||
|
||||
// Click on first item (row 0)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 0), Flags = MouseFlags.LeftButtonPressed });
|
||||
app.InjectSequence (InputInjectionExtensions.LeftButtonClick (new Point (1, 0)));
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
|
||||
// Click on third item (row 2)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 2), Flags = MouseFlags.LeftButtonPressed });
|
||||
app.InjectSequence (InputInjectionExtensions.LeftButtonClick (new Point (1, 2)));
|
||||
Assert.Equal (2, lv.SelectedItem);
|
||||
|
||||
// Click on fifth item (row 4)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.LeftButtonPressed });
|
||||
app.InjectSequence (InputInjectionExtensions.LeftButtonClick (new Point (1, 4)));
|
||||
Assert.Equal (4, lv.SelectedItem);
|
||||
|
||||
top.Dispose ();
|
||||
app.Dispose ();
|
||||
}
|
||||
|
||||
// Claude - Opus 4.5
|
||||
@@ -1651,33 +1593,33 @@ hree - lon",
|
||||
|
||||
// Normal click on first item - should mark it (need full sequence: Pressed → Released → Clicked)
|
||||
// x=2 to account for mark width (2 characters for checkbox glyphs)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 0), Flags = MouseFlags.LeftButtonPressed });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 0), Flags = MouseFlags.LeftButtonReleased });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 0), Flags = MouseFlags.LeftButtonPressed });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 0), Flags = MouseFlags.LeftButtonReleased });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
Assert.True (lv.Source!.IsMarked (0));
|
||||
|
||||
// Ctrl+Click on third item - should mark it and keep first marked
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 2), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 2), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 2), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 2), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
Assert.Equal (2, lv.SelectedItem);
|
||||
Assert.True (lv.Source.IsMarked (0)); // Still marked
|
||||
Assert.True (lv.Source.IsMarked (2)); // Newly marked
|
||||
|
||||
// Ctrl+Click on fifth item - should mark it (first and third stay marked)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 4), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 4), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 4), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 4), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 4), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 4), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
Assert.Equal (4, lv.SelectedItem);
|
||||
Assert.True (lv.Source.IsMarked (0)); // Still marked
|
||||
Assert.True (lv.Source.IsMarked (2)); // Still marked
|
||||
Assert.True (lv.Source.IsMarked (4)); // Newly marked
|
||||
|
||||
// Click on first item again - should toggle it off
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 0), Flags = MouseFlags.LeftButtonPressed });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 0), Flags = MouseFlags.LeftButtonReleased });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (1, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (1, 0), Flags = MouseFlags.LeftButtonPressed });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (1, 0), Flags = MouseFlags.LeftButtonReleased });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (1, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
Assert.False (lv.Source.IsMarked (0)); // Toggled off
|
||||
Assert.True (lv.Source.IsMarked (2)); // Still marked
|
||||
@@ -1997,7 +1939,7 @@ hree - lon",
|
||||
lv.SelectedItem = 0;
|
||||
|
||||
// Shift+Click on item 2
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
|
||||
Assert.Equal (2, lv.SelectedItem);
|
||||
Assert.True (lv.Source!.IsMarked (0));
|
||||
@@ -2030,12 +1972,12 @@ hree - lon",
|
||||
app.LayoutAndDraw ();
|
||||
|
||||
// Click item 0 to set anchor
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
Assert.True (lv.Source!.IsMarked (0));
|
||||
|
||||
// Shift+Click on item 3 to create range
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 3), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 3), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
|
||||
// Verify range is marked
|
||||
Assert.Equal (3, lv.SelectedItem);
|
||||
@@ -2046,7 +1988,7 @@ hree - lon",
|
||||
Assert.False (lv.Source!.IsMarked (4));
|
||||
|
||||
// Normal click (without Shift) should clear transient marks
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 4), Flags = MouseFlags.LeftButtonClicked });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 4), Flags = MouseFlags.LeftButtonClicked });
|
||||
|
||||
Assert.Equal (4, lv.SelectedItem);
|
||||
Assert.False (lv.Source!.IsMarked (0));
|
||||
@@ -2081,12 +2023,12 @@ hree - lon",
|
||||
app.LayoutAndDraw ();
|
||||
|
||||
// Click item 0 to set mark
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
Assert.True (lv.Source!.IsMarked (0));
|
||||
|
||||
// Shift+Click on item 3 - should behave like normal click (no range)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 3), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 3), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
|
||||
// Verify only item 3 is marked (radio button behavior)
|
||||
Assert.Equal (3, lv.SelectedItem);
|
||||
@@ -2121,12 +2063,12 @@ hree - lon",
|
||||
app.LayoutAndDraw ();
|
||||
|
||||
// Click item 0
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
Assert.False (lv.Source!.IsMarked (0));
|
||||
|
||||
// Shift+Click on item 3 - should behave like normal click (no range, no marks)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 3), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 3), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
|
||||
// Verify no marks created and only item 3 is selected
|
||||
Assert.Equal (3, lv.SelectedItem);
|
||||
@@ -2161,23 +2103,23 @@ hree - lon",
|
||||
app.LayoutAndDraw ();
|
||||
|
||||
// Ctrl+Click on item 0 (need full sequence: Pressed → Released → Clicked)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
Assert.True (lv.Source!.IsMarked (0));
|
||||
|
||||
// Ctrl+Click on item 2
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 2), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 2), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 2), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 2), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
Assert.True (lv.Source!.IsMarked (0));
|
||||
Assert.True (lv.Source!.IsMarked (2));
|
||||
Assert.False (lv.Source!.IsMarked (1));
|
||||
|
||||
// Ctrl+Click on item 0 again - should toggle off
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonPressed | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonReleased | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
Assert.False (lv.Source!.IsMarked (0));
|
||||
Assert.True (lv.Source!.IsMarked (2));
|
||||
|
||||
@@ -2207,11 +2149,11 @@ hree - lon",
|
||||
app.LayoutAndDraw ();
|
||||
|
||||
// Click item 1 to set anchor
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 1), Flags = MouseFlags.LeftButtonClicked });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 1), Flags = MouseFlags.LeftButtonClicked });
|
||||
Assert.Equal (1, lv.SelectedItem);
|
||||
|
||||
// Ctrl+RightClick on item 4 to extend selection (alternative to Shift+Click)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 4), Flags = MouseFlags.RightButtonClicked | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 4), Flags = MouseFlags.RightButtonClicked | MouseFlags.Ctrl });
|
||||
|
||||
// Verify range is marked
|
||||
Assert.Equal (4, lv.SelectedItem);
|
||||
@@ -2255,9 +2197,9 @@ hree - lon",
|
||||
// Other marks remain (persistent checkbox behavior)
|
||||
// Need full mouse sequence: Pressed → Released → Clicked
|
||||
// x=2 to account for mark width (2 characters for checkbox glyphs)
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 3), Flags = MouseFlags.LeftButtonPressed });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 3), Flags = MouseFlags.LeftButtonReleased });
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (2, 3), Flags = MouseFlags.LeftButtonClicked });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 3), Flags = MouseFlags.LeftButtonPressed });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 3), Flags = MouseFlags.LeftButtonReleased });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (2, 3), Flags = MouseFlags.LeftButtonClicked });
|
||||
|
||||
Assert.Equal (3, lv.SelectedItem);
|
||||
|
||||
@@ -2295,7 +2237,7 @@ hree - lon",
|
||||
lv.SelectedItem = 0;
|
||||
|
||||
// Shift+Click on item 2 - should just select, not extend
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Shift });
|
||||
|
||||
Assert.Equal (2, lv.SelectedItem);
|
||||
Assert.True (lv.GetAllMarkedItems ().Count () == 0); // No multi-selection
|
||||
@@ -2325,12 +2267,12 @@ hree - lon",
|
||||
app.LayoutAndDraw ();
|
||||
|
||||
// Ctrl+Click on item 0 - should just select, not add to multi-selection
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 0), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
Assert.True (lv.GetAllMarkedItems ().Count () == 0);
|
||||
|
||||
// Ctrl+Click on item 2 - should just select, not add
|
||||
app.Mouse.RaiseMouseEvent (new () { ScreenPosition = new (0, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
app.Mouse.RaiseMouseEvent (new Mouse { ScreenPosition = new Point (0, 2), Flags = MouseFlags.LeftButtonClicked | MouseFlags.Ctrl });
|
||||
Assert.Equal (2, lv.SelectedItem);
|
||||
Assert.True (lv.GetAllMarkedItems ().Count () == 0);
|
||||
|
||||
|
||||
@@ -177,21 +177,30 @@ public class OptionSelectorTests
|
||||
[Fact]
|
||||
public void LeftButtonPressed_On_NotActivated_Activates ()
|
||||
{
|
||||
// Arrange
|
||||
VirtualTimeProvider time = new ();
|
||||
using IApplication app = Application.Create (time);
|
||||
app.Init (DriverRegistry.Names.ANSI);
|
||||
IRunnable runnable = new Runnable ();
|
||||
|
||||
var optionSelector = new OptionSelector ();
|
||||
List<string> options = ["Option1", "Option2"];
|
||||
|
||||
optionSelector.Labels = options;
|
||||
optionSelector.Layout ();
|
||||
|
||||
((View)runnable).Add (optionSelector);
|
||||
app.Begin (runnable);
|
||||
|
||||
CheckBox checkBox = optionSelector.SubViews.OfType<CheckBox> ().First (cb => cb.Title == "Option2");
|
||||
Assert.Equal (0, optionSelector.Value);
|
||||
Assert.Equal (CheckState.Checked, optionSelector.SubViews.OfType<CheckBox> ().First (cb => cb.Title == "Option1").Value);
|
||||
Assert.Equal (CheckState.UnChecked, checkBox.Value);
|
||||
|
||||
var mouse = new Mouse { Position = checkBox.Frame.Location, Flags = MouseFlags.LeftButtonPressed };
|
||||
|
||||
checkBox.NewMouseEvent (mouse);
|
||||
app.InjectMouse (new Mouse { ScreenPosition = checkBox.Frame.Location, Flags = MouseFlags.LeftButtonPressed });
|
||||
Assert.Equal (0, optionSelector.Value);
|
||||
Assert.Equal (CheckState.Checked, optionSelector.SubViews.OfType<CheckBox> ().First (cb => cb.Title == "Option1").Value);
|
||||
Assert.Equal (CheckState.UnChecked, checkBox.Value);
|
||||
|
||||
app.InjectMouse (new Mouse { ScreenPosition = checkBox.Frame.Location, Flags = MouseFlags.LeftButtonReleased });
|
||||
Assert.Equal (1, optionSelector.Value);
|
||||
Assert.Equal (CheckState.Checked, checkBox.Value);
|
||||
Assert.Equal (CheckState.UnChecked, optionSelector.SubViews.OfType<CheckBox> ().First (cb => cb.Title == "Option1").Value);
|
||||
|
||||
Reference in New Issue
Block a user