mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-28 16:58:01 +01:00
Added unit tests for Viewport/FrameChanged events. Fixed bugs.
This commit is contained in:
@@ -313,7 +313,7 @@ public partial class View
|
||||
//SetSubViewNeedsDraw();
|
||||
}
|
||||
|
||||
OnViewportChanged (new (IsInitialized ? Viewport : Rectangle.Empty, oldViewport));
|
||||
RaiseViewportChangedEvent (oldViewport);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -326,7 +326,7 @@ public partial class View
|
||||
Size = newSize
|
||||
};
|
||||
|
||||
OnViewportChanged (new (IsInitialized ? Viewport : Rectangle.Empty, oldViewport));
|
||||
// Note, setting the Frame will cause ViewportChanged to be raised.
|
||||
|
||||
return;
|
||||
|
||||
@@ -368,6 +368,13 @@ public partial class View
|
||||
}
|
||||
}
|
||||
|
||||
private void RaiseViewportChangedEvent (Rectangle oldViewport)
|
||||
{
|
||||
var args = new DrawEventArgs (IsInitialized ? Viewport : Rectangle.Empty, oldViewport);
|
||||
OnViewportChanged (args);
|
||||
ViewportChanged?.Invoke (this, args);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fired when the <see cref="Viewport"/> changes. This event is fired after the <see cref="Viewport"/> has been
|
||||
/// updated.
|
||||
@@ -378,7 +385,7 @@ public partial class View
|
||||
/// Called when the <see cref="Viewport"/> changes. Invokes the <see cref="ViewportChanged"/> event.
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
protected virtual void OnViewportChanged (DrawEventArgs e) { ViewportChanged?.Invoke (this, e); }
|
||||
protected virtual void OnViewportChanged (DrawEventArgs e) { }
|
||||
|
||||
/// <summary>
|
||||
/// Converts a <see cref="Viewport"/>-relative location and size to a screen-relative location and size.
|
||||
|
||||
@@ -98,6 +98,11 @@ public partial class View // Layout APIs
|
||||
// BUGBUG: When SetFrame is called from Frame_set, this event gets raised BEFORE OnResizeNeeded. Is that OK?
|
||||
OnFrameChanged (in frame);
|
||||
FrameChanged?.Invoke (this, new (in frame));
|
||||
|
||||
if (oldViewport != Viewport)
|
||||
{
|
||||
RaiseViewportChangedEvent (oldViewport);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -259,4 +259,55 @@ public class FrameTests (ITestOutputHelper output)
|
||||
Assert.Equal (Dim.Absolute (40), v.Height);
|
||||
v.Dispose ();
|
||||
}
|
||||
|
||||
private class TestFrameEventsView : View
|
||||
{
|
||||
public int OnFrameChangedCallCount { get; private set; }
|
||||
public int FrameChangedEventCallCount { get; private set; }
|
||||
|
||||
public TestFrameEventsView ()
|
||||
{
|
||||
FrameChanged += (sender, args) => FrameChangedEventCallCount++;
|
||||
}
|
||||
|
||||
protected override void OnFrameChanged (in Rectangle frame)
|
||||
{
|
||||
OnFrameChangedCallCount++;
|
||||
base.OnFrameChanged (frame);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OnFrameChanged_Called_When_Frame_Changes ()
|
||||
{
|
||||
// Arrange
|
||||
var view = new TestFrameEventsView ();
|
||||
var initialFrame = new Rectangle (0, 0, 10, 10);
|
||||
var newFrame = new Rectangle (0, 0, 20, 20);
|
||||
view.Frame = initialFrame;
|
||||
Assert.Equal (1, view.OnFrameChangedCallCount);
|
||||
|
||||
// Act
|
||||
view.Frame = newFrame;
|
||||
|
||||
// Assert
|
||||
Assert.Equal (2, view.OnFrameChangedCallCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FrameChanged_Event_Raised_When_Frame_Changes ()
|
||||
{
|
||||
// Arrange
|
||||
var view = new TestFrameEventsView ();
|
||||
var initialFrame = new Rectangle (0, 0, 10, 10);
|
||||
var newFrame = new Rectangle (0, 0, 20, 20);
|
||||
view.Frame = initialFrame;
|
||||
Assert.Equal (1, view.FrameChangedEventCallCount);
|
||||
|
||||
// Act
|
||||
view.Frame = newFrame;
|
||||
|
||||
// Assert
|
||||
Assert.Equal (2, view.FrameChangedEventCallCount);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,6 +387,93 @@ public class ViewportTests (ITestOutputHelper output)
|
||||
Assert.NotEqual (view.Viewport.Size, view.GetContentSize ());
|
||||
}
|
||||
|
||||
private class TestViewportEventsView : View
|
||||
{
|
||||
public int OnViewportChangedCallCount { get; private set; }
|
||||
public int ViewportChangedEventCallCount { get; private set; }
|
||||
|
||||
public TestViewportEventsView ()
|
||||
{
|
||||
ViewportChanged += (sender, args) => ViewportChangedEventCallCount++;
|
||||
}
|
||||
|
||||
protected override void OnViewportChanged (DrawEventArgs e)
|
||||
{
|
||||
OnViewportChangedCallCount++;
|
||||
base.OnViewportChanged (e);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OnViewportChanged_Called_When_Viewport_Changes ()
|
||||
{
|
||||
// Arrange
|
||||
var view = new TestViewportEventsView ();
|
||||
var initialViewport = new Rectangle (0, 0, 10, 10);
|
||||
var newViewport = new Rectangle (0, 0, 20, 20);
|
||||
Assert.Equal (0, view.OnViewportChangedCallCount);
|
||||
view.Viewport = initialViewport;
|
||||
Assert.Equal (1, view.OnViewportChangedCallCount);
|
||||
|
||||
// Act
|
||||
view.Viewport = newViewport;
|
||||
|
||||
// Assert
|
||||
Assert.Equal (2, view.OnViewportChangedCallCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ViewportChanged_Event_Raised_When_Viewport_Changes ()
|
||||
{
|
||||
// Arrange
|
||||
var view = new TestViewportEventsView ();
|
||||
var initialViewport = new Rectangle (0, 0, 10, 10);
|
||||
var newViewport = new Rectangle (0, 0, 20, 20);
|
||||
view.Viewport = initialViewport;
|
||||
Assert.Equal (1, view.ViewportChangedEventCallCount);
|
||||
|
||||
// Act
|
||||
view.Viewport = newViewport;
|
||||
|
||||
// Assert
|
||||
Assert.Equal (2, view.ViewportChangedEventCallCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OnViewportChanged_Called_When_Frame_Changes ()
|
||||
{
|
||||
// Arrange
|
||||
var view = new TestViewportEventsView ();
|
||||
var initialFrame = new Rectangle (0, 0, 10, 10);
|
||||
var newFrame = new Rectangle (0, 0, 20, 20);
|
||||
Assert.Equal (0, view.OnViewportChangedCallCount);
|
||||
view.Frame = initialFrame;
|
||||
Assert.Equal (1, view.OnViewportChangedCallCount);
|
||||
|
||||
// Act
|
||||
view.Frame = newFrame;
|
||||
|
||||
// Assert
|
||||
Assert.Equal (2, view.OnViewportChangedCallCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ViewportChanged_Event_Raised_When_Frame_Changes ()
|
||||
{
|
||||
// Arrange
|
||||
var view = new TestViewportEventsView ();
|
||||
var initialFrame = new Rectangle (0, 0, 10, 10);
|
||||
var newFrame = new Rectangle (0, 0, 20, 20);
|
||||
view.Frame = initialFrame;
|
||||
Assert.Equal (1, view.ViewportChangedEventCallCount);
|
||||
|
||||
// Act
|
||||
view.Frame = newFrame;
|
||||
|
||||
// Assert
|
||||
Assert.Equal (2, view.ViewportChangedEventCallCount);
|
||||
}
|
||||
|
||||
//[Theory]
|
||||
//[InlineData (0, 0, true)]
|
||||
//[InlineData (-1, 0, true)]
|
||||
|
||||
Reference in New Issue
Block a user