FlagSelectorTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. namespace Terminal.Gui.ViewsTests;
  2. public class FlagSelectorTests
  3. {
  4. [Fact]
  5. public void Initialization_ShouldSetDefaults()
  6. {
  7. var flagSelector = new FlagSelector();
  8. Assert.True(flagSelector.CanFocus);
  9. Assert.Equal(Dim.Auto(DimAutoStyle.Content), flagSelector.Width);
  10. Assert.Equal(Dim.Auto(DimAutoStyle.Content), flagSelector.Height);
  11. Assert.Equal(Orientation.Vertical, flagSelector.Orientation);
  12. }
  13. [Fact]
  14. public void SetFlags_WithDictionary_ShouldSetFlags()
  15. {
  16. var flagSelector = new FlagSelector();
  17. var flags = new Dictionary<uint, string>
  18. {
  19. { 1, "Flag1" },
  20. { 2, "Flag2" }
  21. };
  22. flagSelector.SetFlags(flags);
  23. Assert.Equal(flags, flagSelector.Flags);
  24. }
  25. [Fact]
  26. public void SetFlags_WithEnum_ShouldSetFlags()
  27. {
  28. var flagSelector = new FlagSelector();
  29. flagSelector.SetFlags<FlagSelectorStyles>();
  30. var expectedFlags = Enum.GetValues<FlagSelectorStyles>()
  31. .ToDictionary(f => Convert.ToUInt32(f), f => f.ToString());
  32. Assert.Equal(expectedFlags, flagSelector.Flags);
  33. }
  34. [Fact]
  35. public void SetFlags_WithEnumAndCustomNames_ShouldSetFlags()
  36. {
  37. var flagSelector = new FlagSelector();
  38. flagSelector.SetFlags<FlagSelectorStyles>(f => f switch
  39. {
  40. FlagSelectorStyles.ShowNone => "Show None Value",
  41. FlagSelectorStyles.ShowValueEdit => "Show Value Editor",
  42. FlagSelectorStyles.All => "Everything",
  43. _ => f.ToString()
  44. });
  45. var expectedFlags = Enum.GetValues<FlagSelectorStyles>()
  46. .ToDictionary(f => Convert.ToUInt32(f), f => f switch
  47. {
  48. FlagSelectorStyles.ShowNone => "Show None Value",
  49. FlagSelectorStyles.ShowValueEdit => "Show Value Editor",
  50. FlagSelectorStyles.All => "Everything",
  51. _ => f.ToString()
  52. });
  53. Assert.Equal(expectedFlags, flagSelector.Flags);
  54. }
  55. [Fact]
  56. public void Value_Set_ShouldUpdateCheckedState()
  57. {
  58. var flagSelector = new FlagSelector();
  59. var flags = new Dictionary<uint, string>
  60. {
  61. { 1, "Flag1" },
  62. { 2, "Flag2" }
  63. };
  64. flagSelector.SetFlags(flags);
  65. flagSelector.Value = 1;
  66. var checkBox = flagSelector.SubViews.OfType<CheckBox>().First(cb => (uint)cb.Data == 1);
  67. Assert.Equal(CheckState.Checked, checkBox.CheckedState);
  68. checkBox = flagSelector.SubViews.OfType<CheckBox>().First(cb => (uint)cb.Data == 2);
  69. Assert.Equal(CheckState.UnChecked, checkBox.CheckedState);
  70. }
  71. [Fact]
  72. public void Styles_Set_ShouldCreateSubViews()
  73. {
  74. var flagSelector = new FlagSelector();
  75. var flags = new Dictionary<uint, string>
  76. {
  77. { 1, "Flag1" },
  78. { 2, "Flag2" }
  79. };
  80. flagSelector.SetFlags(flags);
  81. flagSelector.Styles = FlagSelectorStyles.ShowNone;
  82. Assert.Contains(flagSelector.SubViews, sv => sv is CheckBox cb && cb.Title == "None");
  83. }
  84. [Fact]
  85. public void ValueChanged_Event_ShouldBeRaised()
  86. {
  87. var flagSelector = new FlagSelector();
  88. var flags = new Dictionary<uint, string>
  89. {
  90. { 1, "Flag1" },
  91. { 2, "Flag2" }
  92. };
  93. flagSelector.SetFlags(flags);
  94. bool eventRaised = false;
  95. flagSelector.ValueChanged += (sender, args) => eventRaised = true;
  96. flagSelector.Value = 1;
  97. Assert.True(eventRaised);
  98. }
  99. }