ShadowStyletests.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. using Xunit.Abstractions;
  2. namespace Terminal.Gui.ViewTests;
  3. public class ShadowStyleTests (ITestOutputHelper _output)
  4. {
  5. [Fact]
  6. public void Default_None ()
  7. {
  8. var view = new View ();
  9. Assert.Equal (ShadowStyle.None, view.ShadowStyle);
  10. Assert.Equal (ShadowStyle.None, view.Margin.ShadowStyle);
  11. view.Dispose ();
  12. }
  13. [Theory]
  14. [InlineData (ShadowStyle.None)]
  15. [InlineData (ShadowStyle.Opaque)]
  16. [InlineData (ShadowStyle.Transparent)]
  17. public void Set_View_Sets_Margin (ShadowStyle style)
  18. {
  19. var view = new View ();
  20. view.ShadowStyle = style;
  21. Assert.Equal (style, view.ShadowStyle);
  22. Assert.Equal (style, view.Margin.ShadowStyle);
  23. view.Dispose ();
  24. }
  25. [Theory]
  26. [InlineData (ShadowStyle.None, 0, 0, 0, 0)]
  27. [InlineData (ShadowStyle.Opaque, 1, 0, 0, 1)]
  28. [InlineData (ShadowStyle.Transparent, 1, 0, 0, 1)]
  29. public void ShadowStyle_Button1Pressed_Causes_Movement (ShadowStyle style, int expectedLeft, int expectedTop, int expectedRight, int expectedBottom)
  30. {
  31. var superView = new View
  32. {
  33. Height = 10, Width = 10
  34. };
  35. View view = new ()
  36. {
  37. Width = Dim.Auto (),
  38. Height = Dim.Auto (),
  39. Text = "0123",
  40. HighlightStyle = HighlightStyle.Pressed,
  41. ShadowStyle = style,
  42. CanFocus = true
  43. };
  44. superView.Add (view);
  45. superView.BeginInit ();
  46. superView.EndInit ();
  47. Thickness origThickness = view.Margin.Thickness;
  48. view.NewMouseEvent (new () { Flags = MouseFlags.Button1Pressed, Position = new (0, 0) });
  49. Assert.Equal (new (expectedLeft, expectedTop, expectedRight, expectedBottom), view.Margin.Thickness);
  50. view.NewMouseEvent (new () { Flags = MouseFlags.Button1Released, Position = new (0, 0) });
  51. Assert.Equal (origThickness, view.Margin.Thickness);
  52. }
  53. [Theory]
  54. [InlineData (ShadowStyle.None, 0, 0, 0, 0)]
  55. [InlineData (ShadowStyle.Opaque, 0, 0, 1, 1)]
  56. [InlineData (ShadowStyle.Transparent, 0, 0, 1, 1)]
  57. public void ShadowStyle_Margin_Thickness (ShadowStyle style, int expectedLeft, int expectedTop, int expectedRight, int expectedBottom)
  58. {
  59. var superView = new View
  60. {
  61. Height = 10, Width = 10
  62. };
  63. View view = new ()
  64. {
  65. Width = Dim.Auto (),
  66. Height = Dim.Auto (),
  67. Text = "0123",
  68. HighlightStyle = HighlightStyle.Pressed,
  69. ShadowStyle = style,
  70. CanFocus = true
  71. };
  72. superView.Add (view);
  73. superView.BeginInit ();
  74. superView.EndInit ();
  75. Assert.Equal (new (expectedLeft, expectedTop, expectedRight, expectedBottom), view.Margin.Thickness);
  76. }
  77. [Theory]
  78. [InlineData (
  79. ShadowStyle.None,
  80. """
  81. 011
  82. 111
  83. 111
  84. """)]
  85. [InlineData (
  86. ShadowStyle.Transparent,
  87. """
  88. 031
  89. 331
  90. 111
  91. """)]
  92. [InlineData (
  93. ShadowStyle.Opaque,
  94. """
  95. 021
  96. 221
  97. 111
  98. """)]
  99. [SetupFakeDriver]
  100. public void ShadowView_Colors (ShadowStyle style, string expectedAttrs)
  101. {
  102. Color fg = Color.Red;
  103. Color bg = Color.Green;
  104. // 0 - View
  105. // 1 - SuperView
  106. // 2 - Opaque - fg is Black, bg is SuperView.Bg
  107. // 3 - Transparent - fg is darker fg, bg is darker bg
  108. Attribute [] attributes =
  109. {
  110. Attribute.Default,
  111. new (fg, bg),
  112. new (Color.Black, bg),
  113. new (fg.GetDarkerColor (), bg.GetDarkerColor ())
  114. };
  115. var superView = new View
  116. {
  117. Height = 3,
  118. Width = 3,
  119. Text = "012ABC!@#",
  120. ColorScheme = new (new Attribute (fg, bg))
  121. };
  122. superView.TextFormatter.WordWrap = true;
  123. View view = new ()
  124. {
  125. Width = Dim.Auto (),
  126. Height = Dim.Auto (),
  127. Text = " ",
  128. ShadowStyle = style,
  129. ColorScheme = new (Attribute.Default)
  130. };
  131. superView.Add (view);
  132. superView.BeginInit ();
  133. superView.EndInit ();
  134. superView.Draw ();
  135. TestHelpers.AssertDriverAttributesAre (expectedAttrs, Application.Driver, attributes);
  136. }
  137. [Theory]
  138. [InlineData (ShadowStyle.None, 3)]
  139. [InlineData (ShadowStyle.Opaque, 4)]
  140. [InlineData (ShadowStyle.Transparent, 4)]
  141. public void Style_Changes_Magin_Thickness (ShadowStyle style, int expected)
  142. {
  143. var view = new View ();
  144. view.Margin.Thickness = new (3);
  145. view.ShadowStyle = style;
  146. Assert.Equal (new (3, 3, expected, expected), view.Margin.Thickness);
  147. view.ShadowStyle = ShadowStyle.None;
  148. Assert.Equal (new (3), view.Margin.Thickness);
  149. view.Dispose ();
  150. }
  151. // Visual tests
  152. [Theory]
  153. [InlineData (
  154. ShadowStyle.None,
  155. """
  156. 01#$
  157. AB#$
  158. !@#$
  159. !@#$
  160. """)]
  161. [InlineData (
  162. ShadowStyle.Opaque,
  163. """
  164. 01▖$
  165. AB▌$
  166. ▝▀▘$
  167. !@#$
  168. """)]
  169. [InlineData (
  170. ShadowStyle.Transparent,
  171. """
  172. 01#$
  173. AB#$
  174. !@#$
  175. !@#$
  176. """)]
  177. [SetupFakeDriver]
  178. public void Visual_Test (ShadowStyle style, string expected)
  179. {
  180. var superView = new View
  181. {
  182. Width = 4,
  183. Height = 4,
  184. Text = "!@#$".Repeat (4)
  185. };
  186. superView.TextFormatter.WordWrap = true;
  187. var view = new View
  188. {
  189. Text = "01\nAB",
  190. Width = Dim.Auto (),
  191. Height = Dim.Auto ()
  192. };
  193. view.ShadowStyle = style;
  194. superView.Add (view);
  195. superView.BeginInit ();
  196. superView.EndInit ();
  197. superView.Draw ();
  198. TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  199. view.Dispose ();
  200. }
  201. }