| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- using System.Text;
- using UnitTests;
- using Xunit.Abstractions;
- namespace UnitTests_Parallelizable.DriverTests;
- /// <summary>
- /// Tests for the FakeDriver to ensure it works properly with the modern component factory architecture.
- /// </summary>
- public class FakeDriverTests (ITestOutputHelper output) : FakeDriverBase
- {
- private readonly ITestOutputHelper _output = output;
- #region Basic FakeDriver Tests
- [Fact]
- public void FakeDriver_Init_Works ()
- {
- IDriver driver = CreateFakeDriver ();
- Assert.IsAssignableFrom<IDriver> (driver);
- _output.WriteLine ($"Driver type: {driver.GetType ().Name}");
- _output.WriteLine ($"Screen size: {driver.Screen}");
- }
- [Fact]
- public void FakeDriver_Screen_Has_Default_Size ()
- {
- IDriver driver = CreateFakeDriver ();
- // Default size should be 80x25
- Assert.Equal (new (0, 0, 80, 25), driver.Screen);
- Assert.Equal (80, driver.Cols);
- Assert.Equal (25, driver.Rows);
- }
- [Fact]
- public void FakeDriver_Can_Resize ()
- {
- IDriver driver = CreateFakeDriver ();
- // Start with default size
- Assert.Equal (80, driver.Cols);
- Assert.Equal (25, driver.Rows);
- // Resize to 100x30
- driver?.SetScreenSize (100, 30);
- // Verify new size
- Assert.Equal (100, driver.Cols);
- Assert.Equal (30, driver.Rows);
- Assert.Equal (new (0, 0, 100, 30), driver.Screen);
- }
- #endregion
- #region CreateFakeDriver Tests
- [Fact]
- public void SetupFakeDriver_Initializes_Driver_With_80x25 ()
- {
- IDriver driver = CreateFakeDriver ();
- Assert.NotNull (driver);
- Assert.Equal (new (0, 0, 80, 25), driver.Screen);
- Assert.Equal (80, driver.Cols);
- Assert.Equal (25, driver.Rows);
- }
- [Fact]
- public void SetupFakeDriver_Driver_Is_IDriver ()
- {
- IDriver driver = CreateFakeDriver ();
- Assert.NotNull (driver);
- // Should be IDriver
- Assert.IsAssignableFrom<IDriver> (driver);
- _output.WriteLine ($"Driver type: {driver.GetType ().Name}");
- }
- [Fact]
- public void SetupFakeDriver_Can_Set_Screen_Size ()
- {
- IDriver driver = CreateFakeDriver ();
- IDriver fakeDriver = driver;
- Assert.NotNull (fakeDriver);
- fakeDriver!.SetScreenSize (100, 50);
- Assert.Equal (100, driver.Cols);
- Assert.Equal (50, driver.Rows);
- }
- #endregion
- #region Clipboard Tests
- [Fact]
- public void FakeDriver_Clipboard_Works_When_Enabled ()
- {
- IDriver driver = CreateFakeDriver ();
- Assert.NotNull (driver.Clipboard);
- Assert.True (driver.Clipboard.IsSupported);
- // Set clipboard content
- driver.Clipboard.SetClipboardData ("Test content");
- // Get clipboard content
- string content = driver.Clipboard.GetClipboardData ();
- Assert.Equal ("Test content", content);
- }
- [Fact]
- public void FakeDriver_Clipboard_GetClipboarData_Works ()
- {
- IDriver driver = CreateFakeDriver ();
- Assert.NotNull (driver.Clipboard);
- driver.Clipboard.SetClipboardData ("test");
- Assert.Equal ("test", driver.Clipboard.GetClipboardData ());
- }
- #endregion
- #region Buffer and Fill Tests
- [Fact]
- public void FakeDriver_Can_Fill_Rectangle ()
- {
- IDriver driver = CreateFakeDriver ();
- // Verify driver is initialized with buffers
- Assert.NotNull (driver);
- Assert.NotNull (driver.Contents);
- // Fill a rectangle
- var rect = new Rectangle (5, 5, 10, 5);
- driver.FillRect (rect, (Rune)'X');
- // Verify the rectangle was filled
- for (int row = rect.Y; row < rect.Y + rect.Height; row++)
- {
- for (int col = rect.X; col < rect.X + rect.Width; col++)
- {
- Assert.Equal ("X", driver.Contents [row, col].Grapheme);
- }
- }
- }
- [Fact]
- public void FakeDriver_Buffer_Integrity_After_Multiple_Resizes ()
- {
- IDriver driver = CreateFakeDriver ();
- // Start with default size
- Assert.Equal (80, driver.Cols);
- Assert.Equal (25, driver.Rows);
- // Fill with a pattern
- driver.FillRect (new (0, 0, 10, 5), (Rune)'A');
- // Resize
- driver?.SetScreenSize (100, 30);
- // Verify new size
- Assert.Equal (100, driver.Cols);
- Assert.Equal (30, driver.Rows);
- // Verify buffer is clean (no stale runes from previous size)
- Assert.NotNull (driver.Contents);
- Assert.Equal (30, driver.Contents!.GetLength (0));
- Assert.Equal (100, driver.Contents.GetLength (1));
- // Fill with new pattern
- driver.FillRect (new (0, 0, 20, 10), (Rune)'B');
- // Resize back
- driver?.SetScreenSize (80, 25);
- // Verify size is back
- Assert.Equal (80, driver.Cols);
- Assert.Equal (25, driver.Rows);
- // Verify buffer dimensions match
- Assert.Equal (25, driver.Contents.GetLength (0));
- Assert.Equal (80, driver.Contents.GetLength (1));
- }
- #endregion
- #region ScreenChanged Event Tests
- [Fact]
- public void ScreenChanged_Event_Fires_On_SetScreenSize ()
- {
- IDriver driver = CreateFakeDriver ();
- var screenChangedFired = false;
- Size? newSize = null;
- driver.SizeChanged += (sender, args) =>
- {
- screenChangedFired = true;
- newSize = args.Size;
- };
- // Trigger resize using FakeResize which uses SetScreenSize internally
- driver?.SetScreenSize (100, 30);
- // Verify event fired
- Assert.True (screenChangedFired);
- Assert.NotNull (newSize);
- Assert.Equal (100, newSize!.Value.Width);
- Assert.Equal (30, newSize.Value.Height);
- }
- [Fact]
- public void FakeResize_Triggers_ScreenChanged_And_Updates_Application_Screen ()
- {
- IDriver driver = CreateFakeDriver ();
- var screenChangedFired = false;
- Size? eventSize = null;
- driver.SizeChanged += (sender, args) =>
- {
- screenChangedFired = true;
- eventSize = args.Size;
- };
- // Use FakeResize helper
- driver?.SetScreenSize (120, 40);
- // Verify event fired
- Assert.True (screenChangedFired);
- Assert.NotNull (eventSize);
- Assert.Equal (120, eventSize!.Value.Width);
- Assert.Equal (40, eventSize.Value.Height);
- // Verify driver.Screen was updated
- Assert.Equal (new (0, 0, 120, 40), driver.Screen);
- Assert.Equal (120, driver.Cols);
- Assert.Equal (40, driver.Rows);
- }
- [Fact]
- public void SizeChanged_Event_Still_Fires_For_Compatibility ()
- {
- IDriver driver = CreateFakeDriver ();
- var sizeChangedFired = false;
- var screenChangedFired = false;
- #pragma warning disable CS0618 // Type or member is obsolete
- driver.SizeChanged += (sender, args) => { sizeChangedFired = true; };
- #pragma warning restore CS0618 // Type or member is obsolete
- driver.SizeChanged += (sender, args) => { screenChangedFired = true; };
- // Trigger resize using FakeResize
- driver?.SetScreenSize (90, 35);
- // Both events should fire for compatibility
- Assert.True (sizeChangedFired);
- Assert.True (screenChangedFired);
- }
- #endregion
- }
|