* 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>
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).
* 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>
* 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>
* 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.
* 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>
* 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>
* 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>
* 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>
* 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>
* 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>
* 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>