SpinnerViewTests.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using System.Threading.Tasks;
  2. using Terminal.Gui;
  3. using Xunit;
  4. using Xunit.Abstractions;
  5. namespace Terminal.Gui.ViewsTests {
  6. public class SpinnerViewTests {
  7. readonly ITestOutputHelper output;
  8. public SpinnerViewTests (ITestOutputHelper output)
  9. {
  10. this.output = output;
  11. }
  12. [Theory, AutoInitShutdown]
  13. [InlineData (true)]
  14. [InlineData (false)]
  15. public void TestSpinnerView_AutoSpin (bool callStop)
  16. {
  17. var view = GetSpinnerView ();
  18. Assert.Empty (Application.MainLoop.timeouts);
  19. view.AutoSpin = true;
  20. Assert.NotEmpty (Application.MainLoop.timeouts);
  21. Assert.True (view.AutoSpin);
  22. //More calls to AutoSpin do not add more timeouts
  23. Assert.Single (Application.MainLoop.timeouts);
  24. view.AutoSpin = true;
  25. view.AutoSpin = true;
  26. view.AutoSpin = true;
  27. Assert.True (view.AutoSpin);
  28. Assert.Single (Application.MainLoop.timeouts);
  29. if (callStop) {
  30. view.AutoSpin = false;
  31. Assert.Empty (Application.MainLoop.timeouts);
  32. Assert.False (view.AutoSpin);
  33. } else {
  34. Assert.NotEmpty (Application.MainLoop.timeouts);
  35. }
  36. // Dispose clears timeout
  37. view.Dispose ();
  38. Assert.Empty (Application.MainLoop.timeouts);
  39. }
  40. [Fact, AutoInitShutdown]
  41. public void TestSpinnerView_ThrottlesAnimation ()
  42. {
  43. var view = GetSpinnerView ();
  44. view.Draw ();
  45. var expected = @"\";
  46. TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  47. view.AdvanceAnimation ();
  48. view.Draw ();
  49. expected = @"\";
  50. TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  51. view.AdvanceAnimation ();
  52. view.Draw ();
  53. expected = @"\";
  54. TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  55. Task.Delay (400).Wait ();
  56. view.AdvanceAnimation ();
  57. view.Draw ();
  58. expected = "|";
  59. TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  60. }
  61. [Fact, AutoInitShutdown]
  62. public void TestSpinnerView_NoThrottle ()
  63. {
  64. var view = GetSpinnerView ();
  65. view.SpinDelay = 0;
  66. view.AdvanceAnimation ();
  67. view.Draw ();
  68. var expected = "|";
  69. TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  70. view.AdvanceAnimation ();
  71. view.Draw ();
  72. expected = "/";
  73. TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  74. }
  75. private SpinnerView GetSpinnerView ()
  76. {
  77. var view = new SpinnerView ();
  78. Application.Top.Add (view);
  79. Application.Begin (Application.Top);
  80. Assert.Equal (1, view.Width);
  81. Assert.Equal (1, view.Height);
  82. return view;
  83. }
  84. }
  85. }