SessionTokenTests.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #nullable enable
  2. namespace UnitTests.ApplicationTests;
  3. /// <summary>These tests focus on Application.SessionToken and the various ways it can be changed.</summary>
  4. public class SessionTokenTests
  5. {
  6. public SessionTokenTests ()
  7. {
  8. #if DEBUG_IDISPOSABLE
  9. View.EnableDebugIDisposableAsserts = true;
  10. View.Instances.Clear ();
  11. SessionToken.Instances.Clear ();
  12. #endif
  13. }
  14. [Fact]
  15. [AutoInitShutdown]
  16. public void Begin_End_Cleans_Up_SessionToken ()
  17. {
  18. // Test null Toplevel
  19. Assert.Throws<ArgumentNullException> (() => Application.Begin (null!));
  20. Assert.NotNull (Application.Driver);
  21. Toplevel top = new Toplevel ();
  22. SessionToken rs = Application.Begin (top);
  23. Assert.NotNull (rs);
  24. Application.End (rs);
  25. Assert.NotNull (Application.TopRunnable);
  26. // v2 does not use main loop, it uses MainLoop<T> and its internal
  27. //Assert.NotNull (Application.MainLoop);
  28. Assert.NotNull (Application.Driver);
  29. top.Dispose ();
  30. #if DEBUG_IDISPOSABLE
  31. Assert.True (rs.WasDisposed);
  32. #endif
  33. }
  34. [Fact]
  35. public void Dispose_Cleans_Up_SessionToken ()
  36. {
  37. var rs = new SessionToken (null!);
  38. Assert.NotNull (rs);
  39. // Should not throw because Toplevel was null
  40. rs.Dispose ();
  41. #if DEBUG_IDISPOSABLE
  42. Assert.True (rs.WasDisposed);
  43. #endif
  44. var top = new Toplevel ();
  45. rs = new (top);
  46. Assert.NotNull (rs);
  47. // Should throw because Toplevel was not cleaned up
  48. Assert.Throws<InvalidOperationException> (() => rs.Dispose ());
  49. rs.Toplevel?.Dispose ();
  50. rs.Toplevel = null;
  51. rs.Dispose ();
  52. #if DEBUG_IDISPOSABLE
  53. Assert.True (rs.WasDisposed);
  54. Assert.True (top.WasDisposed);
  55. #endif
  56. }
  57. [Fact]
  58. public void New_Creates_SessionToken ()
  59. {
  60. var rs = new SessionToken (null!);
  61. Assert.Null (rs.Toplevel);
  62. var top = new Toplevel ();
  63. rs = new (top);
  64. Assert.Equal (top, rs.Toplevel);
  65. }
  66. }