| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- using Moq;
- using UnitTests;
- using Xunit.Abstractions;
- namespace ViewBaseTests.Viewport;
- [Trait ("Category", "Output")]
- public class ClearViewportTests (ITestOutputHelper output)
- {
- public class TestableView : View
- {
- public TestableView ()
- {
- Frame = new Rectangle (0, 0, 10, 10);
- }
- public bool TestOnClearingViewport () { return OnClearingViewport (); }
- public int OnClearingViewportCalled { get; set; }
- public bool CancelOnClearingViewport { get; set; }
- protected override bool OnClearingViewport ()
- {
- OnClearingViewportCalled++;
- return CancelOnClearingViewport;
- }
- public int OnClearedViewportCalled { get; set; }
- protected override void OnClearedViewport () { OnClearedViewportCalled++; }
- }
- [Fact]
- public void DoClearViewport_ViewportIsTransparent_DoesNotClear ()
- {
- // Arrange
- Mock<TestableView> view = new () { CallBase = true };
- view.Object.ViewportSettings = ViewportSettingsFlags.Transparent;
- // Act
- view.Object.DoClearViewport ();
- // Assert
- Assert.Equal (0, view.Object.OnClearingViewportCalled);
- Assert.Equal (0, view.Object.OnClearedViewportCalled);
- }
- [Fact]
- public void DoClearViewport_OnClearingViewportReturnsTrue_DoesNotClear ()
- {
- // Arrange
- Mock<TestableView> view = new () { CallBase = true };
- view.Object.CancelOnClearingViewport = true;
- // Act
- view.Object.DoClearViewport ();
- // Assert
- Assert.Equal (0, view.Object.OnClearedViewportCalled);
- }
- [Fact]
- public void DoClearViewport_ClearingViewportEventCancelled_DoesNotClear ()
- {
- // Arrange
- Mock<TestableView> view = new () { CallBase = true };
- view.Object.ClearingViewport += (sender, e) => e.Cancel = true;
- // Act
- view.Object.DoClearViewport ();
- // Assert
- Assert.Equal (0, view.Object.OnClearedViewportCalled);
- }
- [Fact]
- public void DoClearViewport_ClearsViewport ()
- {
- // Arrange
- Mock<TestableView> view = new () { CallBase = true };
- // Act
- view.Object.SetNeedsDraw ();
- view.Object.DoClearViewport ();
- // Assert
- Assert.Equal (1, view.Object.OnClearedViewportCalled);
- }
- [Fact]
- public void DoClearViewport_RaisesClearingViewportEvent ()
- {
- // Arrange
- Mock<TestableView> view = new () { CallBase = true };
- var eventRaised = false;
- view.Object.ClearingViewport += (sender, e) => eventRaised = true;
- // Act
- view.Object.SetNeedsDraw ();
- view.Object.DoClearViewport ();
- // Assert
- Assert.True (eventRaised);
- }
- [Fact]
- public void Clear_ClearsEntireViewport ()
- {
- using IApplication? app = Application.Create ();
- app.Init ("Fake");
- var superView = new Runnable
- {
- Width = Dim.Fill (), Height = Dim.Fill ()
- };
- var view = new View
- {
- Text = "X",
- X = 1, Y = 1,
- Width = 3, Height = 3,
- BorderStyle = LineStyle.Single
- };
- superView.Add (view);
- app.Begin (superView);
- superView.LayoutSubViews ();
- superView.Draw ();
- DriverAssert.AssertDriverContentsWithFrameAre (
- @"
- ┌─┐
- │X│
- └─┘",
- output,
- app.Driver);
- // On Draw exit the view is excluded from the clip, so this will do nothing.
- view.ClearViewport ();
- DriverAssert.AssertDriverContentsWithFrameAre (
- @"
- ┌─┐
- │X│
- └─┘",
- output,
- app.Driver);
- view.SetClipToScreen ();
- view.ClearViewport ();
- DriverAssert.AssertDriverContentsWithFrameAre (
- @"
- ┌─┐
- │ │
- └─┘",
- output,
- app.Driver);
- }
- [Fact]
- public void Clear_WithClearVisibleContentOnly_ClearsVisibleContentOnly ()
- {
- using IApplication? app = Application.Create ();
- app.Init ("Fake");
- var superView = new Runnable
- {
- Width = Dim.Fill (), Height = Dim.Fill ()
- };
- var view = new View
- {
- Text = "X",
- X = 1, Y = 1,
- Width = 3, Height = 3,
- BorderStyle = LineStyle.Single,
- ViewportSettings = ViewportSettingsFlags.ClearContentOnly
- };
- superView.Add (view);
- app.Begin (superView);
- superView.LayoutSubViews ();
- superView.Draw ();
- DriverAssert.AssertDriverContentsWithFrameAre (
- @"
- ┌─┐
- │X│
- └─┘",
- output,
- app.Driver);
- view.SetClipToScreen ();
- view.ClearViewport ();
- DriverAssert.AssertDriverContentsWithFrameAre (
- @"
- ┌─┐
- │ │
- └─┘",
- output,
- app.Driver);
- }
- [Fact]
- public void Clear_Viewport_Can_Use_Driver_AddRune_Or_AddStr_Methods ()
- {
- using IApplication? app = Application.Create ();
- app.Init ("Fake");
- var view = new FrameView { Width = Dim.Fill (), Height = Dim.Fill (), BorderStyle = LineStyle.Single };
- view.DrawingContent += (s, e) =>
- {
- Region? savedClip = view.AddViewportToClip ();
- for (var row = 0; row < view.Viewport.Height; row++)
- {
- app.Driver?.Move (1, row + 1);
- for (var col = 0; col < view.Viewport.Width; col++)
- {
- app.Driver?.AddStr ($"{col}");
- }
- }
- view.SetClip (savedClip);
- e.Cancel = true;
- };
- var top = new Runnable ();
- top.Add (view);
- app.Begin (top);
- app.Driver!.SetScreenSize (20, 10);
- app.LayoutAndDraw ();
- var expected = @"
- ┌──────────────────┐
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- └──────────────────┘
- "
- ;
- Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output, app.Driver);
- Assert.Equal (new (0, 0, 20, 10), pos);
- view.FillRect (view.Viewport);
- expected = @"
- ┌──────────────────┐
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- └──────────────────┘
- "
- ;
- pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output, app.Driver);
- top.Dispose ();
- }
- [Fact]
- public void Clear_Can_Use_Driver_AddRune_Or_AddStr_Methods ()
- {
- using IApplication? app = Application.Create ();
- app.Init ("Fake");
- var view = new FrameView { Width = Dim.Fill (), Height = Dim.Fill (), BorderStyle = LineStyle.Single };
- view.DrawingContent += (s, e) =>
- {
- Region? savedClip = view.AddViewportToClip ();
- for (var row = 0; row < view.Viewport.Height; row++)
- {
- app.Driver?.Move (1, row + 1);
- for (var col = 0; col < view.Viewport.Width; col++)
- {
- app.Driver?.AddStr ($"{col}");
- }
- }
- view.SetClip (savedClip);
- e.Cancel = true;
- };
- var top = new Runnable ();
- top.Add (view);
- app.Begin (top);
- app.Driver!.SetScreenSize (20, 10);
- app.LayoutAndDraw ();
- var expected = @"
- ┌──────────────────┐
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- │012345678910111213│
- └──────────────────┘
- "
- ;
- Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output, app.Driver);
- Assert.Equal (new (0, 0, 20, 10), pos);
- view.FillRect (view.Viewport);
- expected = @"
- ┌──────────────────┐
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- └──────────────────┘
- ";
- pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output, app.Driver);
- top.Dispose ();
- }
- }
|