|
@@ -4,6 +4,7 @@ namespace Terminal.Gui.ViewTests;
|
|
|
|
|
|
public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllViews
|
|
|
{
|
|
|
+ #region HasFocusChanging_NewValue_True
|
|
|
[Fact]
|
|
|
public void HasFocusChanging_SetFocus_Raises ()
|
|
|
{
|
|
@@ -452,7 +453,7 @@ public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllView
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
- public void HasFocusChanging_SetFocus_On_Subview_SubView_Can_Cancel ()
|
|
|
+ public void HasFocusChanging_SetFocus_On_Subview_If_SubView_Cancels ()
|
|
|
{
|
|
|
var hasFocusTrueCount = 0;
|
|
|
var hasFocusFalseCount = 0;
|
|
@@ -499,100 +500,318 @@ public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllView
|
|
|
|
|
|
subview.SetFocus ();
|
|
|
|
|
|
+ Assert.False (view.HasFocus); // Never had focus
|
|
|
+ Assert.False (subview.HasFocus); // Cancelled
|
|
|
+
|
|
|
+ Assert.Equal (0, hasFocusTrueCount);
|
|
|
+ Assert.Equal (0, hasFocusFalseCount);
|
|
|
+
|
|
|
+ Assert.Equal (1, subviewHasFocusTrueCount);
|
|
|
+ Assert.Equal (0, subviewHasFocusFalseCount);
|
|
|
+
|
|
|
+ // Now set focus on the view
|
|
|
+ view.SetFocus ();
|
|
|
+
|
|
|
+ Assert.True (view.HasFocus);
|
|
|
+ Assert.False (subview.HasFocus); // Cancelled
|
|
|
+
|
|
|
+ Assert.Equal (1, hasFocusTrueCount);
|
|
|
+ Assert.Equal (0, hasFocusFalseCount);
|
|
|
+
|
|
|
+ Assert.Equal (2, subviewHasFocusTrueCount);
|
|
|
+ Assert.Equal (0, subviewHasFocusFalseCount);
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion HasFocusChanging_NewValue_True
|
|
|
+
|
|
|
+ #region HasFocusChanging_NewValue_False
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void HasFocusChanging_RemoveFocus_Raises ()
|
|
|
+ {
|
|
|
+ var hasFocusTrueCount = 0;
|
|
|
+ var hasFocusFalseCount = 0;
|
|
|
+
|
|
|
+ var view = new View
|
|
|
+ {
|
|
|
+ Id = "view",
|
|
|
+ CanFocus = true
|
|
|
+ };
|
|
|
+ view.HasFocusChanging += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ hasFocusTrueCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ hasFocusFalseCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ Assert.True (view.CanFocus);
|
|
|
+ Assert.False (view.HasFocus);
|
|
|
+
|
|
|
+ view.SetFocus ();
|
|
|
+ Assert.True (view.HasFocus);
|
|
|
+ Assert.Equal (1, hasFocusTrueCount);
|
|
|
+ Assert.Equal (0, hasFocusFalseCount);
|
|
|
+
|
|
|
+ view.HasFocus = false;
|
|
|
Assert.False (view.HasFocus);
|
|
|
+ Assert.Equal (1, hasFocusTrueCount);
|
|
|
+ Assert.Equal (1, hasFocusFalseCount);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void HasFocusChanging_RemoveFocus_SubView_SetFocus_Raises ()
|
|
|
+ {
|
|
|
+ var hasFocusTrueCount = 0;
|
|
|
+ var hasFocusFalseCount = 0;
|
|
|
+
|
|
|
+ var view = new View
|
|
|
+ {
|
|
|
+ Id = "view",
|
|
|
+ CanFocus = true
|
|
|
+ };
|
|
|
+ view.HasFocusChanging += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ hasFocusTrueCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ hasFocusFalseCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ var subviewHasFocusTrueCount = 0;
|
|
|
+ var subviewHasFocusFalseCount = 0;
|
|
|
+
|
|
|
+ var subview = new View
|
|
|
+ {
|
|
|
+ Id = "subview",
|
|
|
+ CanFocus = true
|
|
|
+ };
|
|
|
+ subview.HasFocusChanging += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ subviewHasFocusTrueCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subviewHasFocusFalseCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ view.Add (subview);
|
|
|
+
|
|
|
+ view.SetFocus ();
|
|
|
+
|
|
|
+ Assert.Equal (1, hasFocusTrueCount);
|
|
|
+ Assert.Equal (0, hasFocusFalseCount);
|
|
|
+
|
|
|
+ Assert.Equal (1, subviewHasFocusTrueCount);
|
|
|
+ Assert.Equal (0, subviewHasFocusFalseCount);
|
|
|
+
|
|
|
+ view.HasFocus = false;
|
|
|
+ Assert.False(view.HasFocus);
|
|
|
Assert.False (subview.HasFocus);
|
|
|
+ Assert.Equal (1, hasFocusTrueCount);
|
|
|
+ Assert.Equal (1, hasFocusFalseCount);
|
|
|
|
|
|
- Assert.Equal (0, hasFocusTrueCount);
|
|
|
+ Assert.Equal (1, subviewHasFocusTrueCount);
|
|
|
+ Assert.Equal (1, subviewHasFocusFalseCount);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void HasFocusChanging_RemoveFocus_On_SubView_SubView_SetFocus_Raises ()
|
|
|
+ {
|
|
|
+ var hasFocusTrueCount = 0;
|
|
|
+ var hasFocusFalseCount = 0;
|
|
|
+
|
|
|
+ var view = new View
|
|
|
+ {
|
|
|
+ Id = "view",
|
|
|
+ CanFocus = true
|
|
|
+ };
|
|
|
+ view.HasFocusChanging += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ hasFocusTrueCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ hasFocusFalseCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ var subviewHasFocusTrueCount = 0;
|
|
|
+ var subviewHasFocusFalseCount = 0;
|
|
|
+
|
|
|
+ var subview = new View
|
|
|
+ {
|
|
|
+ Id = "subview",
|
|
|
+ CanFocus = true
|
|
|
+ };
|
|
|
+ subview.HasFocusChanging += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ subviewHasFocusTrueCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subviewHasFocusFalseCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ view.Add (subview);
|
|
|
+
|
|
|
+ subview.SetFocus ();
|
|
|
+
|
|
|
+ Assert.Equal (1, hasFocusTrueCount);
|
|
|
Assert.Equal (0, hasFocusFalseCount);
|
|
|
|
|
|
Assert.Equal (1, subviewHasFocusTrueCount);
|
|
|
Assert.Equal (0, subviewHasFocusFalseCount);
|
|
|
+
|
|
|
+ subview.HasFocus = false;
|
|
|
+ Assert.False (subview.HasFocus);
|
|
|
+ Assert.Equal (1, hasFocusTrueCount);
|
|
|
+ Assert.Equal (0, hasFocusFalseCount);
|
|
|
+
|
|
|
+ Assert.Equal (1, subviewHasFocusTrueCount);
|
|
|
+ Assert.Equal (1, subviewHasFocusFalseCount);
|
|
|
+
|
|
|
}
|
|
|
+ #endregion HasFocusChanging_NewValue_False
|
|
|
+
|
|
|
+ #region HasFocusChanged
|
|
|
|
|
|
[Fact]
|
|
|
- public void RemoveFocus_Raises_HasFocusChanged ()
|
|
|
+ public void HasFocusChanged_RemoveFocus_Raises ()
|
|
|
{
|
|
|
- var nEnter = 0;
|
|
|
- var nLeave = 0;
|
|
|
+ var newValueTrueCount = 0;
|
|
|
+ var newValueFalseCount = 0;
|
|
|
|
|
|
var view = new View
|
|
|
{
|
|
|
Id = "view",
|
|
|
CanFocus = true
|
|
|
};
|
|
|
- view.HasFocusChanging += (s, e) => nEnter++;
|
|
|
- view.HasFocusChanged += (s, e) => nLeave++;
|
|
|
+ view.HasFocusChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ newValueTrueCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ newValueFalseCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
Assert.True (view.CanFocus);
|
|
|
Assert.False (view.HasFocus);
|
|
|
|
|
|
view.SetFocus ();
|
|
|
Assert.True (view.HasFocus);
|
|
|
- Assert.Equal (1, nEnter);
|
|
|
- Assert.Equal (0, nLeave);
|
|
|
+ Assert.Equal (1, newValueTrueCount);
|
|
|
+ Assert.Equal (0, newValueFalseCount);
|
|
|
|
|
|
view.HasFocus = false;
|
|
|
- Assert.Equal (1, nEnter);
|
|
|
- Assert.Equal (1, nLeave);
|
|
|
+ Assert.Equal (1, newValueTrueCount);
|
|
|
+ Assert.Equal (1, newValueFalseCount);
|
|
|
}
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
- public void RemoveFocus_SubView_Raises_HasFocusChanged ()
|
|
|
+ public void HasFocusChanged_With_SubView_Raises ()
|
|
|
{
|
|
|
- var viewEnterCount = 0;
|
|
|
- var viewLeaveCount = 0;
|
|
|
+ var newValueTrueCount = 0;
|
|
|
+ var newValueFalseCount = 0;
|
|
|
|
|
|
var view = new View
|
|
|
{
|
|
|
Id = "view",
|
|
|
CanFocus = true
|
|
|
};
|
|
|
- view.HasFocusChanging += (s, e) => viewEnterCount++;
|
|
|
- view.HasFocusChanged += (s, e) => viewLeaveCount++;
|
|
|
+ view.HasFocusChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ newValueTrueCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ newValueFalseCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
- var subviewEnterCount = 0;
|
|
|
- var subviewLeaveCount = 0;
|
|
|
+ var subviewNewValueTrueCount = 0;
|
|
|
+ var subviewNewValueFalseCount = 0;
|
|
|
|
|
|
var subview = new View
|
|
|
{
|
|
|
Id = "subview",
|
|
|
CanFocus = true
|
|
|
};
|
|
|
- subview.HasFocusChanging += (s, e) => subviewEnterCount++;
|
|
|
- subview.HasFocusChanged += (s, e) => subviewLeaveCount++;
|
|
|
+ subview.HasFocusChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ subviewNewValueTrueCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subviewNewValueFalseCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
view.Add (subview);
|
|
|
|
|
|
view.SetFocus ();
|
|
|
+ Assert.Equal (1, newValueTrueCount);
|
|
|
+ Assert.Equal (0, newValueFalseCount);
|
|
|
+
|
|
|
+ Assert.Equal (1, subviewNewValueTrueCount);
|
|
|
+ Assert.Equal (0, subviewNewValueFalseCount);
|
|
|
|
|
|
view.HasFocus = false;
|
|
|
|
|
|
- Assert.Equal (1, viewEnterCount);
|
|
|
- Assert.Equal (1, viewLeaveCount);
|
|
|
+ Assert.Equal (1, newValueTrueCount);
|
|
|
+ Assert.Equal (1, newValueFalseCount);
|
|
|
|
|
|
- Assert.Equal (1, subviewEnterCount);
|
|
|
- Assert.Equal (1, subviewLeaveCount);
|
|
|
+ Assert.Equal (1, subviewNewValueTrueCount);
|
|
|
+ Assert.Equal (1, subviewNewValueFalseCount);
|
|
|
|
|
|
view.SetFocus ();
|
|
|
|
|
|
- Assert.Equal (2, viewEnterCount);
|
|
|
- Assert.Equal (1, viewLeaveCount);
|
|
|
+ Assert.Equal (2, newValueTrueCount);
|
|
|
+ Assert.Equal (1, newValueFalseCount);
|
|
|
|
|
|
- Assert.Equal (2, subviewEnterCount);
|
|
|
- Assert.Equal (1, subviewLeaveCount);
|
|
|
+ Assert.Equal (2, subviewNewValueTrueCount);
|
|
|
+ Assert.Equal (1, subviewNewValueFalseCount);
|
|
|
|
|
|
subview.HasFocus = false;
|
|
|
|
|
|
- Assert.Equal (2, viewEnterCount);
|
|
|
- Assert.Equal (2, viewLeaveCount);
|
|
|
+ Assert.Equal (2, newValueTrueCount);
|
|
|
+ Assert.Equal (1, newValueFalseCount);
|
|
|
|
|
|
- Assert.Equal (2, subviewEnterCount);
|
|
|
- Assert.Equal (2, subviewLeaveCount);
|
|
|
+ Assert.Equal (2, subviewNewValueTrueCount);
|
|
|
+ Assert.Equal (2, subviewNewValueFalseCount);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
[Fact]
|
|
|
- public void RemoveFocus_CompoundSubView_Raises_HasFocusChanged ()
|
|
|
+ public void HasFocusChanged_CompoundSubView_Raises ()
|
|
|
{
|
|
|
var viewEnterCount = 0;
|
|
|
var viewLeaveCount = 0;
|
|
@@ -602,8 +821,17 @@ public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllView
|
|
|
Id = "view",
|
|
|
CanFocus = true
|
|
|
};
|
|
|
- view.HasFocusChanging += (s, e) => viewEnterCount++;
|
|
|
- view.HasFocusChanged += (s, e) => viewLeaveCount++;
|
|
|
+ view.HasFocusChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ viewEnterCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ viewLeaveCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
var subViewEnterCount = 0;
|
|
|
var subViewLeaveCount = 0;
|
|
@@ -613,8 +841,17 @@ public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllView
|
|
|
Id = "subView",
|
|
|
CanFocus = true
|
|
|
};
|
|
|
- subView.HasFocusChanging += (s, e) => subViewEnterCount++;
|
|
|
- subView.HasFocusChanged += (s, e) => subViewLeaveCount++;
|
|
|
+ subView.HasFocusChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ subViewEnterCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subViewLeaveCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
var subviewSubView1EnterCount = 0;
|
|
|
var subviewSubView1LeaveCount = 0;
|
|
@@ -624,8 +861,17 @@ public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllView
|
|
|
Id = "subViewSubView1",
|
|
|
CanFocus = false
|
|
|
};
|
|
|
- subViewSubView1.HasFocusChanging += (s, e) => subviewSubView1EnterCount++;
|
|
|
- subViewSubView1.HasFocusChanged += (s, e) => subviewSubView1LeaveCount++;
|
|
|
+ subViewSubView1.HasFocusChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ subviewSubView1EnterCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subviewSubView1LeaveCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
var subviewSubView2EnterCount = 0;
|
|
|
var subviewSubView2LeaveCount = 0;
|
|
@@ -635,9 +881,17 @@ public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllView
|
|
|
Id = "subViewSubView2",
|
|
|
CanFocus = true
|
|
|
};
|
|
|
- subViewSubView2.HasFocusChanging += (s, e) => subviewSubView2EnterCount++;
|
|
|
- subViewSubView2.HasFocusChanged += (s, e) => subviewSubView2LeaveCount++;
|
|
|
-
|
|
|
+ subViewSubView2.HasFocusChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ subviewSubView2EnterCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subviewSubView2LeaveCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
var subviewSubView3EnterCount = 0;
|
|
|
var subviewSubView3LeaveCount = 0;
|
|
|
|
|
@@ -646,8 +900,17 @@ public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllView
|
|
|
Id = "subViewSubView3",
|
|
|
CanFocus = false
|
|
|
};
|
|
|
- subViewSubView3.HasFocusChanging += (s, e) => subviewSubView3EnterCount++;
|
|
|
- subViewSubView3.HasFocusChanged += (s, e) => subviewSubView3LeaveCount++;
|
|
|
+ subViewSubView3.HasFocusChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.NewValue)
|
|
|
+ {
|
|
|
+ subviewSubView3EnterCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subviewSubView3LeaveCount++;
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
|
|
|
|
@@ -682,59 +945,5 @@ public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllView
|
|
|
Assert.Equal (0, subviewSubView3EnterCount);
|
|
|
Assert.Equal (0, subviewSubView3LeaveCount);
|
|
|
}
|
|
|
-
|
|
|
- [Fact]
|
|
|
- public void HasFocus_False_Leave_Raised ()
|
|
|
- {
|
|
|
- var view = new View
|
|
|
- {
|
|
|
- Id = "view",
|
|
|
- CanFocus = true
|
|
|
- };
|
|
|
- Assert.True (view.CanFocus);
|
|
|
- Assert.False (view.HasFocus);
|
|
|
-
|
|
|
- var leaveInvoked = 0;
|
|
|
-
|
|
|
- view.HasFocusChanged += (s, e) => leaveInvoked++;
|
|
|
-
|
|
|
- view.SetFocus ();
|
|
|
- Assert.True (view.HasFocus);
|
|
|
- Assert.Equal (0, leaveInvoked);
|
|
|
-
|
|
|
- view.HasFocus = false;
|
|
|
- Assert.False (view.HasFocus);
|
|
|
- Assert.Equal (1, leaveInvoked);
|
|
|
- }
|
|
|
-
|
|
|
- [Fact]
|
|
|
- public void HasFocus_False_Leave_Raised_ForAllSubViews ()
|
|
|
- {
|
|
|
- var view = new View
|
|
|
- {
|
|
|
- Id = "view",
|
|
|
- CanFocus = true
|
|
|
- };
|
|
|
-
|
|
|
- var subview = new View
|
|
|
- {
|
|
|
- Id = "subview",
|
|
|
- CanFocus = true
|
|
|
- };
|
|
|
- view.Add (subview);
|
|
|
-
|
|
|
- var leaveInvoked = 0;
|
|
|
-
|
|
|
- view.HasFocusChanged += (s, e) => leaveInvoked++;
|
|
|
- subview.HasFocusChanged += (s, e) => leaveInvoked++;
|
|
|
-
|
|
|
- view.SetFocus ();
|
|
|
- Assert.True (view.HasFocus);
|
|
|
- Assert.Equal (0, leaveInvoked);
|
|
|
-
|
|
|
- view.HasFocus = false;
|
|
|
- Assert.False (view.HasFocus);
|
|
|
- Assert.False (subview.HasFocus);
|
|
|
- Assert.Equal (2, leaveInvoked);
|
|
|
- }
|
|
|
+ #endregion HasFocusChanged
|
|
|
}
|