CallStackTests.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. namespace Jint.Tests.PublicInterface;
  2. public class CallStackTests
  3. {
  4. [Fact]
  5. public void CanInjectTraceFunction()
  6. {
  7. var engine = new Engine();
  8. Assert.Empty(engine.Advanced.StackTrace);
  9. using var stringWriter = new StringWriter();
  10. engine.SetValue("console", new Console(engine, stringWriter));
  11. engine.Execute("function x() { console.trace(); }; function y() { x(); } y();");
  12. const string Expected = """
  13. Trace
  14. at trace <anonymous>:1:16
  15. at x () <anonymous>:1:16
  16. at y () <anonymous>:1:51
  17. at <anonymous>:1:58
  18. """;
  19. var actual = stringWriter.ToString();
  20. Assert.Equal(Expected, actual);
  21. }
  22. private class Console
  23. {
  24. private readonly Engine _engine;
  25. private readonly StringWriter _output;
  26. public Console(Engine engine, StringWriter output)
  27. {
  28. _engine = engine;
  29. _output = output;
  30. }
  31. public void Log(string message)
  32. {
  33. _output.WriteLine(message);
  34. }
  35. public void Trace()
  36. {
  37. _output.WriteLine($"Trace{Environment.NewLine}{_engine.Advanced.StackTrace}");
  38. }
  39. }
  40. }