ShadowStyletests.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  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. 131
  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.Layout ();
  133. superView.Draw ();
  134. TestHelpers.AssertDriverAttributesAre (expectedAttrs, output, Application.Driver, attributes);
  135. }
  136. [Theory]
  137. [InlineData (ShadowStyle.None, 3)]
  138. [InlineData (ShadowStyle.Opaque, 4)]
  139. [InlineData (ShadowStyle.Transparent, 4)]
  140. public void Style_Changes_Magin_Thickness (ShadowStyle style, int expected)
  141. {
  142. var view = new View ();
  143. view.Margin.Thickness = new (3);
  144. view.ShadowStyle = style;
  145. Assert.Equal (new (3, 3, expected, expected), view.Margin.Thickness);
  146. view.ShadowStyle = ShadowStyle.None;
  147. Assert.Equal (new (3), view.Margin.Thickness);
  148. view.Dispose ();
  149. }
  150. // Visual tests
  151. [Theory]
  152. [InlineData (
  153. ShadowStyle.None,
  154. """
  155. 01#$
  156. AB#$
  157. !@#$
  158. !@#$
  159. """)]
  160. [InlineData (
  161. ShadowStyle.Opaque,
  162. """
  163. 01▖$
  164. AB▌$
  165. ▝▀▘$
  166. !@#$
  167. """)]
  168. [InlineData (
  169. ShadowStyle.Transparent,
  170. """
  171. 01#$
  172. AB#$
  173. !@#$
  174. !@#$
  175. """)]
  176. [SetupFakeDriver]
  177. public void Visual_Test (ShadowStyle style, string expected)
  178. {
  179. var superView = new View
  180. {
  181. Width = 4,
  182. Height = 4,
  183. Text = "!@#$".Repeat (4)
  184. };
  185. superView.TextFormatter.WordWrap = true;
  186. var view = new View
  187. {
  188. Text = "01\nAB",
  189. Width = Dim.Auto (),
  190. Height = Dim.Auto ()
  191. };
  192. view.ShadowStyle = style;
  193. superView.Add (view);
  194. superView.BeginInit ();
  195. superView.EndInit ();
  196. superView.Draw ();
  197. TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  198. view.Dispose ();
  199. }
  200. }