AsyncTests.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using Lua.Standard;
  2. namespace Lua.Tests;
  3. public class AsyncTests
  4. {
  5. LuaState state = default!;
  6. [SetUp]
  7. public void SetUp()
  8. {
  9. state = LuaState.Create();
  10. state.OpenStandardLibraries();
  11. var assert = state.Environment["assert"].Read<LuaFunction>();
  12. state.Environment["assert"] = new LuaFunction("assert_with_wait",
  13. async (context, ct) =>
  14. {
  15. await Task.Delay(1, ct);
  16. var arg0 = context.GetArgument(0);
  17. if (!arg0.ToBoolean())
  18. {
  19. var message = "assertion failed!";
  20. if (context.HasArgument(1))
  21. {
  22. message = context.GetArgument<string>(1);
  23. }
  24. throw new LuaAssertionException(context.State, message);
  25. }
  26. return context.Return(context.Arguments);
  27. });
  28. }
  29. [Test]
  30. [TestCase("tests-lua/coroutine.lua")]
  31. [TestCase("tests-lua/db.lua")]
  32. [TestCase("tests-lua/vararg.lua")]
  33. public async Task Test_Async(string file)
  34. {
  35. var path = FileHelper.GetAbsolutePath(file);
  36. try
  37. {
  38. await state.DoFileAsync(path);
  39. }
  40. catch (LuaRuntimeException e)
  41. {
  42. var line = e.LuaTraceback!.LastLine;
  43. throw new($"{path}:line {line}\n{e.InnerException}\n {e}");
  44. }
  45. }
  46. }