Commit Graph

8071 Commits

Author SHA1 Message Date
Tig
76b8f026e8 Refactor newinv2.md deep dive doc
Terminal.Gui v2 introduces a transformative redesign, simplifying the library's architecture and improving maintainability. Key changes include:

- Added TrueColor support with 24-bit RGB handling.
- Introduced `Adornment` framework for borders, padding, and margins.
- Enhanced Unicode and wide character support for internationalization.
- Added `LineCanvas` for drawing lines and shapes with box-drawing characters.
- Simplified API by consolidating redundant methods and aligning with modern .NET standards.
- Introduced `ConfigurationManager` for user-customizable themes and text styles.
- Improved scrolling with `Viewport` and integrated `ScrollBar`.
- Added new layout features like `Dim.Auto`, `Pos.AnchorEnd`, and `Pos.Align`.
- Overhauled keyboard and mouse APIs for better input handling.
- Introduced new views (e.g., `DatePicker`, `ColorPicker`, `GraphView`) and enhanced existing ones.
- Added Sixel image support for rendering graphics in compatible terminals.
- Ensured AOT compatibility for improved deployment and performance.

This update lays the foundation for building modern, user-friendly terminal applications.
2025-10-26 09:56:55 -06:00
Tig
7b4ad8cb59 Merge branch 'v2_develop' of tig:tig/Terminal.Gui into v2_develop 2025-10-26 09:48:56 -06:00
Copilot
f068709d13 Fixes #4331 - Use Application.Screen and ScreenContents to reduce Driver coupling (#4336)
* Initial plan

* Replace direct Driver access with ViewBase helper methods

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update documentation to reference View methods instead of Driver

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix documentation wording to avoid driver reference

* Fix missed Driver accesses in Slider.cs

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Use Application.Screen instead of ScreenRows/ScreenCols, keep MoveToScreen/FillRectScreen internal for ViewBase only

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove MoveToScreen and FillRectScreen helper methods, use Driver directly in ViewBase classes

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Improve documentation clarity and grammar per CONTRIBUTING.md guidelines

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add MoveToScreenPosition helper to eliminate Driver.Move calls in View subclasses

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove MoveToScreenPosition helper method, Menu.cs accesses Driver directly

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Replace Driver.Move with View.Move in Menu.cs

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update documentation to reflect Driver encapsulation changes

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add PR warnings policy to CONTRIBUTING.md

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
2025-10-26 09:48:30 -06:00
Tig
d1a709af1e Merge branch 'v2_develop' of tig:tig/Terminal.Gui into v2_develop 2025-10-26 09:16:45 -06:00
Copilot
aef88ad4bb Fixes #4332 - Refactor test infrastructure to use modern ApplicationImpl.Coordinator instead of legacy MainLoop (#4335)
* Initial plan

* Refactor tests to use modern ApplicationImpl.Coordinator architecture instead of legacy Application.RunIteration

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Changes before error encountered

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Replace Application.RunIteration implementation to use modern ApplicationImpl.Coordinator architecture

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Simplify Application.RunIteration to directly delegate to ApplicationImpl.Coordinator without legacy infrastructure

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update multitasking.md documentation to use Application.AddTimeout/RemoveTimeout instead of deprecated Application.MainLoop methods

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor contribution guidelines and documentation

- Consolidated all contribution-related instructions into `CONTRIBUTING.md` as the single source of truth.
- Updated `copilot-instructions.md` and `AGENTS.md` to reference `CONTRIBUTING.md`.
- Enhanced build, test, and CI/CD workflow documentation.
- Updated repository structure documentation in `README.md` and `CONTRIBUTING.md`.
- Reinforced coding conventions and streamlined testing requirements.
- Documented GitHub Actions workflows and provided local CI replication steps.
- Refined API documentation requirements and PR guidelines.
- Simplified `.sln` file and removed redundant content.
- Updated links to point to the latest documentation resources.

* Revamp bug report template for clarity and detail

Updated the bug report template to improve structure, readability, and comprehensiveness:
- Specified "Terminal.Gui" in the `about` section.
- Replaced bold headings with Markdown heading syntax.
- Enhanced "To Reproduce" with placeholders for code and behavior details.
- Added an "Environment" section to collect OS, terminal, PowerShell, .NET, and `Terminal.Gui` version details.
- Expanded "Screenshots" to include GIFs and terminal output instructions.
- Removed outdated "Desktop" and "Smartphone" sections, consolidating relevant details.
- Improved "Additional Context" with prompts for consistency, prior behavior, and error messages.
- Streamlined "For Maintainers" instructions for setting project and milestone.

These changes aim to make bug reports more actionable and easier to reproduce.

* Remove [Obsolete] attribute and pragma warnings from Application.RunIteration - method now uses modern architecture internally

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor Application.Run.cs for clarity and cleanup

Removed debug assertions and unused/commented-out code to simplify logic and improve maintainability. Renamed `forceDraw` to `forceRedraw` in `LayoutAndDraw` for better clarity. Removed the internal `OnNotifyStopRunState` method and its associated logic, indicating a refactor of the stop notification mechanism.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
2025-10-26 09:15:46 -06:00
BDisp
1046b47be7 Fixes #4325. ApplicationImpl.Invoke is sometimes running on UI thread when Application.Top is null (#4339) 2025-10-25 20:15:13 -06:00
Copilot
9530fb677a Fixes #3863 - Finalize IApplication interface and complete facade pattern (#4328)
* Initial plan

* Add missing properties to IApplication and move implementation to ApplicationImpl

- Added Force16Colors, ForceDriver, Sixel, Screen, and ClearScreenNextIteration to IApplication
- Moved implementation of these properties from Application static class to ApplicationImpl
- Updated Application.Driver.cs to delegate to ApplicationImpl.Instance
- Updated Application.Screen.cs to delegate to ApplicationImpl.Instance
- Added ResetScreen() method to ApplicationImpl for proper state cleanup
- Removed TODOs marked "Add to IApplication" in Application.Driver.cs
- All Application-related unit tests passing (180 passed)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Rename Application.Initialization.cs to Application.Lifecycle.cs

- Changed terminology from "Initialization" to "Lifecycle" as requested
- Updated file comment to reflect lifecycle encompasses Init through Shutdown
- All tests still passing (193 Application-related tests)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Address code review feedback in Application.Lifecycle.cs

- Fixed typo: 'cam' -> 'can' in XML documentation
- Fixed typo: 'Gets of list' -> 'Gets a list' in XML documentation
- Removed large block of commented-out legacy driver detection code
- Removed extra blank lines for cleaner code formatting
- All tests still passing (180 Application tests)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix potential race condition in ApplicationImpl.Shutdown()

- Reset Screen before calling Application.ResetState() to avoid circular reference
- Application.ResetState() was trying to access ApplicationImpl.Instance while inside Shutdown()
- This could cause race conditions and crashes in test scenarios
- ResetScreen() is now called both in Shutdown() and ResetState() for safety
- All 3116 unit tests passing

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-25 16:44:30 -06:00
Copilot
496b6b869f Optimize CI workflows with single centralized build and remove redundant workflow (#4327)
* Initial plan

* Optimize CI workflows to share build artifacts across test jobs

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add documentation comments to workflow files

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add clarifying comments to integration-tests workflow

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor to use single centralized build workflow

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix Release build by adding AOT and SelfContained project restore

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix Release build by building Terminal.Gui first before AOT projects

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix Release build by packing Terminal.Gui and building AOT projects separately

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove redundant build-release.yml workflow

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Suppress Obsolete warnings (0618;0612) in build workflow

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix NoWarn parameter by quoting to prevent shell interpretation

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix NoWarn parameter syntax - use comma separator and /p: prefix

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix NoWarn parameter with URL-encoded semicolon and add documentation

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-25 15:29:12 -06:00
Copilot
5199663551 Fixes #4125 - Decouple ApplicationImpl from static Application references (#4324)
* Initial plan

* Add instance fields to ApplicationImpl and update static Application properties to delegate to ApplicationImpl.Instance

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix code review issues: use instance fields in Run() and improve Shutdown() logic

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Final code review fix: use _initialized directly in Shutdown

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix Shutdown order: call ResetState before clearing instance fields

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add MainThreadId as instance field in ApplicationImpl

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-25 12:20:03 -06:00
Copilot
2d84ab4f01 Fixes #4322 - FluentTests: Forward configurable timeout to GuiTestContext (#4323)
* Initial plan

* Implement configurable startup timeout for GuiTestContext

- Increase default With.Timeout from 30s to 120s (CI-friendly)
- Add timeout parameter to GuiTestContext constructor
- Forward With.Timeout to GuiTestContext in both A() overloads
- Use configurable timeout for _hardStop CancellationTokenSource
- Update boot wait from fixed 10s to use configurable timeout
- Update WaitUntil to use instance timeout instead of static With.Timeout

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix code style - add missing spaces in With.cs

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Change timeout back to 30 seconds as requested

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-25 11:48:43 -06:00
Copilot
4974343e74 Fixes #4317 - Refactor Application.Mouse for decoupling and parallelism (#4318)
* Initial plan

* Refactor Application.Mouse - Create IMouse interface and Mouse implementation

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add enhanced documentation for Application.Mouse property

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add parallelizable unit tests for IMouse interface

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor Application.Mouse for decoupling and parallelism

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Move HandleMouseGrab method to IMouseGrabHandler interface

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add parallelizable tests for IMouse and IMouseGrabHandler interfaces

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add MouseEventRoutingTests - 27 parallelizable tests for View mouse event handling

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix terminology: Replace parent/child with superView/subView in MouseEventRoutingTests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix coding standards: Use explicit types and target-typed new() in test files

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update coding standards documentation with explicit var and target-typed new() guidance

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor Application classes and improve maintainability

Refactored `Sixel` property to be immutable, enhancing thread safety.
Cleaned up `ApplicationImpl` by removing redundant fields, restructuring
methods (`CreateDriver`, `CreateSubcomponents`), and improving exception
handling. Updated `Run<T>` and `Shutdown` methods for consistency.

Standardized logging/debugging messages and fixed formatting issues.
Reorganized `IApplication` interface, added detailed XML documentation,
and grouped related methods logically.

Performed general code cleanup, including fixing typos, improving
readability, and removing legacy/unnecessary code to reduce technical debt.

* Code cleanup

* Remove unreferenced LayoutAndDraw method from ApplicationImpl

* Code cleanup and TODOs

- Updated namespaces to reflect the new structure.
- Added `Driver`, `Force16Colors`, and `ForceDriver` properties.
- Introduced `Sixel` collection for sixel image management.
- Added lifecycle methods: `GetDriverTypes`, `Shutdown`, and events.
- Refactored `Init` to support legacy and modern drivers.
- Improved driver event handling and screen abstraction.
- Updated `Run` method to align with the application lifecycle.
- Simplified `IConsoleDriver` documentation.
- Removed redundant methods and improved code readability.

* Refactor LayoutAndDraw logic for better encapsulation

Refactored `Application.Run` to delegate `LayoutAndDraw` to
`ApplicationImpl.Instance.LayoutAndDraw`, improving separation
of concerns. Renamed `forceDraw` to `forceRedraw` for clarity
and moved `LayoutAndDraw` implementation to `ApplicationImpl`.

Added a new `LayoutAndDraw` method in `ApplicationImpl` to
handle layout and drawing, including managing `TopLevels`,
handling active popovers, and refreshing the screen. Updated
the `IApplication` interface to reflect the new method and
improved its documentation.

Implemented `RequestStop` in `ApplicationImpl` and fixed
formatting inconsistencies in `Run<T>`. Added TODOs for future
refactoring to encapsulate `Top` and `TopLevels` into an
`IViewHierarchy` and move certain properties to `IApplication`.

* Refactor ApplicationImpl to enhance mouse and keyboard support

Added a new `Mouse` property to the `ApplicationImpl` class,
replacing its previous declaration, to improve mouse
functionality. Updated `MouseGrabHandler` to initialize with
a default instance of `MouseGrabHandler`.

Added comments to ensure the preservation of existing keyboard
settings (`QuitKey`, `ArrangeKey`, `NextTabKey`) for backward
compatibility. These changes enhance clarity, functionality,
and maintainability of the class.

* Merge IMouseGrabHandler into IMouse - consolidate mouse handling into single interface

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Rename Mouse to MouseImpl and Keyboard to KeyboardImpl for consistency

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-25 08:48:26 -06:00
Tig
db5fdebfa9 Fixes #4320 - Dialog focus (#4321)
* Fixes #4320 - Dialog and MessageBox rendering of Text should ignore HasFocus

Refactor and enhance text drawing logic

Refactored `DoDrawText` in `View.Drawing.cs` to improve efficiency by adding early exits for unnecessary operations and introducing extensibility points (`OnDrawingText`, `OnDrewText`, and `DrewText` event). Simplified `DrawText` by delegating logic to `DoDrawText`.

Added `OnDrewText` and `DrewText` event to allow custom post-draw handling. Updated `Dialog` class to ensure consistent text rendering using the `Normal` attribute and cleaned up event handling logic.

* Update Terminal.Gui/ViewBase/View.Drawing.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Refactor Dialog text rendering logic

Refactored the `Dialog` class to improve text rendering behavior:
- Introduced `_drawingText` flag to track text drawing state.
- Updated `OnDrawingText` to set `_drawingText` to `true`.
- Updated `OnDrewText` to reset `_drawingText` to `false`.
- Replaced `GettingAttributeForRoleHandler` with `OnGettingAttributeForRole`.
  - Ensures `VisualRole.Focus` uses the normal scheme attribute when drawing text.
- Removed unused event handler `GettingAttributeForRoleHandler`.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-25 06:58:20 -06:00
Tig
d72cfcd317 Merge branch 'v2_develop' of tig:gui-cs/Terminal.Gui into v2_develop 2025-10-24 15:25:42 -06:00
Copilot
4437398508 Refactor Application.Keyboard to support fully decoupled state and parallelizable unit tests (#4316)
* Initial plan

* Refactor keyboard handling to IKeyboard interface

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add parallelizable keyboard tests and fix lazy initialization

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix keyboard settings preservation during Init

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Migrate all KeyboardTests to parallelizable and delete old non-parallelizable tests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Decouple Keyboard from static Application class by adding IApplication reference

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix coding standards: use explicit types and target-typed new() properly

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Changes before error encountered

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
2025-10-24 15:24:50 -06:00
Copilot
4b193ecb0d Add onboarding instructions for Copilot and other AI coding agents (#4314)
* Initial plan

* Add copilot-instructions.md and .cursorrules for AI agents

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
2025-10-23 15:32:17 -06:00
Tig
1eb5a4e1b9 Fixes #4305 - 'FileDialog` TreeView (#4306)
* Partial fix - probably breaks stuff

Refactored `FileDialog.cs` by replacing `treeViewContainer` with `_treeView`, adjusting UI component positions, and adding style properties to `_tableView`. Improved user interaction with new event handlers and key bindings. Rearranged `base.Add` calls to reflect the updated UI hierarchy.

* Tweaked Dialog and FileDialog attribute handling

Removed setting of _tableView.Style.InvertSelectedCellFirstCharacter = true;

Commented out custom attribute handling in Dialog.cs for VisualRole.Normal and VisualRole.Focus, reverting to base method. Removed InvertSelectedCellFirstCharacter setting in FileDialog.cs.

* Add tree view toggle to FileDialog

Introduced a new `_btnTreeToggle` button in `FileDialog.cs` to manage the visibility of a tree view within the file dialog interface. Added a new localized string `fdTree` in `Strings.Designer.cs` and `Strings.resx` for UI elements related to the tree view. Adjusted the layout and visibility of the tree and table views to accommodate the toggle functionality. Implemented methods `ToggleTreeVisibility`, `SetTreeVisible`, and `GetTreeToggleText` to handle tree view visibility logic. Cleaned up code and comments for clarity.

* Update localization and test logic for FileDialog

Updated `fdSearchCaption` localization from "Enter search string" to "Find" in `Strings.Designer.cs` and `Strings.resx`. Modified `FileDialogFluentTests.cs` to reflect UI changes by updating button text and removing skip conditions. Adjusted `FileDialogTests.cs` to change `TextField` caption and commented out certain test logic related to path confirmation.

* Moved Search view to be inside the table view container for better usability.

Refactor FileDialog to use nullable reference types

Updated the `FileDialog` class to adopt nullable reference types for improved null safety, marking fields, properties, and methods as nullable where appropriate. Simplified UI component initialization, including repositioning `_tbFind` and `_spinnerView` into `_tableViewContainer` and assigning `Id` properties to `_tableViewContainer` and `_tableView`.

Refactored methods like `TryAcceptMulti` and `GetFocusedFiles` to handle nullability. Simplified `Task.Run` calls and removed unused code, such as the `GetTextField` method and `FileDialogPart` enum, in `FileDialogTests.cs`. Updated tests to directly access subviews using `Id` properties. Minor layout and property adjustments were made to improve maintainability.

* Refactor Dialog class and improve null safety

- Enabled nullable reference types in `Dialog.cs` for better null safety.
- Removed and reintroduced static configuration properties with `[ConfigurationProperty]` attributes for configurability.
- Refactored `Dialog` constructor to use `base.ShadowStyle` and improved button management with alignment logic.
- Updated `Canceled` property with a private backing field and debug assertions.
- Added null-forgiving operators (`!`) across the codebase for nullable reference type compatibility.
- Introduced new test cases to verify `Dialog` behavior, including modal mouse capture and `Canceled` property access.
- Refactored and modernized existing test cases for consistency and readability.
- Removed redundant test cases and performed general code cleanup.
- Improved code comments and debug assertions for clarity and robustness.

* Refactor DialogTests to replace null with empty array

Updated the `BeginButtonTestDialog` method call in `DialogTests.cs`
to replace the `null!` argument with an empty array `[]`. This
improves type safety and ensures explicit handling of the argument.
2025-10-23 14:54:06 -06:00
Copilot
cb748a1c09 Fix InvokeLeakTest debugger failure on x64 with high-resolution timing (#4304)
* Initial plan

* Add comprehensive analysis of InvokeLeakTest debugger failure

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add XML documentation to InvokeLeakTest about debugger issues

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add visual timing diagrams for InvokeLeakTest analysis

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add executive summary of InvokeLeakTest investigation

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update analysis with x64 vs ARM confirmation from @tig

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Implement Stopwatch-based timing in TimedEvents to fix x64 race condition

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update documentation to reflect fix implementation

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix test issues and increase TimeSpan.Zero buffer for debugger safety

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add MainLoop.Wakeup() call in Invoke and remove problematic test

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Auto-detect debugger and increase test timeout to 500ms

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove unnecessary MainLoop.Wakeup() call for v2 drivers

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Move analysis documents to Tests/StressTests folder

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add test coverage for multiple drivers per @BDisp's suggestion

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Revert multi-driver test coverage changes per @tig request

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
2025-10-21 19:41:03 -06:00
Tig
b502471ee6 Fixes #4300 - Scrolling intermittently causes All_Scenarios_Quit_And_Init_Shutdown_Properly to fail (#4301)
* Refactor Scrolling.cs for timer management and nullability

Enabled nullable reference types with `#nullable enable` for improved safety. Replaced the `pulsing` flag with a new `_progressTimer` object to better manage the progress bar's timer lifecycle. Updated `AppOnInitialized` and `AppUnloaded` methods to handle timer initialization and cleanup properly, preventing potential memory leaks.

Simplified code by removing unnecessary comments and aligning method signatures with nullable reference type annotations.

* Enable nullable types and add debugging utilities

* Runu tests 5 times

* Adjust abortTime in ScenarioTests to 1800

* Revert "Runu tests 5 times"

This reverts commit b9b5282315.

* Improve CI diagnostics and adjust scenario abort time

* Fix typos, update metadata,

Corrected typos in `ScenarioCategory` and comments in `Mazing.cs`.
Added the `System.Text` namespace to support additional functionality.
Introduced a new "Games" category in `ScenarioCategory`.
Updated `.DotSettings` to include "Mazing" in the user dictionary.
Improved overall code comments and metadata for clarity.

* Remove unnecessary null assertion for _progressTimer

* Update Examples/UICatalog/Scenarios/Scrolling.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-21 02:36:52 -06:00
Copilot
7a810b0b87 Remove TileView; use View.Arrangement instead (#4271)
* Initial plan

* Remove TileView and refactor to use View.Arrangement

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix FileDialog container focus behavior - all tests passing

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove obsolete TileView comment from View.Hierarchy.cs

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add resizable splitter example to View.Arrangement docs

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactored `TreeView` and `TableView` containersto use View.Arrangment.

Removed unused `_btnToggleSplitterCollapse` and related logic due to the new splitter design.

Simplified collection initialization and feedback/state handling. Improved code readability by replacing magic strings and redundant null checks.

Refactor FileDialog for null safety and UI improvements

Enabled nullable reference types to improve null safety across the codebase. Refactored constants to follow uppercase naming conventions. Introduced nullable annotations for fields and method parameters.

Updated test cases to reflect the removal of deprecated features. Skipped tests related to the removed splitter button. Made miscellaneous improvements, including adding comments and suppressing warnings.

* Add "_Find:" label to FileDialog search field

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixes Parallel unit test intermittent failure case.

Removed the initialization of the `Navigation` object in the `ResetState` method of the `Application` class, indicating a potential shift in its lifecycle management. Enhanced comments to clarify the role of `Shutdown` as a counterpart to `Init`, emphasizing resource cleanup and defensive coding for multithreaded scenarios. Referenced Issue #537 for additional context.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-20 14:51:14 -06:00
Tig
fdeaa8331b Fixes #4298 - Updates test namespaces (#4299)
* Refactored test namespaces.
Moved some tests that were in wrong project.
Code cleanup

* Parrallel -> Parallel
2025-10-20 14:14:38 -06:00
Copilot
041e9de70e Migrate 210 tests to UnitTests.Parallelizable, add CreateFakeDriver helper, prove View.Draw() works in parallel tests, and provide comprehensive performance analysis (#4297)
* Initial plan

* Migrate Category A test files to UnitTests.Parallelizable (135 tests)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add 11 ButtonTests to Parallelizable, remove from UnitTests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add comprehensive test migration report

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add comprehensive performance analysis of UnitTests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Migrate 2 Autocomplete tests and add Text tests analysis

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add proof-of-concept: TextFormatter.Draw works in parallel tests with local driver

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add CreateFakeDriver helper to ParallelizableBase and migrate 4 TextFormatterTests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove proof-of-concept test from AutocompleteTests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Move Scheme-accessing tests back to UnitTests to fix intermittent failures

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update parallel tests README to document ConfigurationManager/SchemeManager restrictions

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Document static member restriction in parallel tests README

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Restore accidentally deleted ButtonTests.Accept_Cancel_Event_OnAccept_Returns_True test

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Migrate Accept_Cancel_Event_OnAccept_Returns_True test to Parallelizable

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
2025-10-20 08:56:11 -06:00
Copilot
ed64f5773e Fixes #4282 - Migrate tests from UnitTests to UnitTests.Parallelizable (67 tests migrated + comprehensive documentation) (#4293)
* Initial plan

* Add 31 parallelizable LineCanvas unit tests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add 4 parallelizable Ruler unit tests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Complete Category A migration - 35 tests migrated

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove duplicate tests from UnitTests after migration to Parallelizable

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Migrate 6 pure unit tests from ColorPicker and DatePicker to Parallelizable

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix duplicate test names between UnitTests and Parallelizable

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Migrate 11 Label tests to Parallelizable (52 tests total)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix documentation: SetupFakeDriver tests CAN be parallelized

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add comprehensive parallelization rules to documentation

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update README and start migrating Button/CheckBox/RadioGroup tests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove duplicate Button tests from UnitTests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Migrate 5 CheckBox unit tests to Parallelizable (27 with Theory expansion)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Migrate 4 more CheckBox tests to Parallelizable (67 tests total, 9,478 passing)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-19 19:04:43 -06:00
BDisp
b6fff43824 Prevents unnecessary noise log errors on unit tests (#4294)
* Prevents unnecessary noise log errors on unit tests

* Prevent any code in the Peek method
2025-10-19 14:41:22 -06:00
Copilot
549436e343 Fixes #4177: View.GetAttributeForRole now defers to SuperView for proper attribute hierarchy (#4292)
* Initial plan

* Fix GetAttributeForRole to defer to SuperView when no explicit scheme

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add test for Adornment attribute resolution

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix: Also check SchemeName when deferring to SuperView in GetAttributeForRole

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add test for StatusBar/Bar not deferring when SchemeName is set

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add comprehensive low-level tests for GetAttributeForRole hierarchy

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update AGENTS.md with PR branch pull instructions

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-19 12:19:33 -06:00
Copilot
86b7996598 Fix intermittent macOS unit test failures by forcing FakeDriver when ConsoleDriver.RunningUnitTests is true (#4291)
* Initial plan

* Add safeguard to force FakeDriver when ConsoleDriver.RunningUnitTests is true

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add test to verify FakeDriver is used when RunningUnitTests is true

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add debug logging to make unit test safeguard visible in CI logs

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Modify unit-tests.yml to run tests 10 times on macOS to verify fix stability

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Revert "Modify unit-tests.yml to run tests 10 times on macOS to verify fix stability"

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
2025-10-19 11:50:28 -06:00
Tig
8aec05248d Fixes #4274 - v2win vsdebugconsole issue CM related UnitTest failures (#4287)
* Fixes #4274. Using Windows Host Console v2win is rendering window size badly using VSDebugConsole.exe

* Fixes #4259. Our wcwidth library is out of date (#4281)

* Update package versions and remove hack code from RuneExtensions

Updated several package versions in `Directory.Packages.props`, including `JetBrains.Annotations`, `Microsoft.Extensions.Logging.Abstractions`, `System.IO.Abstractions`, and `Wcwidth`.

Refactored methods in `RuneExtensions.cs`:
- Simplified `GetColumns` by removing special Unicode handling.
- Renamed constants to follow naming conventions.
- Improved logic and readability in `DecodeSurrogatePair`, `Encode`, and `GetEncodingLength`.
- Streamlined `IsSurrogatePair` and `MakePrintable` for clarity and efficiency.

* Update package version ranges for flexibility

Updated the `JetBrains.Annotations` package to use a version range
starting from `2025.2.2` to allow future updates. Adjusted the
`Microsoft.Extensions.Logging.Abstractions` package to a version
range `[9.0.0,10)` for compatibility. Changed `System.IO.Abstractions`
to a range `[22.0.16,23)` and `Wcwidth` to `[3.0.0,)` to enable
future updates within specified ranges.

* Remove legacy drivers, simplify architecture, and reorganize codebase structure (#4270)

* Initial plan

* Remove legacy drivers and reorganize v2 architecture

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Extract Windows key helper utilities and fix build

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix all test references to legacy drivers

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update documentation to reflect new driver architecture

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove V2.cd diagram file

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix test failures: support legacy drivers and update exception handling

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* updated driver names

* Move V2 tests from ConsoleDrivers/V2 to proper locations

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Rename ApplicationV2 to ModernApplicationImpl to remove v2 terminology

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove V2 terminology from test drivers and FakeDriver classes

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Merge ModernApplicationImpl into ApplicationImpl and move to App folder

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Create modern FakeDriver with component factory architecture in Terminal.Gui project

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor: Move non-platform-dependent code from /Drivers to /App

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Code cleanup and org

* Unit test reorg

* Refactor MainLoop architecture: rename classes and enhance documentation for clarity

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add comprehensive FakeDriver tests (WIP - some tests need fixes)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixed FakeDriver build failures

* Fix all FakeDriver test failures - Application.Top creation and clipboard behaviors

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixed FakeDriver build failures2

* Remove hanging legacy FakeDriver tests that use Console.MockKeyPresses

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixed some tests

* Fixed more tests

* Fixed more tests

* Fix bad copilot (#4277)

* Update Terminal.Gui/Drivers/FakeDriver/FakeConsoleOutput.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Refactor Application Init and Update Tests

Refactored `Application.Init` to improve initialization logic:
- Added fallback to `ForceDriver` when `driverName` is null.
- Changed repeated `Init` calls to throw `InvalidOperationException`.
- Updated `_driverName` assignment logic for robustness.

Enhanced `IConsoleDriver` with detailed remarks on implementations.

Revised test cases to align with updated `Application.Init` behavior:
- Replaced `FakeDriver` with `null` and `driverName: "fake"`.
- Skipped or commented out tests incompatible with new logic.
- Improved formatting and removed redundant setup code.

Improved code style and consistency across the codebase:
- Standardized parameter formatting and spacing.
- Removed outdated comments and unused code.

General cleanup to enhance readability and maintainability.

* Warp fix copilot (#4278)

* More fixes (#4279)

* Fixes/works around test failures and temporarily disable failing test

Updated `FakeDriver` to set `RunningUnitTests` to `true` and initialize dimensions using `FakeConsole`. Modified `TestRespondersDisposedAttribute` to set `ConsoleDriver.RunningUnitTests` in the `Before` method, ensuring proper behavior during unit tests.

Temporarily disabled the `Button_CanFocus_False_Raises_Accepted_Correctly` test in `ViewCommandTests` by adding a `Skip` parameter to the `[Fact]` attribute, referencing issue #4270.

* Allow all tests to run despite failures in UnitTests

Modified the `dotnet test` command in the `Run UnitTestsParallelizable` step to set `xunit.stopOnFail` to `false`. This ensures that the test runner does not stop execution on the first failure, allowing all tests to execute regardless of individual test outcomes.

* Refactor ApplicationScreenTests for cleaner setup/teardown

Refactored `ClearContents_Called_When_Top_Frame_Changes` test:
- Added `[AutoInitShutdown]` attribute for automatic lifecycle management.
- Replaced manual `Application.Init` and `Application.Top` setup with `Application.Begin` and `RunState`.
- Simplified event handling by defining `ClearedContents` handler inline.
- Removed explicit cleanup logic, relying on `Application.End` for teardown.

Updated `using` directives to include `UnitTests` namespace.

* Attempt to fix intermittent local test failures.

Update ApplicationImpl initialization parameter

Changed the second parameter of the `impl.Init` method in the
`FakeApplicationFactory` class from `"dotnet"` to `"fake"`.

* Code cleanup to cause Action to re-run.

* Stop tests on first failure in UnitTestsParallelizable

Updated the `dotnet test` command in `unit-tests.yml` to set the `xunit.stopOnFail` parameter to `true`. This change ensures that test execution halts immediately upon encountering a failure, allowing quicker identification and resolution of issues. Note that this may prevent the full test suite from running in the event of a failure.

* Allow all tests to run despite failures in CI

Updated `unit-tests.yml` to set `xunit.stopOnFail` to `false`
in both `Run UnitTests` and `Run UnitTestsParallelizable`
steps. This ensures that the test runner does not stop
execution on the first test failure, allowing all tests
to complete even if some fail.

* Enhance RuneExtensions docs and update user dictionary

Updated the `<remarks>` section in `RuneExtensions.GetColumns` to include details about the `wcwidth` implementation and improved readability with `<para>` tags. Added `wcwidth` to the user dictionary in `Terminal.sln.DotSettings` to avoid spelling errors.

* Improve XML doc formatting in RuneExtensions.cs

Updated the remarks section of the `GetColumns` method in the
`RuneExtensions` class to enhance readability by reformatting
and properly indenting `<para>` tags. The content remains
unchanged, describing the method's implementation via `wcwidth`
and its role as a Terminal.Gui extension for `System.Text.Rune`.

* Refactor drivers and improve clipboard handling

Replaced legacy drivers (`CursesDriver`, `NetDriver`) with
`UnixDriver` and `DotNetDriver` across the codebase, including
comments, method names, and test cases. Updated documentation
and remarks to reflect the new driver names and platforms.

Revamped clipboard handling with new platform-specific
implementations: `UnixClipboard` for Unix, `MacOSXClipboard`
for macOS, and `WSLClipboard` for Linux under WSL. Removed
the old `CursesClipboard` and consolidated clipboard logic.

Updated test cases to align with the new drivers and clipboard
implementations. Improved naming consistency and cleaned up
redundant code. Updated the README and documentation to
reflect these changes.

* Remove `PlatformColor` from `Attribute` struct

This commit removes the `PlatformColor` property from the `Attribute` struct, simplifying the codebase by eliminating platform-specific color handling. The following changes were made:

- Removed `PlatformColor` from the `Attribute` struct, including its initialization, usage, and related comments.
- Updated constructors to no longer initialize or use `PlatformColor`.
- Modified `Equals` and `GetHashCode` methods to exclude `PlatformColor`.
- Updated `UnixComponentFactory` documentation to remove references to "v2unix."
- Renamed `v2TestDriver` to `testDriver` in the `With` class for clarity.
- Removed `PlatformColor` references in `DriverAssert` and related error messages.
- Deleted test cases in `AttributeTests` that relied on `PlatformColor`.
- Cleaned up comments and TODOs related to `PlatformColor` and `UnixDriver`.

These changes reflect a shift away from platform-dependent color management, improving code clarity and reducing complexity.

Remove `PlatformColor` and simplify `Attribute` logic

The `PlatformColor` property has been removed from the `Attribute` struct, along with its associated logic, simplifying the codebase and eliminating platform-specific dependencies. Constructors, equality checks, and hash code generation in `Attribute` have been updated accordingly.

The `CurrentAttribute` property in `ConsoleDriver` and `OutputBuffer` has been simplified, removing dependencies on `Application.Driver`. The `MakeColor` method logic has been removed or simplified in related classes.

Tests in `AttributeTests` have been refactored to reflect these changes, focusing on `Foreground`, `Background`, and `Style`. Unix-specific logic tied to `PlatformColor` has been eliminated.

Additional updates include renaming parameters in the `With` class for clarity, simplifying `DriverAssert` output, and performing minor code cleanups to improve readability and maintainability.

* Refactor Terminal.Gui driver architecture for v2

Updated documentation to reflect the new modular driver architecture in Terminal.Gui v2.

- Revised `namespace-drivers.md` to include new components (`IConsoleInput`, `IConsoleOutput`, `IInputProcessor`, `IOutputBuffer`, `IWindowSizeMonitor`) and terminal size monitoring.
- Replaced "Key Components" with "Architecture Overview" and added details on the **Component Factory** pattern.
- Documented the four driver implementations (`DotNetDriver`, `WindowsDriver`, `UnixDriver`, `FakeDriver`) and their platform-specific optimizations.
- Added a "Threading Model" section to explain the multi-threaded design for responsive input handling.
- Updated examples to demonstrate driver capabilities and explicit driver selection.

In `drivers.md`:
- Expanded the "Overview" to emphasize the modular, component-based architecture.
- Reorganized "Drivers" into "Available Drivers" and added details on `FakeDriver` for unit testing.
- Added sections on "Initialization Flow," "Shutdown Flow," and platform-specific driver details.
- Provided examples for accessing driver components and creating custom drivers.

In `index.md`:
- Updated "Cross Platform" feature to reflect new driver names and clarified compatibility with SSH and monochrome terminals.

* Moved files around

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: Thomas Nind <31306100+tznind@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix nit test.

* Change ClearScreenNextIteration to internal and trying to fix unit test failure

* Reuse method and fix text field color to normal, probably due some changed configuration

* Fix scenario Shortcut not restoring Application.Quit

* Giving more time to load Scrolling scenario and display failing scenario

* Revert changes and add more assertions

* Forcing CI tests again and I suspect that is causing by UpdateFromJson unit test

* Changed test to force fake driver

* Ensure restore the original colors

* Update test runner behavior in unit-tests.yml

Changed `fail-fast` to `false` in `non_parallel_unittests` to allow all runners to complete even if errors occur. Updated `xunit.stopOnFail` to `true` in both `Run UnitTests` and `Run UnitTestsParallelizable` steps to stop test execution immediately upon failure. These changes improve test handling and execution consistency.

Refactor and enhance configuration and scheme handling

Refactored `ConfigurationManager` and `Scope<T>` to improve clarity and ensure proper resetting to hardcoded defaults. Updated `Color` constructor to use ARGB values for accuracy. Added debug assertions and logging for better test reliability.

Expanded test coverage:
- Verified hardcoded schemes and themes reset correctly.
- Added tests for `UpdateFromJson` behavior and `Color.ToString` output.
- Improved `SchemeManager` and `SchemeTests` to validate attributes and scheme overrides.

General improvements include better state management during tests and enhanced readability of event handlers.

* Found cause of #4288 and provided a workaround

* Reverted unneeded change to ComboBoxTests

* Fixed test that wasn't actually testing anything

* Added more precise unit test showing issue

* Added more precise unit test showing issue2

* Made test even more precise

* Potential fix for underlying issue

* Fixed test that broke with last change

* Reverted`ConfigurationManager` to return `_hardCodedConfigPropertyCache` directly, eliminating deep copy overhead for better performance.

Added a new test in `ConfigurationManagerTests` to verify that `GetHardCodedConfigPropertyCache` always returns the same reference. Updated existing tests to reflect this change.

Refactored `SchemeManagerTests` to use `try-finally` blocks for proper cleanup and improved test reliability. Applied similar changes to other test methods for consistency.

Re-enabled the `UpdateFrom_Corrupts_Schemes_HardCodeDefaults` test in `ThemeScopeTests` as the underlying issue has been rnot been esolved.

* Updated the `Disable` method calls across test classes to use
the new overload with a `true` parameter, ensuring consistent
behavior.

* Refactor and fix configuration and theme management

Refactored method names across multiple classes for clarity and consistency (e.g., `LoadCurrentValues` to `UpdateToCurrentValues`, `ResetToHardCodedDefaults` to `LoadHardCodedDefaults`). Removed redundant attributes from `ConfigurationManager`.

Implemented a workaround for `SchemeManager` to address issues with hard-coded schemes being overwritten. Updated `ThemeManager` logic to ensure proper initialization and updates of themes.

Aligned unit tests with refactored methods and added comments to document changes. Made minor adjustments to improve code maintainability, including handling of property values and removal of unused variables.

* Fix hard-coded defaults corruption in ThemeScope

Replaced `ResetToCurrentValues` with `ResetToHardCodedDefaults` across multiple files to address corruption of hard-coded defaults.

- Added a partial workaround in `ConfigurationManager.cs` to prevent overwriting hard-coded schemes in `ThemeScope`.
- Highlighted known issues with `UpdateToCurrentValues` in `ThemeManager.cs`.
- Updated tests in `ConfigurationManagerTests`, `SchemeManagerTests`, and others to reflect the reset method.
- Skipped or modified tests that rely on `ResetToCurrentValues` due to its corruption issues.
- Refactored `GlyphTests` to ensure proper cleanup using `try-finally`.
- Added comments and skipped tests to document and work around known bugs (e.g., #4288).

* Clarify comments and add theme reset functionality

Updated comments in `SchemeManager` and `ThemeManager` to clarify that the workaround for hardcoded schemes is partial.

Added a new `LoadHardCodedDefaults` method to `ThemeManager`, marked with `[RequiresUnreferencedCode]` and `[RequiresDynamicCode]`, to reset themes to hardcoded defaults. This method ensures proper initialization by throwing an exception if `ConfigurationManager` is not initialized.

Updated `ThemeManager` to call `SchemeManager.LoadToHardCodedDefaults` during the theme reset process, ensuring consistent loading of hardcoded schemes.

* Removed special handling for the "Schemes" key in `hardCodedThemeProperties`,

* Code cleanup

Refactored XML documentation comments for better readability.
Enhanced exception handling in `GetScheme(Schemes)` by adding a null check and throwing `ArgumentException` for invalid inputs.
Simplified method definitions by converting multi-line methods to single-line.
Updated attributes for `LoadToHardCodedDefaults` to align with the `SetSchemes` method.
Refactored `LoadToHardCodedDefaults` implementation for cleaner code.

Added support for Visual Studio debug console in `WindowsDriver`, including disabling the alternative screen buffer, preserving original console colors, and restoring them on shutdown.

Performed general code cleanup, including removing unnecessary comments and improving inline comments for clarity.

* Refactor and remove redundant validation methods

Removed `Validate` methods from `ConfigurationManager`, `Scope<T>`, and `ThemeManager`, indicating a shift in validation responsibilities. Enabled nullable reference types in `Scope.cs` to enforce stricter nullability checks. Simplified `Scope<T>` constructor and replaced explicit type declarations with `var` for improved readability. Adjusted LINQ query formatting and removed unused `using System.Text.Json;` to clean up dependencies. Made minor formatting changes for consistency and maintainability.

* Refactor ConfigurationManager for clarity and safety

Renamed `ResetToCurrentValues` to `UpdateToCurrentValues` for better clarity and updated all references, including comments and documentation. Introduced `_hardCodedConfigPropertyCacheLock` to ensure thread-safety when accessing `_hardCodedConfigPropertyCache`. Updated `Reset` terminology to `Update` across the codebase to reflect the updated behavior.

Improved `SerializerContext` initialization with concise syntax and fixed a formatting issue in a `Console.WriteLine` statement. Reformatted filtering logic for `configPropertiesByScope` for better readability.

Updated test cases in `AppSettingsScopeTests` and `ConfigurationManagerTests` to align with the renamed method and ensure consistent functionality.

* Code cleanup

Improve readability and handle null in serialization

Refactored LINQ queries to remove redundant line breaks, improving code readability. Updated comments for clarity and adjusted tone. Added a null check for the `prop` variable during serialization to ensure proper handling of null values by writing `null` to the JSON writer.

* Code Cleanup - Refactor ThemeManager and improve nullability handling

Updated ThemeManager to improve method visibility, naming consistency, and documentation. Introduced `GetHardCodedThemes` and `SetThemes` for better encapsulation. Made `DEFAULT_THEME_NAME` public for broader access. Enhanced nullability handling across multiple files using the null-forgiving operator (`!`) to suppress warnings.

Refactored `Themes.cs` to ensure proper cleanup of `allViewsView`. Simplified assertions in test files to reflect updated method visibility and removed redundant checks. Improved code clarity and maintainability throughout the codebase.

---------

Co-authored-by: BDisp <bd.bdisp@gmail.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Thomas Nind <31306100+tznind@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-19 09:44:08 -06:00
Tig
dea6736e82 Fixes #4284 (#4285)
Color alpha channel bug and add StandardColor tests

Updated the `Color` constructor for `StandardColor` to use `StandardColors.GetArgb` instead of casting to an integer, ensuring the alpha channel (`A`) is correctly set to `0xFF` (opaque). This resolves issues with name resolution and ARGB formatting.

Added a new test class, `ColorStandardColorTests`, to verify the behavior of `Color` when initialized with a `StandardColor`. Tests include:
- Verifying `ToString` returns the correct standard color name.
- Ensuring `ToString("G")` outputs the correct opaque ARGB value.

These changes address a bug where the alpha channel was incorrectly set to `0x00` (transparent).
2025-10-16 17:55:43 -06:00
Tig
3a8cbf3ca7 Revert "Fixes #4274. Using Windows Host Console v2win is rendering window siz…" (#4286)
This reverts commit 75f5a847c0.
2025-10-16 17:43:24 -06:00
BDisp
75f5a847c0 Fixes #4274. Using Windows Host Console v2win is rendering window size badly using VSDebugConsole.exe (#4275)
* Fixes #4274. Using Windows Host Console v2win is rendering window size badly using VSDebugConsole.exe

* Fixes #4259. Our wcwidth library is out of date (#4281)

* Update package versions and remove hack code from RuneExtensions

Updated several package versions in `Directory.Packages.props`, including `JetBrains.Annotations`, `Microsoft.Extensions.Logging.Abstractions`, `System.IO.Abstractions`, and `Wcwidth`.

Refactored methods in `RuneExtensions.cs`:
- Simplified `GetColumns` by removing special Unicode handling.
- Renamed constants to follow naming conventions.
- Improved logic and readability in `DecodeSurrogatePair`, `Encode`, and `GetEncodingLength`.
- Streamlined `IsSurrogatePair` and `MakePrintable` for clarity and efficiency.

* Update package version ranges for flexibility

Updated the `JetBrains.Annotations` package to use a version range
starting from `2025.2.2` to allow future updates. Adjusted the
`Microsoft.Extensions.Logging.Abstractions` package to a version
range `[9.0.0,10)` for compatibility. Changed `System.IO.Abstractions`
to a range `[22.0.16,23)` and `Wcwidth` to `[3.0.0,)` to enable
future updates within specified ranges.

* Remove legacy drivers, simplify architecture, and reorganize codebase structure (#4270)

* Initial plan

* Remove legacy drivers and reorganize v2 architecture

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Extract Windows key helper utilities and fix build

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix all test references to legacy drivers

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update documentation to reflect new driver architecture

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove V2.cd diagram file

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix test failures: support legacy drivers and update exception handling

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* updated driver names

* Move V2 tests from ConsoleDrivers/V2 to proper locations

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Rename ApplicationV2 to ModernApplicationImpl to remove v2 terminology

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove V2 terminology from test drivers and FakeDriver classes

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Merge ModernApplicationImpl into ApplicationImpl and move to App folder

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Create modern FakeDriver with component factory architecture in Terminal.Gui project

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor: Move non-platform-dependent code from /Drivers to /App

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Code cleanup and org

* Unit test reorg

* Refactor MainLoop architecture: rename classes and enhance documentation for clarity

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add comprehensive FakeDriver tests (WIP - some tests need fixes)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixed FakeDriver build failures

* Fix all FakeDriver test failures - Application.Top creation and clipboard behaviors

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixed FakeDriver build failures2

* Remove hanging legacy FakeDriver tests that use Console.MockKeyPresses

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixed some tests

* Fixed more tests

* Fixed more tests

* Fix bad copilot (#4277)

* Update Terminal.Gui/Drivers/FakeDriver/FakeConsoleOutput.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Refactor Application Init and Update Tests

Refactored `Application.Init` to improve initialization logic:
- Added fallback to `ForceDriver` when `driverName` is null.
- Changed repeated `Init` calls to throw `InvalidOperationException`.
- Updated `_driverName` assignment logic for robustness.

Enhanced `IConsoleDriver` with detailed remarks on implementations.

Revised test cases to align with updated `Application.Init` behavior:
- Replaced `FakeDriver` with `null` and `driverName: "fake"`.
- Skipped or commented out tests incompatible with new logic.
- Improved formatting and removed redundant setup code.

Improved code style and consistency across the codebase:
- Standardized parameter formatting and spacing.
- Removed outdated comments and unused code.

General cleanup to enhance readability and maintainability.

* Warp fix copilot (#4278)

* More fixes (#4279)

* Fixes/works around test failures and temporarily disable failing test

Updated `FakeDriver` to set `RunningUnitTests` to `true` and initialize dimensions using `FakeConsole`. Modified `TestRespondersDisposedAttribute` to set `ConsoleDriver.RunningUnitTests` in the `Before` method, ensuring proper behavior during unit tests.

Temporarily disabled the `Button_CanFocus_False_Raises_Accepted_Correctly` test in `ViewCommandTests` by adding a `Skip` parameter to the `[Fact]` attribute, referencing issue #4270.

* Allow all tests to run despite failures in UnitTests

Modified the `dotnet test` command in the `Run UnitTestsParallelizable` step to set `xunit.stopOnFail` to `false`. This ensures that the test runner does not stop execution on the first failure, allowing all tests to execute regardless of individual test outcomes.

* Refactor ApplicationScreenTests for cleaner setup/teardown

Refactored `ClearContents_Called_When_Top_Frame_Changes` test:
- Added `[AutoInitShutdown]` attribute for automatic lifecycle management.
- Replaced manual `Application.Init` and `Application.Top` setup with `Application.Begin` and `RunState`.
- Simplified event handling by defining `ClearedContents` handler inline.
- Removed explicit cleanup logic, relying on `Application.End` for teardown.

Updated `using` directives to include `UnitTests` namespace.

* Attempt to fix intermittent local test failures.

Update ApplicationImpl initialization parameter

Changed the second parameter of the `impl.Init` method in the
`FakeApplicationFactory` class from `"dotnet"` to `"fake"`.

* Code cleanup to cause Action to re-run.

* Stop tests on first failure in UnitTestsParallelizable

Updated the `dotnet test` command in `unit-tests.yml` to set the `xunit.stopOnFail` parameter to `true`. This change ensures that test execution halts immediately upon encountering a failure, allowing quicker identification and resolution of issues. Note that this may prevent the full test suite from running in the event of a failure.

* Allow all tests to run despite failures in CI

Updated `unit-tests.yml` to set `xunit.stopOnFail` to `false`
in both `Run UnitTests` and `Run UnitTestsParallelizable`
steps. This ensures that the test runner does not stop
execution on the first test failure, allowing all tests
to complete even if some fail.

* Enhance RuneExtensions docs and update user dictionary

Updated the `<remarks>` section in `RuneExtensions.GetColumns` to include details about the `wcwidth` implementation and improved readability with `<para>` tags. Added `wcwidth` to the user dictionary in `Terminal.sln.DotSettings` to avoid spelling errors.

* Improve XML doc formatting in RuneExtensions.cs

Updated the remarks section of the `GetColumns` method in the
`RuneExtensions` class to enhance readability by reformatting
and properly indenting `<para>` tags. The content remains
unchanged, describing the method's implementation via `wcwidth`
and its role as a Terminal.Gui extension for `System.Text.Rune`.

* Refactor drivers and improve clipboard handling

Replaced legacy drivers (`CursesDriver`, `NetDriver`) with
`UnixDriver` and `DotNetDriver` across the codebase, including
comments, method names, and test cases. Updated documentation
and remarks to reflect the new driver names and platforms.

Revamped clipboard handling with new platform-specific
implementations: `UnixClipboard` for Unix, `MacOSXClipboard`
for macOS, and `WSLClipboard` for Linux under WSL. Removed
the old `CursesClipboard` and consolidated clipboard logic.

Updated test cases to align with the new drivers and clipboard
implementations. Improved naming consistency and cleaned up
redundant code. Updated the README and documentation to
reflect these changes.

* Remove `PlatformColor` from `Attribute` struct

This commit removes the `PlatformColor` property from the `Attribute` struct, simplifying the codebase by eliminating platform-specific color handling. The following changes were made:

- Removed `PlatformColor` from the `Attribute` struct, including its initialization, usage, and related comments.
- Updated constructors to no longer initialize or use `PlatformColor`.
- Modified `Equals` and `GetHashCode` methods to exclude `PlatformColor`.
- Updated `UnixComponentFactory` documentation to remove references to "v2unix."
- Renamed `v2TestDriver` to `testDriver` in the `With` class for clarity.
- Removed `PlatformColor` references in `DriverAssert` and related error messages.
- Deleted test cases in `AttributeTests` that relied on `PlatformColor`.
- Cleaned up comments and TODOs related to `PlatformColor` and `UnixDriver`.

These changes reflect a shift away from platform-dependent color management, improving code clarity and reducing complexity.

Remove `PlatformColor` and simplify `Attribute` logic

The `PlatformColor` property has been removed from the `Attribute` struct, along with its associated logic, simplifying the codebase and eliminating platform-specific dependencies. Constructors, equality checks, and hash code generation in `Attribute` have been updated accordingly.

The `CurrentAttribute` property in `ConsoleDriver` and `OutputBuffer` has been simplified, removing dependencies on `Application.Driver`. The `MakeColor` method logic has been removed or simplified in related classes.

Tests in `AttributeTests` have been refactored to reflect these changes, focusing on `Foreground`, `Background`, and `Style`. Unix-specific logic tied to `PlatformColor` has been eliminated.

Additional updates include renaming parameters in the `With` class for clarity, simplifying `DriverAssert` output, and performing minor code cleanups to improve readability and maintainability.

* Refactor Terminal.Gui driver architecture for v2

Updated documentation to reflect the new modular driver architecture in Terminal.Gui v2.

- Revised `namespace-drivers.md` to include new components (`IConsoleInput`, `IConsoleOutput`, `IInputProcessor`, `IOutputBuffer`, `IWindowSizeMonitor`) and terminal size monitoring.
- Replaced "Key Components" with "Architecture Overview" and added details on the **Component Factory** pattern.
- Documented the four driver implementations (`DotNetDriver`, `WindowsDriver`, `UnixDriver`, `FakeDriver`) and their platform-specific optimizations.
- Added a "Threading Model" section to explain the multi-threaded design for responsive input handling.
- Updated examples to demonstrate driver capabilities and explicit driver selection.

In `drivers.md`:
- Expanded the "Overview" to emphasize the modular, component-based architecture.
- Reorganized "Drivers" into "Available Drivers" and added details on `FakeDriver` for unit testing.
- Added sections on "Initialization Flow," "Shutdown Flow," and platform-specific driver details.
- Provided examples for accessing driver components and creating custom drivers.

In `index.md`:
- Updated "Cross Platform" feature to reflect new driver names and clarified compatibility with SSH and monochrome terminals.

* Moved files around

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: Thomas Nind <31306100+tznind@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix nit test.

* Change ClearScreenNextIteration to internal and trying to fix unit test failure

* Reuse method and fix text field color to normal, probably due some changed configuration

* Fix scenario Shortcut not restoring Application.Quit

* Giving more time to load Scrolling scenario and display failing scenario

* Revert changes and add more assertions

* Forcing CI tests again and I suspect that is causing by UpdateFromJson unit test

* Changed test to force fake driver

* Ensure restore the original colors

* Fix ResetToHardCodedDefaults method

* Tested with this before and the tests pass

* Revert "Tested with this before and the tests pass"

This reverts commit 297b88536c.

* Revert "Fix ResetToHardCodedDefaults method"

This reverts commit 3a28c5e945.

* Trying to fix scenario tests

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Thomas Nind <31306100+tznind@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-16 17:42:49 -06:00
Copilot
2be8397203 Remove legacy drivers, simplify architecture, and reorganize codebase structure (#4270)
* Initial plan

* Remove legacy drivers and reorganize v2 architecture

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Extract Windows key helper utilities and fix build

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix all test references to legacy drivers

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Update documentation to reflect new driver architecture

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove V2.cd diagram file

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix test failures: support legacy drivers and update exception handling

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* updated driver names

* Move V2 tests from ConsoleDrivers/V2 to proper locations

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Rename ApplicationV2 to ModernApplicationImpl to remove v2 terminology

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove V2 terminology from test drivers and FakeDriver classes

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Merge ModernApplicationImpl into ApplicationImpl and move to App folder

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Create modern FakeDriver with component factory architecture in Terminal.Gui project

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor: Move non-platform-dependent code from /Drivers to /App

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Code cleanup and org

* Unit test reorg

* Refactor MainLoop architecture: rename classes and enhance documentation for clarity

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add comprehensive FakeDriver tests (WIP - some tests need fixes)

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixed FakeDriver build failures

* Fix all FakeDriver test failures - Application.Top creation and clipboard behaviors

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixed FakeDriver build failures2

* Remove hanging legacy FakeDriver tests that use Console.MockKeyPresses

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixed some tests

* Fixed more tests

* Fixed more tests

* Fix bad copilot (#4277)

* Update Terminal.Gui/Drivers/FakeDriver/FakeConsoleOutput.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Refactor Application Init and Update Tests

Refactored `Application.Init` to improve initialization logic:
- Added fallback to `ForceDriver` when `driverName` is null.
- Changed repeated `Init` calls to throw `InvalidOperationException`.
- Updated `_driverName` assignment logic for robustness.

Enhanced `IConsoleDriver` with detailed remarks on implementations.

Revised test cases to align with updated `Application.Init` behavior:
- Replaced `FakeDriver` with `null` and `driverName: "fake"`.
- Skipped or commented out tests incompatible with new logic.
- Improved formatting and removed redundant setup code.

Improved code style and consistency across the codebase:
- Standardized parameter formatting and spacing.
- Removed outdated comments and unused code.

General cleanup to enhance readability and maintainability.

* Warp fix copilot (#4278)

* More fixes (#4279)

* Fixes/works around test failures and temporarily disable failing test

Updated `FakeDriver` to set `RunningUnitTests` to `true` and initialize dimensions using `FakeConsole`. Modified `TestRespondersDisposedAttribute` to set `ConsoleDriver.RunningUnitTests` in the `Before` method, ensuring proper behavior during unit tests.

Temporarily disabled the `Button_CanFocus_False_Raises_Accepted_Correctly` test in `ViewCommandTests` by adding a `Skip` parameter to the `[Fact]` attribute, referencing issue #4270.

* Allow all tests to run despite failures in UnitTests

Modified the `dotnet test` command in the `Run UnitTestsParallelizable` step to set `xunit.stopOnFail` to `false`. This ensures that the test runner does not stop execution on the first failure, allowing all tests to execute regardless of individual test outcomes.

* Refactor ApplicationScreenTests for cleaner setup/teardown

Refactored `ClearContents_Called_When_Top_Frame_Changes` test:
- Added `[AutoInitShutdown]` attribute for automatic lifecycle management.
- Replaced manual `Application.Init` and `Application.Top` setup with `Application.Begin` and `RunState`.
- Simplified event handling by defining `ClearedContents` handler inline.
- Removed explicit cleanup logic, relying on `Application.End` for teardown.

Updated `using` directives to include `UnitTests` namespace.

* Attempt to fix intermittent local test failures.

Update ApplicationImpl initialization parameter

Changed the second parameter of the `impl.Init` method in the
`FakeApplicationFactory` class from `"dotnet"` to `"fake"`.

* Code cleanup to cause Action to re-run.

* Stop tests on first failure in UnitTestsParallelizable

Updated the `dotnet test` command in `unit-tests.yml` to set the `xunit.stopOnFail` parameter to `true`. This change ensures that test execution halts immediately upon encountering a failure, allowing quicker identification and resolution of issues. Note that this may prevent the full test suite from running in the event of a failure.

* Allow all tests to run despite failures in CI

Updated `unit-tests.yml` to set `xunit.stopOnFail` to `false`
in both `Run UnitTests` and `Run UnitTestsParallelizable`
steps. This ensures that the test runner does not stop
execution on the first test failure, allowing all tests
to complete even if some fail.

* Enhance RuneExtensions docs and update user dictionary

Updated the `<remarks>` section in `RuneExtensions.GetColumns` to include details about the `wcwidth` implementation and improved readability with `<para>` tags. Added `wcwidth` to the user dictionary in `Terminal.sln.DotSettings` to avoid spelling errors.

* Improve XML doc formatting in RuneExtensions.cs

Updated the remarks section of the `GetColumns` method in the
`RuneExtensions` class to enhance readability by reformatting
and properly indenting `<para>` tags. The content remains
unchanged, describing the method's implementation via `wcwidth`
and its role as a Terminal.Gui extension for `System.Text.Rune`.

* Refactor drivers and improve clipboard handling

Replaced legacy drivers (`CursesDriver`, `NetDriver`) with
`UnixDriver` and `DotNetDriver` across the codebase, including
comments, method names, and test cases. Updated documentation
and remarks to reflect the new driver names and platforms.

Revamped clipboard handling with new platform-specific
implementations: `UnixClipboard` for Unix, `MacOSXClipboard`
for macOS, and `WSLClipboard` for Linux under WSL. Removed
the old `CursesClipboard` and consolidated clipboard logic.

Updated test cases to align with the new drivers and clipboard
implementations. Improved naming consistency and cleaned up
redundant code. Updated the README and documentation to
reflect these changes.

* Remove `PlatformColor` from `Attribute` struct

This commit removes the `PlatformColor` property from the `Attribute` struct, simplifying the codebase by eliminating platform-specific color handling. The following changes were made:

- Removed `PlatformColor` from the `Attribute` struct, including its initialization, usage, and related comments.
- Updated constructors to no longer initialize or use `PlatformColor`.
- Modified `Equals` and `GetHashCode` methods to exclude `PlatformColor`.
- Updated `UnixComponentFactory` documentation to remove references to "v2unix."
- Renamed `v2TestDriver` to `testDriver` in the `With` class for clarity.
- Removed `PlatformColor` references in `DriverAssert` and related error messages.
- Deleted test cases in `AttributeTests` that relied on `PlatformColor`.
- Cleaned up comments and TODOs related to `PlatformColor` and `UnixDriver`.

These changes reflect a shift away from platform-dependent color management, improving code clarity and reducing complexity.

Remove `PlatformColor` and simplify `Attribute` logic

The `PlatformColor` property has been removed from the `Attribute` struct, along with its associated logic, simplifying the codebase and eliminating platform-specific dependencies. Constructors, equality checks, and hash code generation in `Attribute` have been updated accordingly.

The `CurrentAttribute` property in `ConsoleDriver` and `OutputBuffer` has been simplified, removing dependencies on `Application.Driver`. The `MakeColor` method logic has been removed or simplified in related classes.

Tests in `AttributeTests` have been refactored to reflect these changes, focusing on `Foreground`, `Background`, and `Style`. Unix-specific logic tied to `PlatformColor` has been eliminated.

Additional updates include renaming parameters in the `With` class for clarity, simplifying `DriverAssert` output, and performing minor code cleanups to improve readability and maintainability.

* Refactor Terminal.Gui driver architecture for v2

Updated documentation to reflect the new modular driver architecture in Terminal.Gui v2.

- Revised `namespace-drivers.md` to include new components (`IConsoleInput`, `IConsoleOutput`, `IInputProcessor`, `IOutputBuffer`, `IWindowSizeMonitor`) and terminal size monitoring.
- Replaced "Key Components" with "Architecture Overview" and added details on the **Component Factory** pattern.
- Documented the four driver implementations (`DotNetDriver`, `WindowsDriver`, `UnixDriver`, `FakeDriver`) and their platform-specific optimizations.
- Added a "Threading Model" section to explain the multi-threaded design for responsive input handling.
- Updated examples to demonstrate driver capabilities and explicit driver selection.

In `drivers.md`:
- Expanded the "Overview" to emphasize the modular, component-based architecture.
- Reorganized "Drivers" into "Available Drivers" and added details on `FakeDriver` for unit testing.
- Added sections on "Initialization Flow," "Shutdown Flow," and platform-specific driver details.
- Provided examples for accessing driver components and creating custom drivers.

In `index.md`:
- Updated "Cross Platform" feature to reflect new driver names and clarified compatibility with SSH and monochrome terminals.

* Moved files around

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: Thomas Nind <31306100+tznind@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-15 13:24:47 -06:00
Tig
b83bcc2fdb Fixes #4259. Our wcwidth library is out of date (#4281)
* Update package versions and remove hack code from RuneExtensions

Updated several package versions in `Directory.Packages.props`, including `JetBrains.Annotations`, `Microsoft.Extensions.Logging.Abstractions`, `System.IO.Abstractions`, and `Wcwidth`.

Refactored methods in `RuneExtensions.cs`:
- Simplified `GetColumns` by removing special Unicode handling.
- Renamed constants to follow naming conventions.
- Improved logic and readability in `DecodeSurrogatePair`, `Encode`, and `GetEncodingLength`.
- Streamlined `IsSurrogatePair` and `MakePrintable` for clarity and efficiency.

* Update package version ranges for flexibility

Updated the `JetBrains.Annotations` package to use a version range
starting from `2025.2.2` to allow future updates. Adjusted the
`Microsoft.Extensions.Logging.Abstractions` package to a version
range `[9.0.0,10)` for compatibility. Changed `System.IO.Abstractions`
to a range `[22.0.16,23)` and `Wcwidth` to `[3.0.0,)` to enable
future updates within specified ranges.
2025-10-15 11:54:21 -06:00
Copilot
c8147416b2 Fix AdvanceFocus not cycling properly through peers with nested subviews (#4267)
* Initial plan

* Implement fix for AdvanceFocus nested subview navigation

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor ShouldBubbleUpForWrapping to use iteration instead of recursion

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
2025-10-07 09:31:08 -06:00
Dominik Szymański
168d233428 Fixes #4272 - Update ListView's AllowsMultipleSelection to adhere to docs (#4273)
* #4272 - Update ListView's AllowsMultipleSelection to adhere to docs

* Add and update unit tests for ListView's marking
2025-10-07 09:22:18 -06:00
Copilot
e352dde696 Fixes #4151, #4152. Remove LineView class and replace all usages with Line (#4268)
* Initial plan

* Remove LineView and replace all usages with Line

- Deleted LineViewExample.cs scenario
- Deleted LineViewTests.cs test file
- Replaced LineView with Line in all examples (CollectionNavigatorTester, FileDialogExamples, LineExample, Wizard)
- Replaced LineView with Line in all tests (ViewTests, TileViewTests)
- Changed TileViewLineView to inherit from Line instead of LineView
- Removed LineView.cs file
- Removed LineView category from TileViewNesting scenario

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove LineView references from documentation

- Updated Line.cs XML documentation to remove comparison with LineView
- Removed LineView section from views.md documentation

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fixes Wizard (#4269)

* fixed Wizard

* Made Line use GetAttributeForRole

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-03 13:20:36 -07:00
Copilot
fc9c40c2a0 Fixes #4150 - Finish implementing Line View (#4260)
* Initial plan

* Add comprehensive analysis of Line implementation status

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Complete Line implementation with documentation, example, and tests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add PR summary documenting Line implementation completion

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add comprehensive completion report for Issue 4150

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix Line rendering: use SuperView's LineCanvas instead of own

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Redesign Line to use Border instead of manual LineCanvas

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add Line.Style property to avoid BorderStyle conflict

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add SetWidth/SetHeight methods to preserve dimensions on Orientation change

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Implement CWP events for Width/Height properties; update Line to use events

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* WIP: Updating Line.
Cleaned up Layout tests.

* Made Height/Width non-nullable

* Add doWork stage to CWPPropertyHelper to execute between Changing and Changed events

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Move ViewLayoutEventTests to parallelizable tests without AutoInitShutdown

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Replace tracking fields with Length property for thread-safe Line implementation

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Fix orientation handling to preserve user-set dimensions in object initializers

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Simplify orientation handling with dimension swapping - all tests passing

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add Length backing field and fix object initializer dimension handling

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Use CWP OnChanging events to manage dimensions instead of OnChanged

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Move LineTests to parallelizable; simplify tests with GetAnchor; fix Length property

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Code cleanup.

* Code cleanup.

* Update Terminal.Gui/ViewBase/View.Layout.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Terminal.Gui/ViewBase/View.Layout.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Terminal.Gui/ViewBase/View.Layout.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Terminal.Gui/ViewBase/View.Layout.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fixed nullable warning in test

* Removed PR files and updated copilot guidance

* Reverted .gitignore change

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-03 12:26:45 -07:00
Tig
1822216130 Renamed copilot instructions so it actually works 2025-10-03 12:16:14 -07:00
Tig
f8223b7c93 Merge branch 'gui-cs:v2_develop' into v2_develop 2025-10-03 12:15:15 -07:00
Copilot
cb381bd74b Add copilot-instructions.md file for GitHub Copilot integration (#4265)
* Initial plan

* Add copilot-instructions.md file

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Revise GitHub Copilot instructions for clarity

Updated instructions for GitHub Copilot in the Terminal.Gui project, including clarifications on coding conventions, API design guidelines, and additional guidelines for contributors.

* Update copilot-instructions.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-03 10:15:31 -07:00
Tig
d2c8693abe Merge branch 'v2_develop' of tig:tig/Terminal.Gui into v2_develop 2025-10-02 09:00:15 -06:00
BDisp
00975d025b Fixes #4246. v2net doesn't work with Force16Colors (#4247)
* Fixes #4246. v2net doesn't work with Force16Colors

* Fixes #4248. v2net sometimes output mouse inputs after exit the app

* Fix unit test

* Fix cursor visibility and cursor styles

* Fix Ctrl being ignored in the range \u0001-\u001a

* Helper method to map char to control keys

* Add unit test for the MapChar method

* Add more sequences related with macOS

* Fix issue on Windows where sending AltGr+some key fail assertion

* Only Ctrl+I is considered as Tab key and not with more

* Avoid sometimes error when running gnome-terminal

* Captures Ctrl+Shift+Alt+D7

* Exclude Oem1 from assertion

* Captures Ctrl+D4, Ctrl+D5, Ctrl+D6 and Ctrl+D7

* Definitively fixes mouse sequence escape from outputting on exit

* Add unit test for Ctrl+Shift+Alt+7

* Fix regex pattern

* Replace with hexadecimal values

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-02 08:59:59 -06:00
BDisp
9d34e2792c Fixes #4250. Add a v2unix driver (#4251)
* Implement Unix driver

* Add more sequences related with macOS

* Helper method to map char to control keys

* Add DriverName property

* Fix error on Unix unit tests

* Fix Non-nullable property 'DriverName' must contain a non-null value when exiting constructor.

* Fix Ctrl being ignored in the range \u0001-\u001a

* Add unit test for the MapChar method

* Fix cursor visibility and cursor styles

* Avoid sometimes error when running gnome-terminal

* Captures Ctrl+Shift+Alt+D7

* Captures Ctrl+D4, Ctrl+D5, Ctrl+D6 and Ctrl+D7

* Add unit test for Ctrl+Shift+Alt+7

* Fix issue on Windows where sending AltGr+some key fail assertion

* Exclude Oem1 from assertion

* Fix regex pattern

* Remove driverName from the constructor

* Revert "Remove driverName from the constructor"

This reverts commit 004e9f9588.

* Remove driverName from the constructor

* Add generic CreateSubcomponents method avoiding redundancy

* Add v2unix profiles

* Replace with hexadecimal values

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-10-02 08:51:05 -06:00
Tig
39755a044a Merge branch 'v2_develop' of tig:tig/Terminal.Gui into v2_develop 2025-10-02 05:28:56 -06:00
Tig
4c6145cee9 Fixes #4233 - CharMap rendering (#4255)
* Fixed almost all issues

* code comments

* fixed copilot suggestion

* Add Unicode filtering and improve context menu handling

Enabled nullable reference types for better null safety. Added a
Unicode category filter to `CharacterMap` via the new
`ShowUnicodeCategory` property and `OptionSelector`. Updated
rendering logic to dynamically manage visible rows based on the
filter, improving performance and usability.

Refactored menu items to include the Unicode category selector.
Enhanced `TextView` context menu handling to support mouse-based
positioning. Performed miscellaneous code cleanup and added
comments for improved readability and maintainability.

* Fix Unicode rendering and simplify CombiningMarks

Updated `RuneExtensions.GetColumns` to handle specific Unicode glyphs (I Ching symbols) rendered as double-width in Windows Terminal, despite being single-width per Unicode. Added a workaround to return `2` for these glyphs and fallback to `UnicodeCalculator.GetWidth` for others.

Simplified `CombiningMarks` by removing examples for Unicode characters `\u0600` and `\u0301`, streamlining the scenario.

Referenced PR #4255 for context on the workaround.

* Update RuneTests with new Unicode test cases and fixes

Added new test cases for Unicode characters U+d7b0 (ힰ) and
U+f61e () with expected parameters. Updated the test case
for U+4dc0 (䷀) to adjust the second parameter from 1 to 2
and added references to the Microsoft Terminal Unicode
width overrides file and GitHub issue #19389. Existing test
cases for other Unicode characters remain unchanged.

* Update Terminal.Gui/Views/CharMap/CharMap.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update comments in GetColumns method for clarity

Updated comments in the `GetColumns` method of the `RuneExtensions` class to replace "HACK" with "TODO" and reference issue #4259 instead of pull request #4255. This change clarifies that the code is a temporary measure and should be removed once the issue is resolved. No functional changes were made to the code logic.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-27 13:26:44 -06:00
Tig
3fb1c413b1 Merge branch 'v2_develop' of tig:tig/Terminal.Gui into v2_develop 2025-09-13 09:33:15 -06:00
BDisp
b3aa9c5717 Fixes #4223. SendKeys scenario is broken and does not support surrogate pairs (#4224)
* Fixes #4223. SendKeys scenario is broken and does not support surrogate pairs

* Fix v2 application tests

* Fixes v2 _input being null before initialization

* Add a limit of iterations to avoid loop forever

* Simplify unit tests failure fix

* Fixes #3947 Adds Fake driver and fixes fluent tests (iteration-zero) (#4225)

* Consider width2 chars that are not IsBmp

* Apply same fix in WindowsDriver

* Explicitly use type of local variable

* Revert changes to WindowsDriver

* Assume we are running in a terminal that supports true color by default unless user explicitly forces 16

* Switch to SetAttribute and WriteConsole instead of WriteConsoleOutput for 16 color mode

* Fix some cursor issues (WIP)

* Remove concept of 'dirty rows' from v2 as its never actually used

* Remove damageRegion as it does nothing

* Make string builder to console writing simpler

* Radically simplify Write method

* Simplify conditional logic

* Simplify restoring cursor position

* Reference local variable for console buffer

* Reduce calls to ConsoleWrite by accumulating till attribute changes

* When resizing v2 16 color mode on windows, recreate the back buffer to match its size

* Fixes for VTS enabled

* Fix _lastSize never being assigned

* Fixes VTS for Force16Colors

* Fixes force16Colors in VTS

* Fixes escape sequences always echoing in non-VTS

* Force Force16Colors in non-VTS. It have a bug in adding a newline in the last line

* WIP Add base class for NetOutput

* Abstract away how we change attribute

* WIP - Make WindowsOutput use base class

* WIP working to fix set cursor position

* Remove commented out code

* Fixes legacy output mode

* Fixes size with no alt buffer supported on VTS and size restore after maximized.

* Fix set cursor which also fixes the broken surrogate pairs

* Add force parameter

* Fixes an issue that only happens with Windows Terminal when paste surrogate pairs by press Ctrl+V

* In Windows escape sequences must be sent during the lifetime of the console which is created in input handle

* Ensure flush the input buffer before reset the console

* Flush input buffer before reset console in v2win

* Fixes issue in v2net not being refreshing the menu bar at start

* Only force layout and draw on size changed.

* Fix v2net issue not draw first line by forcing set cursor position

* Set _lastCursorPosition nullable and remove bool force from set cursor position

* Remove force parameter

* Add v2 version of fake driver attribute

* Make direct replacement and wire up window resizing events

* Update casts to use V2 fake driver instead

* Adjust interfaces to expose less internals

* Fix not raising iteration event in v2

* WIP investigate what it takes to do resize and redraw using TextAlignment_Centered as example

* Sketch adding component factory

* Create relevant fake component factories

* Add window size monitor into factory

* Fake size monitor injecting

* Add helper for faking console resize in AutoInitShutdown tests

* Fix size setting in FakeDriverV2

* Switch to new method

* Fix IsLegacy becoming false when using blank constructor

* Fix for Ready not being raised when showing same top twice also fixes garbage collection issue if running millions of top levels

* Fix tests

* Remove auto init

* Restore conditional compilation stuff

* Restore 'if running unit tests' logic

* Check only for the output being specific classes for the suppression

* Fix ShadowView blowing up with index out of bounds error

* Fix resize in fluent tests

* Fix for people using Iteration call directly

* Fix more calls to iteration to use
        AutoInitShutdownAttribute.RunIteration ();

* Add comment

* Remove assumption that Run with prior view not disposed should throw

* Fix timings in Dialog_Opened_From_Another_Dialog

* Fix Zero_Buttons_Works

* Standardize and fix Button_IsDefault_True_Return_His_Index_On_Accepting

* Fix iteration counts on MessageBoxTests

* Fix WizartTests and DrawTests_Ruler

* Implement SendKeys into ConsoleDriverFacade

* Fix SendKeys in console driver facade such that FileDialogTests works
Fix when Clip is null in popover

* Add missing dispose call to test

* Fix support for Esc in facade SendKeys

* Fix AutocompleteTests

* Fix various tests

* Replace LayoutAndDraw with run iteration

* Fix draw issues

* fix draw order

* Fix run iteration calls

* Fix unit tests

* Fix SendKeys in facade.

* Manipulate upper and lower cases.

* Add IsValidInput method to the interface.

* Fix SendKeys scenario

* Fixes surrogate pairs in the label

* Make tests more sensible - they are testing draw functionality.  Callbacks do not need to happen in Iteration method

* Fix tests and harden cleanup in AutoInitShutdownAttribute v2 lifecycle dispose

* Delete extra create input call

* Fix mocks and order of exceptions thrown in Run when things are not initialized

* Revert use of `MapConsoleKeyInfoToKeyCode`

* Ignore casing as it is not what test is really about

* Clear application top and top levels before each auto init shutdown test

* Fix for unstable tests

* Restore actually working SendKeys code

* option to pass logger in fluent ctor

* restore ToArray

* Fix SendKeys method and add extension to unit test

* Leverage the EscSeqUtils.MapConsoleKeyInfo method to avoid duplicate code

* Remove unnecessary hack

* Using only KeyCode for rKeys

* Recover modifier keys in surrogate pairs

* Reformat

* Remove iteration limit for benchmarking in v2

* remove iteration delay to identify bugs

* Remove nudge to unique key and make Then run on UI thread

* fix fluid assertions

* Ensure UI operations all happen on UI thread

* Add explicit error for WaitIteration during an invoke

* Remove timeout added for debug

* Catch failing asserts better

* Fix screenshot

* Fix null ref

* Fix race condition in processing input

* Test fixing

* Standardize asserts

* Remove calls to layout and draw, remove pointless lock and enable reading Cancelled from Dialog even if it is disposed

* fix bad merge

* Make logs access threadsafe

* add extra wait to remove race between iteration end and assert

* Code cleanup

* Remove test for crash on access Cancelled after dispose as this is no longer a restriction

* Change resize console to run on UI thread - fixing race condition with redrawing

* Restore original frame rate after test

* Restore nudge to unique key

* Code Cleanup

* Fix for cascading failures when an assert fails in a specific test

* fix for bad merge

* Address PR feedback

* Move classes to seperate files and add xmldoc

* xml doc warnings

* More xml comments docs

* Fix spelling

---------

Co-authored-by: BDisp <bd.bdisp@gmail.com>

* Fixes #4231. NativeAot project throws when running the published executable (#4232)

* Fixes #4231. NativeAot project throws when running the published executable

* Code cleanup

---------

Co-authored-by: Tig <tig@users.noreply.github.com>

* Fixes #4236. CursesDriver erase the previous text under the cursor when moving if Force16Colors is true (#4237)

* Fixes #4236. CursesDriver erase the previous text under the cursor when moving if Force16Colors is true

* Still trying to fix fluent unit tests

* Fix nullable issue

---------

Co-authored-by: Tig <tig@users.noreply.github.com>

* Need to use KeyCode to return the desired effect with control keys

* Revert v2 drivers changes

* Fix nullable warnings

* Fixes #4025. Application.Driver.SendKeys should be retired

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: Thomas Nind <31306100+tznind@users.noreply.github.com>
2025-09-12 20:21:51 -06:00
Tig
18b602e980 Fixes #4243 - ConsoleDriverFacade.CreateClipboard now honors FakeDriver.FakeBehaviors.UseFakeClipboard (#4244)
* updatd ConsoleDriverFacade.CreateClipboard to honor FakeDriver.FakeBehaviors.UseFakeClipboard

* Code cleanup of fake driver v2
2025-09-12 13:32:31 -06:00
BDisp
e869f842e3 Fixes #4241. v2net driver isn't suspending on Unix platforms (#4242)
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-09-11 13:49:25 -06:00
BDisp
ad8ebc9890 Fixes #4200. ExtendedCharInfo needs be enhanced to properly deal with all codepoints (#4202)
* Fixes #4196. Application.Begin doesn't refresh the screen at start

* Fixes #4198. Application.Invoke isn't wakeup the driver if idle

* Reformatting to run CI again

* Revert "Reformatting to run CI again"

This reverts commit ef639c1e64.

* Trying fix an issue where sometimes subview variable is null running unit tests

* Replace ExtendedCharInfo.Char with char array

* Replace IsWindowsTerminal with IsVirtualTerminal

* Add a lastSize parameter to process resize automatically

* Handling surrogate pairs in input

* Implement SetConsoleTextAttribute

* Prevent select true color is not supported

* Fix null exception

* Revert GetWindowSize and add SetWindowSize

* Fix unit tests

* Revert all v2 changes except the one related with the ExtendedCharInfo

* Revert newlines and FakeOutput

* Prevents null reference

* Add gnome-terminal to launch settings

* Fixes issue on restore window size after maximize causing width shrinking

* Add ; exec bash to stay in terminal

* Fixes issue on restore window size after maximize causing width shrinking

* Tidying up input and output console modes

* Fixes uninitialized screen buffer.

* Revert "Fixes issue on restore window size after maximize causing width shrinking"

This reverts commit e5edad79f6.

* Reset console after sending escape sequences

* Remove unnecessary code only for buggy VSDebugConsole

* Fix more annoying exceptions

* Ensure flush the input buffer before reset the console

* Remove unnecessary ENABLE_VIRTUAL_TERMINAL_INPUT

* Remove unnecessary error handles

* Fix CI warnings

* Fix more CI warnings

* Fix more CI warnings

* Fixes #2796. CursesDriver doesn't render wide codepoints correctly

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-09-11 13:37:03 -06:00
Tig
6b7855e6b8 Merge pull request #4240 from tig/v2_4239-Charmap 2025-09-10 19:12:14 -07:00
Tig
2db6bc18e0 Merge branch 'v2_develop' into v2_4239-Charmap 2025-09-10 09:47:17 -07:00