Files
Terminal.Gui/UnitTests/ConsoleDrivers/ClipRegionTests.cs
Tig 7af54f369d Robustness improvements in prep for implementing Virtual Terminal Sequences (#3094)
* Fixes #2616. Support combining sequences that don't normalize

* Decouples Application from ConsoleDriver in TestHelpers

* Updates driver tests to match new arch

* Start on making all driver tests test all drivers

* Improves handling if combining marks.

* Fix unit tests fails.

* Fix unit tests fails.

* Handling combining mask.

* Tying to fix this unit test that sometimes fail.

* Add support for combining mask on NetDriver.

* Enable CombiningMarks as List<Rune>.

* Prevents combining marks on invalid runes default and space.

* Formatting for CI tests.

* Fix non-normalized combining mark to add 1 to Col.

* Reformatting for retest the CI.

* Forces non-normalized CMs to be ignored.

* Initial experiment

* Created ANSiDriver. Updated UI Catalog command line handling

* Fixed ForceDriver logic

* Fixed ForceDriver logic

* Updating P/Invoke

* Force16 colors WIP

* Fixed 16 colo mode

* Updated unit tests

* UI catalog tweak

* Added chinese scenario from bdisp

* Disabled AnsiDriver unit tests for now.

* Code cleanup

* Initial commit (fork from v2_fixes_2610_WT_VTS)

* Code cleanup

* Removed nativemethods.txt

* Removed not needed native stuff

* Code cleanup

* Ensures command line handler doesn't eat exceptions

---------

Co-authored-by: BDisp <bd.bdisp@gmail.com>
2024-01-04 22:35:18 -07:00

133 lines
4.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xunit;
using Xunit.Abstractions;
// Alias Console to MockConsole so we don't accidentally use Console
using Console = Terminal.Gui.FakeConsole;
namespace Terminal.Gui.DriverTests;
public class ClipRegionTests {
readonly ITestOutputHelper output;
public ClipRegionTests (ITestOutputHelper output)
{
ConsoleDriver.RunningUnitTests = true;
this.output = output;
}
[Theory]
[InlineData (typeof (FakeDriver))]
[InlineData (typeof (NetDriver))]
//[InlineData (typeof (ANSIDriver))]
[InlineData (typeof (WindowsDriver))]
[InlineData (typeof (CursesDriver))]
public void IsValidLocation (Type driverType)
{
var driver = (ConsoleDriver)Activator.CreateInstance (driverType);
Application.Init (driver);
Application.Driver.Rows = 10;
Application.Driver.Cols = 10;
// positive
Assert.True (driver.IsValidLocation (0, 0));
Assert.True (driver.IsValidLocation (1, 1));
Assert.True (driver.IsValidLocation (driver.Cols - 1, driver.Rows - 1));
// negative
Assert.False (driver.IsValidLocation (-1, 0));
Assert.False (driver.IsValidLocation (0, -1));
Assert.False (driver.IsValidLocation (-1, -1));
Assert.False (driver.IsValidLocation (driver.Cols, driver.Rows - 1));
Assert.False (driver.IsValidLocation (driver.Cols, driver.Rows - 1));
Assert.False (driver.IsValidLocation (driver.Cols, driver.Rows));
// Define a clip rectangle
driver.Clip = new Rect (5, 5, 5, 5);
// positive
Assert.True (driver.IsValidLocation (5, 5));
Assert.True (driver.IsValidLocation (9, 9));
// negative
Assert.False (driver.IsValidLocation (4, 5));
Assert.False (driver.IsValidLocation (5, 4));
Assert.False (driver.IsValidLocation (10, 9));
Assert.False (driver.IsValidLocation (9, 10));
Assert.False (driver.IsValidLocation (-1, 0));
Assert.False (driver.IsValidLocation (0, -1));
Assert.False (driver.IsValidLocation (-1, -1));
Assert.False (driver.IsValidLocation (driver.Cols, driver.Rows - 1));
Assert.False (driver.IsValidLocation (driver.Cols, driver.Rows - 1));
Assert.False (driver.IsValidLocation (driver.Cols, driver.Rows));
Application.Shutdown ();
}
[Theory]
[InlineData (typeof (FakeDriver))]
[InlineData (typeof (NetDriver))]
//[InlineData (typeof (ANSIDriver))]
[InlineData (typeof (WindowsDriver))]
[InlineData (typeof (CursesDriver))]
public void Clip_Set_To_Empty_AllInvalid (Type driverType)
{
var driver = (ConsoleDriver)Activator.CreateInstance (driverType);
Application.Init (driver);
// Define a clip rectangle
driver.Clip = Rect.Empty;
// negative
Assert.False (driver.IsValidLocation (4, 5));
Assert.False (driver.IsValidLocation (5, 4));
Assert.False (driver.IsValidLocation (10, 9));
Assert.False (driver.IsValidLocation (9, 10));
Assert.False (driver.IsValidLocation (-1, 0));
Assert.False (driver.IsValidLocation (0, -1));
Assert.False (driver.IsValidLocation (-1, -1));
Assert.False (driver.IsValidLocation (driver.Cols, driver.Rows - 1));
Assert.False (driver.IsValidLocation (driver.Cols, driver.Rows - 1));
Assert.False (driver.IsValidLocation (driver.Cols, driver.Rows));
Application.Shutdown ();
}
[Theory]
[InlineData (typeof (FakeDriver))]
[InlineData (typeof (NetDriver))]
//[InlineData (typeof (ANSIDriver))]
[InlineData (typeof (WindowsDriver))]
[InlineData (typeof (CursesDriver))]
public void AddRune_Is_Clipped (Type driverType)
{
var driver = (ConsoleDriver)Activator.CreateInstance (driverType);
Application.Init (driver);
Application.Driver.Rows = 25;
Application.Driver.Cols = 80;
driver.Move (0, 0);
driver.AddRune ('x');
Assert.Equal ((Rune)'x', driver.Contents [0, 0].Rune);
driver.Move (5, 5);
driver.AddRune ('x');
Assert.Equal ((Rune)'x', driver.Contents [5, 5].Rune);
// Clear the contents
driver.FillRect (new Rect (0, 0, driver.Rows, driver.Cols), ' ');
Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
// Setup the region with a single rectangle, fill screen with 'x'
driver.Clip = new Rect (5, 5, 5, 5);
driver.FillRect (new Rect (0, 0, driver.Rows, driver.Cols), 'x');
Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
Assert.Equal ((Rune)' ', driver.Contents [4, 9].Rune);
Assert.Equal ((Rune)'x', driver.Contents [5, 5].Rune);
Assert.Equal ((Rune)'x', driver.Contents [9, 9].Rune);
Assert.Equal ((Rune)' ', driver.Contents [10, 10].Rune);
Application.Shutdown ();
}
}