FlagSelectorTests.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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_WithDictionary_ShouldSetValue ()
  27. {
  28. var flagSelector = new FlagSelector ();
  29. var flags = new Dictionary<uint, string>
  30. {
  31. { 1, "Flag1" },
  32. { 2, "Flag2" }
  33. };
  34. flagSelector.SetFlags (flags);
  35. Assert.Equal ((uint)1, flagSelector.Value);
  36. }
  37. [Fact]
  38. public void SetFlags_WithEnum_ShouldSetFlags ()
  39. {
  40. var flagSelector = new FlagSelector ();
  41. flagSelector.SetFlags<FlagSelectorStyles> ();
  42. var expectedFlags = Enum.GetValues<FlagSelectorStyles> ()
  43. .ToDictionary (f => Convert.ToUInt32 (f), f => f.ToString ());
  44. Assert.Equal (expectedFlags, flagSelector.Flags);
  45. }
  46. [Fact]
  47. public void SetFlags_WithEnumAndCustomNames_ShouldSetFlags ()
  48. {
  49. var flagSelector = new FlagSelector ();
  50. flagSelector.SetFlags<FlagSelectorStyles> (f => f switch
  51. {
  52. FlagSelectorStyles.ShowNone => "Show None Value",
  53. FlagSelectorStyles.ShowValueEdit => "Show Value Editor",
  54. FlagSelectorStyles.All => "Everything",
  55. _ => f.ToString ()
  56. });
  57. var expectedFlags = Enum.GetValues<FlagSelectorStyles> ()
  58. .ToDictionary (f => Convert.ToUInt32 (f), f => f switch
  59. {
  60. FlagSelectorStyles.ShowNone => "Show None Value",
  61. FlagSelectorStyles.ShowValueEdit => "Show Value Editor",
  62. FlagSelectorStyles.All => "Everything",
  63. _ => f.ToString ()
  64. });
  65. Assert.Equal (expectedFlags, flagSelector.Flags);
  66. }
  67. [Fact]
  68. public void Value_Set_ShouldUpdateCheckedState ()
  69. {
  70. var flagSelector = new FlagSelector ();
  71. var flags = new Dictionary<uint, string>
  72. {
  73. { 1, "Flag1" },
  74. { 2, "Flag2" }
  75. };
  76. flagSelector.SetFlags (flags);
  77. flagSelector.Value = 1;
  78. var checkBox = flagSelector.SubViews.OfType<CheckBox> ().First (cb => (uint)cb.Data == 1);
  79. Assert.Equal (CheckState.Checked, checkBox.CheckedState);
  80. checkBox = flagSelector.SubViews.OfType<CheckBox> ().First (cb => (uint)cb.Data == 2);
  81. Assert.Equal (CheckState.UnChecked, checkBox.CheckedState);
  82. }
  83. [Fact]
  84. public void Styles_Set_ShouldCreateSubViews ()
  85. {
  86. var flagSelector = new FlagSelector ();
  87. var flags = new Dictionary<uint, string>
  88. {
  89. { 1, "Flag1" },
  90. { 2, "Flag2" }
  91. };
  92. flagSelector.SetFlags (flags);
  93. flagSelector.Styles = FlagSelectorStyles.ShowNone;
  94. Assert.Contains (flagSelector.SubViews, sv => sv is CheckBox cb && cb.Title == "None");
  95. }
  96. [Fact]
  97. public void ValueChanged_Event_ShouldBeRaised ()
  98. {
  99. var flagSelector = new FlagSelector ();
  100. var flags = new Dictionary<uint, string>
  101. {
  102. { 1, "Flag1" },
  103. { 2, "Flag2" }
  104. };
  105. flagSelector.SetFlags (flags);
  106. bool eventRaised = false;
  107. flagSelector.ValueChanged += (sender, args) => eventRaised = true;
  108. flagSelector.Value = 2;
  109. Assert.True (eventRaised);
  110. }
  111. // Tests for FlagSelector<TEnum>
  112. [Fact]
  113. public void GenericInitialization_ShouldSetDefaults ()
  114. {
  115. var flagSelector = new FlagSelector<FlagSelectorStyles> ();
  116. Assert.True (flagSelector.CanFocus);
  117. Assert.Equal (Dim.Auto (DimAutoStyle.Content), flagSelector.Width);
  118. Assert.Equal (Dim.Auto (DimAutoStyle.Content), flagSelector.Height);
  119. Assert.Equal (Orientation.Vertical, flagSelector.Orientation);
  120. }
  121. [Fact]
  122. public void Generic_SetFlags_Methods_Throw ()
  123. {
  124. var flagSelector = new FlagSelector<FlagSelectorStyles> ();
  125. Assert.Throws<InvalidOperationException> (() => flagSelector.SetFlags (new Dictionary<uint, string> ()));
  126. Assert.Throws<InvalidOperationException> (() => flagSelector.SetFlags<FlagSelectorStyles> ());
  127. Assert.Throws<InvalidOperationException> (() => flagSelector.SetFlags<FlagSelectorStyles> (styles => null));
  128. }
  129. [Fact]
  130. public void GenericSetFlagNames_ShouldSetFlagNames ()
  131. {
  132. var flagSelector = new FlagSelector<FlagSelectorStyles> ();
  133. flagSelector.SetFlagNames (f => f switch
  134. {
  135. FlagSelectorStyles.ShowNone => "Show None Value",
  136. FlagSelectorStyles.ShowValueEdit => "Show Value Editor",
  137. FlagSelectorStyles.All => "Everything",
  138. _ => f.ToString ()
  139. });
  140. var expectedFlags = Enum.GetValues<FlagSelectorStyles> ()
  141. .ToDictionary (f => Convert.ToUInt32 (f), f => f switch
  142. {
  143. FlagSelectorStyles.ShowNone => "Show None Value",
  144. FlagSelectorStyles.ShowValueEdit => "Show Value Editor",
  145. FlagSelectorStyles.All => "Everything",
  146. _ => f.ToString ()
  147. });
  148. Assert.Equal (expectedFlags, flagSelector.Flags);
  149. }
  150. [Fact]
  151. public void GenericValue_Set_ShouldUpdateCheckedState ()
  152. {
  153. var flagSelector = new FlagSelector<FlagSelectorStyles> ();
  154. flagSelector.SetFlagNames (f => f.ToString ());
  155. flagSelector.Value = FlagSelectorStyles.ShowNone;
  156. var checkBox = flagSelector.SubViews.OfType<CheckBox> ().First (cb => (uint)cb.Data == Convert.ToUInt32 (FlagSelectorStyles.ShowNone));
  157. Assert.Equal (CheckState.Checked, checkBox.CheckedState);
  158. checkBox = flagSelector.SubViews.OfType<CheckBox> ().First (cb => (uint)cb.Data == Convert.ToUInt32 (FlagSelectorStyles.ShowValueEdit));
  159. Assert.Equal (CheckState.UnChecked, checkBox.CheckedState);
  160. }
  161. [Fact]
  162. public void GenericValueChanged_Event_ShouldBeRaised ()
  163. {
  164. var flagSelector = new FlagSelector<FlagSelectorStyles> ();
  165. flagSelector.SetFlagNames (f => f.ToString ());
  166. bool eventRaised = false;
  167. flagSelector.ValueChanged += (sender, args) => eventRaised = true;
  168. flagSelector.Value = FlagSelectorStyles.ShowNone;
  169. Assert.True (eventRaised);
  170. }
  171. }