2
0

TestHelpers.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using Jint.Runtime.Debugger;
  2. namespace Jint.Tests.Runtime.Debugger;
  3. public static class TestHelpers
  4. {
  5. public static bool IsLiteral(this Node node, string requiredValue = null)
  6. {
  7. return node switch
  8. {
  9. Directive directive => requiredValue == null || directive.Value == requiredValue,
  10. NonSpecialExpressionStatement expr => requiredValue == null || (expr.Expression is StringLiteral literal && literal.Value == requiredValue),
  11. _ => false
  12. };
  13. }
  14. public static bool ReachedLiteral(this DebugInformation info, string requiredValue)
  15. {
  16. return info.CurrentNode.IsLiteral(requiredValue);
  17. }
  18. /// <summary>
  19. /// Initializes engine in debugmode and executes script until debugger statement,
  20. /// before calling stepHandler for assertions. Also asserts that a break was triggered.
  21. /// </summary>
  22. /// <param name="initialization">Action to initialize and execute scripts</param>
  23. /// <param name="breakHandler">Handler for assertions</param>
  24. public static void TestAtBreak(Action<Engine> initialization, Action<Engine, DebugInformation> breakHandler)
  25. {
  26. var engine = new Engine(options => options
  27. .DebugMode()
  28. .DebuggerStatementHandling(DebuggerStatementHandling.Script)
  29. );
  30. bool didBreak = false;
  31. engine.Debugger.Break += (sender, info) =>
  32. {
  33. didBreak = true;
  34. breakHandler(sender as Engine, info);
  35. return StepMode.None;
  36. };
  37. initialization(engine);
  38. Assert.True(didBreak, "Test script did not break (e.g. didn't reach debugger statement)");
  39. }
  40. /// <inheritdoc cref="TestAtBreak()"/>
  41. public static void TestAtBreak(Action<Engine> initialization, Action<DebugInformation> breakHandler)
  42. {
  43. TestAtBreak(engine => initialization(engine), (engine, info) => breakHandler(info));
  44. }
  45. /// <summary>
  46. /// Initializes engine in debugmode and executes script until debugger statement,
  47. /// before calling stepHandler for assertions. Also asserts that a break was triggered.
  48. /// </summary>
  49. /// <param name="script">Script that is basis for testing</param>
  50. /// <param name="breakHandler">Handler for assertions</param>
  51. public static void TestAtBreak(string script, Action<Engine, DebugInformation> breakHandler)
  52. {
  53. TestAtBreak(engine => engine.Execute(script), breakHandler);
  54. }
  55. /// <inheritdoc cref="TestAtBreak()"/>
  56. public static void TestAtBreak(string script, Action<DebugInformation> breakHandler)
  57. {
  58. TestAtBreak(script, (engine, info) => breakHandler(info));
  59. }
  60. }