mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
Cleans up/Refactors View.Subviews (#3962)
* Subview clean up * New Add/Remove event pattern * Using Logging * cleanup * Subview -> SubView * Test code cleanup. Killed many warnings. * Fix tznind feedback * Refactored AllViewTest helpers * Moved keyboard tests to parallel * Moved mouse tests to parallel * Moved view tests to parallel * Test code cleanup. Killed many warnings. * dupe test * Some mouse tests can't run in parallel because MouseGrabView * Made SpinnerView more testable * Moved more tests * SubViews to IReadOnlyCollection<View> * SubViews to IReadOnlyCollection<View> 2 * scrollbar tests * shortcut tests * Use InternalSubViews vs. _subviews * Nuked View.IsAdded. Added View.SuperViewChanged. * API doc updats * Unit Test tweak * Unit Test tweak
This commit is contained in:
@@ -1,242 +0,0 @@
|
||||
using UnitTests;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class AddRemoveNavigationTests () : TestsAllViews
|
||||
{
|
||||
[Fact]
|
||||
public void Add_First_Subview_Gets_Focus ()
|
||||
{
|
||||
View top = new View ()
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
|
||||
View subView = new View ()
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
top.Add (subView);
|
||||
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Equal (subView, top.Focused);
|
||||
Assert.True (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Add_Subsequent_Subview_Gets_Focus ()
|
||||
{
|
||||
View top = new View ()
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
|
||||
View subView = new View ()
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
top.Add (subView);
|
||||
|
||||
Assert.True (subView.HasFocus);
|
||||
|
||||
View subView2 = new View ()
|
||||
{
|
||||
Id = "subView2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
top.Add (subView2);
|
||||
|
||||
Assert.True (subView2.HasFocus);
|
||||
|
||||
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Add_Nested_Subviews_Deepest_Gets_Focus ()
|
||||
{
|
||||
View top = new View ()
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
|
||||
View subView = new View ()
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
View subSubView = new View ()
|
||||
{
|
||||
Id = "subSubView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
subView.Add (subSubView);
|
||||
|
||||
top.Add (subView);
|
||||
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Equal (subView, top.Focused);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.True (subSubView.HasFocus);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Remove_Subview_Raises_HasFocusChanged ()
|
||||
{
|
||||
var top = new View
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView1 = new View
|
||||
{
|
||||
Id = "subView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView2 = new View
|
||||
{
|
||||
Id = "subView2",
|
||||
CanFocus = true
|
||||
};
|
||||
top.Add (subView1, subView2);
|
||||
|
||||
var subView1HasFocusChangedTrueCount = 0;
|
||||
var subView1HasFocusChangedFalseCount = 0;
|
||||
|
||||
subView1.HasFocusChanged += (s, e) =>
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
subView1HasFocusChangedTrueCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
subView1HasFocusChangedFalseCount++;
|
||||
}
|
||||
};
|
||||
|
||||
var subView2HasFocusChangedTrueCount = 0;
|
||||
var subView2HasFocusChangedFalseCount = 0;
|
||||
|
||||
subView2.HasFocusChanged += (s, e) =>
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
subView2HasFocusChangedTrueCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
subView2HasFocusChangedFalseCount++;
|
||||
}
|
||||
};
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.True (subView1.HasFocus);
|
||||
Assert.False (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (1, subView1HasFocusChangedTrueCount);
|
||||
Assert.Equal (0, subView1HasFocusChangedFalseCount);
|
||||
|
||||
Assert.Equal (0, subView2HasFocusChangedTrueCount);
|
||||
Assert.Equal (0, subView2HasFocusChangedFalseCount);
|
||||
|
||||
top.Remove (subView1); // this should have the same resuilt as top.AdvanceFocus (NavigationDirection.Forward, null);
|
||||
|
||||
Assert.False (subView1.HasFocus);
|
||||
Assert.True (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (1, subView1HasFocusChangedTrueCount);
|
||||
Assert.Equal (1, subView1HasFocusChangedFalseCount);
|
||||
|
||||
Assert.Equal (1, subView2HasFocusChangedTrueCount);
|
||||
Assert.Equal (0, subView2HasFocusChangedFalseCount);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Remove_Focused_Subview_Keeps_Focus_And_SubView_Looses_Focus ()
|
||||
{
|
||||
View top = new View ()
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
View subView = new View ()
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
top.Add (subView);
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Equal (subView, top.Focused);
|
||||
Assert.True (subView.HasFocus);
|
||||
|
||||
top.Remove (subView);
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Null (top.Focused);
|
||||
Assert.False (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Remove_Focused_Subview_Keeps_Focus_And_SubView_Looses_Focus_And_Next_Gets_Focus ()
|
||||
{
|
||||
View top = new View ()
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
View subView1 = new View ()
|
||||
{
|
||||
Id = "subView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
View subView2 = new View ()
|
||||
{
|
||||
Id = "subView2",
|
||||
CanFocus = true
|
||||
};
|
||||
top.Add (subView1, subView2);
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Equal (subView1, top.Focused);
|
||||
Assert.True (subView1.HasFocus);
|
||||
Assert.False (subView2.HasFocus);
|
||||
|
||||
top.Remove (subView1);
|
||||
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.True (subView2.HasFocus);
|
||||
Assert.Equal (subView2, top.Focused);
|
||||
Assert.False (subView1.HasFocus);
|
||||
}
|
||||
}
|
||||
@@ -1,647 +0,0 @@
|
||||
using System.Runtime.Intrinsics;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class AdvanceFocusTests ()
|
||||
{
|
||||
[Fact]
|
||||
public void AdvanceFocus_CanFocus_Mixed ()
|
||||
{
|
||||
var r = new View ();
|
||||
var v1 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
var v2 = new View { CanFocus = false, TabStop = TabBehavior.TabStop };
|
||||
var v3 = new View { CanFocus = false, TabStop = TabBehavior.NoStop };
|
||||
|
||||
r.Add (v1, v2, v3);
|
||||
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
r.Dispose ();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void AdvanceFocus_Change_CanFocus_Works ([CombinatorialValues (TabBehavior.NoStop, TabBehavior.TabStop, TabBehavior.TabGroup)] TabBehavior behavior)
|
||||
{
|
||||
var r = new View { CanFocus = true };
|
||||
var v1 = new View ();
|
||||
var v2 = new View ();
|
||||
var v3 = new View ();
|
||||
Assert.True (r.CanFocus);
|
||||
Assert.False (v1.CanFocus);
|
||||
Assert.False (v2.CanFocus);
|
||||
Assert.False (v3.CanFocus);
|
||||
|
||||
r.Add (v1, v2, v3);
|
||||
|
||||
r.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
|
||||
v1.CanFocus = true;
|
||||
v1.TabStop = behavior;
|
||||
r.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
|
||||
v2.CanFocus = true;
|
||||
v2.TabStop = behavior;
|
||||
r.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.True (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
|
||||
v3.CanFocus = true;
|
||||
v3.TabStop = behavior;
|
||||
r.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.True (v3.HasFocus);
|
||||
r.Dispose ();
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_Subviews_TabStop ()
|
||||
{
|
||||
TabBehavior behavior = TabBehavior.TabStop;
|
||||
var top = new View { Id = "top", CanFocus = true };
|
||||
|
||||
var v1 = new View { Id = "v1", CanFocus = true, TabStop = behavior };
|
||||
var v2 = new View { Id = "v2", CanFocus = true, TabStop = behavior };
|
||||
var v3 = new View { Id = "v3", CanFocus = false, TabStop = behavior };
|
||||
|
||||
top.Add (v1, v2, v3);
|
||||
|
||||
// Cycle through v1 & v2
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v1.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v2.HasFocus);
|
||||
|
||||
// Should cycle back to v1
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v1.HasFocus);
|
||||
|
||||
// Go backwards
|
||||
top.AdvanceFocus (NavigationDirection.Backward, behavior);
|
||||
Assert.True (v2.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Backward, behavior);
|
||||
Assert.True (v1.HasFocus);
|
||||
|
||||
top.Dispose ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_Compound_Subview_TabStop ()
|
||||
{
|
||||
TabBehavior behavior = TabBehavior.TabStop;
|
||||
var top = new View { Id = "top", CanFocus = true };
|
||||
|
||||
var compoundSubview = new View
|
||||
{
|
||||
CanFocus = true,
|
||||
Id = "compoundSubview",
|
||||
TabStop = behavior
|
||||
};
|
||||
var v1 = new View { Id = "v1", CanFocus = true, TabStop = behavior };
|
||||
var v2 = new View { Id = "v2", CanFocus = true, TabStop = behavior };
|
||||
var v3 = new View { Id = "v3", CanFocus = false, TabStop = behavior };
|
||||
|
||||
compoundSubview.Add (v1, v2, v3);
|
||||
|
||||
top.Add (compoundSubview);
|
||||
|
||||
// Cycle through v1 & v2
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.True (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
|
||||
// Add another subview
|
||||
View otherSubview = new ()
|
||||
{
|
||||
CanFocus = true,
|
||||
TabStop = behavior,
|
||||
Id = "otherSubview"
|
||||
};
|
||||
|
||||
top.Add (otherSubview);
|
||||
|
||||
// Adding a focusable subview causes advancefocus
|
||||
Assert.True (otherSubview.HasFocus);
|
||||
Assert.False (v1.HasFocus);
|
||||
|
||||
// Cycle through v1 & v2
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.True (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
|
||||
Assert.True (otherSubview.HasFocus);
|
||||
|
||||
// v2 was previously focused down the compoundSubView focus chain
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.True (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
|
||||
top.Dispose ();
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_CompoundCompound_Subview_TabStop ()
|
||||
{
|
||||
TabBehavior behavior = TabBehavior.TabStop;
|
||||
var top = new View { Id = "top", CanFocus = true };
|
||||
var topv1 = new View { Id = "topv1", CanFocus = true, TabStop = behavior };
|
||||
var topv2 = new View { Id = "topv2", CanFocus = true, TabStop = behavior };
|
||||
var topv3 = new View { Id = "topv3", CanFocus = false, TabStop = behavior };
|
||||
top.Add (topv1, topv2, topv3);
|
||||
|
||||
var compoundSubview = new View
|
||||
{
|
||||
CanFocus = true,
|
||||
Id = "compoundSubview",
|
||||
TabStop = behavior
|
||||
};
|
||||
var v1 = new View { Id = "v1", CanFocus = true, TabStop = behavior };
|
||||
var v2 = new View { Id = "v2", CanFocus = true, TabStop = behavior };
|
||||
var v3 = new View { Id = "v3", CanFocus = false, TabStop = behavior };
|
||||
|
||||
compoundSubview.Add (v1, v2, v3);
|
||||
|
||||
|
||||
var compoundCompoundSubview = new View
|
||||
{
|
||||
CanFocus = true,
|
||||
Id = "compoundCompoundSubview",
|
||||
TabStop = behavior
|
||||
};
|
||||
var v4 = new View { Id = "v4", CanFocus = true, TabStop = behavior };
|
||||
var v5 = new View { Id = "v5", CanFocus = true, TabStop = behavior };
|
||||
var v6 = new View { Id = "v6", CanFocus = false, TabStop = behavior };
|
||||
|
||||
compoundCompoundSubview.Add (v4, v5, v6);
|
||||
|
||||
compoundSubview.Add (compoundCompoundSubview);
|
||||
|
||||
top.Add (compoundSubview);
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (topv1.HasFocus);
|
||||
|
||||
// Cycle through topv2
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (topv2.HasFocus);
|
||||
|
||||
// Cycle v1, v2, v4, v5
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v1.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v2.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v4.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (v5.HasFocus);
|
||||
|
||||
// Should cycle back to topv1
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (topv1.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (topv2.HasFocus);
|
||||
|
||||
// Add another top subview. Should cycle to it after v5
|
||||
View otherSubview = new ()
|
||||
{
|
||||
CanFocus = true,
|
||||
TabStop = behavior,
|
||||
Id = "otherSubview"
|
||||
};
|
||||
|
||||
top.Add (otherSubview);
|
||||
|
||||
// Adding a focusable subview causes advancefocus
|
||||
Assert.True (otherSubview.HasFocus);
|
||||
|
||||
// Cycle through topv1, topv2, v1, v2, v4, v5
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (topv1.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (topv2.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
|
||||
// the above should have cycled to v5 since it was the previously most focused subview of compoundSubView
|
||||
Assert.True (v5.HasFocus);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (otherSubview.HasFocus);
|
||||
|
||||
// Should cycle back to topv1
|
||||
top.AdvanceFocus (NavigationDirection.Forward, behavior);
|
||||
Assert.True (topv1.HasFocus);
|
||||
|
||||
top.Dispose ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_Compound_Subview_TabGroup ()
|
||||
{
|
||||
var top = new View { Id = "top", CanFocus = true, TabStop = TabBehavior.TabGroup };
|
||||
|
||||
var compoundSubview = new View
|
||||
{
|
||||
CanFocus = true,
|
||||
Id = "compoundSubview",
|
||||
TabStop = TabBehavior.TabGroup
|
||||
};
|
||||
var tabStopView = new View { Id = "tabStop", CanFocus = true, TabStop = TabBehavior.TabStop };
|
||||
var tabGroupView1 = new View { Id = "tabGroup1", CanFocus = true, TabStop = TabBehavior.TabGroup };
|
||||
var tabGroupView2 = new View { Id = "tabGroup2", CanFocus = true, TabStop = TabBehavior.TabGroup };
|
||||
|
||||
compoundSubview.Add (tabStopView, tabGroupView1, tabGroupView2);
|
||||
|
||||
top.Add (compoundSubview);
|
||||
top.SetFocus ();
|
||||
Assert.True (tabStopView.HasFocus);
|
||||
|
||||
// TabGroup should cycle to tabGroup1 then tabGroup2
|
||||
top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabGroup);
|
||||
Assert.False (tabStopView.HasFocus);
|
||||
Assert.True (tabGroupView1.HasFocus);
|
||||
Assert.False (tabGroupView2.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabGroup);
|
||||
Assert.False (tabStopView.HasFocus);
|
||||
Assert.False (tabGroupView1.HasFocus);
|
||||
Assert.True (tabGroupView2.HasFocus);
|
||||
|
||||
// Add another TabGroup subview
|
||||
View otherTabGroupSubview = new ()
|
||||
{
|
||||
CanFocus = true,
|
||||
TabStop = TabBehavior.TabGroup,
|
||||
Id = "otherTabGroupSubview"
|
||||
};
|
||||
|
||||
top.Add (otherTabGroupSubview);
|
||||
|
||||
// Adding a focusable subview causes advancefocus
|
||||
Assert.True (otherTabGroupSubview.HasFocus);
|
||||
Assert.False (tabStopView.HasFocus);
|
||||
|
||||
// TagBroup navs to the other subview
|
||||
top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabGroup);
|
||||
Assert.Equal (compoundSubview, top.Focused);
|
||||
Assert.True (tabStopView.HasFocus);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabGroup);
|
||||
Assert.Equal (compoundSubview, top.Focused);
|
||||
Assert.True (tabGroupView1.HasFocus);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabGroup);
|
||||
Assert.Equal (compoundSubview, top.Focused);
|
||||
Assert.True (tabGroupView2.HasFocus);
|
||||
|
||||
// Now go backwards
|
||||
top.AdvanceFocus (NavigationDirection.Backward, TabBehavior.TabGroup);
|
||||
Assert.Equal (compoundSubview, top.Focused);
|
||||
Assert.True (tabGroupView1.HasFocus);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Backward, TabBehavior.TabGroup);
|
||||
Assert.Equal (otherTabGroupSubview, top.Focused);
|
||||
Assert.True (otherTabGroupSubview.HasFocus);
|
||||
|
||||
top.Dispose ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_NoStop_And_CanFocus_True_No_Focus ()
|
||||
{
|
||||
var r = new View ();
|
||||
var v1 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
var v2 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
var v3 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
|
||||
r.Add (v1, v2, v3);
|
||||
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
r.Dispose ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_NoStop_Change_Enables_Stop ()
|
||||
{
|
||||
var r = new View { CanFocus = true };
|
||||
var v1 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
var v2 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
var v3 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
|
||||
r.Add (v1, v2, v3);
|
||||
|
||||
v1.TabStop = TabBehavior.TabStop;
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.True (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
|
||||
v2.TabStop = TabBehavior.TabStop;
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.True (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
|
||||
v3.TabStop = TabBehavior.TabStop;
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.True (v3.HasFocus);
|
||||
r.Dispose ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_NoStop_Prevents_Stop ()
|
||||
{
|
||||
var r = new View ();
|
||||
var v1 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
var v2 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
var v3 = new View { CanFocus = true, TabStop = TabBehavior.NoStop };
|
||||
|
||||
r.Add (v1, v2, v3);
|
||||
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_Null_And_CanFocus_False_No_Advance ()
|
||||
{
|
||||
var r = new View ();
|
||||
var v1 = new View ();
|
||||
var v2 = new View ();
|
||||
var v3 = new View ();
|
||||
Assert.False (v1.CanFocus);
|
||||
Assert.Null (v1.TabStop);
|
||||
|
||||
r.Add (v1, v2, v3);
|
||||
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
r.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
r.Dispose ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_Subviews_Raises_HasFocusChanged ()
|
||||
{
|
||||
var top = new View
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView1 = new View
|
||||
{
|
||||
Id = "subView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView2 = new View
|
||||
{
|
||||
Id = "subView2",
|
||||
CanFocus = true
|
||||
};
|
||||
top.Add (subView1, subView2);
|
||||
|
||||
var subView1HasFocusChangedTrueCount = 0;
|
||||
var subView1HasFocusChangedFalseCount = 0;
|
||||
|
||||
subView1.HasFocusChanged += (s, e) =>
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
subView1HasFocusChangedTrueCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
subView1HasFocusChangedFalseCount++;
|
||||
}
|
||||
};
|
||||
|
||||
var subView2HasFocusChangedTrueCount = 0;
|
||||
var subView2HasFocusChangedFalseCount = 0;
|
||||
|
||||
subView2.HasFocusChanged += (s, e) =>
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
subView2HasFocusChangedTrueCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
subView2HasFocusChangedFalseCount++;
|
||||
}
|
||||
};
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.True (subView1.HasFocus);
|
||||
Assert.False (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (1, subView1HasFocusChangedTrueCount);
|
||||
Assert.Equal (0, subView1HasFocusChangedFalseCount);
|
||||
|
||||
Assert.Equal (0, subView2HasFocusChangedTrueCount);
|
||||
Assert.Equal (0, subView2HasFocusChangedFalseCount);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Forward, null);
|
||||
Assert.False (subView1.HasFocus);
|
||||
Assert.True (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (1, subView1HasFocusChangedTrueCount);
|
||||
Assert.Equal (1, subView1HasFocusChangedFalseCount);
|
||||
|
||||
Assert.Equal (1, subView2HasFocusChangedTrueCount);
|
||||
Assert.Equal (0, subView2HasFocusChangedFalseCount);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Forward, null);
|
||||
Assert.True (subView1.HasFocus);
|
||||
Assert.False (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (2, subView1HasFocusChangedTrueCount);
|
||||
Assert.Equal (1, subView1HasFocusChangedFalseCount);
|
||||
|
||||
Assert.Equal (1, subView2HasFocusChangedTrueCount);
|
||||
Assert.Equal (1, subView2HasFocusChangedFalseCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_Subviews_Raises_HasFocusChanging ()
|
||||
{
|
||||
var top = new View
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView1 = new View
|
||||
{
|
||||
Id = "subView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView2 = new View
|
||||
{
|
||||
Id = "subView2",
|
||||
CanFocus = true
|
||||
};
|
||||
top.Add (subView1, subView2);
|
||||
|
||||
var subView1HasFocusChangingTrueCount = 0;
|
||||
var subView1HasFocusChangingFalseCount = 0;
|
||||
|
||||
subView1.HasFocusChanging += (s, e) =>
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
subView1HasFocusChangingTrueCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
subView1HasFocusChangingFalseCount++;
|
||||
}
|
||||
};
|
||||
|
||||
var subView2HasFocusChangingTrueCount = 0;
|
||||
var subView2HasFocusChangingFalseCount = 0;
|
||||
|
||||
subView2.HasFocusChanging += (s, e) =>
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
subView2HasFocusChangingTrueCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
subView2HasFocusChangingFalseCount++;
|
||||
}
|
||||
};
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.True (subView1.HasFocus);
|
||||
Assert.False (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (1, subView1HasFocusChangingTrueCount);
|
||||
Assert.Equal (0, subView1HasFocusChangingFalseCount);
|
||||
|
||||
Assert.Equal (0, subView2HasFocusChangingTrueCount);
|
||||
Assert.Equal (0, subView2HasFocusChangingFalseCount);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Forward, null);
|
||||
Assert.False (subView1.HasFocus);
|
||||
Assert.True (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (1, subView1HasFocusChangingTrueCount);
|
||||
Assert.Equal (1, subView1HasFocusChangingFalseCount);
|
||||
|
||||
Assert.Equal (1, subView2HasFocusChangingTrueCount);
|
||||
Assert.Equal (0, subView2HasFocusChangingFalseCount);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Forward, null);
|
||||
Assert.True (subView1.HasFocus);
|
||||
Assert.False (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (2, subView1HasFocusChangingTrueCount);
|
||||
Assert.Equal (1, subView1HasFocusChangingFalseCount);
|
||||
|
||||
Assert.Equal (1, subView2HasFocusChangingTrueCount);
|
||||
Assert.Equal (1, subView2HasFocusChangingFalseCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvanceFocus_With_CanFocus_Are_All_True ()
|
||||
{
|
||||
var top = new View { Id = "top", CanFocus = true };
|
||||
var v1 = new View { Id = "v1", CanFocus = true };
|
||||
var v2 = new View { Id = "v2", CanFocus = true };
|
||||
var v3 = new View { Id = "v3", CanFocus = true };
|
||||
|
||||
top.Add (v1, v2, v3);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.True (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.True (v2.HasFocus);
|
||||
Assert.False (v3.HasFocus);
|
||||
top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
|
||||
Assert.False (v1.HasFocus);
|
||||
Assert.False (v2.HasFocus);
|
||||
Assert.True (v3.HasFocus);
|
||||
top.Dispose ();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void TabStop_And_CanFocus_Are_Decoupled (bool canFocus, TabBehavior tabStop)
|
||||
{
|
||||
var view = new View { CanFocus = canFocus, TabStop = tabStop };
|
||||
|
||||
Assert.Equal (canFocus, view.CanFocus);
|
||||
Assert.Equal (tabStop, view.TabStop);
|
||||
}
|
||||
}
|
||||
@@ -1,211 +1,9 @@
|
||||
using UnitTests;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class CanFocusTests () : TestsAllViews
|
||||
public class CanFocusTests
|
||||
{
|
||||
[Fact]
|
||||
public void CanFocus_False_Prevents_SubSubView_HasFocus ()
|
||||
{
|
||||
var view = new View { };
|
||||
var subView = new View { };
|
||||
var subSubView = new View { CanFocus = true };
|
||||
|
||||
subView.Add (subSubView);
|
||||
view.Add (subView);
|
||||
|
||||
Assert.False (view.CanFocus);
|
||||
Assert.False (subView.CanFocus);
|
||||
Assert.True (subSubView.CanFocus);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
subView.SetFocus ();
|
||||
Assert.False (subView.HasFocus);
|
||||
|
||||
subSubView.SetFocus ();
|
||||
Assert.False (subSubView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanFocus_False_Prevents_SubView_HasFocus ()
|
||||
{
|
||||
var view = new View { };
|
||||
var subView = new View { CanFocus = true };
|
||||
var subSubView = new View { };
|
||||
|
||||
subView.Add (subSubView);
|
||||
view.Add (subView);
|
||||
|
||||
Assert.False (view.CanFocus);
|
||||
Assert.True (subView.CanFocus);
|
||||
Assert.False (subSubView.CanFocus);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
subView.SetFocus ();
|
||||
Assert.False (subView.HasFocus);
|
||||
|
||||
subSubView.SetFocus ();
|
||||
Assert.False (subSubView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanFocus_Set_True_No_SuperView_Doesnt_Set_HasFocus ()
|
||||
{
|
||||
var view = new View { };
|
||||
|
||||
// Act
|
||||
view.CanFocus = true;
|
||||
Assert.False (view.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanFocus_Set_True_Sets_HasFocus_To_True ()
|
||||
{
|
||||
var view = new View { };
|
||||
var subView = new View { };
|
||||
view.Add (subView);
|
||||
|
||||
Assert.False (view.CanFocus);
|
||||
Assert.False (subView.CanFocus);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
|
||||
view.CanFocus = true;
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
|
||||
// Act
|
||||
subView.CanFocus = true;
|
||||
Assert.True (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanFocus_Set_SubView_True_Sets_HasFocus_To_True ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
CanFocus = true
|
||||
};
|
||||
var subView = new View
|
||||
{
|
||||
CanFocus = false
|
||||
};
|
||||
var subSubView = new View
|
||||
{
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
subView.Add (subSubView);
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
Assert.False (subSubView.HasFocus);
|
||||
|
||||
// Act
|
||||
subView.CanFocus = true;
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.True (subSubView.HasFocus);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void CanFocus_Set_SubView_True_Does_Not_Change_Focus_If_SuperView_Focused_Is_True ()
|
||||
{
|
||||
var top = new View
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
var subSubView = new View
|
||||
{
|
||||
Id = "subSubView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
subView.Add (subSubView);
|
||||
|
||||
var subView2 = new View
|
||||
{
|
||||
Id = "subView2",
|
||||
CanFocus = false
|
||||
};
|
||||
|
||||
top.Add (subView, subView2);
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Equal (subView, top.Focused);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.True (subSubView.HasFocus);
|
||||
|
||||
// Act
|
||||
subView2.CanFocus = true;
|
||||
Assert.False (subView2.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.True (subSubView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanFocus_Set_False_Sets_HasFocus_To_False ()
|
||||
{
|
||||
var view = new View { CanFocus = true };
|
||||
var view2 = new View { CanFocus = true };
|
||||
view2.Add (view);
|
||||
|
||||
Assert.True (view.CanFocus);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
|
||||
view.CanFocus = false;
|
||||
Assert.False (view.CanFocus);
|
||||
Assert.False (view.HasFocus);
|
||||
}
|
||||
|
||||
// TODO: Figure out what this test is supposed to be testing
|
||||
[Fact]
|
||||
public void CanFocus_Faced_With_Container ()
|
||||
{
|
||||
var t = new Toplevel ();
|
||||
var w = new Window ();
|
||||
var f = new FrameView ();
|
||||
var v = new View { CanFocus = true };
|
||||
f.Add (v);
|
||||
w.Add (f);
|
||||
t.Add (w);
|
||||
|
||||
Assert.True (t.CanFocus);
|
||||
Assert.True (w.CanFocus);
|
||||
Assert.True (f.CanFocus);
|
||||
Assert.True (v.CanFocus);
|
||||
|
||||
f.CanFocus = false;
|
||||
Assert.False (f.CanFocus);
|
||||
Assert.True (v.CanFocus);
|
||||
|
||||
v.CanFocus = false;
|
||||
Assert.False (f.CanFocus);
|
||||
Assert.False (v.CanFocus);
|
||||
|
||||
v.CanFocus = true;
|
||||
Assert.False (f.CanFocus);
|
||||
Assert.True (v.CanFocus);
|
||||
}
|
||||
|
||||
// TODO: Figure out what this test is supposed to be testing
|
||||
[Fact]
|
||||
public void CanFocus_Faced_With_Container_Before_Run ()
|
||||
@@ -288,38 +86,6 @@ public class CanFocusTests () : TestsAllViews
|
||||
// r.Dispose ();
|
||||
//}
|
||||
|
||||
[Fact]
|
||||
public void CanFocus_True_Focuses ()
|
||||
{
|
||||
View view = new ()
|
||||
{
|
||||
Id = "view"
|
||||
};
|
||||
|
||||
View superView = new ()
|
||||
{
|
||||
Id = "superView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
superView.Add (view);
|
||||
|
||||
superView.SetFocus ();
|
||||
Assert.True (superView.HasFocus);
|
||||
Assert.NotEqual (view, superView.Focused);
|
||||
|
||||
view.CanFocus = true;
|
||||
Assert.True (superView.HasFocus);
|
||||
Assert.Equal (view, superView.Focused);
|
||||
Assert.True (view.HasFocus);
|
||||
|
||||
view.CanFocus = false;
|
||||
Assert.True (superView.HasFocus);
|
||||
Assert.NotEqual (view, superView.Focused);
|
||||
Assert.False (view.HasFocus);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void CanFocus_Set_True_Get_AdvanceFocus_Works ()
|
||||
{
|
||||
|
||||
@@ -1,261 +1,13 @@
|
||||
using UnitTests;
|
||||
using UnitTests;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class EnabledTests () : TestsAllViews
|
||||
public class EnabledTests
|
||||
{
|
||||
[Fact]
|
||||
public void Enabled_False_Leaves ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
|
||||
view.Enabled = false;
|
||||
Assert.False (view.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Enabled_False_Leaves_Subview ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
|
||||
view.Enabled = false;
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Enabled_False_Leaves_Subview2 ()
|
||||
{
|
||||
var view = new Window
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
|
||||
view.Enabled = false;
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Enabled_False_On_Subview_Leaves_Just_Subview ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
|
||||
subView.Enabled = false;
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Enabled_False_Focuses_Deepest_Focusable_Subview ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView1 = new View
|
||||
{
|
||||
Id = "subViewSubView1",
|
||||
CanFocus = false
|
||||
};
|
||||
|
||||
var subViewSubView2 = new View
|
||||
{
|
||||
Id = "subViewSubView2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView3 = new View
|
||||
{
|
||||
Id = "subViewSubView3",
|
||||
CanFocus = true // This is the one that will be focused
|
||||
};
|
||||
subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.Equal (subViewSubView2, subView.Focused);
|
||||
|
||||
subViewSubView2.Enabled = false;
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.Equal (subViewSubView3, subView.Focused);
|
||||
Assert.True (subViewSubView3.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Enabled_True_Subview_Focuses_SubView ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true,
|
||||
Enabled = false
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
|
||||
view.Enabled = true;
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Enabled_True_On_Subview_Focuses ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true,
|
||||
Enabled = false
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
|
||||
subView.Enabled = true;
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Enabled_True_Focuses_Deepest_Focusable_Subview ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true,
|
||||
Enabled = false
|
||||
};
|
||||
|
||||
var subViewSubView1 = new View
|
||||
{
|
||||
Id = "subViewSubView1",
|
||||
CanFocus = false
|
||||
};
|
||||
|
||||
var subViewSubView2 = new View
|
||||
{
|
||||
Id = "subViewSubView2",
|
||||
CanFocus = true // This is the one that will be focused
|
||||
};
|
||||
|
||||
var subViewSubView3 = new View
|
||||
{
|
||||
Id = "subViewSubView3",
|
||||
CanFocus = true
|
||||
};
|
||||
subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.False (subView.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
|
||||
subView.Enabled = true;
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.Equal (subViewSubView2, subView.Focused);
|
||||
Assert.True (subViewSubView2.HasFocus);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
[AutoInitShutdown]
|
||||
public void _Enabled_Sets_Also_Sets_Subviews ()
|
||||
public void _Enabled_Sets_Also_Sets_SubViews ()
|
||||
{
|
||||
var wasClicked = false;
|
||||
var button = new Button { Text = "Click Me" };
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,234 +0,0 @@
|
||||
using UnitTests;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class HasFocusTests () : TestsAllViews
|
||||
{
|
||||
|
||||
[Fact]
|
||||
public void HasFocus_False ()
|
||||
{
|
||||
var view = new View ()
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
|
||||
view.HasFocus = false;
|
||||
Assert.False (view.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HasFocus_False_WithSuperView_Does_Not_Change_SuperView ()
|
||||
{
|
||||
var view = new View ()
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subview = new View ()
|
||||
{
|
||||
Id = "subview",
|
||||
CanFocus = true
|
||||
};
|
||||
view.Add (subview);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subview.HasFocus);
|
||||
|
||||
subview.HasFocus = false;
|
||||
Assert.False (subview.HasFocus);
|
||||
Assert.True (view.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HasFocus_False_WithSubview_Leaves_All ()
|
||||
{
|
||||
var view = new View ()
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subview = new View ()
|
||||
{
|
||||
Id = "subview",
|
||||
CanFocus = true
|
||||
};
|
||||
view.Add (subview);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subview.HasFocus);
|
||||
Assert.Equal (subview, view.Focused);
|
||||
|
||||
view.HasFocus = false;
|
||||
Assert.Null (view.Focused);
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subview.HasFocus);
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Enabled_False_Sets_HasFocus_To_False ()
|
||||
{
|
||||
var wasClicked = false;
|
||||
var view = new Button { Text = "Click Me" };
|
||||
view.Accepting += (s, e) => wasClicked = !wasClicked;
|
||||
|
||||
view.NewKeyDownEvent (Key.Space);
|
||||
Assert.True (wasClicked);
|
||||
view.NewMouseEvent (new () { Flags = MouseFlags.Button1Clicked });
|
||||
Assert.False (wasClicked);
|
||||
Assert.True (view.Enabled);
|
||||
Assert.True (view.CanFocus);
|
||||
Assert.True (view.HasFocus);
|
||||
|
||||
view.Enabled = false;
|
||||
view.NewKeyDownEvent (Key.Space);
|
||||
Assert.False (wasClicked);
|
||||
view.NewMouseEvent (new () { Flags = MouseFlags.Button1Clicked });
|
||||
Assert.False (wasClicked);
|
||||
Assert.False (view.Enabled);
|
||||
Assert.True (view.CanFocus);
|
||||
Assert.False (view.HasFocus);
|
||||
view.SetFocus ();
|
||||
Assert.False (view.HasFocus);
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Fact]
|
||||
public void HasFocus_False_CompoundSubView_Leaves_All ()
|
||||
{
|
||||
var view = new View ()
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View ()
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView1 = new View ()
|
||||
{
|
||||
Id = "subViewSubView1",
|
||||
CanFocus = false
|
||||
};
|
||||
|
||||
var subViewSubView2 = new View ()
|
||||
{
|
||||
Id = "subViewSubView2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView3 = new View ()
|
||||
{
|
||||
Id = "subViewSubView3",
|
||||
CanFocus = false
|
||||
};
|
||||
|
||||
subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.True (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
view.HasFocus = false;
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HasFocus_False_Subview_Raises_HasFocusChanged ()
|
||||
{
|
||||
var top = new View
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView1 = new View
|
||||
{
|
||||
Id = "subView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView2 = new View
|
||||
{
|
||||
Id = "subView2",
|
||||
CanFocus = true
|
||||
};
|
||||
top.Add (subView1, subView2);
|
||||
|
||||
var subView1HasFocusChangedTrueCount = 0;
|
||||
var subView1HasFocusChangedFalseCount = 0;
|
||||
|
||||
subView1.HasFocusChanged += (s, e) =>
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
subView1HasFocusChangedTrueCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
subView1HasFocusChangedFalseCount++;
|
||||
}
|
||||
};
|
||||
|
||||
var subView2HasFocusChangedTrueCount = 0;
|
||||
var subView2HasFocusChangedFalseCount = 0;
|
||||
|
||||
subView2.HasFocusChanged += (s, e) =>
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
subView2HasFocusChangedTrueCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
subView2HasFocusChangedFalseCount++;
|
||||
}
|
||||
};
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.True (subView1.HasFocus);
|
||||
Assert.False (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (1, subView1HasFocusChangedTrueCount);
|
||||
Assert.Equal (0, subView1HasFocusChangedFalseCount);
|
||||
|
||||
Assert.Equal (0, subView2HasFocusChangedTrueCount);
|
||||
Assert.Equal (0, subView2HasFocusChangedFalseCount);
|
||||
|
||||
subView1.HasFocus = false; // this should have the same resuilt as top.AdvanceFocus (NavigationDirection.Forward, null);
|
||||
|
||||
Assert.False (subView1.HasFocus);
|
||||
Assert.True (subView2.HasFocus);
|
||||
|
||||
Assert.Equal (1, subView1HasFocusChangedTrueCount);
|
||||
Assert.Equal (1, subView1HasFocusChangedFalseCount);
|
||||
|
||||
Assert.Equal (1, subView2HasFocusChangedTrueCount);
|
||||
Assert.Equal (0, subView2HasFocusChangedFalseCount);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,9 @@
|
||||
using JetBrains.Annotations;
|
||||
using UnitTests;
|
||||
using UnitTests;
|
||||
using UnitTests;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
public class NavigationTests (ITestOutputHelper output) : TestsAllViews
|
||||
{
|
||||
[Theory]
|
||||
[MemberData (nameof (AllViewTypes))]
|
||||
@@ -16,22 +14,21 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
|
||||
if (view == null)
|
||||
{
|
||||
_output.WriteLine ($"Ignoring {viewType} - It's a Generic");
|
||||
output.WriteLine ($"Ignoring {viewType} - It's a Generic");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!view.CanFocus)
|
||||
{
|
||||
_output.WriteLine ($"Ignoring {viewType} - It can't focus.");
|
||||
output.WriteLine ($"Ignoring {viewType} - It can't focus.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Toplevel top = new ();
|
||||
Application.Top = top;
|
||||
Application.Navigation = new ApplicationNavigation ();
|
||||
Application.Navigation = new ();
|
||||
|
||||
View otherView = new ()
|
||||
{
|
||||
@@ -68,6 +65,7 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
// Try once more (HexView)
|
||||
Application.RaiseKeyDownEvent (key);
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
Application.RaiseKeyDownEvent (Key.Tab);
|
||||
@@ -78,12 +76,12 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
if (!view.HasFocus)
|
||||
{
|
||||
left = true;
|
||||
_output.WriteLine ($"{view.GetType ().Name} - {key} Left.");
|
||||
output.WriteLine ($"{view.GetType ().Name} - {key} Left.");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
_output.WriteLine ($"{view.GetType ().Name} - {key} did not Leave.");
|
||||
output.WriteLine ($"{view.GetType ().Name} - {key} did not Leave.");
|
||||
}
|
||||
|
||||
top.Dispose ();
|
||||
@@ -101,28 +99,28 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
|
||||
if (view == null)
|
||||
{
|
||||
_output.WriteLine ($"Ignoring {viewType} - It's a Generic");
|
||||
output.WriteLine ($"Ignoring {viewType} - It's a Generic");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!view.CanFocus)
|
||||
{
|
||||
_output.WriteLine ($"Ignoring {viewType} - It can't focus.");
|
||||
output.WriteLine ($"Ignoring {viewType} - It can't focus.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (view is Toplevel && ((Toplevel)view).Modal)
|
||||
{
|
||||
_output.WriteLine ($"Ignoring {viewType} - It's a Modal Toplevel");
|
||||
output.WriteLine ($"Ignoring {viewType} - It's a Modal Toplevel");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Toplevel top = new ();
|
||||
Application.Top = top;
|
||||
Application.Navigation = new ApplicationNavigation ();
|
||||
Application.Navigation = new ();
|
||||
|
||||
View otherView = new ()
|
||||
{
|
||||
@@ -135,16 +133,16 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
var hasFocusFalse = 0;
|
||||
|
||||
view.HasFocusChanged += (s, e) =>
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
hasFocusTrue++;
|
||||
}
|
||||
else
|
||||
{
|
||||
hasFocusFalse++;
|
||||
}
|
||||
};
|
||||
{
|
||||
if (e.NewValue)
|
||||
{
|
||||
hasFocusTrue++;
|
||||
}
|
||||
else
|
||||
{
|
||||
hasFocusFalse++;
|
||||
}
|
||||
};
|
||||
|
||||
top.Add (view, otherView);
|
||||
Assert.False (view.HasFocus);
|
||||
@@ -185,7 +183,10 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
// Try another nav key (e.g. for TextView that eats Tab)
|
||||
Application.RaiseKeyDownEvent (Key.CursorDown);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
break;
|
||||
|
||||
case TabBehavior.TabGroup:
|
||||
@@ -263,21 +264,21 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
|
||||
if (view == null)
|
||||
{
|
||||
_output.WriteLine ($"Ignoring {viewType} - It's a Generic");
|
||||
output.WriteLine ($"Ignoring {viewType} - It's a Generic");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!view.CanFocus)
|
||||
{
|
||||
_output.WriteLine ($"Ignoring {viewType} - It can't focus.");
|
||||
output.WriteLine ($"Ignoring {viewType} - It can't focus.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (view is Toplevel && ((Toplevel)view).Modal)
|
||||
{
|
||||
_output.WriteLine ($"Ignoring {viewType} - It's a Modal Toplevel");
|
||||
output.WriteLine ($"Ignoring {viewType} - It's a Modal Toplevel");
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -285,7 +286,7 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
Toplevel top = new ();
|
||||
|
||||
Application.Top = top;
|
||||
Application.Navigation = new ApplicationNavigation ();
|
||||
Application.Navigation = new ();
|
||||
|
||||
View otherView = new ()
|
||||
{
|
||||
@@ -321,66 +322,8 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
top.Dispose ();
|
||||
|
||||
Application.ResetState ();
|
||||
|
||||
}
|
||||
|
||||
// View.Focused & View.MostFocused tests
|
||||
|
||||
// View.Focused - No subviews
|
||||
[Fact]
|
||||
public void Focused_NoSubviews ()
|
||||
{
|
||||
var view = new View ();
|
||||
Assert.Null (view.Focused);
|
||||
|
||||
view.CanFocus = true;
|
||||
view.SetFocus ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetMostFocused_NoSubviews_Returns_Null ()
|
||||
{
|
||||
var view = new View ();
|
||||
Assert.Null (view.Focused);
|
||||
|
||||
view.CanFocus = true;
|
||||
Assert.False (view.HasFocus);
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.Null (view.MostFocused);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetMostFocused_Returns_Most ()
|
||||
{
|
||||
var view = new View ()
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subview = new View ()
|
||||
{
|
||||
Id = "subview",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subview);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subview.HasFocus);
|
||||
Assert.Equal (subview, view.MostFocused);
|
||||
|
||||
var subview2 = new View ()
|
||||
{
|
||||
Id = "subview2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subview2);
|
||||
Assert.Equal (subview2, view.MostFocused);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[SetupFakeDriver]
|
||||
@@ -403,7 +346,6 @@ public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
|
||||
Application.Shutdown ();
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
[AutoInitShutdown]
|
||||
public void Application_Begin_FocusesDeepest ()
|
||||
|
||||
@@ -1,174 +0,0 @@
|
||||
using UnitTests;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class RestoreFocusTests () : TestsAllViews
|
||||
{
|
||||
[Fact]
|
||||
public void RestoreFocus_Restores ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView1 = new View
|
||||
{
|
||||
Id = "subViewSubView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView2 = new View
|
||||
{
|
||||
Id = "subViewSubView2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView3 = new View
|
||||
{
|
||||
Id = "subViewSubView3",
|
||||
CanFocus = true
|
||||
};
|
||||
subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.True (subViewSubView1.HasFocus);
|
||||
Assert.Equal (subViewSubView1, subView.Focused);
|
||||
|
||||
view.HasFocus = false;
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
view.RestoreFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.Equal (subViewSubView1, subView.Focused);
|
||||
Assert.True (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
subViewSubView2.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.True (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
view.HasFocus = false;
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
view.RestoreFocus ();
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.True (subViewSubView2.HasFocus);
|
||||
Assert.Equal (subViewSubView2, subView.Focused);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RestoreFocus_Across_TabGroup ()
|
||||
{
|
||||
var top = new View
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true,
|
||||
TabStop = TabBehavior.TabGroup
|
||||
};
|
||||
|
||||
var tabGroup1 = new View
|
||||
{
|
||||
Id = "tabGroup1",
|
||||
CanFocus = true,
|
||||
TabStop = TabBehavior.TabGroup
|
||||
};
|
||||
|
||||
var tabGroup1SubView1 = new View
|
||||
{
|
||||
Id = "tabGroup1SubView1",
|
||||
CanFocus = true,
|
||||
TabStop = TabBehavior.TabStop
|
||||
};
|
||||
|
||||
var tabGroup1SubView2 = new View
|
||||
{
|
||||
Id = "tabGroup1SubView2",
|
||||
CanFocus = true,
|
||||
TabStop = TabBehavior.TabStop
|
||||
};
|
||||
tabGroup1.Add (tabGroup1SubView1, tabGroup1SubView2);
|
||||
|
||||
var tabGroup2 = new View
|
||||
{
|
||||
Id = "tabGroup2",
|
||||
CanFocus = true,
|
||||
TabStop = TabBehavior.TabGroup
|
||||
};
|
||||
|
||||
var tabGroup2SubView1 = new View
|
||||
{
|
||||
Id = "tabGroup2SubView1",
|
||||
CanFocus = true,
|
||||
TabStop = TabBehavior.TabStop
|
||||
};
|
||||
|
||||
var tabGroup2SubView2 = new View
|
||||
{
|
||||
Id = "tabGroup2SubView2",
|
||||
CanFocus = true,
|
||||
TabStop = TabBehavior.TabStop
|
||||
};
|
||||
tabGroup2.Add (tabGroup2SubView1, tabGroup2SubView2);
|
||||
|
||||
top.Add (tabGroup1, tabGroup2);
|
||||
|
||||
top.SetFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Equal (tabGroup1, top.Focused);
|
||||
Assert.Equal (tabGroup1SubView1, tabGroup1.Focused);
|
||||
|
||||
top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabGroup);
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Equal (tabGroup2, top.Focused);
|
||||
Assert.Equal (tabGroup2SubView1, tabGroup2.Focused);
|
||||
|
||||
top.HasFocus = false;
|
||||
Assert.False (top.HasFocus);
|
||||
|
||||
top.RestoreFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Equal (tabGroup2, top.Focused);
|
||||
Assert.Equal (tabGroup2SubView1, tabGroup2.Focused);
|
||||
|
||||
top.HasFocus = false;
|
||||
Assert.False (top.HasFocus);
|
||||
|
||||
top.RestoreFocus ();
|
||||
Assert.True (top.HasFocus);
|
||||
Assert.Equal (tabGroup2, top.Focused);
|
||||
Assert.Equal (tabGroup2SubView1, tabGroup2.Focused);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,396 +0,0 @@
|
||||
using UnitTests;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class SetFocusTests () : TestsAllViews
|
||||
{
|
||||
[Fact]
|
||||
public void SetFocus_With_Null_Superview_Does_Not_Throw_Exception ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
Assert.True (view.CanFocus);
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
Exception exception = Record.Exception (() => view.SetFocus ());
|
||||
Assert.Null (exception);
|
||||
|
||||
Assert.True (view.CanFocus);
|
||||
Assert.True (view.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetFocus_SetsFocus ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
Assert.True (view.CanFocus);
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetFocus_NoSubView_Focused_Is_Null ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
Assert.True (view.CanFocus);
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.Null (view.Focused);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetFocus_SubView_Focused_Is_Set ()
|
||||
{
|
||||
var view = new Window
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subview = new View
|
||||
{
|
||||
Id = "subview",
|
||||
CanFocus = true
|
||||
};
|
||||
view.Add (subview);
|
||||
Assert.True (view.CanFocus);
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.Equal (subview, view.Focused);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetFocus_SetsFocus_DeepestSubView ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subview = new View
|
||||
{
|
||||
Id = "subview",
|
||||
CanFocus = true
|
||||
};
|
||||
view.Add (subview);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (subview.HasFocus);
|
||||
Assert.Equal (subview, view.Focused);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetFocus_SetsFocus_DeepestSubView_CompoundSubView ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView1 = new View
|
||||
{
|
||||
Id = "subViewSubView1",
|
||||
CanFocus = false
|
||||
};
|
||||
|
||||
var subViewSubView2 = new View
|
||||
{
|
||||
Id = "subViewSubView2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView3 = new View
|
||||
{
|
||||
Id = "subViewSubView3",
|
||||
CanFocus = false
|
||||
};
|
||||
subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.Equal (subViewSubView2, subView.Focused);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetFocus_CompoundSubView_SetFocus_Sets ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView1 = new View
|
||||
{
|
||||
Id = "subViewSubView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView2 = new View
|
||||
{
|
||||
Id = "subViewSubView2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView3 = new View
|
||||
{
|
||||
Id = "subViewSubView3",
|
||||
CanFocus = true
|
||||
};
|
||||
subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.True (subViewSubView1.HasFocus);
|
||||
Assert.Equal (subViewSubView1, subView.Focused);
|
||||
|
||||
subViewSubView2.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.True (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void SetFocus_AdornmentSubView_SetFocus_Sets ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
var borderSubView = new View
|
||||
{
|
||||
Id = "borderSubView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
|
||||
var subViewSubView1 = new View
|
||||
{
|
||||
Id = "subViewSubView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView2 = new View
|
||||
{
|
||||
Id = "subViewSubView2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView3 = new View
|
||||
{
|
||||
Id = "subViewSubView3",
|
||||
CanFocus = true
|
||||
};
|
||||
borderSubView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
||||
|
||||
view.Border.Add (borderSubView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.False (borderSubView.HasFocus);
|
||||
|
||||
view.Border.CanFocus = true;
|
||||
subViewSubView1.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
Assert.True (borderSubView.HasFocus);
|
||||
Assert.True (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
view.Border.CanFocus = false;
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.False (view.Border.HasFocus);
|
||||
Assert.False (borderSubView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
view.Border.CanFocus = true;
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.False (view.Border.HasFocus);
|
||||
Assert.False (borderSubView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
view.Border.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (view.Border.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
Assert.True (borderSubView.HasFocus);
|
||||
Assert.True (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
view.Border.CanFocus = false;
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.False (view.Border.HasFocus);
|
||||
Assert.False (borderSubView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
view.Border.CanFocus = true;
|
||||
subViewSubView1.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
Assert.True (view.Border.HasFocus);
|
||||
Assert.True (borderSubView.HasFocus);
|
||||
Assert.True (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
|
||||
subView.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.False (view.Border.HasFocus);
|
||||
Assert.False (borderSubView.HasFocus);
|
||||
Assert.False (subViewSubView1.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
Assert.False (subViewSubView3.HasFocus);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void SetFocus_Peer_LeavesOther ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subview1 = new View
|
||||
{
|
||||
Id = "subview1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subview2 = new View
|
||||
{
|
||||
Id = "subview2",
|
||||
CanFocus = true
|
||||
};
|
||||
view.Add (subview1, subview2);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.Equal (subview1, view.Focused);
|
||||
Assert.True (subview1.HasFocus);
|
||||
Assert.False (subview2.HasFocus);
|
||||
|
||||
subview2.SetFocus ();
|
||||
Assert.Equal (subview2, view.Focused);
|
||||
Assert.True (subview2.HasFocus);
|
||||
Assert.False (subview1.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetFocus_On_Peer_Moves_Focus_To_Peer ()
|
||||
{
|
||||
var top = new View
|
||||
{
|
||||
Id = "top",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var view1 = new View
|
||||
{
|
||||
Id = "view1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView1 = new View
|
||||
{
|
||||
Id = "subView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view1.Add (subView1);
|
||||
|
||||
var subView1SubView1 = new View
|
||||
{
|
||||
Id = "subView1subView1",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
subView1.Add (subView1SubView1);
|
||||
|
||||
var view2 = new View
|
||||
{
|
||||
Id = "view2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
top.Add (view1, view2);
|
||||
Assert.False (view1.HasFocus);
|
||||
Assert.False (view2.HasFocus);
|
||||
|
||||
view1.SetFocus ();
|
||||
Assert.True (view1.HasFocus);
|
||||
Assert.True (subView1.HasFocus);
|
||||
Assert.True (subView1SubView1.HasFocus);
|
||||
Assert.Equal (subView1, view1.Focused);
|
||||
Assert.Equal (subView1SubView1, subView1.Focused);
|
||||
|
||||
view2.SetFocus ();
|
||||
Assert.False (view1.HasFocus);
|
||||
Assert.True (view2.HasFocus);
|
||||
}
|
||||
}
|
||||
@@ -1,254 +0,0 @@
|
||||
using UnitTests;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class VisibleTests () : TestsAllViews
|
||||
{
|
||||
[Fact]
|
||||
public void Visible_False_Leaves ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
|
||||
view.Visible = false;
|
||||
Assert.False (view.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Visible_False_Leaves_Subview ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
|
||||
view.Visible = false;
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Visible_False_Leaves_Subview2 ()
|
||||
{
|
||||
var view = new Window
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
|
||||
view.Visible = false;
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Visible_False_On_Subview_Leaves_Just_Subview ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
|
||||
subView.Visible = false;
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Visible_False_Focuses_Deepest_Focusable_Subview ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView1 = new View
|
||||
{
|
||||
Id = "subViewSubView1",
|
||||
CanFocus = false
|
||||
};
|
||||
|
||||
var subViewSubView2 = new View
|
||||
{
|
||||
Id = "subViewSubView2",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subViewSubView3 = new View
|
||||
{
|
||||
Id = "subViewSubView3",
|
||||
CanFocus = true // This is the one that will be focused
|
||||
};
|
||||
subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.Equal (subViewSubView2, subView.Focused);
|
||||
|
||||
subViewSubView2.Visible = false;
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.Equal (subViewSubView3, subView.Focused);
|
||||
Assert.True (subViewSubView3.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Visible_True_Subview_Focuses_SubView ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true,
|
||||
Visible = false
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.False (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
|
||||
view.Visible = true;
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Visible_True_On_Subview_Focuses ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true,
|
||||
Visible = false
|
||||
};
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.False (subView.HasFocus);
|
||||
|
||||
subView.Visible = true;
|
||||
Assert.True (view.HasFocus);
|
||||
Assert.True (subView.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Visible_True_Focuses_Deepest_Focusable_Subview ()
|
||||
{
|
||||
var view = new View
|
||||
{
|
||||
Id = "view",
|
||||
CanFocus = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Id = "subView",
|
||||
CanFocus = true,
|
||||
Visible = false
|
||||
};
|
||||
|
||||
var subViewSubView1 = new View
|
||||
{
|
||||
Id = "subViewSubView1",
|
||||
CanFocus = false
|
||||
};
|
||||
|
||||
var subViewSubView2 = new View
|
||||
{
|
||||
Id = "subViewSubView2",
|
||||
CanFocus = true // This is the one that will be focused
|
||||
};
|
||||
|
||||
var subViewSubView3 = new View
|
||||
{
|
||||
Id = "subViewSubView3",
|
||||
CanFocus = true
|
||||
};
|
||||
subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
|
||||
|
||||
view.Add (subView);
|
||||
|
||||
view.SetFocus ();
|
||||
Assert.False (subView.HasFocus);
|
||||
Assert.False (subViewSubView2.HasFocus);
|
||||
|
||||
subView.Visible = true;
|
||||
Assert.True (subView.HasFocus);
|
||||
Assert.Equal (subView, view.Focused);
|
||||
Assert.Equal (subViewSubView2, subView.Focused);
|
||||
Assert.True (subViewSubView2.HasFocus);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user