Application.NavigationTests.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using Xunit.Abstractions;
  2. namespace ApplicationTests.Navigation;
  3. public class ApplicationNavigationTests (ITestOutputHelper output)
  4. {
  5. private readonly ITestOutputHelper _output = output;
  6. [Theory]
  7. [InlineData (TabBehavior.NoStop)]
  8. [InlineData (TabBehavior.TabStop)]
  9. [InlineData (TabBehavior.TabGroup)]
  10. public void Begin_SetsFocus_On_Deepest_Focusable_View (TabBehavior behavior)
  11. {
  12. using IApplication? application = Application.Create ();
  13. Runnable<bool> runnable = new()
  14. {
  15. TabStop = behavior,
  16. CanFocus = true
  17. };
  18. View subView = new ()
  19. {
  20. CanFocus = true,
  21. TabStop = behavior
  22. };
  23. runnable.Add (subView);
  24. View subSubView = new ()
  25. {
  26. CanFocus = true,
  27. TabStop = TabBehavior.NoStop
  28. };
  29. subView.Add (subSubView);
  30. SessionToken? rs = application.Begin (runnable);
  31. Assert.True (runnable.HasFocus);
  32. Assert.True (subView.HasFocus);
  33. Assert.True (subSubView.HasFocus);
  34. runnable.Dispose ();
  35. }
  36. [Fact]
  37. public void Begin_SetsFocus_On_Top ()
  38. {
  39. using IApplication? application = Application.Create ();
  40. Runnable<bool> runnable = new () { CanFocus = true };
  41. Assert.False (runnable.HasFocus);
  42. application.Begin (runnable);
  43. Assert.True (runnable.HasFocus);
  44. runnable.Dispose ();
  45. }
  46. [Fact]
  47. public void Focused_Change_Raises_FocusedChanged ()
  48. {
  49. using IApplication? application = Application.Create ();
  50. var raised = false;
  51. application.Navigation!.FocusedChanged += ApplicationNavigationOnFocusedChanged;
  52. application.Navigation.SetFocused (new () { CanFocus = true, HasFocus = true });
  53. Assert.True (raised);
  54. application.Navigation.FocusedChanged -= ApplicationNavigationOnFocusedChanged;
  55. return;
  56. void ApplicationNavigationOnFocusedChanged (object? sender, EventArgs e) { raised = true; }
  57. }
  58. [Fact]
  59. public void GetFocused_Returns_Focused_View ()
  60. {
  61. using IApplication app = Application.Create ();
  62. app.Begin (
  63. new Runnable<bool>
  64. {
  65. Id = "top",
  66. CanFocus = true,
  67. App = app
  68. });
  69. var subView1 = new View
  70. {
  71. Id = "subView1",
  72. CanFocus = true
  73. };
  74. var subView2 = new View
  75. {
  76. Id = "subView2",
  77. CanFocus = true
  78. };
  79. app.TopRunnableView?.Add (subView1, subView2);
  80. subView1.SetFocus ();
  81. //app.TopRunnableView?.SetFocus ();
  82. Assert.True (subView1.HasFocus);
  83. Assert.Equal (subView1, app.Navigation?.GetFocused ());
  84. app.Navigation?.AdvanceFocus (NavigationDirection.Forward, null);
  85. Assert.Equal (subView2, app.Navigation?.GetFocused ());
  86. }
  87. [Fact]
  88. public void GetFocused_Returns_Null_If_No_Focused_View ()
  89. {
  90. using IApplication app = Application.Create ();
  91. app.Begin (
  92. new Runnable<bool>
  93. {
  94. Id = "top",
  95. CanFocus = true,
  96. App = app
  97. });
  98. var subView1 = new View
  99. {
  100. Id = "subView1",
  101. CanFocus = true
  102. };
  103. app.TopRunnableView!.Add (subView1);
  104. app.TopRunnableView.SetFocus ();
  105. Assert.True (subView1.HasFocus);
  106. Assert.Equal (subView1, app.Navigation!.GetFocused ());
  107. subView1.HasFocus = false;
  108. Assert.False (subView1.HasFocus);
  109. Assert.True (app.TopRunnableView.HasFocus);
  110. Assert.Equal (app.TopRunnableView, app.Navigation.GetFocused ());
  111. app.TopRunnableView.HasFocus = false;
  112. Assert.False (app.TopRunnableView.HasFocus);
  113. Assert.Null (app.Navigation.GetFocused ());
  114. }
  115. }