AnimationTests.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Security.Cryptography;
  4. using Terminal.Gui.TextEffects;
  5. using Xunit;
  6. namespace Terminal.Gui.TextEffectsTests;
  7. public class AnimationTests
  8. {
  9. private EffectCharacter character;
  10. public AnimationTests ()
  11. {
  12. character = new EffectCharacter (0, "a", 0, 0);
  13. }
  14. [Fact]
  15. public void TestCharacterVisualInit ()
  16. {
  17. var visual = new CharacterVisual (
  18. symbol: "a",
  19. bold: true,
  20. dim: false,
  21. italic: true,
  22. underline: false,
  23. blink: true,
  24. reverse: false,
  25. hidden: true,
  26. strike: false,
  27. color: new Color ("ffffff"),
  28. colorCode: "ffffff"
  29. );
  30. Assert.Equal ("\x1b[1m\x1b[3m\x1b[5m\x1b[8m\x1b[38;2;255;255;255ma\x1b[0m", visual.FormattedSymbol);
  31. Assert.True (visual.Bold);
  32. Assert.False (visual.Dim);
  33. Assert.True (visual.Italic);
  34. Assert.False (visual.Underline);
  35. Assert.True (visual.Blink);
  36. Assert.False (visual.Reverse);
  37. Assert.True (visual.Hidden);
  38. Assert.False (visual.Strike);
  39. Assert.Equal (new Color ("ffffff"), visual.Color);
  40. Assert.Equal ("ffffff", visual.ColorCode);
  41. }
  42. [Fact]
  43. public void TestFrameInit ()
  44. {
  45. var visual = new CharacterVisual (
  46. symbol: "a",
  47. bold: true,
  48. dim: false,
  49. italic: true,
  50. underline: false,
  51. blink: true,
  52. reverse: false,
  53. hidden: true,
  54. strike: false,
  55. color: new Color ("ffffff")
  56. );
  57. var frame = new Frame (characterVisual: visual, duration: 5);
  58. Assert.Equal (visual, frame.CharacterVisual);
  59. Assert.Equal (5, frame.Duration);
  60. Assert.Equal (0, frame.TicksElapsed);
  61. }
  62. [Fact]
  63. public void TestSceneInit ()
  64. {
  65. var scene = new Scene (sceneId: "test_scene", isLooping: true, sync: SyncMetric.Step, ease: Easing.InSine);
  66. Assert.Equal ("test_scene", scene.SceneId);
  67. Assert.True (scene.IsLooping);
  68. Assert.Equal (SyncMetric.Step, scene.Sync);
  69. Assert.Equal (Easing.InSine, scene.Ease);
  70. }
  71. [Fact]
  72. public void TestSceneAddFrame ()
  73. {
  74. var scene = new Scene (sceneId: "test_scene");
  75. scene.AddFrame (symbol: "a", duration: 5, color: new Color ("ffffff"), bold: true, italic: true, blink: true, hidden: true);
  76. Assert.Single (scene.Frames);
  77. var frame = scene.Frames [0];
  78. Assert.Equal ("\x1b[1m\x1b[3m\x1b[5m\x1b[8m\x1b[38;2;255;255;255ma\x1b[0m", frame.CharacterVisual.FormattedSymbol);
  79. Assert.Equal (5, frame.Duration);
  80. Assert.Equal (new Color ("ffffff"), frame.CharacterVisual.Color);
  81. Assert.True (frame.CharacterVisual.Bold);
  82. }
  83. [Fact]
  84. public void TestSceneAddFrameInvalidDuration ()
  85. {
  86. var scene = new Scene (sceneId: "test_scene");
  87. var exception = Assert.Throws<ArgumentException> (() => scene.AddFrame (symbol: "a", duration: 0, color: new Color ("ffffff")));
  88. Assert.Equal ("duration must be greater than 0", exception.Message);
  89. }
  90. [Fact]
  91. public void TestSceneApplyGradientToSymbolsEqualColorsAndSymbols ()
  92. {
  93. var scene = new Scene (sceneId: "test_scene");
  94. var gradient = new Gradient (new Color ("000000"), new Color ("ffffff"), steps: 2);
  95. var symbols = new List<string> { "a", "b", "c" };
  96. scene.ApplyGradientToSymbols (gradient, symbols, duration: 1);
  97. Assert.Equal (3, scene.Frames.Count);
  98. for (int i = 0; i < scene.Frames.Count; i++)
  99. {
  100. Assert.Equal (1, scene.Frames [i].Duration);
  101. Assert.Equal (gradient.Spectrum [i].RgbColor, scene.Frames [i].CharacterVisual.ColorCode);
  102. }
  103. }
  104. [Fact]
  105. public void TestSceneApplyGradientToSymbolsUnequalColorsAndSymbols ()
  106. {
  107. var scene = new Scene (sceneId: "test_scene");
  108. var gradient = new Gradient (new Color ("000000"), new Color ("ffffff"), steps: 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 ("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 ("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 ("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 ("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. }