Skip to content

Fix key release repeat flag and add event contract tests#10

Merged
SteffenCarlsen merged 2 commits into
mainfrom
feature/event-contract-coverage
Jun 23, 2026
Merged

Fix key release repeat flag and add event contract tests#10
SteffenCarlsen merged 2 commits into
mainfrom
feature/event-contract-coverage

Conversation

@SteffenCarlsen

Copy link
Copy Markdown
Owner

Summary

  • Add event-contract assertions for overlay window lifecycle, visibility/bounds, target, pointer, keyboard, and text events.
  • Add retained UI event assertions for routed pointer/key/text payloads and EventArgs.Empty-style control events.
  • Fix OverlayKeyboardEventArgs.IsRepeat for key release events so WasDown only contributes to repeat on key-down dispatch.
  • Record the Win32 key-up repeat lesson in Lessons.md.

Validation

  • dotnet test tests\ModernOverlay.Tests\ModernOverlay.Tests.csproj --configuration Debug --filter "FullyQualifiedName~OverlayWindowThreadingTests|FullyQualifiedName~TargetTrackingTests|FullyQualifiedName~OverlayUiInputRoutingTests|FullyQualifiedName~OverlayUiFocusKeyboardTests|FullyQualifiedName~OverlayUiElementModelTests|FullyQualifiedName~OverlayUiButtonControlTests|FullyQualifiedName~OverlayUiRangeNumericTests|FullyQualifiedName~OverlayUiCommandTests" --logger trx
  • dotnet test tests\ModernOverlay.Tests\ModernOverlay.Tests.csproj --configuration Debug --logger trx
  • dotnet test tests\ModernOverlay.Tests\ModernOverlay.Tests.csproj --configuration Release --filter "FullyQualifiedName~OverlayWindowThreadingTests|FullyQualifiedName~TargetTrackingTests|FullyQualifiedName~OverlayUiInputRoutingTests|FullyQualifiedName~OverlayUiFocusKeyboardTests|FullyQualifiedName~OverlayUiElementModelTests|FullyQualifiedName~OverlayUiButtonControlTests|FullyQualifiedName~OverlayUiRangeNumericTests|FullyQualifiedName~OverlayUiCommandTests" --logger trx
  • git diff --check

@SteffenCarlsen SteffenCarlsen marked this pull request as ready for review June 23, 2026 17:57
Copilot AI review requested due to automatic review settings June 23, 2026 17:57
@SteffenCarlsen SteffenCarlsen merged commit 0af53f7 into main Jun 23, 2026
2 checks passed
@SteffenCarlsen SteffenCarlsen deleted the feature/event-contract-coverage branch June 23, 2026 17:59

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR tightens and documents input/lifecycle event contracts across the overlay window and retained UI, and fixes keyboard repeat semantics so key-release events don’t incorrectly report repeats due to Win32 WasDown.

Changes:

  • Fix OverlayKeyboardEventArgs.IsRepeat so repeat is only true for key-down dispatch (not key-up).
  • Add/strengthen integration + UI tests asserting event payloads (bounds/visibility/target tracking, pointer/keyboard/text routing, EventArgs.Empty-style events).
  • Document the Win32 key-up repeat lesson in Lessons.md.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/ModernOverlay.Tests/TargetTrackingTests.cs Adds assertions for BoundsChanged / TargetChanged / loss+reacquire event payloads.
tests/ModernOverlay.Tests/OverlayWindowThreadingTests.cs Adds event-contract tests for dispose, pointer move/release, and keyboard/text payload copying.
tests/ModernOverlay.Tests/OverlayUiRangeNumericTests.cs Asserts ValueChanged event count during slider interaction.
tests/ModernOverlay.Tests/OverlayUiInputRoutingTests.cs Adds stronger routed pointer/wheel/click assertions (source/original source/phase/payload).
tests/ModernOverlay.Tests/OverlayUiFocusKeyboardTests.cs Adds routed text input assertions for focused elements + handled behavior.
tests/ModernOverlay.Tests/OverlayUiElementModelTests.cs Asserts lifecycle event args use EventArgs.Empty and sender correctness.
tests/ModernOverlay.Tests/OverlayUiCommandTests.cs Asserts CanExecuteChanged sender/args contract and that raise triggers exactly once.
tests/ModernOverlay.Tests/OverlayUiButtonControlTests.cs Adds CheckStateChanged event-count assertion for toggle behavior.
src/ModernOverlay/OverlayWindow.cs Computes isRepeat for keyboard args only on key-down dispatch.
src/ModernOverlay/Events.cs Stores IsRepeat in args; adds internal ctor to allow correct repeat semantics per event kind.
Lessons.md Records the Win32 WasDown / key-up repeat contract lesson.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 559 to 566
OverlayPointerEventArgs pointer = await pointerWheel.Task.WaitAsync(TimeSpan.FromSeconds(5));
Assert.AreEqual(OverlayPointerEventKind.Wheel, pointer.Kind);
Assert.AreEqual(OverlayPointerButton.None, pointer.Button);
Assert.AreEqual(14, pointer.PixelX);
Assert.AreEqual(28, pointer.PixelY);
Assert.AreEqual(14f, pointer.Position.X);
Assert.AreEqual(28f, pointer.Position.Y);
Assert.AreEqual(wheelDelta, pointer.WheelDelta);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants