AnimationTests.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using Terminal.Gui.TextEffects;
  2. namespace Terminal.Gui.TextEffectsTests;
  3. using Color = Terminal.Gui.TextEffects.Color;
  4. public class AnimationTests
  5. {
  6. private EffectCharacter character;
  7. public AnimationTests ()
  8. {
  9. character = new EffectCharacter (0, "a", 0, 0);
  10. }
  11. [Fact]
  12. public void TestCharacterVisualInit ()
  13. {
  14. var visual = new CharacterVisual (
  15. symbol: "a",
  16. bold: true,
  17. dim: false,
  18. italic: true,
  19. underline: false,
  20. blink: true,
  21. reverse: false,
  22. hidden: true,
  23. strike: false,
  24. color: new Color ("ffffff"),
  25. colorCode: "ffffff"
  26. );
  27. Assert.Equal ("\x1b[1m\x1b[3m\x1b[5m\x1b[8m\x1b[38;2;255;255;255ma\x1b[0m", visual.FormattedSymbol);
  28. Assert.True (visual.Bold);
  29. Assert.False (visual.Dim);
  30. Assert.True (visual.Italic);
  31. Assert.False (visual.Underline);
  32. Assert.True (visual.Blink);
  33. Assert.False (visual.Reverse);
  34. Assert.True (visual.Hidden);
  35. Assert.False (visual.Strike);
  36. Assert.Equal (new Color ("ffffff"), visual.Color);
  37. Assert.Equal ("ffffff", visual.ColorCode);
  38. }
  39. [Fact]
  40. public void TestFrameInit ()
  41. {
  42. var visual = new CharacterVisual (
  43. symbol: "a",
  44. bold: true,
  45. dim: false,
  46. italic: true,
  47. underline: false,
  48. blink: true,
  49. reverse: false,
  50. hidden: true,
  51. strike: false,
  52. color: new Color ("ffffff")
  53. );
  54. var frame = new Frame (characterVisual: visual, duration: 5);
  55. Assert.Equal (visual, frame.CharacterVisual);
  56. Assert.Equal (5, frame.Duration);
  57. Assert.Equal (0, frame.TicksElapsed);
  58. }
  59. [Fact]
  60. public void TestSceneInit ()
  61. {
  62. var scene = new Scene (sceneId: "test_scene", isLooping: true, sync: SyncMetric.Step, ease: Easing.InSine);
  63. Assert.Equal ("test_scene", scene.SceneId);
  64. Assert.True (scene.IsLooping);
  65. Assert.Equal (SyncMetric.Step, scene.Sync);
  66. Assert.Equal (Easing.InSine, scene.Ease);
  67. }
  68. [Fact]
  69. public void TestSceneAddFrame ()
  70. {
  71. var scene = new Scene (sceneId: "test_scene");
  72. scene.AddFrame (symbol: "a", duration: 5, color: new Color ("ffffff"), bold: true, italic: true, blink: true, hidden: true);
  73. Assert.Single (scene.Frames);
  74. var frame = scene.Frames [0];
  75. Assert.Equal ("\x1b[1m\x1b[3m\x1b[5m\x1b[8m\x1b[38;2;255;255;255ma\x1b[0m", frame.CharacterVisual.FormattedSymbol);
  76. Assert.Equal (5, frame.Duration);
  77. Assert.Equal (new Color ("ffffff"), frame.CharacterVisual.Color);
  78. Assert.True (frame.CharacterVisual.Bold);
  79. }
  80. [Fact]
  81. public void TestSceneAddFrameInvalidDuration ()
  82. {
  83. var scene = new Scene (sceneId: "test_scene");
  84. var exception = Assert.Throws<ArgumentException> (() => scene.AddFrame (symbol: "a", duration: 0, color: new Color ("ffffff")));
  85. Assert.Equal ("duration must be greater than 0", exception.Message);
  86. }
  87. [Fact]
  88. public void TestSceneApplyGradientToSymbolsEqualColorsAndSymbols ()
  89. {
  90. var scene = new Scene (sceneId: "test_scene");
  91. var gradient = new Gradient (new [] { new Color ("000000"), new Color ("ffffff") },
  92. steps: new [] { 2 });
  93. var symbols = new List<string> { "a", "b", "c" };
  94. scene.ApplyGradientToSymbols (gradient, symbols, duration: 1);
  95. Assert.Equal (3, scene.Frames.Count);
  96. for (int i = 0; i < scene.Frames.Count; i++)
  97. {
  98. Assert.Equal (1, scene.Frames [i].Duration);
  99. Assert.Equal (gradient.Spectrum [i].RgbColor, scene.Frames [i].CharacterVisual.ColorCode);
  100. }
  101. }
  102. [Fact]
  103. public void TestSceneApplyGradientToSymbolsUnequalColorsAndSymbols ()
  104. {
  105. var scene = new Scene (sceneId: "test_scene");
  106. var gradient = new Gradient (
  107. new [] { new Color ("000000"), new Color ("ffffff") },
  108. steps: new [] { 4 });
  109. var symbols = new List<string> { "q", "z" };
  110. scene.ApplyGradientToSymbols (gradient, symbols, duration: 1);
  111. Assert.Equal (5, scene.Frames.Count);
  112. Assert.Equal (gradient.Spectrum [0].RgbColor, scene.Frames [0].CharacterVisual.ColorCode);
  113. Assert.Contains ("q", scene.Frames [0].CharacterVisual.Symbol);
  114. Assert.Equal (gradient.Spectrum [^1].RgbColor, scene.Frames [^1].CharacterVisual.ColorCode);
  115. Assert.Contains ("z", scene.Frames [^1].CharacterVisual.Symbol);
  116. }
  117. [Fact]
  118. public void TestAnimationInit ()
  119. {
  120. var animation = character.Animation;
  121. Assert.Equal (character, animation.Character);
  122. Assert.Empty (animation.Scenes);
  123. Assert.Null (animation.ActiveScene);
  124. Assert.False (animation.UseXtermColors);
  125. Assert.False (animation.NoColor);
  126. Assert.Empty (animation.XtermColorMap);
  127. Assert.Equal (0, animation.ActiveSceneCurrentStep);
  128. }
  129. [Fact]
  130. public void TestAnimationNewScene ()
  131. {
  132. var animation = character.Animation;
  133. var scene = animation.NewScene (id:"test_scene", isLooping: true);
  134. Assert.IsType<Scene> (scene);
  135. Assert.Equal ("test_scene", scene.SceneId);
  136. Assert.True (scene.IsLooping);
  137. Assert.True (animation.Scenes.ContainsKey ("test_scene"));
  138. }
  139. [Fact]
  140. public void TestAnimationNewSceneWithoutId ()
  141. {
  142. var animation = character.Animation;
  143. var scene = animation.NewScene ();
  144. Assert.IsType<Scene> (scene);
  145. Assert.Equal ("0", scene.SceneId);
  146. Assert.True (animation.Scenes.ContainsKey ("0"));
  147. }
  148. [Fact]
  149. public void TestAnimationQueryScene ()
  150. {
  151. var animation = character.Animation;
  152. var scene = animation.NewScene (id:"test_scene", isLooping: true);
  153. Assert.Equal (scene, animation.QueryScene ("test_scene"));
  154. }
  155. [Fact]
  156. public void TestAnimationLoopingActiveSceneIsComplete ()
  157. {
  158. var animation = character.Animation;
  159. var scene = animation.NewScene (id: "test_scene", isLooping: true);
  160. scene.AddFrame (symbol: "a", duration: 2);
  161. animation.ActivateScene (scene);
  162. Assert.True (animation.ActiveSceneIsComplete ());
  163. }
  164. [Fact]
  165. public void TestAnimationNonLoopingActiveSceneIsComplete ()
  166. {
  167. var animation = character.Animation;
  168. var scene = animation.NewScene (id: "test_scene");
  169. scene.AddFrame (symbol: "a", duration: 1);
  170. animation.ActivateScene (scene);
  171. Assert.False (animation.ActiveSceneIsComplete ());
  172. animation.StepAnimation ();
  173. Assert.True (animation.ActiveSceneIsComplete ());
  174. }
  175. }