TestHelpers.cs 2.8 KB

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